Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2301 connectés 

  FORUM HardWare.fr
  Programmation
  C

  FindWindow()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

FindWindow()

n°2115698
lilo_r
Posté le 09-12-2011 à 10:33:22  profilanswer
 

Bonjour à tous,
 
J'aimerai interagir avec l'invité de commande Windows, à partir d'un code C, par exemple je poste "help" à partir de mon code, et dans ma fenêtre de commande, il m'affiche toutes les commandes possibles.
j'utilise pour cela FindWindow() afin de récupérer le handle de ma fenêtre, ensuite j'utilise PostMessage(), mais mon FindWindow me retourne toujours 0.
Si vous pouvez m'aider svp.
 
Voila mon code:
 

Code :
  1. HWND hwnd = FindWindow(0,TEXT("CMD" ) );


 
Merci d'avance


Message édité par lilo_r le 12-12-2011 à 10:43:35
mood
Publicité
Posté le 09-12-2011 à 10:33:22  profilanswer
 

n°2115968
lilo_r
Posté le 11-12-2011 à 00:45:10  profilanswer
 

quelqu'un pour m'aider svp??

n°2115980
Trap D
Posté le 11-12-2011 à 10:09:39  profilanswer
 

Quand je testez ton programme avec HWND hwnd = FindWindow(0,TEXT("Invite de commandes" ) ); il fonctionne très bien.
Pour que l'affichage de "help" soit correct, j'ai choisi l'option de projet "Utiliser le jeu de caractères multioctet (MBCS)"
Pour envoyer une commande (ici dir) :

Code :
  1. SendMessage(hwnd,WM_CHAR,'d',0);
  2. SendMessage(hwnd,WM_CHAR,'i',0);
  3. SendMessage(hwnd,WM_CHAR,'r',0);
  4. SendMessage(hwnd,WM_CHAR, VK_RETURN,0);


Message édité par Trap D le 11-12-2011 à 11:06:28
n°2116400
lilo_r
Posté le 13-12-2011 à 09:21:29  profilanswer
 

Merci Trap D, ça marche.

n°2116918
lilo_r
Posté le 16-12-2011 à 12:11:41  profilanswer
 

Bonjour,
Peux-tu me dire stp, s'il y a un type de message équivalent à WM_CHAR, qui permet d'envoyer une commande en entier au lieu de caractère par caractère, car l'envoi d'un caractère à la fois prend beaucoup de temps.
J'ai cherché mais je n'ai pas trouvé.
 
Merci d'avance

n°2116934
Trap D
Posté le 16-12-2011 à 13:53:36  profilanswer
 

Renseigne-toi sur la fonction SendInput : http://msdn.microsoft.com/en-us/li [...] s.85).aspx
En regardant la description de SendInput, le plus simple est peut-être de faire une petite fonction :

void my_SendMessage(HWND hwnd, char  * mess)
{
 while (*mess)
 {
  SendMessage(hwnd,WM_CHAR,*mess++,0);
 }
 SendMessage(hwnd,WM_CHAR,VK_RETURN,0);
}


Message édité par Trap D le 16-12-2011 à 14:06:20
n°2116955
lilo_r
Posté le 16-12-2011 à 16:45:58  profilanswer
 

Merci Trap_D pour ta réponse,
 
Actuellement je fais bien une fonction avec SendMessage pour envoyer une commande, mais je trouve que c'est assez long, car il envoie lettre par lettre.
J'ai trouvé WM_SETTEXT qui permet d'envoyer une chaine de caractère à une fenêtre, mais quand j'ai testé ça me remplace le titre de la fenêtre par la chaine envoyé:

Code :
  1. SendMessage(hwnd, WM_SETTEXT,0,(LPARAM)TEXT("Hello World!" ));


une idée de ce que je ne fais pas bien.
Pour SendInput j'ai trouvé que c'est assez compliqué, car il faut gérer chaque clic sur le clavier...
 
