|
|
Mausklick auf Hintergrundfenster
#2980 - 28.07.2010 14:31
|
Ändern
|
Antworten
|
Zitieren
|
|
|
Hallo
habe folgendes Problem.
Ich möchte bei einem Browser Programmgesteuert einen Link anklicken, aber das Fenster soll dabei im Hintergrund bleiben.
Denn ich will mit dem PC ja noch arbeiten.
Also mouse_event scheidet aus.
Habe WM_lbuttonup probiert geht auch nicht. Also mit Sendmassage!
Hat da Jemand eine Idee, der Browser ist erstmal egal dabei.
Verwende sowohl den IE wie auch Firefox Opera und....
Danke für Eure Hilfe.
Extras:
|
|
|
|
Hallo,
also ein Mausklick in ein Fremdfenster?
Wenn da ein Control (z.B. Button) angeklickt werden soll, benötigst Du das Handle des Controls. Und dann mit Sendmessage die entsprechende Nachricht für Mausklick an das Control schicken. SendMessage(Handle, %BM_CLICK, 0, 0).
Es müßte auch über die Position im Fremdfenster gehen, wo der Klick erfolgen soll. Wenn sich diese Position ermitteln läßt, den Mauskursor auf diese Position setzen und nacheinander mouse_event(%MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) und mouse_event(%MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) aufrufen. Dazu muß das Fenster aber sichtbar und wahrscheinlich auch aktiv sein. Vielleicht geht es auch, wenn Du zuvor das Fremdfenster in einen Bereich außerhalb der Display-Anzeige verschiebst.
Ich bin mir ziemlich sicher, daß sich dazu im amerikanischen Forum etwas finden läßt. Ob das dann auch mit einem Link funktioniert?
Gruß
Norbert
Extras:
|
|
|
|
Ja das ist genau das Problem das Fenster soll sich im Hintergrund befinden.
Aber Antwort hat Zeit, weil ich nehme jetzt doch mouse_event.
Lasse das Programm in einem VirtuellenPC laufen und dieses Fenster kann ich dann runter legen und die Mausklicks werden weiter hin an der richtigen Stelle ausgeführt.
Es ist ein URL-Link (Browser) kein Button, es soll immer eine andere URL aufgerufen werden, immer unter der gleichen Position.
Aber trotzdem vielen Dank für Deine Mühe.
Gruß Lutz
Extras:
|
|
|
|
Hallo,
wenn es kein Button ist, dann kommt wirklich nur mouse_event infrage. Die Nachrichten der Maus gehen dabei natürlich an das aktive Fester. Wenn Du den Browser nicht kurz auf aktiv setzten kannst, mußt Du eben die Mausereignisse kurzzeitig umleiten. Schau Dir die API-Funktion SetCapture an. Mit dem Trick müßte es gehen.
Gruß
Norbert
Editiert von Norbert Spörl (30.07.2010 11:11)
Extras:
|
|
Uwe Heyer
|
|
Mitglied 100+
|
|
|
|
|
Registriert: 09.06.2003
|
|
Beiträge: 105
|
|
|
|
|
nur als kleine Anmerkung wegen SendMessage() Ich würde zwischen Prozessen oder Instanzen lieber zu SendMessageTimeout() greifen. Falls das Ziel von SendMessage() nicht mehr lebt, oder sich z.Z. nicht in der MessagePump befindet, bleibt das eigene Programm auch einfach stehen, da dieser Aufruf zwingend auf ein return des callee wartet.
Gruß -Uwe
Extras:
|