Код: Выделить всё
if FindWindow(nil, 'Form1') <> 0 then
begin
Wind := FindWindow(nil, 'Form1');
Btn := FindWindowEx(Wind, 0, nil, 'Кнопка');
SendMessage(Btn, BM_CLICK, 0, 0);
end;
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Код: Выделить всё
if FindWindow(nil, 'Form1') <> 0 then
begin
Wind := FindWindow(nil, 'Form1');
Btn := FindWindowEx(Wind, 0, nil, 'Кнопка');
SendMessage(Btn, BM_CLICK, 0, 0);
end;
Код: Выделить всё
HWND Walk(HWND Current,char * name)
{
HWND temp;
temp=GetWindow(Current,GW_CHILD); // находим первое дочернее окно
while (temp!=NULL) // проверяем, а есть ли оно вообще
{
char WindowText[1024];
GetWindowText(temp,WindowText,1023); // получаем его название
if (!strcmp(name,WindowText)) return temp; // проверяем, искомая ли это кнопка, если да, то возвращаем её хэндл
HWND result=Walk(temp,name); // если это была не она, то обходим её дочерние объекты
if (result!=NULL) return result; // если при этом искомый объект был найден, возвращаем хэндл на него
temp=GetWindow(temp,GW_HWNDNEXT) // иначе - проверяем следующий объект, дочерний для Current
}
return NULL; // объект не найден
}
Код: Выделить всё
procedure PassChildren (pControl: TControl);
var i : integer;
ChildControl: TControl;
begin
if (not (pControl is TWinControl)) then exit;
for I:= 0 to (pControl as TWinControl).ControlCount -1 do
begin
ChildControl := (pControl as TWinControl).Controls[I];
if (ChildControl is TWinControl) then
begin
// Проверяем у элемента (ChildControl as TWinControl) - это нужный нам или нет
// Если нужный, завершаем обход, т.е. НЕ вызываем PassChildren (ChildControl)
end;
PassChildren (ChildControl);
end;
end;
Код: Выделить всё
function FindChildrenByCaption (pControl: TControl; stCaption : string) : TControl;
var i : integer;
ChildControl: TControl;
vReqResult: TControl;
begin
if (not (pControl is TWinControl)) then begin Result := NIL; exit; end;
for I:= 0 to (pControl as TWinControl).ControlCount -1 do
begin
ChildControl := (pControl as TWinControl).Controls[I];
if (ChildControl is TWinControl) then
begin
// Проверяем у элемента (ChildControl as TWinControl) - это нужный нам или нет
// Если нужный, завершаем обход, т.е. НЕ вызываем PassChildren (ChildControl)
if (ChildControl as TWinControl).Caption = stCaption) then
begin Result := ChildControl; exit; end;
end;
vReqResult := PassChildren (ChildControl);
if (vReqResult <> NIL) then // нужный элемент найден в поддереве, возвращаем результат
begin Result := vReqResult; exit; end;
end;
// Здесь, если в поддереве нужное окно не найдено, возвращаем NIL
Result := NIL;
end;
Совершенно верноBulldozerBSG писал(а):Ну я не думаю что человек пытается нажать кнопку в своем приложении )
В таком случае (если получается, что пользоваться надо WinAPI-функциями и известен хэндл окна основной формы), возможно, может помочь EnumChildWindowsShouldercannon писал(а):Совершенно верноBulldozerBSG писал(а):Ну я не думаю что человек пытается нажать кнопку в своем приложении )