![]() |
Klick auf aktives Fenster landet woanders
Ganz einfach soll auf dem aktiven Fenster ein Button angeklickt werden (der Button liegt bei 2,2 also links oben). Mein Code funktioniert soweit, dass Handle stimmt und auch in Rec stehen die richtigen Werte des aktiven Fensters. Nur leider, landet der Klick nicht auf dem Button, sondern bei Koordinaten 3,3 auf dem gesamten Bildschirm. Nicht mal in der Nähe des aktiven Fensters also. Was mach ich falsch?
Delphi-Quellcode:
function GetSysFocus : HWND;
var ThreadID, CurrThrId: cardinal; begin Result := 0; ThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil); CurrThrId := GetCurrentThreadId; if ThreadID <> CurrThrId then begin if AttachThreadInput(ThreadID, CurrThrId, true) then begin Result := GetFocus; AttachThreadInput(ThreadID, CurrThrId, false); end; end else Result := GetFocus; end; procedure TForm1.Button3Click(Sender: TObject); var wnd: THandle; Rec: TRect; begin wnd := GetSysFocus; GetWindowRect(wnd, Rec); showmessage(inttostr(rec.Left)); mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_ABSOLUTE,Rec.Left+3,Rec.Top+3,0,0); mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTUP Or MOUSEEVENTF_ABSOLUTE,Rec.Left+3,Rec.Top+3,0,0); end; |
Re: Klick auf aktives Fenster landet woanders
Welchen Wert spuckt denn deine MessageBox bei Rec.Left aus?
|
Re: Klick auf aktives Fenster landet woanders
Hat sich erledigt.
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var wnd: THandle; Rec: TRect; begin wnd := GetForegroundWindow; GetWindowRect(wnd, Rec); showmessage(inttostr(rec.Left+3) + ' x ' + inttostr(rec.top+3)); SetCursorPos(rec.Left+30, rec.top+30); mouse_event(MOUSEEVENTF_LEFTDOWN,rec.Left+3, rec.top+3,0,0); mouse_event(MOUSEEVENTF_LEFTUP,rec.Left+3, rec.top+3,0,0); end; Zitat:
|
Re: Klick auf aktives Fenster landet woanders
Hehe, fein, dann mal gute Nacht! :zwinker:
|
Re: Klick auf aktives Fenster landet woanders
Danke trotzdem!
Ich wäre nicht der Riddler, wenn ich nicht als Dank ein Rätsel für dich hätte! Zitat:
|
Re: Klick auf aktives Fenster landet woanders
Hallo, besser ist es, mittels PostMessage() einen Klick zu senden.
|
Re: Klick auf aktives Fenster landet woanders
Hallo, warum?
|
Re: Klick auf aktives Fenster landet woanders
Zitat:
Das ist eine sicherere Methode, da nicht auf die Position des Control geachtet werden muss. (verschiedene Bildschirmauflösungen könnten auch Schwierigkeiten bereiten) Ein Vorteil ist auch, dass sich das Fenster mit dem Control nicht unbedingt im Vordergrund befinden muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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