![]() |
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 ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 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