Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача имени файла программе 
:(
    Опции темы
rubenhak
  Дата 27.10.2004, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.9.2003
Где: Yerevan

Репутация: нет
Всего: нет



приведу один пример. - когда открываешь mp3 файл winamp открывается, потом когда откриваешь еще один, 2ой winamp не открывается, а просто напросто передается имя файла.
как ето реализовано?

я попробовал Сокетами, работает, просто мне кажется есть способ получше.
PM WWW MSN   Вверх
Felliks
Дата 27.10.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 15.8.2004
Где: Красноярский край

Репутация: 1
Всего: 7



попробуй при запуске второй копии посмотреть не запущена ли еще одна и если запущена то передать ей строку.
проверка на количество копий:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Проверяем есть ли указатель на предыдущую копию приложения
 if hPrevInst <> 0 then begin
   // Если есть, то выдаем сообщение и выходим
   MessageDlg('Программа уже запущена!', mtError, [mbOk], 0);
   Application.Terminate;
 end;
 // Иначе - ничего не делаем (не мешаем созданию формы)
end;

или
Код

procedure TForm1.FormCreate(Sender: TObject);
var
 Wnd : hWnd;
 buff : array[0.. 127] of Char;
begin
 //Получили указатель на первое окно
 Wnd := GetWindow(Handle, gw_HWndFirst);
 // Поиск
 while Wnd <> 0 do begin
   // Это окно предыдущей копии ?
   if (Wnd <> Application.Handle) and (GetWindow(Wnd, gw_Owner) = 0) then
   begin
     GetWindowText (Wnd, buff, sizeof (buff ));
     if StrPas (buff) = Application.Title then
     begin
       MessageDlg('Приложение уже загружено', mtWarning, [mbOk], 0);
       Halt;
     end;
   end;
   Wnd := GetWindow (Wnd, gw_hWndNext);
 end;
end;



--------------------
Почему русские при зависании Windows всё время повторяют фразу "твой кролик написал" (Your Bunny Wrote)?
PM ICQ   Вверх
<Spawn>
Дата 27.10.2004, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Felliks В модуле System есть такое примечание:

Цитата
  HPrevInst: LongWord deprecated;    { Handle of previous instance - HPrevInst cannot be tested for multiple instances in Win32}




--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 27.10.2004, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Сабж заключается не в нахождении предыдущей копии, а передачи ей имени файла. Я делал так:

Код


var    hw : THandle;
   cd : TCopyDataStruct;
   rec : TRecToPass;

const MYID= '{E1446065-CB87-440D-9315-6FA356F921B5}';
         WM_COPYDATA = $004A;

//передающая часть
begin
     hw:=FindWindow(nil, MYID);
     rec.s := 'C:\1.dat';
     rec.i := 32;
     cd.dwData := 3232;
     cd.cbData := sizeof(rec);
     cd.lpData := @rec;
     SendMessage(hw, WM_COPYDATA, 0, LongInt(@cd));
end;


//принимающая часть - форма невидимая, у неё заголовок равен MYID

type
 TIDForm = class(TForm)
 private
     procedure WMCopyData(var m : TMessage); message WM_COPYDATA;
   { Private declarations }
 public
   { Public declarations }
 end;

procedure TIDForm.WMCopyData(var m: TMessage);
var filename : string;
begin
filename:=PRecToPass(PCopyDataStruct(m.LParam)^.lpData)^.s;
//юзаем тут полученное имя файла
end;



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Felliks
Дата 28.10.2004, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 15.8.2004
Где: Красноярский край

Репутация: 1
Всего: 7



Согласитесь что передать процессу строку не так сложно(по крайней мере для меня) как определить какому процессу ее передавать.

Это сообщение отредактировал(а) Felliks - 28.10.2004, 02:52


--------------------
Почему русские при зависании Windows всё время повторяют фразу "твой кролик написал" (Your Bunny Wrote)?
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.