-2

How to click the mouse at certain coordinates on the form in Delphi? How I understand first of all need to get coordinates of screen?

1 Answers1

2

If form inside your application, it’s quite simple:

    var x , y : integer;
      x:= 100;
      y := 100;
      var ClientAreaPos := form3.ClientToScreen(Point(0,0));
      x := x + ClientAreaPos.X;
      y := y + ClientAreaPos.y;
      SetCursorPos(x, y); //set cursor to Start menu coordinates
      mouse_event(MOUSEEVENTF_LEFTDOWN,0, 0, 0, 0); //press left button
      mouse_event(MOUSEEVENTF_LEFTUP,0, 0, 0, 0); //release left button

if not – then you need get coordinate of form by WinApi:

function ClickOnWindow(const ATargetWindowClass : PWideChar; ClientX, ClientY : integer) : boolean;
begin
  Result := false;
  var xTargetHWnd := 0;
  xTargetHWnd := FindWindow(ATargetWindowClass, nil); //try to find our window by WindowClassName
  if xTargetHWnd <> 0 then begin
    var xWindowRect := TRect.Empty;
    var xPoint := tpoint.Create(ClientX, ClientY);
    if ClientToScreen(xTargetHWnd, xPoint) then begin   //transform ClientPos to ScreenPos
      SetCursorPos(xPoint.X, xPoint.Y); //set mouse specified coordinates
      mouse_event(MOUSEEVENTF_LEFTDOWN,0, 0, 0, 0); //press left button
      mouse_event(MOUSEEVENTF_LEFTUP,0, 0, 0, 0); //release left button
      Result := true;
    end{if};
  end{if};
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  if ClickOnWindow('TForm3', 100, 100) then
    showmessage('Success')
  else
    showmessage('Fail');
end;
Andreas Rejbrand
  • 105,602
  • 8
  • 282
  • 384
Softacom
  • 613
  • 2
  • 6
  • double var in you code? As a result I have an error: E2076 This form of method call only allowed for class methods (Delphi) on var ClientAreaPos := – Николай Агеев Jun 23 '22 at 12:43
  • 1
    Don't use mouse_event, you run the risk of interleaving with real events. Use SendInput. As is clearly stated in the documentation. – David Heffernan Jun 23 '22 at 13:21
  • 1
    Inline variable declaration allowed from Delphi 10.3 and higher version. If you use older – just remove keyword VAR from code and put variable declaration before BEGIN as usual. – Softacom Jun 23 '22 at 13:27
  • @Softacom Sure, but then people ask for the datatype they should use - that knowledge/sense/understanding will get extinct shortly. – AmigoJack Jun 24 '22 at 10:09