Merci d'avance

n°2116990
Trap D
Posté le 16-12-2011 à 22:50:25  profilanswer
 

Non, WM_SETTEXT ne fonctionnera pas pour taper des commanders dans une fenetre DOS.
LA fonction est SendInput, il faut en passer par la.
De toute façon, quand tu tapes au clavier, tu tapes lettre par lettre. La tu envoies des caractères par programme à une fenêtre qui n'est pas gérée par ton programme je pense, donc tu ne peux guère faire autrement.
Consulte cette page pour plus d'inofs : http://msdn.microsoft.com/en-us/li [...] s.85).aspx


Message édité par Trap D le 16-12-2011 à 22:55:07
n°2117517
lilo_r
Posté le 20-12-2011 à 14:52:41  profilanswer
 

Bonjour Trap D, merci pour ta dernière réponse.
 
j'ai une autre question stp, voila dans mon programme c, j'utilise cette fois Sendmessage() pour envoyer des messages à une application,ses messages sont traités et dans la même fenêtre de l'application j'ai les résultats.
Ce que j'aimerai faire c'est récupérer ces résultats (affichés dans la fenêtre).
j'ai cherché un peu, j'ai trouvé la fonction GetMessage():
 

Code :
  1. MSG msg;
  2. while(GetMessage(&msg,NULL,0,0))
  3.  {
  4.   TranslateMessage(&msg);
  5.   DispatchMessage(&msg);
  6.  }


 
 
Mais je n'ai pas bien compris comment l'utiliser, si tu peux m'expliquer stp, si tu connais bien sur.
 
Merci d'avance.


Message édité par lilo_r le 20-12-2011 à 14:53:00
n°2117523
Trap D
Posté le 20-12-2011 à 16:18:43  profilanswer
 

Je ne connais pas bien ce mécanisme, il faudrait savoir exactement ce que tu fais.  
Communiques-tu avec une fenêtre quelconque ou avec une autre appli que tu as créé toi même ?

mood
Publicité
Posté le 20-12-2011 à 16:18:43  profilanswer
 

n°2117525
lilo_r
Posté le 20-12-2011 à 16:25:44  profilanswer
 

j'ai un programme c qui communique avec un logiciel, qui contient un invité de commande, donc j'envoie les données avec SendMessage(), il les traites, et les affiches dans la même fenêtre (l'invité de commande), et donc j'aimerai récupérer les données affichées.

n°2117584
Trap D
Posté le 20-12-2011 à 22:31:45  profilanswer
 

Il faudrait récupérer le stdout et le stderr de la fenêtre console. Ça dépasse un peu mes compétences désolé.
Peut-être en fouillant la doc MSDN...

n°2117586
SquiZZ
Posté le 20-12-2011 à 22:42:10  profilanswer
 

Tu peux regarder là, mais c'est un peu hardcore :
http://support.microsoft.com/kb/190351/en-us?fr=1

n°2117616
lilo_r
Posté le 21-12-2011 à 09:10:39  profilanswer
 

Merci pour vos réponses, je vais regardé ça.

n°2117742
Trap D
Posté le 21-12-2011 à 16:35:37  profilanswer
 

Ça marche si la fenêtre console a été lancée comme enfant du process principal. Ceci dit c'est une bonne piste.

n°2117766
lilo_r
Posté le 21-12-2011 à 17:14:08  profilanswer
 

Citation :

Ça marche si la fenêtre console a été lancée comme enfant du process principal. Ceci dit c'est une bonne piste.


 
Excuses moi Trap D, mais tu parles de quoi, de GetMessage ou la récupération de stdout et stderr??


Message édité par lilo_r le 21-12-2011 à 17:23:12
n°2117796
Trap D
Posté le 21-12-2011 à 20:36:36  profilanswer
 

De la récupération de stdout et stderr.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  FindWindow()

 

Sujets relatifs
Plus de sujets relatifs à : FindWindow()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR