Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Открыть два фала из Проводника или как послать WM_DROPFILES...   Найти похожие ветки 

 
MTsv DN   (2005-06-27 09:37) [0]

Всем привет...

У меня появилась следующая проблема. В общем, задача такая: я хочу, чтобы в 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


 
TUser ©   (2005-06-27 10:08) [1]

Надо сделать в программе мьютекс и проверять при запуске нет ли уже такого же. Если есть - значит программа уже запущена. Для приведенного тобой варианта есть альтернатива - FindWindow(Ex).


 
MTsv DN   (2005-06-27 14:18) [2]

2 TUser
Вы видимо не поняли проблему... Как проверять запущено приложение или нет, я знаю... Можно Mutex использоветь, можно Event, можно как здесь заголовки окна, не принципиально... Меня интересует, как из второй копии отослать информацию о файле в первую копию?..

С уважением MTsv DN


 
Юрий Зотов ©   (2005-06-27 14:48) [3]

> MTsv DN   (27.06.05 14:18) [2]

Можно отослать первой копии сообщение WM_COPYDATA, передав в нем имя файла. Или отослать первой копии свое сообщение WM_USER+XXX, предварительно записав имя файла в memory mapped file.


 
Юрий Зотов ©   (2005-06-27 15:31) [4]

> MTsv DN

Здесь практически готовое решение и еще кое-что полезное:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=904


 
MTsv DN   (2005-06-27 19:42) [5]

2 Юрий Зотов ©
Большое СПАСИБО... Сейчас тестану пример, но судя по описанию - это, то что надо...

С Уважением MTsv DN



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-1120212706
AbrosimovA
2005-07-01 14:11
2005.07.18
Как быстро выводить ChildItems из TreeView в ListView


14-1118924278
DeMoN-777
2005-06-16 16:17
2005.07.18
Странные письма


4-1116665523
Никита
2005-05-21 12:52
2005.07.18
Как получить количество пикселей на дюйм с помощью GetDeviceCap


1-1120042558
zepellin
2005-06-29 14:55
2005.07.18
поиск путей к файлам


3-1118217498
Юра
2005-06-08 11:58
2005.07.18
InterBase, 100тыс записей клиенту