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

Вниз

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

 
MTsv DN   (2005-06-27 09:34) [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


 
GrayFace ©   (2005-06-28 21:41) [1]

Делай, например, так:
wnd:=FindWindow(nil,"Уникальное имя класса гл. формы");
if wnd<>nil then
begin
  SetForegroundWindow(wnd);
  Дальше можно WM_COPYDATA или WM_DROPFILES, как у тебя.
  halt;
end;


В MainForm:

protected
  procedure CreateParams(var Params: TCreateParams); override;

implementation

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WinClassName:="Уникальное имя класса гл. формы";
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.038 c
14-1122669555
Kerk
2005-07-30 00:39
2005.08.21
Что-то старею.. всего 01-45, а я уже спать хочу...


6-1115408403
NikNet
2005-05-06 23:40
2005.08.21
Люди помогите сделать RECV что-то у меня не получается?


3-1120743973
Mefodiy
2005-07-07 17:46
2005.08.21
Помогите новичку с SQL запросом в Oracle


1-1123129297
Kara
2005-08-04 08:21
2005.08.21
Ошибка SQL


1-1123021095
АскЮ
2005-08-03 02:18
2005.08.21
Как правильно расчленить большой проект на классы и модули ?