Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maus bewegen und Klick simulieren in minimiertem Fenster (https://www.delphipraxis.net/107614-maus-bewegen-und-klick-simulieren-minimiertem-fenster.html)

TheThrust 30. Jan 2008 17:35


Maus bewegen und Klick simulieren in minimiertem Fenster
 
Hallo ihr fleißigen Delphianer

Ich lese schon seit mehreren Wochen hier im Forum und habe mir bisher jede Frage durch die Suchfunktion beantworten können.
Jetzt habe ich allerdings ein Problem, auf das ich auch nach längeren Suchen keine Antwort finden konnte, ich hoffe ihr könnt mir helfen:

Ich möchte in einem minimierten Fenster verschiedene Sachen ausführen, wie z.B einen Mausklick an bestimmten Positionen.
Einen Text an das Notepad zu senden hat bei mir bereits auf folgende Weise funktioniert:

Delphi-Quellcode:
var
  wnd, wnde:Hwnd;
  s : string;

...

s := 'beliebige Zeichen';
wnd:=findwindow('Notepad', nil);
  if wnd<>0 then
  begin
    wnde := FindWindowEx(wnd,0,'Edit',nil);
    if wnde<>0 then
    begin
      For i := 1 to Length(s) do
        begin
          SendMessage(wnde, WM_CHAR, Word(s[i]), 0);
          showmessage(s[i]);
        end;
     end;
  end;
Dieser Code funktionierte einwandfrei, jedoch sieht das ganz anders aus, wenn ich zum bespiel den Intenet explorer öffne und per simuliertem Mausklick auf den 'Suchen' Butten bei Google drücken will. Hierfür habe ich folgendes versucht:

Delphi-Quellcode:
var
  wnd : Hwnd;
  Pt : TPoint;

...

Pt.X := 780;
Pt.Y := 260;
wnd:=findwindow('IEFrame', nil);
if wnd<>0 then
  begin
    Pt := ClientToScreen(Pt);
    Pt.x := Round(Pt.x * (65535 / Screen.Width)) ;
    Pt.y := Round(Pt.y * (65535 / Screen.Height)) ;
    sendmessage(wnd,WM_MouseMove,Pt.X,Pt.Y); // Ich weiß nicht, ob diese Zeile nötig ist, ohne sie funktioniert es genausowenig
    sendmessage(wnd,WM_LButtonDown,Pt.X,Pt.Y);
    sendmessage(wnd,WM_LButtonUp,Pt.X,Pt.Y);
  end;
Das funktionier nicht, aber folgendes funktioniert bei maximiertem Fenster:

Delphi-Quellcode:
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0) ;;
Meine Frage ist nun:
Kann ich in einem minimierten Fenster Mausklicks simulieren ohne, dass sich der "echte" Mauszeiger bewegt?
Vielen Dank schon mal im Vorraus

toms 30. Jan 2008 18:34

Re: Maus bewegen und Klick simulieren in minimiertem Fenster
 
Zitat:

Zitat von TheThrust

Meine Frage ist nun:
Kann ich in einem minimierten Fenster Mausklicks simulieren ohne, dass sich der "echte" Mauszeiger bewegt?
Vielen Dank schon mal im Vorraus

Hallo, du kannst versuchen dem Control ein BM_CLICK oder ein WM LBUTTONDOWN / WM LBUTTONUP
zu senden. Dies, falls das Control ein Fenster Handle besitzt. Im Fall von IE
funktioniert das nicht, da die Felder, Buttons im IE keine Handles besitzen. Dort
musst du andere Wege gehen. Beispiele findest du im Forum.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz