![]() |
..und noch ein: Maus windowsweit fernsteuern...
Hallo Leute...
(leider bin ich durch die Forumsuchen nicht schlauer geworden) ich hab mal eine Frage betreffend Maus-Klicks simulieren: Wenn ich die Maus positionieren will, kann ich das via Mouse.Cursorpos Wenn ich Klicks ausführen will, kann ich das via WindowMessages (wm_LButtonDown..) Nur: Funktionieren tuts nicht so richtig... Manche Fenster nehmen [ok] [Abbruch] nicht an. (Was ich sehr komisch finde ist: IE8/Extras/Internetoptionen funzt nicht IE8/Favoriten/Zu Favoriten hinzufügen.. funktioniert ) Excel reagiert komisch bei einem simulierten Linksklick in ein Feld und nach einiger Zeit kommt ein StackOverflow im Delphi Code:
Delphi-Quellcode:
// Linke Maustaste
procedure TForm1.BitBtn1Click(Sender: TObject); var CursorPos: TPoint; WinHandle: HWND; LongParam: Integer; begin GetCursorPos(CursorPos); WinHandle := WindowFromPoint(CursorPos); Windows.ScreenToClient(WinHandle, CursorPos); LongParam := CursorPos.x + CursorPos.y shl 16; SendMessage(WinHandle, WM_LBUTTONDOWN, 0, LongParam); SendMessage(WinHandle, WM_LBUTTONUP, 0, LongParam); { Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } end; // Rechte Maustaste procedure TForm1.BitBtn2Click(Sender: TObject); var CursorPos: TPoint; WinHandle: HWND; LongParam: Integer; begin GetCursorPos(CursorPos); WinHandle := WindowFromPoint(CursorPos); Windows.ScreenToClient(WinHandle, CursorPos); LongParam := CursorPos.x + CursorPos.y shl 16; SendMessage(WinHandle, WM_RBUTTONDOWN, 0, LongParam); SendMessage(WinHandle, WM_RBUTTONUP, 0, LongParam); { Mouse_Event(MOUSEEVENTF_RightDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_RightUP, 0, 0, 0, 0); } end; // Doppelklick procedure TForm1.BitBtn3Click(Sender: TObject); var CursorPos: TPoint; WinHandle: HWND; LongParam: Integer; begin GetCursorPos(CursorPos); WinHandle := WindowFromPoint(CursorPos); Windows.ScreenToClient(WinHandle, CursorPos); LongParam := CursorPos.x + CursorPos.y shl 16; SendMessage(WinHandle, WM_LBUTTONDOWN, 0, LongParam); SendMessage(WinHandle, WM_LBUTTONDBLCLK, 0, LongParam); SendMessage(WinHandle, WM_LBUTTONUP, 0, LongParam); { Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); } end; P.S.: Ich starte die Proceduren in diesem Beispiel über einen Tastaturhook von LMD ..
Delphi-Quellcode:
kann mir einer sagen, wieso sich das so komisch verhält,
procedure TForm1.LMDGlobalHotKey1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin bitbtn1.Click; end; und wie ich das ganze lösen kann. Sinn und Zweck der Übung: Ich hab mir grad eine 3x2 Meter Rückprojektionsfläche gekauft, will mit dem Beamer eine Software drauf projezieren und via 2 Webcams (die nur einen kleinen "Sehschlitz" besitzen) ein "Ein-Finger-Eingabesystem" basteln, indem die beiden Videostreams analysiert werden und die Position eines Fingers berechnet wird .. und es scheitert schon am "Maus positionieren und klick ausführen" :wall: |
Re: ..und noch ein: Maus windowsweit fernsteuern...
Rein aus Interesse: warum hast du die mouse_event dinger auskommentiert? Ich hätte es genau so (oder mit SendInput) gemacht :gruebel:
|
Re: ..und noch ein: Maus windowsweit fernsteuern...
Hi,
"die mouse_event dinger " - funktionieren noch schlechter in Word, Excel und IExplorer als die Sendmessage-Nachrichten. Komischerweise reagiert z.B.: Excel bei manchen Popups ganz normal, manche klappen auf, nehmen aber dann keinen linksklick auf ein Item an .. lauter so Sachen .. :gruebel: Wenn man ein Feld "anklicken läßt" - und ein Zellhaufen ist bereits markiert, ist die Reaktion von Excel wieder anders, als wenn nix markiert ist.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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