Экспертная система 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]

min@y™

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

Посмотри внимательно, что создаёт в реестре WinAmp.

[HKEY_CLASSES_ROOT\.mp3]
@="WinAmp.file"
и далее ещё несколько параметров

Лезу в [HKEY_CLASSES_ROOT\WinAmp.file]
Там несколько команд, типа Play, Open, Enqueue, ListBookmark.

Попробуй ВРУЧНУЮ в реестре заменить в этом разделе winamp на путь к своей проге.

А ещё программно можно попробовать сделать так:
Читаешь параметр по умолчанию раздела [HKEY_CLASSES_ROOT\.mp3]. Затем удаляешь ключ, на который указывает значение этого параметра. В данном случае это ключ [HKEY_CLASSES_ROOT\WinAmp.file]. Затем прописываешь свою инфу с помощью RegFileExt().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 7 марта 2010, 12:25 [#42]:

путем долгих мучений, я изменил все параметры WinAMp а на свои, все равно открывается винамп, поиском по реестру я наткнулся на интересный параметр..

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice]
"Progid"="Winamp.File.MP3"


он меняется в зависимости ассоциации файлов. но изменить его нельзя, вылазит ошибка.. Когда я в свойствах указываю открыть спомощью своего плеера, там находится mp3file....

Вот вся ветка

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\OpenWithList]
"a"="mpc-hc.exe"
"MRUList"="dbca"
"b"="Player.exe"
"c"="wmplayer.exe"
"d"="winamp.exe"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\OpenWithProgids]
"WMP11.AssocFile.MP3"=hex(0):
"mp3"=hex(0):
"seproject"=hex(0):
"mp3file"=hex(0):
"Winamp.File.MP3"=hex(0):
"MPEG 3 Layer File"=hex(0):

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice]
"Progid"="Winamp.File.MP3"
min@y™

min@y™ (статус: Доктор наук), 7 марта 2010, 12:32 [#43]:

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

BloodVIRUS (статус: Посетитель), 7 марта 2010, 14:48 [#44]:

Вот только самому этот параметр вообще никак не поменять.. в WIn XP можно поменять, и тогда будет открываться мой плеер, а в семерке...
min@y™

min@y™ (статус: Доктор наук), 7 марта 2010, 14:55 [#45]:

Цитата (BloodVIRUS):

а в семерке...

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

BloodVIRUS (статус: Посетитель), 7 марта 2010, 14:58 [#46]:

Поменять, изменить, создать я могу любую строчку хоть где, кроме этого злого Progid ...
BloodVIRUS

BloodVIRUS (статус: Посетитель), 7 марта 2010, 16:12 [#47]:

Все. Проблема решена. На будущее тем кто столкнется с подобной проблемой. Код, указанный min@y™ действителен только в том случае, если это первая регистрация своего типа файлов. В этом случае в HKEY_CLASSES_ROOT нужна ветка .mp3 в которой единственный строковой параметр - указание ветки , в которой будет хранится вся нужная информация (иконки и т д), если же расширение файла уже было до вас кем то занято, например .mp3, то ветка .mp3 в HKEY_CLASSES_ROOT будет игнорироваться, что бы там не было написано... Теперь будет использоваться
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice
В которой находится единственный строковой параметр, с именем Progid и значением - название ветки с описанием и иконками, хранящихся в HKEY_CLASSES_ROOT . В ОС младше Vista нету подкаталога UserChoice, параметр Progid живет сразу же в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3
В ос Vista и Seven если пользователь, хоть раз сам выставлял у какой нибудь mp3 песни в свойствах "открыть с помощью" какое то приложение, то параметр Progid изменить не возможно... но возможно удалить и снова создать ;)
Ну вот в общем то и все наверно, выражаю огромную благодарность min@y™ за оказанную помощь в моей проблеме :) Всеу удачного дня :)
ps ну и в дополнение к коду, чтобы ос сразу поняла ассоциацию, обновила все иконки, в модули нужно добавить uses ShlObj;
а после кода ассоциации добавить строчку
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
Чтобы обновились все иконки :)

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

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

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