|
Вопрос # 3 851/ вопрос открыт / |
|
Доброго времени суток !
Столкнулся со следующей проблемой =(
Теперь я пытаюсь ассоциировать файлы со своим приложением... Надо произвести ассоциацию .mp3 .wav .ogg и еще 34 аудио формата... Пытался использовать TFileType, с 3 го запуска он что то сделал с реестром, что я не мог открыть не одного файла, папки.. вообще не чего, восстановление системы помогло только.. Попробовал http://delphidevelop.ru/publ/13-1-0-229
Не получилось, как у меня было ассоциировано с WMP 12 так и осталось.. Помогите пожалуйста разобраться в этом... За раннее огромное спасибо (=
 |
Вопрос задал: 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);
Приложение: Переключить в обычный режим-
- 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 + 'ShellOpenCommand', 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;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 марта 2010, 08:48
|
Мини-форум вопроса
Всего сообщений: 47; последнее сообщение — 7 марта 2010, 16:12; участников в обсуждении: 2.
Страницы: [« Предыдущая] [1] [2] [3]
|
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 (статус: Посетитель), 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™ (статус: Доктор наук), 7 марта 2010, 12:32 [#43]:
Даже и добавить нечего....
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 7 марта 2010, 14:48 [#44]:
Вот только самому этот параметр вообще никак не поменять.. в WIn XP можно поменять, и тогда будет открываться мой плеер, а в семерке...
|
|
min@y™ (статус: Доктор наук), 7 марта 2010, 14:55 [#45]:
Цитата (BloodVIRUS):
а в семерке...
видать даже на HKEY_CURRENT_USER прав не хватает. Удивительно!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 7 марта 2010, 14:58 [#46]:
Поменять, изменить, создать я могу любую строчку хоть где, кроме этого злого Progid ...
|
|
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]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|