Экспертная система 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™ (статус: Доктор наук), 5 марта 2010, 20:27 [#1]:

Мой тебе совет: скачай базу Delphi World, там ответов на твои вопросы - НУ ПРОСТО ЗАВАЛИСЬ. Ссылку влом давать, гугл за меня отработает.
Качай, не ошибёшься, 99% вопросов отпадут сами собой.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

BloodVIRUS (статус: Посетитель), 5 марта 2010, 20:48 [#2]:

Пользуюсь второй год :) Да, на большинство вопросов нахожу ответы там, но на вот этот вот вопрос там нет ответа =( Там кучу примеров на работу с реестром, но нету на ассоциацию...
BloodVIRUS

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

А если расширение уже до меня кем то ассоциировано ? например mp3, это ничего не меняет ?
min@y™

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

Цитата (BloodVIRUS):

А если расширение уже до меня кем то ассоциировано ? например mp3, это ничего не меняет ?

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

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

ProgramExeFile

Это ExtractFilepath(application.exename) да ?
min@y™

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

Нет, это именно полный путь до ЕХЕшника программы. Он в программе используется в разных местах в разное время, поэтому я его заношу в глобальную переменную при запуске:
ProgramExeFile:=   ParamStr(0); // или Application.ExeName
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
BloodVIRUS

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

Сделал все все как в твоем примере, mp3 файл становится неизвестным форматом, без иконки, и ничем не открывается.. (Общая библиотека оболочки Windows) вот чем ассоциируется файл

ProjectFileExt = '.mp3';
ProjectDefaultExt = 'mp3';
ProjectExtDesc = 'viruspriject';
ProjectFileDesc = 'player';
ProjectIconIndex = 1;

Я же ничего не спутал ?...
min@y™

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

Цитата (BloodVIRUS):

ProjectIconIndex = 1;

У тебя в ЕХЕшнике сколько иконок-то?

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

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

Иконок у меня 4.. то что у меня вин 7 это ничего не значит ?
min@y™

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

Цитата (BloodVIRUS):

Иконок у меня 4.. то что у меня вин 7 это ничего не значит ?

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

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

У меня в .mp3 создалась ветка mp3 и в ней уже все O_o
min@y™

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

Кстати, что возвращает функция RegFileExt()?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

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

Цитата (BloodVIRUS):

У меня в .mp3 создалась ветка mp3 и в ней уже все O_o


Это не есть гут. У меня:
в ключе 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

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™

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

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™

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

Цитата (BloodVIRUS):

Возвращает 1..

Сам-то понял, что написал?
1 у тебя тут возвращает UnRegFileExt.

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

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

Ой в коде немного напортачил =(
Да пользуюсь, функция RegFileExt возвращает true
BloodVIRUS

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™

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] [Следующая »]

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

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