Sendmessage bloque clavier et souris

trainkill Messages postés 29 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2007 - 20 avril 2006 à 13:22
trainkill Messages postés 29 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2007 - 26 avril 2006 à 15:22
Bonjour,

J'ai un petit soucis avec une application que je developpe en vb.net. Celle-ci appelle une appli externe quie st en fait un écran de login.

Lors de l'envoi du login puis du mot de passe, le premier caractère est envoyé puis le programme se bloque, ainsi que la souris et le clavier qui deviennent figés. Plus aucun moyen de contrôler le pc, ce qui est un peu embettant ! heureusement le ctrl+alt+del répond toujours...

Sinon j'ai extrait la partie de code incriminée et j'en ai fait un autre petit programme pour tester et voire où était le problème. Et là ça a marché niquel !? Je ne sais vraiment pas d'où peux venir le problème, une histoire de mémoire ou de buffer ??

sinon le bout de code donne ça :


Dim hwnd
As
Integer = WinActivate("appli externe") ' fonction qui attend en fait que la fenêtre de l'appli externe se lance et retourne son handel



If hwnd <> 0
Then


SetForegroundWindow(hwnd)


SendKeys.Send(UserLogin & "{TAB}" & UserPassword & "{ENTER}")



Else


MsgBox("blabla")



End
If

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 avril 2006 à 21:33
WM_SETTEXT pour écrire dans une fenetre de prog externe, jamais on ne fait un prog à coups de SendKeys qui est le genre d'instruction à oublier définitivement.

ciao...
BruNews, MVP VC++
0
trainkill Messages postés 29 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2007
21 avril 2006 à 16:03
Ouai j'ai essayé avec la fonction sendmessage mais je n'arriva pas à lui faire ce que je veux :

Après avoir récupéré le handle du bouton (hndl) , je fais ça :

SendMessage(hndl, WM_KEYDOWN, VK_RETURN, 0)
SendMessage(hndl, WM_KEYUP, VK_RETURN, 0)

avec comme valeurs des contantes :

Private Const WM_KEYDOWN = &H100

Private
Const WM_KEYUP = &H101
Private Const VK_RETURN = &HD

Mais seulement voilà il n'a pas l'air d'envoyer le message, et le handle récupé est le bon.

Sinon avec la methode sendkeys.send() qui ne marchait pas, et bien si je lance une message box juste après, la methode fonctionne bizarrement !!
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 avril 2006 à 20:00
Ecris avec WM_SETTEXT et ensuite un PostMessage(hParent, WM_COMMAND, IDOK, 0) avec hParent = la fenetre mère du control sur lequel tu as écrit.

ciao...
BruNews, MVP VC++
0
trainkill Messages postés 29 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 24 juillet 2007
26 avril 2006 à 15:22
Je n'ai pas compris ton poste lol désolé mais bon je crois que tu n'as pas compris ma question.

En fait là c'est bon j'ai résolu mon problème, en fait je ne récupérai  pas le bon handle du bouton comme je le croyai, je pensai que la fonction EnumChildProc() servait à celà mais en fait sa valeur de retour est une valeur booléenne pour lui indiquer s'il faut continuer d'énumerer les fils ou non. Donc je me suis servi tout simplement d'un champ de la classe pour récuperer le bon handle

Merci en tout cas pour vos conseils !
0
Rejoignez-nous