![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открыть два фала из Проводника или как послать WM_DROPFILES... [D6, D7, WinXP]
MTsv DN © (2005-06-27 09:37:00)Всем привет...
У меня появилась следующая проблема. В общем, задача такая: я хочу, чтобы в Explorer'e при выборе двух, ассоциированных на мою программу, файлов, запускалась моя прога и эти файлы добавлялись в ListEdit (ну, как, например, в WinAmp'e). Но Windows запускает по приложению для каждого файла. Поэтому я сделал так, запускаю первую копию программы, а при запуске второй копии, хочу сделать Drop на первую... Вот кусок кода для Drop'a:
******************************************************
******************************************************
******************************************************
// Разрешаем Drop
DragAcceptFiles(Application.Handle,True);
//Получили указатель на первое окно
Wnd := GetWindow(Application.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.Caption THEN
BEGIN
.... Тут получаем имя файла
hSF := FileOpen(_FileName, GENERIC_READ);
// И тут все зависает, до закрытия первой копии программы
SendMessage(Wnd, WM_DROPFILES, hSF, 0);
Halt;
END;
END;
Wnd := GetWindow (Wnd, gw_hWndNext);
END;
******************************************************
******************************************************
******************************************************
Если есть идеи, как решить саму проблемы (открытия файлов) без WM_DROPFILES, с удовольствием выслушаю предложения...
С Уважением MTsv DN
MTsv DN (2005-06-27 19:42:00) [1]2 Юрий Зотов ©
Большое СПАСИБО... Сейчас тестану пример, но судя по описанию - это, то что надо...
С Уважением MTsv DN
Юрий Зотов (2005-06-27 15:31:00) [2]> MTsv DN
Здесь практически готовое решение и еще кое-что полезное:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=904
Юрий Зотов (2005-06-27 14:48:00) [3]> MTsv DN (27.06.05 14:18) [2]
Можно отослать первой копии сообщение WM_COPYDATA, передав в нем имя файла. Или отослать первой копии свое сообщение WM_USER+XXX, предварительно записав имя файла в memory mapped file.
MTsv DN (2005-06-27 14:18:00) [4]2 TUser
Вы видимо не поняли проблему... Как проверять запущено приложение или нет, я знаю... Можно Mutex использоветь, можно Event, можно как здесь заголовки окна, не принципиально... Меня интересует, как из второй копии отослать информацию о файле в первую копию?..
С уважением MTsv DN
TUser (2005-06-27 10:08:00) [5]Надо сделать в программе мьютекс и проверять при запуске нет ли уже такого же. Если есть - значит программа уже запущена. Для приведенного тобой варианта есть альтернатива - FindWindow(Ex).