Malgré toutes les infos que j'ai trouvé ici et là, des choses me
manquent pour utiliser correctement SendMessage(..) de user32.dll.
Depuis mon programme en C#, je souhaite "simuler" la pression de la
touche F5 vers une application externe dont je réussi à identifier le
handle. Voilà où j'en suis au niveau de mon source.... J'ai bon ?? lol
int hwnd = FindWindowEx(0, 0, 0, "UNLOAD.SQL - SQLTalk for Windows");
if (hwnd != 0) {
rtb_etapes.Text += hwnd.ToString();
SendMessage(hwnd, WM_KEYDOWN,VK_F5, 0);
System.Threading.Thread.Sleep(100);
SendMessage(hwnd, WM_KEYUP,VK_F5, 0);
}
}
=> Le problème est tout simple : Quelles sont les valeurs que
doivent prendre "WM_KEYDOWN" et de "VK_F5" pour que SendMessage
puisse fonctionner ?
Ps : J'ai vu que "Coq" a réussi a trouvé la valeur de WM_LBUTTONDOWN (=
0x0201) pour simuler la pression clic_gauche avec la souris - je ne
sais pas comment il a fait
Oui... J'ai utilisé une source sur ce site qui scanne les handles et
cela correspond bien... C'est pour ça que je croyais que c'était mon
code qui clochait.. Mais je vais essayer ce SendMessage sur notepad.exe
pour voir...
Je galère toujours j'ai donc fait un simle test ; simuler la touche F5
qui, sur la fenetre du Bloc note, insère la date et l'heure sous forme
de texte.
Punaise, deux ans après, je suis exactement dans la même situation.
Et je viens de changer SendMessage pour PostMessage et ça fonctionne :)
T'es un ange Coq
Mais pourquoi SendMessage ne fonctionne pas?
Heu, bonne question, mes compétences en manipulation directe des APIs sont un peu trop légères pour avancer une réponse ^^
Une différence entre les 2 est que PostMessage poste le message dans la file de la cible et retourne immédiatement alors que SendMessage attend que le message aie été traité par la cible.
Enfin, en général, je suis la doc, et celle de WM_KEYDOWN dit "The WM_KEYDOWN message is posted to the window".