Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 851

/ вопрос открыт /

Доброго времени суток !
Столкнулся со следующей проблемой =(
Теперь я пытаюсь ассоциировать файлы со своим приложением... Надо произвести ассоциацию .mp3 .wav .ogg и еще 34 аудио формата... Пытался использовать TFileType, с 3 го запуска он что то сделал с реестром, что я не мог открыть не одного файла, папки.. вообще не чего, восстановление системы помогло только.. Попробовал http://delphidevelop.ru/publ/13-1-0-229
Не получилось, как у меня было ассоциировано с WMP 12 так и осталось.. Помогите пожалуйста разобраться в этом... За раннее огромное спасибо (=

BloodVIRUS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: BloodVIRUS (статус: Посетитель)
Вопрос отправлен: 5 марта 2010, 20:18
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Ладно, уговорил.
Вот тебе кусок модуля одного из моих проектов. Это несколько функций для работы с реестром. См. приложение.

Я использую их в конструкторе главной формы вот так:

const
  // Расширения, иконки, реестр
  ProjectFileExt =       '.seproj';
  ProjectDefaultExt =    'seproj';
  ProjectExtDesc =       'seproject';
  ProjectFileDesc =      'Проект Source Editor';
  ProjectIconIndex =     1;
 
  // Регистрация расширения
  if not FileExtIsRegistered(ProjectFileExt)
    then RegFileExt(ProjectFileExt,
                    ProjectExtDesc,
                    ProjectFileDesc,
                    ProgramExeFile,
                    '%1',
                    ProjectIconIndex);

Приложение:
  1.  
  2. function RegFileExt(AExtension, AExtDescription, AFileDescription,
  3. AOpenWith, AParamString: String; AIconIndex: Integer): Boolean;
  4. var Reg: TRegistry;
  5. begin
  6. Reg := TRegistry.Create;
  7. try
  8. with Reg do begin
  9. RootKey := HKEY_CLASSES_ROOT;
  10. OpenKey(AExtension, True);
  11. WriteString('', AExtDescription);
  12. OpenKey('' + AExtDescription, True);
  13. WriteString('', AFileDescription);
  14. OpenKey('DefaultIcon', True);
  15. WriteString('', AOpenWith + ','+IntToStr(AIconIndex));
  16. OpenKey('' + AExtDescription + 'ShellOpenCommand', True);
  17. WriteString('', '"' + AOpenWith + '" "' + AParamString + '"');
  18. end;
  19. Result := True;
  20. except
  21. Result := False;
  22. end;
  23. Reg.Free;
  24. end;
  25.  
  26.  
  27. function FileExtIsRegistered(const AExtension: string): Boolean;
  28. var
  29. Reg: TRegistry;
  30. begin
  31. Reg:= TRegistry.Create;
  32. try
  33. Reg.RootKey:= HKEY_CLASSES_ROOT;
  34. Result:= Reg.KeyExists(AExtension);
  35. finally
  36. Reg.Free();
  37. end;
  38. end;
  39.  
  40.  
  41. function UnRegFileExt(AExtension, AExtDescription: String): Boolean;
  42. var Reg: TRegistry;
  43. begin
  44. Reg := TRegistry.Create;
  45. try
  46. with Reg do
  47. begin
  48. RootKey := HKEY_CLASSES_ROOT;
  49. DeleteKey(AExtension);
  50. DeleteKey('' + AExtDescription);
  51. end;
  52. Result := True;
  53. except
  54. Result := False;
  55. end;
  56. Reg.Free;
  57. end;


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 марта 2010, 08:48


Мини-форум вопроса

Всего сообщений: 47; последнее сообщение — 7 марта 2010, 16:12; участников в обсуждении: 2.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 18:12 [#21]:

Все равно создается только раздел .mp3 в котором подразделы написанные мной выше =(
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 18:21 [#22]:

Предлагаю поэкспериментировать.
const
  // Расширения, иконки, реестр
  ProjectFileExt =       '.trash';
  ProjectDefaultExt =    'trash';
  ProjectExtDesc =       'trashproject';
  ProjectFileDesc =      'Мусорный файл';
  ProjectIconIndex =     0;
  ProgramExeName =       'Notepad.exe';

Затем посмотри, создались ли разделы HKEY_CLASSES_ROOT\.trash и HKEY_CLASSES_ROOT\trashproject
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 18:27 [#23]:

Создался только 1 раздел
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.trash]
@="trashproject"

[HKEY_CLASSES_ROOT\.trash\trashproject]
@="Мусорный файл"

[HKEY_CLASSES_ROOT\.trash\trashproject\DefaultIcon]
@="Notepad.exe,0"

[HKEY_CLASSES_ROOT\.trash\trashproject\DefaultIcon\trashprojectShellOpenCommand]
@="\"Notepad.exe\" \"%1\""
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 18:34 [#24]:

Ёпт, я понял, в чём проблема! Движок сайта обрезал некоторые символы в приложении к ответу - все символы '\' превратились в ''. Щас исходник, откуда копировал, глянул и сразу нашёл 10 отличий. Вот правильные функции:

// Регистрация расширения, установка иконки и ассоциативной программы
function RegFileExt(AExtension, AExtDescription, AFileDescription,
                    AOpenWith, AParamString: String; AIconIndex: Integer): Boolean;
  var  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
  with Reg do begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey(AExtension, True);
    WriteString('', AExtDescription);
    OpenKey('\' + AExtDescription, True);
    WriteString('', AFileDescription);
    OpenKey('DefaultIcon', True);
    WriteString('', AOpenWith + ','+IntToStr(AIconIndex));
    OpenKey('\' + AExtDescription + '\Shell\Open\Command', True);
    WriteString('', '"' + AOpenWith + '" "' + AParamString + '"');
  end;
  Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;
 
// Проверка регистрации
function FileExtIsRegistered(const AExtension: string): Boolean;
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create;
  try
    Reg.RootKey:= HKEY_CLASSES_ROOT;
    Result:= Reg.KeyExists(AExtension);
  finally
    Reg.Free();
  end;
end;
 
// Удаление регистрации
function UnRegFileExt(AExtension, AExtDescription: String): Boolean;
  var Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
     begin
      RootKey := HKEY_CLASSES_ROOT;
      DeleteKey(AExtension);
      DeleteKey('\' + AExtDescription);
     end;
   Result := True;
  except
   Result := False;
  end;
  Reg.Free;
end;

З.Ы. Админ, разберись. А то мы тут 2 часа башку ломали, а это оказался косяк сайта.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 20:07 [#25]:

Ну таки чо? Доделал? Заработало? Чо молчишь?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 20:15 [#26]:

Ломаю голову. Да заработало, НО...
Если mp3 файл был ассоциирован WMP12, то программа переассоциирует... а если было через свойства указанно открыть с помощью WMP12 то мой программа безсильна... все ключи в реестре создаются, все норм, но открывается всеравно через WMP12....
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 20:24 [#27]:

Теперь в .mp3 только 1н ключ в котором только это

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mp3]
@="mp3file"

все остальное в mp3file находится...

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\mp3file]
@="mp3 media file"

[HKEY_CLASSES_ROOT\mp3file\DefaultIcon]
@="C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe,1"

[HKEY_CLASSES_ROOT\mp3file\Shell]

[HKEY_CLASSES_ROOT\mp3file\Shell\Open]

[HKEY_CLASSES_ROOT\mp3file\Shell\Open\Command]
@="\"C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe\" \"%1\""
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 20:28 [#28]:

Цитата (BloodVIRUS):

Теперь в .mp3 только 1н ключ в котором только это

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mp3] @="mp3file"

все остальное в mp3file находится...


Вот теперь всё правильно. Так и быть должно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 20:30 [#29]:

Вооот, самое что ломает голову, ВСЕ РАВНО mp3 файл открывается не моим плеером...
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 20:41 [#30]:

Цитата (BloodVIRUS):

Вооот, самое что ломает голову, ВСЕ РАВНО mp3 файл открывается не моим плеером...


Поищи в реестре запись от AIMP и посмотри, что у него там.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 20:54 [#31]:

AIMP у меня вообще там нет .. у меня wmp12 открывает (windows media player 12), мне вот что написали.. может чем то поможет..

Lt.RAT (22:16:41 6/03/2010)
в реестр заглядывал ?)
там есть open, edit, play ключевые слова
уверен что используешь все из них

Lt.RAT (22:17:25 6/03/2010)
если у тебя только open занимается, а у wmp занят play
то play приоритетнее open, и будет запускатья wmp в обход твоего

Lt.RAT (22:18:22 6/03/2010)
блин там разные уровни привязки

Lt.RAT (22:18:33 6/03/2010)
одно расширение может быть привязано на разные приложения

Lt.RAT (22:18:51 6/03/2010)
Open - одним
play - Другим
print - третим

от wmp12 удалил все разделы, и все равно им открывается..
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 21:07 [#32]:

Цитата (BloodVIRUS):

от wmp12 удалил все разделы, и все равно им открывается..


Теперь удали wmp12 и посмотри, что будет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 21:08 [#33]:

его нельзя удалить) это стандартная программа виндоус:)...
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 21:12 [#34]:

Цитата (BloodVIRUS):

его нельзя удалить

Уверен?

Поставь тогда WinAMP и посмотри в реестре, как он переключит ассоциацию на себя.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 21:30 [#35]:

Фига се скока на винампе..

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Winamp.File.MP3]
@="MPEG Layer 3 Audio File"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\DefaultIcon]
@="C:\\Program Files (x86)\\Winamp\\winamp.exe,1"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell]
@="Play"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Enqueue]
@="&Добавить в список Winamp"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Enqueue\command]
@="\"C:\\Program Files (x86)\\Winamp\\winamp.exe\" /ADD \"%1\""

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Enqueue\DropTarget]
"Clsid"="{77A366BA-2BE4-4a1e-9263-7734AA3E99A2}"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\ListBookmark]
@="Добавить в список &закладок Winamp"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\ListBookmark\command]
@="\"C:\\Program Files (x86)\\Winamp\\winamp.exe\" /BOOKMARK \"%1\""

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\open]
@=""

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\open\command]
@="\"C:\\Program Files (x86)\\Winamp\\winamp.exe\" \"%1\""

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\open\DropTarget]
"Clsid"="{46986115-84D6-459c-8F95-52DD653E532E}"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Play]
@="&Воспроизвести в Winamp"

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Play\command]
@="\"C:\\Program Files (x86)\\Winamp\\winamp.exe\" \"%1\""

[HKEY_CLASSES_ROOT\Winamp.File.MP3\shell\Play\DropTarget]
"Clsid"="{46986115-84D6-459c-8F95-52DD653E532E}"
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 21:36 [#36]:

и все равно после указания в .mp3 на это [HKEY_CLASSES_ROOT\mp3file]

открывается винамп....
min@y™

min@y™ (статус: Доктор наук), 6 марта 2010, 21:47 [#37]:

Цитата (BloodVIRUS):

и все равно после указания в .mp3 на это [HKEY_CLASSES_ROOT\mp3file]

открывается винамп....


А в HKEY_CLASSES_ROOT\.mp3 сейчас что?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 6 марта 2010, 21:53 [#38]:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mp3]
@="mp3file"

так ведь не бывает...
BloodVIRUS

BloodVIRUS (статус: Посетитель), 7 марта 2010, 10:19 [#39]:

Проэксперементировал..
Если создать новое расширение .fak, то им можно спокойно вышеуказанным кодом управлять, менять иконки, ассоциировать, диссоциировать, творить с ним любые действия, но если дело касается .mp3 который используется в WMP 12 или в WinAmp е, то после моей ассоциации у .mp3 не меняется даже иконка.. на .mp3 указана моя ветка с mp3file, в mp3file все так как должно быть, но открывается не мой плеер...
min@y™

min@y™ (статус: Доктор наук), 7 марта 2010, 10:39 [#40]:

Значит, не все настройки учтены. Ищи в реестре строку winamp.exe, где она ещё встречается.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 22:35
Выполнено за 0.04 сек.