Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   SendMessage - Button Click (https://www.delphipraxis.net/158188-sendmessage-button-click.html)

-187- 8. Feb 2011 23:11

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);

-187- 9. Feb 2011 08:11

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);

DeddyH 9. Feb 2011 08:20

AW: SendMessage - Button Click
 
Hier im Forum suchenTWebbrowser Click

himitsu 9. Feb 2011 10:18

AW: SendMessage - Button Click
 
Zitat:

Delphi-Quellcode:
Pt:=ClientToScreen(Pt);

WM_RBUTTONDOWN erwartet eine relative Position und keine Absolute.

Das es mit dem Memo klappte war dann wohl eher nur Zufall ... also wenn du es da auch mit den Absoluten Werten versucht hattest.

-187- 9. Feb 2011 14:37

AW: SendMessage - Button Click
 
Hmm was meinst du mit relativen Angaben ? Meinst du das die Abstände vom Form Rand gemessen werden sollten ?

DeddyH 9. Feb 2011 14:38

AW: SendMessage - Button Click
 
Genau das war gemeint.

himitsu 9. Feb 2011 15:22

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.

-187- 9. Feb 2011 19:09

AW: SendMessage - Button Click
 
Code:
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;
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 :/

himitsu 9. Feb 2011 19:17

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.

-187- 9. Feb 2011 19:56

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 05:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz