L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013
-
9 mars 2010 à 21:12
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013
-
10 mars 2010 à 15:07
Messieurs, dames,
J'ai un petit soushi, enfin, un gros soushi pour moi
En fait, j'aimerais simuler un clique gauche sur un TWebBrowser à des coordonnées précises, par exemple 10px en X à partir du coins supérieur gauche du TWebBrowser et pareil en Y.. Bon alors j'y arrive de la maniére suivante :
var
Pt : TPoint;
begin
{Get the point in the center of webbrowser}
Pt.x := WebBrowser1.Left + 10;
Pt.y := WebBrowser1.Top + 10;
{Convert Pt to screen coordinates}
Pt := ClientToScreen(Pt);
{Convert Pt to mickeys}
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
{Move the mouse}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
{Simulate the left mouse button down}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
{Simulate the left mouse button up}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
end;
Cependant cette méthode necessite de bouger le curseur de la sourie et que le WebBrowser soit visible, ce que je désir moi c'est simuler le clique sans bouger le curseur comme le fait la fonction SendMessage.
Donc après recherches sur le net, j'ai trouvé cette procedure :
var
hWB:HWND;
begin
hWB := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
hWB := FindWindowEx(hWB,0,'Internet Explorer_Server',nil);
if hWB <> 0 then begin
SendMessage(hWB,WM_LBUTTONDOWN,0,MakeLParam(18,36));
SendMessage(hWB,WM_LBUTTONUP,0,MakeLParam(18,36));
end ;
end;
Mais cette procedure ne fonctionne pas... J'ai essayé egalement cette procedure avec
WebBrowser1.SetFocus;
entre deux...
Ainsi je me retourne vers vous pour savoir si vous avez une idée lumineuse à me faire partager !
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 10 mars 2010 à 13:28
Bon du coup, j'ai fais le test suivant :
J'ai utilisé la source se trouvant sur DelphiFr permettant d'énumérer les fenêtre ouvertes, ai lancé mon application, et là, je me suis appercu qu'après la fenêtre 'Internet Explorer_Server' il y avait la fenêtre 'MacromediaFlashPlayerActiveX' comme enfant de la précédente, correspondant à mon swf. J'ai donc modifié le code de la maniére suivante :
var
hWB:HWND;
begin
hWB := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
hWB := FindWindowEx(hWB,0,'Internet Explorer_Server',nil);
hWB := FindWindowEx(hWB,0,'MacromediaFlashPlayerActiveX',nil);
if hWB <> 0 then begin
WebBrowser1.SetFocus;
SendMessage(hWB,WM_LBUTTONDOWN,0,MakeLParam(18,36));
SendMessage(hWB,WM_LBUTTONUP,0,MakeLParam(18,36));
end ;
end;
J'aurais dû y réfléchir avant de poser ma question !
Merci Cirec !
L'Armand joue, l'arme en joug... www.art-ment.com
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 10 mars 2010 à 13:16
Salut Cirec !
Merci d'avoir fait le test, le fait que ça ne fonctionne pas chez moi peut-il être dû au fait que j'essaie de simuler un clique sur un Flash contenu dans le WebBrowser ?