![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как нажать кнопку в другой программе (ЧУЖОЙ ПРОЦЕСС не мой)?
comwad © (2004-01-14 10:00:00)Как нажать кнопку в другой программе (ЧУЖОЙ ПРОЦЕСС не мой)?
Этот код не работает.
Где ошибка?
procedure TForm1.Button1Click(Sender: TObject);
var
wnd:HWND;
caption:string;
TheChildHandle:HWND;
const
NameApp='Form1';
begin
wnd:=FindWindow(nil, NameApp);
if wnd<> 0 then
Begin
TheChildHandle:=FindWindowEx(wnd,0,nil,PChar('Button3'));
SendMessage(TheChildHandle,WM_LButtonDown,1,1);
SendMessage(TheChildHandle,WM_LButtonUP,1,1);
End;
end;
Пожалуйста подскажите почему этот код
при поиске TheChildHandle:HWND кнопки 'Button3' своем же приложении находит, а в другом нет, хотя wnd находит правильно и там и там?
Работаю под XP , в HELP написано , что в NT FindWindowEx не работает,
может это с этим связано, тогда чем можно заменить?
comwad (2004-01-14 11:16:00) [21]В этом месте
TheChildHandle := GetWindow(wnd, GW_CHILD);
уже возвращается 0.
Все тоже что и в моем коде.
YuRock (2004-01-14 10:44:00) [22]:)))
Извините, блок кода
TheChildHandle:=FindWindowEx(wnd,0,nil,PChar('Button3'));
SendMessage(TheChildHandle,WM_LButtonDown,1,1);
SendMessage(TheChildHandle,WM_LButtonUP,1,1);
тоже не нужен.
YuRock (2004-01-14 10:43:00) [23]...
Переменная "caption: string;" в приведенном коде не нужна.
YuRock (2004-01-14 10:42:00) [24]Надо делать примерно так:
procedure TForm1.Button1Click(Sender: TObject);
const
NameApp = 'Form1';
NameLength = 10;
var
wnd: HWND;
caption: string;
TheChildHandle: HWND;
ButtonCaption: Array[0..NameLength] of Char;
begin
wnd := FindWindow(nil, NameApp);
if wnd <> 0 then begin
TheChildHandle := GetWindow(wnd, GW_CHILD);
while TheChildHandle <> 0 do begin
GetWindowText(TheChildHandle, ButtonCaption, NameLength);
if String(ButtonCaption) = 'Button3' then begin
SendMessage(TheChildHandle, BM_CLICK, 0, 0);
Break;
end;
TheChildHandle := GetNextWindow(TheChildHandle, GW_HWNDNEXT);
end;
TheChildHandle:=FindWindowEx(wnd,0,nil,PChar('Button3'));
SendMessage(TheChildHandle,WM_LButtonDown,1,1);
SendMessage(TheChildHandle,WM_LButtonUP,1,1);
end;
end;
[lamer]Barmaglot (2004-01-14 10:25:00) [25]DuplicateHandle?