|
Вопрос # 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™ (статус: Доктор наук), 5 марта 2010, 20:27 [#1]:
Мой тебе совет: скачай базу Delphi World, там ответов на твои вопросы - НУ ПРОСТО ЗАВАЛИСЬ. Ссылку влом давать, гугл за меня отработает.
Качай, не ошибёшься, 99% вопросов отпадут сами собой.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 5 марта 2010, 20:48 [#2]:
Пользуюсь второй год Да, на большинство вопросов нахожу ответы там, но на вот этот вот вопрос там нет ответа =( Там кучу примеров на работу с реестром, но нету на ассоциацию...
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 16:34 [#3]:
А если расширение уже до меня кем то ассоциировано ? например mp3, это ничего не меняет ?
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 16:40 [#4]:
Цитата (BloodVIRUS):
А если расширение уже до меня кем то ассоциировано ? например mp3, это ничего не меняет ?
Функция RegFileExt() сменит ассоциацию.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 16:53 [#5]:
ProgramExeFile
Это ExtractFilepath(application.exename) да ?
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 16:57 [#6]:
Нет, это именно полный путь до ЕХЕшника программы. Он в программе используется в разных местах в разное время, поэтому я его заношу в глобальную переменную при запуске:
ProgramExeFile:= ParamStr(0); // или Application.ExeName
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 16:58 [#7]:
Сделал все все как в твоем примере, mp3 файл становится неизвестным форматом, без иконки, и ничем не открывается.. (Общая библиотека оболочки Windows) вот чем ассоциируется файл
ProjectFileExt = '.mp3';
ProjectDefaultExt = 'mp3';
ProjectExtDesc = 'viruspriject';
ProjectFileDesc = 'player';
ProjectIconIndex = 1;
Я же ничего не спутал ?...
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:07 [#8]:
Цитата (BloodVIRUS):
ProjectIconIndex = 1;
У тебя в ЕХЕшнике сколько иконок-то?
З.Ы. У меня всё работает на ура, ищи ошибку у себя.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:10 [#9]:
Иконок у меня 4.. то что у меня вин 7 это ничего не значит ?
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:16 [#10]:
Цитата (BloodVIRUS):
Иконок у меня 4.. то что у меня вин 7 это ничего не значит ?
Да у меня и под вин7 проблем не было.
Открой реестр и посмотри, внеслись ли изменения в нужные ключи.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:18 [#11]:
У меня в .mp3 создалась ветка mp3 и в ней уже все
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:19 [#12]:
Кстати, что возвращает функция RegFileExt()?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:25 [#13]:
Цитата (BloodVIRUS):
У меня в .mp3 создалась ветка mp3 и в ней уже все
Это не есть гут. У меня:
в ключе HKEY_CLASSES_ROOT\.seproj только один параметр "По умолчанию" = seproject
в ключе HKEY_CLASSES_ROOT\seproject вся остальная инфа. Я этот ключ экспортировал, вот смотри:
[HKEY_CLASSES_ROOT\seproject]
@="Проект Source Editor"
[HKEY_CLASSES_ROOT\seproject\DefaultIcon]
@="E:\\Delphi Projects\\SourceEditor\\SourceEditor.exe,1"
[HKEY_CLASSES_ROOT\seproject\Shell]
[HKEY_CLASSES_ROOT\seproject\Shell\Open]
[HKEY_CLASSES_ROOT\seproject\Shell\Open\Command]
@="\"E:\\Delphi Projects\\SourceEditor\\SourceEditor.exe\" \"%1\""
Чото ты там у себя наковырял не того...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:30 [#14]:
>Кстати, что возвращает функция RegFileExt()?
А как глянуть ?
Сделал сейчас в лоб
if FileExtIsRegistered(ProjectFileExt) then begin
UnRegFileExt(ProjectFileExt, ProjectExtDesc) ;
RegFileExt( ProjectFileExt, ProjectExtDesc, ProjectFileDesc, paramstr(0), '%1',ProjectIconIndex) end else
RegFileExt( ProjectFileExt, ProjectExtDesc, ProjectFileDesc, paramstr(0), '%1',ProjectIconIndex) ;
Содержимое ветки теперь такое
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.mp3]
@="seproject"
[HKEY_CLASSES_ROOT\.mp3\seproject]
@="player"
[HKEY_CLASSES_ROOT\.mp3\seproject\DefaultIcon]
@="C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe,0"
[HKEY_CLASSES_ROOT\.mp3\seproject\DefaultIcon\seprojectShellOpenCommand]
@="\"C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe\" \"%1\""
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:36 [#15]:
Цитата (BloodVIRUS):
А как глянуть ?
Она возвращает Boolean-значение.
if RegFileExt(...)
then ...
else ...;
Цитата (BloodVIRUS):
[HKEY_CLASSES_ROOT\.mp3\seproject] @="player"
Откуда у тя тут seproject взялся?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:41 [#16]:
procedure TMain.association;
const
ProjectFileExt = '.mp3';
ProjectDefaultExt = 'mp3';
ProjectExtDesc = 'seproject';
ProjectFileDesc = 'player';
ProjectIconIndex = 0;
begin
if FileExtIsRegistered(ProjectFileExt) then begin
if UnRegFileExt(ProjectFileExt, ProjectExtDesc) then showmessage('1') else showmessage('0') ;
RegFileExt( ProjectFileExt, ProjectExtDesc, ProjectFileDesc, paramstr(0), '%1',ProjectIconIndex) end else begin
if UnRegFileExt(ProjectFileExt, ProjectExtDesc) then showmessage('1') else showmessage('0') ; end;
end;
Возвращает 1..
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 17:50 [#17]:
Цитата (BloodVIRUS):
Возвращает 1..
Сам-то понял, что написал?
1 у тебя тут возвращает UnRegFileExt.
Ты вообще, отладчиком пользуешься? Прогони функцию под отладчиком, посмотри, какие значения принимают переменные.
Чо-то мне это начинает надоедать...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:56 [#18]:
Ой в коде немного напортачил =(
Да пользуюсь, функция RegFileExt возвращает true
|
|
BloodVIRUS (статус: Посетитель), 6 марта 2010, 17:59 [#19]:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.mp3]
@="seproject"
[HKEY_CLASSES_ROOT\.mp3\seproject]
@="player"
[HKEY_CLASSES_ROOT\.mp3\seproject\DefaultIcon]
@="C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe,0"
[HKEY_CLASSES_ROOT\.mp3\seproject\DefaultIcon\seprojectShellOpenCommand]
@="\"C:\\Programing\\Плеер\\New player powered bass 2.4\\Ready\\Player.exe\" \"%1\""
что то тут точно не так
Если сравнивать с твоим
[HKEY_CLASSES_ROOT\seproject]
@="Проект Source Editor"
[HKEY_CLASSES_ROOT\seproject\DefaultIcon]
@="E:\\Delphi Projects\\SourceEditor\\SourceEditor.exe,1"
[HKEY_CLASSES_ROOT\seproject\Shell] этого нету
[HKEY_CLASSES_ROOT\seproject\Shell\Open] и этого нету
[HKEY_CLASSES_ROOT\seproject\Shell\Open\Command]
@="\"E:\\Delphi Projects\\SourceEditor\\SourceEditor.exe\" \"%1\""
|
|
min@y™ (статус: Доктор наук), 6 марта 2010, 18:04 [#20]:
Ёпрст, 2 разных раздела должно создаться-то, а не один. Раздел раз:
[HKEY_CLASSES_ROOT\.mp3]
Раздел два:
[HKEY_CLASSES_ROOT\mp3]
В этом разделе должна быть вся инфа.
Попробуй так:
const
// Расширения, иконки, реестр
ProjectFileExt = '.mp3';
ProjectDefaultExt = 'mp3';
ProjectExtDesc = 'mp3file';
ProjectFileDesc = 'mp3 media file';
ProjectIconIndex = 1;
Потом лезь в реестр и смотри, что получилось.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Страницы: [1] [2] [3] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|