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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2009, 12:07   #1
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
Вопрос Средства COM и ассоциация файлов со своим приложением

Доброго времени суток!
У меня возникла небольшая проблемка при ассоциации файлов со своей программой...
Вообщем пишу аудио плеер на делфи и я добавил в программу возможность ассоциировать аудио файлы (mp3, wav, wma, ogg и т.д.)
Всё это у меня получилось но...
В программе я включил обработку параметров командной строки, так что программа файлы открывает...
А теперь самое главное... Когда я например в Explorer выделю 5-10 mp3 файлов и нажму кнопку Enter, то все эти файлы откроются в моей программе, вот только получится 5-10 копий программы....
Я смотрел что другие проигриватели в таком случае спокойно открывают все эти файлы, и просто добавляют их в список и другая копия программы не открывается...
Пробывал так: Поставил запрет на запуск 2 копии программы и отправлял все параметры командной строки уже запущенному окну своего плеера посредством сообщения WM_COPYDATA... вот так:
Код:
procedure TFormMain.FormCreate(Sender: TObject);
var
  Str:String;
  i:Integer;
  WindowVerif: HWND;
  cds: COPYDATASTRUCT;
begin
  WindowVerif:= FindWindow(nil, 'Заголовок окна программы');
  if WindowVerif <> 0 then
  begin
    SetForegroundWindow(WindowVerif);
    if (ParamCount > 0) then
    begin
      for i:=1 to ParamCount do
      begin
        Str:=Str+' '+ParamStr(i);
      end;
      cds.cbData := Length(Str);
      cds.lpData := PChar(Str);
      PostMessage(WindowVerif, WM_COPYDATA, 0, Integer(@cds));
    end;
    Halt;
  end;


  // ...
end;
И обрабатываю его вот так:
Код:
procedure TFormMain.WmCopyData(var Message: TWMCopyData);
var
  str: string;
  i: integer;
begin
  str := PChar(Message.CopyDataStruct.lpData);
  str:= copy(str, 1, Message.CopyDataStruct.cbData);
  if PlayListAdv1.GetTracking > -1 then
    PlayListAdv1.ADD_File(str)
  else
  begin
    PlayListAdv1.ADD_File(str);
    PlayListAdv1.SetNewItemTrack(0);
  end;
end;
Но меня это не устраивает... Вторая копия программы ведь все-ровно запускается на небольшое время... а когда запустить так файлов 100 или 500 то 500 откроется 500 копий программы и начнёт передавать все параметры главному окну...
Как-то это не коректно..
Другие программы используют средства COM, но я в COM еще не могу разобраться... может кто-то подскажет как осуществить программой обработку множества файлов...
Может есть конкретные примеры именно на такую тему...

Конкретная задача которою я немогу выполнить в программе, это открытие множества файлов из проводника в одной копии моей программы...

Заранее спасибо!

Последний раз редактировалось SalasAndriy; 10.08.2009 в 16:22.
SalasAndriy вне форума Ответить с цитированием
Старый 31.12.2011, 23:40   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

хоть вопрос был задан давно но все таки вот
Код:
     for i:=1 to ParamCount do
      begin
        Str:=Str+' '+ParamStr(i);
      end;
      cds.cbData := Length(Str);
      cds.lpData := PChar(Str);
      PostMessage(WindowVerif, WM_COPYDATA, 0, Integer(@cds));
это замените на это
Код:
      for i:=1 to ParamCount do
      begin
        Str:=Str+' '+ParamStr(i);
cds.cbData := Length(Str);
      cds.lpData := PChar(Str);
      PostMessage(WindowVerif, WM_COPYDATA, 0, Integer(@cds));
      end;
Кольша вне форума Ответить с цитированием
Старый 07.12.2014, 00:25   #3
BarsDG
Пользователь
 
Регистрация: 06.09.2010
Сообщений: 47
По умолчанию

SalasAndriy, подскажите пожалуйста что за компонент "PlayListAdv1" Вы использовали?

Последний раз редактировалось BarsDG; 07.12.2014 в 00:47.
BarsDG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Средства в С++ для работы с сетью? Михаил01 Общие вопросы C/C++ 2 18.03.2009 15:02
ассоциация файлов с приложением TaTT DoGG Общие вопросы .NET 3 15.03.2009 18:21
Средства delphi для работы с локальным web-приложением dohin Работа с сетью в Delphi 1 14.03.2009 08:57
Средства графики Borland Pascal Morrigan13 Помощь студентам 3 26.04.2008 20:07
Средства визуальной разработки программ Катюшoк Общие вопросы Delphi 4 19.01.2008 20:02