Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2011, 12:18   #1
digital-stream
Пользователь
 
Регистрация: 03.05.2011
Сообщений: 81
По умолчанию Ассоциация Файлов

Как сделать ассоциацию mp3 файлов как в Aimp на Delphi
и пробовал сделать так:
Код:
uses Registry, ShlObj;
...
var Reg: TRegistry;
...
procedure Associate;
var s:string;
begin
Reg:=TRegistry.Create; // создаем
Reg.RootKey := HKEY_CLASSES_ROOT; // указываем корневую ветку

Reg.OpenKey('.mp3\OpenWithProgids\', true);
Reg.WriteString('BSMP.mp3', '');

Reg.OpenKey('\BSMP.mp3\DefaultIcon\', true);
s:=Application.ExeName+',0';
Reg.WriteString('', s);

Reg.OpenKey('\BSMP.mp3\Shell\Open\', true);
Reg.WriteString('', 'Открыть в BSMP');

Reg.OpenKey('command\', true);
s:='"'+Application.ExeName+'" "%1"';
Reg.WriteString('', s);

Reg.Free;

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
но нечего не получается
а если выбрать там другой расширение допустим .BBSSA но тогда работает
кто знает как решить эту проблему может Winamp препятствует !!!

Последний раз редактировалось Stilet; 27.11.2014 в 21:29.
digital-stream вне форума Ответить с цитированием
Старый 27.11.2014, 21:05   #2
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
Печаль

Цитата:
Сообщение от digital-stream Посмотреть сообщение
Как сделать ассоциацию mp3 файлов как в Aimp на Delphi
и пробовал сделать так:

uses Registry, ShlObj;
...
var Reg: TRegistry;
...
procedure Associate;
var s:string;
begin
Reg:=TRegistry.Create; // создаем
Reg.RootKey := HKEY_CLASSES_ROOT; // указываем корневую ветку

Reg.OpenKey('.mp3\OpenWithProgids\' , true);
Reg.WriteString('BSMP.mp3', '');

Reg.OpenKey('\BSMP.mp3\DefaultIcon\ ', true);
s:=Application.ExeName+',0';
Reg.WriteString('', s);

Reg.OpenKey('\BSMP.mp3\Shell\Open\' , true);
Reg.WriteString('', 'Открыть в BSMP');

Reg.OpenKey('command\', true);
s:='"'+Application.ExeName+'" "%1"';
Reg.WriteString('', s);

Reg.Free;

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
но нечего не получается
а если выбрать там другой расширение допустим .BBSSA но тогда работает
кто знает как решить эту проблему может Winamp препятствует !!!
не знаю, меня тоже интересует и мучает этот вопрос, я как то делал что в открыть как появлялась моя программа и если ее там выбрать, то это применяется на все mp3 файлы, но пока я пытался добиться хотябы этого, я раза 4 винду менял.... там с реестром дофига работы(((((((((
PTyTb32 вне форума Ответить с цитированием
Старый 27.11.2014, 21:17   #3
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

PTyTb32 Думаете Вам ответят через 4 года? Код из проекта. Ассоциация работает без сбоев.

Код:
procedure FileAssociate(const Ext, progName: string; Icon: string = ''; ProgPath: string = '');
var r: TRegistry;
begin
  r:=TRegistry.Create;
  r.RootKey:=HKEY_CURRENT_USER;
  r.OpenKey('Software\Classes\.'+UpperCase(Ext),true);
  r.WriteString('',progName);
    r.CloseKey;
  r.OpenKey('Software\Classes\'+progName+'\shell\open\command',true);
  if ProgPath='' then
     r.WriteString('','"'+ParamStr(0)+'" "%1"')
  else
     r.WriteString('','"'+ProgPath+'" "%1"');
  r.CloseKey;
  if Icon<>'' then begin
    r.OpenKey('Software\Classes\'+progName+'\DefaultIcon',true);
    r.WriteString('',Icon);
    r.CloseKey;
  end;
  r.Free;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure FileUnAssociate(const Ext, progName:string);
var r: TRegistry;
begin
  r:=TRegistry.Create;
  r.RootKey:=HKEY_CURRENT_USER;
  if r.OpenKey('Software\Classes\.'+UpperCase(Ext),false) and
    (r.ReadString('') = progName) then begin
      r.WriteString('','');
      r.CloseKey;
      if r.OpenKey('Software\Classes\'+progName,false) then begin
         r.CloseKey;
         r.DeleteKey('Software\Classes\'+progName);
      end;
  end;
  r.Free;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
WinCoder вне форума Ответить с цитированием
Старый 27.11.2014, 23:34   #4
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
PTyTb32 Думаете Вам ответят через 4 года?
ну вы же ответили))) ну да, добавление в список программ способных запустить mp3 файлы, я уже сделал, а как его применить ко всем mp3-шкам???:confuse d:
PTyTb32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Средства COM и ассоциация файлов со своим приложением SalasAndriy Общие вопросы Delphi 2 07.12.2014 00:25
Ассоциация файлов Renat21 Общие вопросы Delphi 1 04.02.2011 20:35
Ассоциация файлов со своей программой dmitriegorovih Общие вопросы Delphi 7 21.08.2010 12:41
Ассоциация протоколов... prizrak1390 Работа с сетью в Delphi 2 19.09.2009 22:47
ассоциация файлов с приложением TaTT DoGG Общие вопросы .NET 3 15.03.2009 18:21