Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизОткрыть два фала из Проводника или как послать 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c