![]() |
SendMessage - Button Click
Moin, ich versuche einen Mausklick auf eine Webbrowser Komponente zu erzeugen sodass ich ein Object auf der Website anklicken könnte, jedoch klappt das nicht. Wenn ich das selbe mit nem Memo versuche dann klappt es. Wieso klappt das nicht mit dem WebBrowser ?
Bitte fragt nicht warum und wieso ich sowas versuche :) Es ist nur spielerei und ich wunder mich warum das nicht klappt..
Code:
var
Pt: TPoint; begin Pt.X:=200; Pt.Y:=300; Pt:=ClientToScreen(Pt); SendMessage(WebBrowser1.Handle,WM_RBUTTONDOWN,Pt.X,Pt.Y); SendMessage(WebBrowser1.Handle,WM_RBUTTONUP,Pt.X,Pt.Y); |
AW: SendMessage - Button Click
Hmm verdammt, mit jeder anderen Komponente gehts :) (Button, Memo, Panel etc..)
Hat vielleicht jemand einen anderen Ansatz um einen Klick auf den Webbrowser zu simulieren. Das Problem ist das ich einen Button auf einer Website kicken möchte. (Ich weiss das es andere sinnvollere Möglichkeiten gibt jedoch muss es doch möglich sein diesen simplen Klick zu simulieren :) Mit folgenden Code klappt das auch aber nur im aktiven Fenster... Wenn ich jetzt den Klick auf eine nicht sichtbare Komponente simulieren will kann ich ja nur übers Handle gehen..
Code:
Point.X:=Panel1.Left+(Panel1.Width div 2);
Point.Y:=Panel1.Top+(Panel1.Height div 2); Point:=ClientToScreen(Point); SetCursorPos(Point.X,Point.Y); //Perform Left Click mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); |
AW: SendMessage - Button Click
|
AW: SendMessage - Button Click
Zitat:
Das es mit dem Memo klappte war dann wohl eher nur Zufall ... also wenn du es da auch mit den Absoluten Werten versucht hattest. |
AW: SendMessage - Button Click
Hmm was meinst du mit relativen Angaben ? Meinst du das die Abstände vom Form Rand gemessen werden sollten ?
|
AW: SendMessage - Button Click
Genau das war gemeint.
|
AW: SendMessage - Button Click
Fast ... die Abstände gemessen von der oberen-linken Ecke des Controls, an welches man diese Message schickt.
mouse_event sendet es an das "aktive" Control, in Desktopkoordinaten. ClientToScreen rechnet die Koordinaten auf die Desktopkoordinaten um, in Bezug auf Top/Left derKomponente, in welcher die Funktion aufgerufen wird (Self.ClientToScreen = die Form). WebBrowser1.ScreenToClient rechnet Desktopkoordinaten in relativer Koordinaten für WebBrowser1 um. |
AW: SendMessage - Button Click
Code:
Ich habe mir mit Zeile 9 jeweils anzeigen lassen wo mein klick ausgeführt wird. Wenn du mir jetzt sagst das WM_LBUTTONDOWN relative Koordinaten verwendet und SetCursorPos absolute Koordinaten verwendet dann wäre einiges klar. Ich wüsste aber sonst nicht wie man den klick genau ausloten kann :/
var
Pt: TPoint; begin Pt.X:=200; Pt.Y:=300; Pt:=ClientToScreen(Pt); PostMessage(WebBrowser1.Handle,WM_LBUTTONDOWN,Pt.X,Pt.Y); PostMessage(WebBrowser1.Handle,WM_LBUTTONUP,Pt.X,Pt.Y); SetCursorPos(Pt.X,Pt.Y); end; |
AW: SendMessage - Button Click
TWebBrowser bietet auch die Möglichkeit, quasi wie im JavaScript, über dessen DOM auf den Button zuzugreifen und .click direkt auszuführen.
Wie das jetzt genau geht, weiß ich grad nicht mehr, aber wenn man mal sucht, wie man z.B. eine Seite direkt in den TWebBrowser läd, oder wie man darüber auf (HTML)Inhalte von Edits/DIVs zugreift, dann sollte der Rest einfach zu lösen sein. |
AW: SendMessage - Button Click
Code:
Ich habe mir mit Zeile 9 jeweils anzeigen lassen wo mein klick ausgeführt wird. Wenn du mir jetzt sagst das WM_LBUTTONDOWN relative Koordinaten verwendet und SetCursorPos absolute Koordinaten verwendet dann wäre einiges klar. Ich wüsste aber sonst nicht wie man den klick genau ausloten kann :/
..Ist das denn jetzt so ? Und hättest du einen Tipp wie man das ausloten kann ? |
AW: SendMessage - Button Click
Nimm mal eine TPanel (oder was auch immer) und leg dir ein OnMouseDown-Eereignis zu Diesem an.
Darin dann alle empfangen Werte z.B. in einem Label oder Memo anzeigen.
Delphi-Quellcode:
.
Label1.Caption := Format('%d: X=%d, Y=%d', [GetTickCount, X, Y]);
Nun sendest du die gewünschten Klick-Ereignisse einfach mal an dieses Panel und schon siehst du wo etwas landet. Ein Problem könnte jetzt noch sein, daß SendMessage den Klick an den Broswer (also das Fenster) sendet, und z.B. ein darin enthaltener Button garnicht darauf reagiert, weil er sich ja nicht angesprochen fühlt, wselbst wenn die Koordinaten ihn treffen würden. PS: zu solchen Theman gibt es eigentlich auch schon ein paar dutzend Threads, alleine in der DP |
AW: SendMessage - Button Click
Hmm also ich versuche einen Javascript Button zu treffen. Vielleicht gibt es ja eine besser Lösung... Hier der Code:
Code:
<button onClick="getMovie().buttonClick('Find_k');" disabled="true" id="Find_k">Waiting</button>
|
AW: SendMessage - Button Click
Der Button hat also netterweise eine ID. Damit kannst du ihn über WebBrowser1.document.getElementByID() aufspüren. Danach kannst du diesem Button sagen, dass er sich gedrückt fühlen soll ( .click() ) und dann passiert auch genau das, was du willst.
Bernhard ADD: Winziges Beispiel gefällig? - Button 1 drückt auf Button 2:
HTML-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title></title><script>
function test() { document.getElementById("testbutton").click(); } function test2() { alert("Hey, you clicked me!"); } </script> </head><body> <button type="button" onclick="test();">Click Me!</button> <button type="button" onclick="test2();" id="testbutton">Click Me! - 2</button> </body></html> |
AW: SendMessage - Button Click
Super ! Mit deinen Tipps bin ich jetzt schon recht weit gekommen. Wusste garnicht das es so einfach sein kann :) MERCI !
Jedoch steh ich vor einem letzten Problem: Auf der Textarea liegt auch ein Javasript "onKeyDown" Event. Das müsste ich irgendwie über Delphi aufrufen..
Code:
Hintergrund: Um den Inhalt abzuschicken gibt es hier kein Submit Button sondern halt nur diese Event. Ich glaube In Chatrooms funktioniert das ähnlich^^
onKeyDown="Submit(event);"
Edit: Ok hab's gelöst. Bin in einem anderen Forum auf eine "Execute JavaScript" Funktion gestoßen. Klappt Prima! ;) |
AW: SendMessage - Button Click
Um dann noch allen anderen zu ermöglichen, dem Link zu diesem Thread zu folgen, wäre es sehr nett, wenn du diesen dann auch noch posten würdest.
Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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