PostMessage

Résolu
la_gavorade Messages postés 23 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 30 juin 2006 - 27 juin 2006 à 14:52
cs_mounjetado Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 4 août 2008 - 3 juil. 2006 à 11:09
Bonjour à tous,

J'ai un soucis avec PostMessage (ça va être un peu long, je vous préviens) :
Voilà, j'ai fait une appli qui entre autres lance un programme externe (programme de stats dont l'interface ressemble bcp à une invite de commande), et j'ai besoin de simuler des entrées clavier pour lancer les macros de ce programme externe.
Alors quand je le lance sur mon poste, pas de pb, je fais des keybd_event et ça marche. Le pb est que je veux également qu'elle fonctionne à partir d'un serveur virtuel auquel j'accède par une connexion bureau à distance. Là encore, si je reste sur le bureau du serveur virtuel, ça marche, mais dès que je ferme ou minimise la fenêtre de ce serveur, alors le keybd_event ne marche plus.
J'ai bien essayé de forcer la mise au premier plan de la fenêtre du prg en utilisant SetForeGround, et c'est OK....là encore si je reste sur le bureau du serveur, sinon ça marche pas.

Ma piste d'aujourd'hui, c'est d'utiliser un PostMessage en indiquant le handle de la fenêtre du prg, puis les touches à simuler, mais là bizarre, mon PostMessage ne fait rien du tout.
(J'ai bientôt fini). J'ai donc créé un petit test qui met une fenêtre Notepad en premier plan puis écrit dedans, et ça marche pas. Je vous montre le code correspondant :
J'utilise un FindWindow(Notepad) pour trouver le handle du Notepad, puis un SetForeGround(handle_notepad). Tout ça, ça marche
C'est maintenant que ça marche plus, et pourtant la fenêtre Notepad est bien en surbrillance :

PostMessage(handle_notepad, WM_KEYDOWN, VK_DECIMAL, 0) ;
PostMessage(handle_notepad, WM_KEYUP, VK_DECIMAL, 0) ;

// Là, il ne se passe rien, et pourtant le programme va bien au delà de ces deux lignes de code, il n'est pas bloqué... J'y comprends pas grand chose...

Merci de votre aide !

16 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 juin 2006 à 18:55
Salut,

en ce qui concerne WM_KEYDOWN et WM_KEYUP ils ne fonctionnent pas
pourquoi ? ... je ne sais pas

mais en revenche l'exemple suivant fonctionne mais je ne sais pas  s'il te sera util :

var
  Form1: TForm1;
  handle_notepad, Handle_Edit : THandle;



implementation




{$R *.DFM}




procedure TForm1.Button1Click(Sender: TObject);
begin
handle_notepad := findwindow('notepad', nil) ; //jusque là, OK
SetforegroundWindow(handle_notepad) ; // Encore OK, la fenêtre Notepad est active
Handle_Edit := FindWindowEx(Handle_NotePad,0, 'Edit',Nil);// il faut chercher le Handle de l'Edit
SendMessage(Handle_Edit, WM_CHAR, ord('.'), 0) ; //   VK_DECIMAL
end;

@+
Cirec
3