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

 


Dernière réponse
Sujet : lancer un .exe existant depuis C++ et simuler une frappe dans celui ci
thegnlpopov et faire tout ça en C tout simple, c'est possible ???

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
thegnlpopov et faire tout ça en C tout simple, c'est possible ???
Kalli ça doit être ça... De toute façon, l'utilisateur indique dans l'interface les paramètres qu'il veut, clique sur un bouton pour envoyer le prog DOS, mais il n'a pas besoin de savoir ce qui se passe, et à la fin une boîte de dialogue s'ouvre du genre "Traitement terminé". Tu vois, comme une petite interface pour compresser des fichiers, et qui utiliserait pkzip sous DOS, mais sans afficher ce qu'il fait ;-).
Flying Tu voudrais donc que ton application (application console?) ne soit pas visible c'est bien ca ?
 
 
Flying
Kalli Ben, tu vois, quand tu lances l'application DOS, celle-ci travaille pendant un certain temps et ça m'affiche une fenêtre DOS avec l'application lancée et tout ce qu'elle fait... ça fait toujours ça quand t'envoie un prog qui tourne sous DOS ;-). Alors je sais que la fonction WinExec est en fait une forme simplifiée qui utilise CreateProcess, mais avec WinExec tu as SW_SHOW ou SW_HIDE (WinExec("le prog", SW_HIDE)) pour voir, ou ne pas voir l'application lancé, donc comme cette fonction est une dérivée de CreateProcess, je pense qu'il doit y avoir possibilité, avec CreateProcess, de masquer de la même manière l'application lancée ? Non ?
Flying Qu'est ce que tu entends par "ne pas faire apparaître la fenêtre DOS" ?
 
Flying
Kalli La vache... que d'infos. Déjà je voulais te dire merci beaucoup pour tout ce que tu m'as expliqué et appris (mine de rien, j'ai pas mal progressé sur mon prog ce soir ;-)), y'a peu de gens sympa comme toi sur ce forum, alors merci (c'est une fonction que je cherchais vraiment depuis longtemps...). Sinon, pour la gestion des entrèes utilisateurs, ça marche, une chose de moins ;-). Si je peux me permettre, j'aimerais te poser une dernière question (et j'irai me coucher après, j'en ai plein la tête ;-)) : Comment faire pour ne pas faire apparaître la fenêtre DOS (c'est jamais très beau...) ???
Flying Le plus simple c'est de repérer la position des cases ou tu dois entrer les données, ensuite tu clikes dessus et tu "envoies" ta donnée en simulant l'appui sur les touches.  Mais cela exige que le programme soit lancé toujours à la même place à l'écran, même résolution et que l'utilisateur ne "s'amuse" pas avec la souris pendant que le programme s'exécute !
Sinon il doit y avoir moyen de trouver un pointeur sur la Message Pump de l'appli. et de lui injecter directo les séquences, genre (TAB TAB donnée1 TAB donnée2 etc ...) enfin je sais pas à quoi ressemble l'application en question ...
 
@+
Flying
Kalli OK, c'est cool, ça répond en fait a une partie de ma question... Ce que j'aurai dû précisé (désolé), c'est que je ne connais pas d'avance la chaine de caractères a mettre, cela dépend de l'utilisateur, c'est-à-dire que l'utilisateur va spécifier telle ou telle valeur, et ensuite le programme doit être envoyé avec ces valeurs, donc j'aurai une chaine a inséré de la forme : "%d %s %d",valeur1,valeur2,valeur3, etc... Et je ne vois pas trop comment faire ???
Flying Moi je mets tout dans le premier paramètre (exe et paramètres) et cela fonctionne très bien aussi.
 
@+
Flying
xilebo le premier parametre de CreateProcess est ton executable ( avec le chemin) et le second parametre est une chaine de caractere contenant tous les parametres.
 
exemple CreateProcess("c:\windows\command\format.com","c:", ...);
Kalli Je suis aussi très intéressé par ce procédé, j'ai essayé, ça marche très bien lorsqu'on execute un simple programme, sans paramètre particulier, mais comment fait-on si il s'agit d'une application DOS, par exemple, à laquelle on doit fournir des paramètres. J'ai essayé, mais ça ne marche pas ????
chin jo Merci beaucoup !
Je cherche, je teste et j'espere y arriver...
A+
Flying Voilà comment lancer un exe à partir de ton programme C (MFC) :
 
PROCESS_INFORMATION Process = {0};
STARTUPINFO Start = {0};
Start.cb = sizeof(STARTUPINFO);
Start.lpReserved = NULL;
Start.lpReserved2 = NULL;
Start.cbReserved2 = 0;
Start.lpDesktop = NULL;
Start.dwFlags = 0;
 
// Lance process
int ReturnProcess = CreateProcess(NULL, _T("ton exe" ), NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &Start, &Process);
 
// Vérifie si l'opération s'est bien déroulée
if (ReturnProcess == 0)
          MessageBox("Erreur, impossible to run Process !", "Erreur", MB_OK + MB_ICONEXCLAMATION);
 
Ensuite tu peux attendre que le programme "client" ait terminé son job en vérifiant à intervalle régulier :
 
DWORD ReturnValue = WaitForSingleObject(Process.hProcess, 0);
 
Regarde l'aide cette fonction, tu peux spécifier un certain temps ou attendre jusqu'à ce qu'il ait terminé (INFINITE) si je me rappelle bien.
Quand ReturnValue = 0, le programme lancé est terminé.
 
Pour envoyer tes séquences de touches dans le programme tu peux employer plusieurs méthodes : l'une serait de simuler l'appui sur le clavier ou la souris (keybd_event et mouse_event).  Cherche dans la doc.
Si tu trouves pas je te filerai quelques exemples.
Il y a peut être une méthode "plus propre" en récupérant le handle de l'appli. et en envoyant directement dans sa boucle de message les touches en question ...
 
@+
Flying
chin jo Je m'explique :  
Je programme une appli en C++ chargée entre autre de rendre "conviviale" un vieux programme lourd en paramètres pour l'utilisateur. Aussi je voudrais faire lancer le vieux prg par C++, lui faire executer des séquences de touches passée par C++ comme si elles étaient tapées à l'interieur du vieux prg, le fermer et continuer le déroulement normale du prg en C++. Est ce possible ? Quelles sont les fonctions a utiliser ?
Merci d'avance...

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)