Utilisation de WriteFile (Windows)

Résolu
ims214 Messages postés 6 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 2 février 2012 - 4 janv. 2012 à 12:04
ims214 Messages postés 6 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 2 février 2012 - 5 janv. 2012 à 10:03
Bonjour,
j'hérite d'un programme qui peut être utilisé en passant par une fenêtre DOS. j'aurais aimé le commander à partir d'une fenêtre Win32. Pour cela je m'inspire de la solution présentée ici:
Lancer plusieurs commandes sur le même processus
Après quelques problèmes de compilation liées visiblement aux types des paramètres utilisés dans la fonction WriteFile, je commence à faire fonctionner ce code. Cependant cette fonction WriteFile ne semble écrire que le premier caractère de la commande
lorsque l'instruction suivante est accomplie:

if (! WriteFile(hPipeInputWrite, lpCommand, _tcslen(lpCommand) , &nNumberOfCharsWritten, NULL))
System_ShowLastError();

je constate (en DEBUG) que nNumberOfCharsWritten correspond exactement au nombre de caratères de lpCommand, mais la réponse de la fenêtre DOS montre à l'évidence que seul le premier caractère a été pris en compte.
Il faut d'ailleurs pour cela que je répète cette instruction en envoyant cette fois le caratère _T("\n")

En résumé suposons que je doive envoyer la lpCommand "show\n", ça ne marchera pas.
Il faut que j'envoie "s" ensuite "h" ensuite "o" ensuite "w" ensuite "\n"
Alors seulement la fenêtre DOS me renvoie la réponse attendue.

Y-a-il des idées dans les nuages?
ims214

2 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 janv. 2012 à 14:27
soucis d'Unicode, je pense...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
ims214 Messages postés 6 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 2 février 2012
5 janv. 2012 à 10:03
Merci Renfield,
Dans VS2008, j'ai repris le code original et configuré l'item "Jeu de caractères" des propriétés générales du projet en "Non défini"
...Et ça marche!
0
Rejoignez-nous