| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |