Показать сообщение отдельно
  #3  
Старый 07.12.2015, 15:04
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
Двигать однако придётся, без "фокуса" клика не будет, но можно запомнить положение курсора, а после нажима вернуть всё взад, вот проверенный пример из drkb:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Pt, oldPt : TPoint;
begin
Application.ProcessMessages;
Pt.x := Button2.Left + (Button2.Width div 2);
Pt.y := Button2.Top + (Button2.Height div 2);
Pt := ClientToScreen(Pt);
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
GetCursorPos(oldPt);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);;
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);;
SetCursorPos(oldPt.X, oldPt.Y);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Нажалась Button2!');
end;
Так то все сместилось и кликнуло, но вознгикает вопрос зачем посылать 3 раза координаты клика, ведь оно кликает в мышу? Такой способ плох тем, что если в момент вызова проц-ы работать с мышкой, то гарантировать клик в точку нельзя. Что можно сделать еще?
Ответить с цитированием