yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010
-
10 nov. 2010 à 18:15
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010
-
1 déc. 2010 à 21:27
Bonjour,
Je souhaiterais simuler un clic gauche, par exemple sur ma calculatrice windows, SANS récupérer son handle, mais grâce à sa position X et Y:
Donc, je vais dans la Faq delphi, puis j'adapte mon code :
Code :
begin
SetCursorPos(1773, 191);
{Positionne le curseur sur la fiche }
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
{Simule l'action de clic du bouton gauche de la souris }
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
{Simule l'action de relâcher du bouton gauche de la souris }
end;
Oui, sauf que mon curseur se déplace bien à l'endroit voulu, mais PAS DE CLIC.
En somme, je n'arrive pas à simuler un clic gauche, çe code ne fonctionne pas pour moi.
ps: mon os est windows Seven.
Si quelqu'un pourrais m'éclairer, çe serais cool, parce que là, je sèche...
merci
Je souhaite aussi rajouter que j'ai même placer ce code dans un composant timer...
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 1 déc. 2010 à 21:27
Sujet résolue, il fallait tous simplement le lancer en mode administrateur, ce qui explique son bon fonctionnement en mode sans échecs.
Voilà, merci quand même.
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 10 nov. 2010 à 21:32
Bon, du nouveau :
ce code ne fonctionne pas, mais lorsque je l'execute en mode sans échecs, il fonctionne parfaitement.
Pourquoi ne fonctionne t-il pas sur ma session normale, et qu'il fonctionne en mode sans echecs?
merci.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 11 nov. 2010 à 10:23
Salut,
[quote=YannFrance]ce code ne fonctionne pas, mais lorsque je l'execute en mode sans échecs, il fonctionne parfaitement. /quote tu veux sans doute dire en mode Debug !!
essayes avec une micro-pause entre le "DOWN" & "UP"
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 11 nov. 2010 à 16:45
Merci Cirec,
L'idée d'une pause entre chaque instructions, je l'avais déjà tester, mais rien...
Ensuite, quand je dit en mode sans échecs, c'est bien l'option de démarrage du système d'exploitation, en l'occurrence, windows 7 et non celui de l'edi.
merci.
autre choses ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 11 nov. 2010 à 18:59
[quote= YannFrance]Ensuite, quand je dit en mode sans échecs, c'est bien l'option de démarrage du système d'exploitation, en l'occurrence, windows 7 et non celui de l'edi./quoteAh bon !
essayes ce code et dis moi si ça fonctionne ... (j'ai pas Seven sous la main)
[hr] procedure TMainfrm.Button4Click(Sender: TObject);
var InputArray : array of TInput; // Tableau de TInput
MouseInput : TMouseInput; // MouseInput structure [b]begin
/b{Défini la taille du Tableau} SetLength(InputArray, 2);
{rempli de zéro la structure} ZeroMemory(@MouseInput, SizeOf(TMouseInput));
{défini les coordonées et les Flags} MouseInput.dx : = 1773 * (65335 div Screen.Width);
MouseInput.dy := 191 * (65335 div Screen.Height);
MouseInput.dwFlags : = MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN;
[i]{et on l'affecte au premier indice du tableau}
/iInputArray[0].Itype := INPUT_MOUSE;
InputArray[0].mi := MouseInput;
{et on recommence}
ZeroMemory(@MouseInput, SizeOf(TMouseInput));
MouseInput.dwFlags : = MOUSEEVENTF_LEFTUP;
InputArray[1].Itype := INPUT_MOUSE;
InputArray[1].mi := MouseInput;
{et pour finir on appel la fonction SendInput} if SendInput(Length(InputArray), InputArray[0], SizeOf(TINPUT)) < Length(InputArray) [b]then
/bShowMessage(SysErrorMessage(GetLastError));
end;
[hr]
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 11 nov. 2010 à 19:44
petite correction sur le contrôle de la valeur de sortie de SendInput .. pour supprimer un message d'avertissement du compilateur et ...:
[hr]procedure TMainfrm.Button4Click(Sender: TObject);
var InputArray : array of TInput; // Tableau de TInput MouseInput : TMouseInput; // MouseInput structure [b]begin
/b{Défini la taille du Tableau} SetLength(InputArray, 2); // 2 étant le nombre d'évènements souris {rempli de zéro la structure} ZeroMemory(@MouseInput, SizeOf(TMouseInput));
{défini les coordonées et les Flags} MouseInput.dx := 1773 * (MAXWORD div Screen.Width);
MouseInput.dy : = 0191 * (MAXWORD div Screen.Height);
MouseInput.dwFlags := MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN;
[i]{et on l'affecte au premier indice du tableau}
/iInputArray[0].Itype : = INPUT_MOUSE;
InputArray[0].mi := MouseInput;
{et on recommence}
ZeroMemory(@MouseInput, SizeOf(TMouseInput));
MouseInput.dwFlags : = MOUSEEVENTF_LEFTUP;
InputArray[1].Itype := INPUT_MOUSE;
InputArray[1].mi := MouseInput;
{et pour finir on appel la fonction SendInput} if SendInput(Length(InputArray), InputArray[0], SizeOf(TINPUT)) < Cardinal(Length(InputArray)) [b]then
/bShowMessage(SysErrorMessage(GetLastError));
end;
[hr]
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 11 nov. 2010 à 19:54
Bonsoir,
j'y comprends rien sur ce coup là, comment peut-on envoyer un message à une fenêtre sans en connaître le handle. Pour moi, quand une fenêtre est positionnée dirons-nous (100, 150, 100, 100) soit 100 pixels de la gauche, 150 pixels du haut, 100 et 100 pixels de largeur et de hauteur, si je poste un message de position -100, -50, alors la procédure de fenêtre reçoit le message avec les coordonnées hors de la fenêtre visible, mais pas avec les coordonnées d'une autre fenêtre !!!
Dites-moi si je dois revoir mes base Windows (j'ai étudié le système avec Prezold sur Win 3.0), je vieillis mal ou quoi ???
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 11 nov. 2010 à 20:50
@beckerich:
attention tu confonds ... ici on envoie pas de message donc pas besoin de Handle on ne fait que simuler une action souris ... une position (Absolue) et un LDOWN suivi d'un LUP
c'est comme si l'utilisateur avait déplacé la souris et cliqué à cette endroit.
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 12 nov. 2010 à 15:38
nn, la souris ne bouge pas, et j'ai pas de message d'erreur, il y'as juste une boite de dialogue qui apparait pour me dire que l'opération à réussi, mais rien du tous se passe.
Voilà..
merci
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 12 nov. 2010 à 17:08
bon je viens de tester sous Seven ... et ça fonctionne parfaitement ... que le code soit compilé sous Delphi-7 où Delphi-2009 la souris se déplace au bon endroit et le click se fait !!!
yannfrance
Messages postés48Date d'inscriptionmardi 18 septembre 2007StatutMembreDernière intervention 1 décembre 2010 12 nov. 2010 à 18:27
Oui Caribensila,
Je le sais que le problème viens de la config de mon os,
j'ai essayer de réstaurer la configuration de démarrage ainsi que les services, mais rien y fait, à part ça, je ne vois plus quoi faire...
Tous seul dans ce cas, aucun doute.
Je ne veut pas m'avancer dans un formatage, trop fastidieux...
Tant pis, vraiment casse pied ce souci.
merci quand-même pour votre aide.