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

  FORUM HardWare.fr
  Programmation
  C++

  Déclenchement automatique de programme par enregistrement de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déclenchement automatique de programme par enregistrement de fichier

n°2159512
Cedric_hou​elb
Posté le 08-10-2012 à 10:05:17  profilanswer
 

Bonjour,
 
Je conçois un programme qui doit boucler un certain nombre de fois seulement au milieu de la boucle il lance un autre programme (dans mon cas c'est un soft de simulation de flux) le programme exterieur tourne un certain temps (temps inconnu) puis écrit des infos dans un fichier output classique (sans doute du texte) et se ferme. La boucle principale est censée reprendre à ce moment là.
 
Ma question est donc y a t il une sorte de trigger, un moyen de surveiller les évènements windows ? l'idée serait que ma boucle fasse l'etape 1 puis 2 puis pause le temps de la simulation sur le soft exterieur et que l'étape 3 démarre dès l'enregistrement du fichier est faite ensuite étape 4 puis 1 puis 2 etc ...
 
Vos suggestions sont les bienvenues merci d'avance.
Houelb

mood
Publicité
Posté le 08-10-2012 à 10:05:17  profilanswer
 

n°2159516
breizhbugs
Posté le 08-10-2012 à 11:10:18  profilanswer
 

Bonjour,
Sous windows quand tu lance un nouveau process via createprocess(), tu récupères un handle dessus, ce qui te permet de te synchroniser dessus via waitforsingleobject() par exemple...


Message édité par breizhbugs le 08-10-2012 à 11:10:35

---------------
Seul Google le sait...
n°2159660
Cedric_hou​elb
Posté le 09-10-2012 à 15:35:39  profilanswer
 

Merci pour ta réponse rapide breizhbugs, en effet ça fonctionne de ce que j'ai réussi à en faire (je ne suis malheureusement pas un expert).
Maintenant ma question devient "comment faire faire des choses au programme entre le moment où il est lancé et le moment où il se ferme". Dans mon cas ce sera 1) ouvrir un modele de simulation 2) faire tourner la simulation 3) enregistrer certaines choses 4) quitter.  
Faut il que je contacte l'editeur du soft de simulation absolument ou à partir du logiciel puis je savoir comment s'appellent les fonctions internes et comment les lancer ?
 
Merci d'avance pour vos réponses
 
PS: je met dans la suite de ce message mon code test qui permet bien de lancer un process exterieur et d'attendre qu'il soit fini pour reprendre la boucle des instructions (j'ai fait ça sur windows media player pour le test)
 
 
///////////////////////////////////////////////////////// CODE
 
void etape3()
{
cout<<"etape 3 checked"<<endl;
}
 
void etape2()
{
CString cmdLine;
cmdLine= "\"C:\\Program Files\\Windows Media Player\\wmplayer.exe\""; // creer le chemin pour acceder au programme exterieur
 
PROCESS_INFORMATION processInformation = {0};
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
int nStrBuffer = cmdLine.GetLength() + 50;
 
bool result =CreateProcess(NULL, cmdLine.GetBuffer(nStrBuffer), NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &startupInfo, &processInformation);
 
cmdLine.ReleaseBuffer();
 
WaitForSingleObject( processInformation.hProcess, INFINITE ); // on detecte que le programme exterieur a fini
 
// on ferme les handles.
CloseHandle( processInformation.hProcess );  
CloseHandle( processInformation.hThread );
 
cout<<"etape 2 checked"<<endl;
 
etape3();
 
}
 
void etape1(int &i)
{
i=i+1; // on valide que le tour a bien débuté et on incrémente le nombre de tours
 
cout<<"etape 1 checked"<<endl; // c'est fait
 
etape2(); // on passe à l'étape suivante
}
 
void main()
{
cout<<"c'est parti"<<endl;
 
int i=0;
while (i<10)
{
cout<<i;
etape1(i); // démarrage initiale (tour numéro 0) et boucle 10 fois
}
}

n°2159663
SquiZZ
Posté le 09-10-2012 à 16:59:48  profilanswer
 

Si tu n'es pas fixé sur le C++ tu peux regarder autoit qui permet de faire de l'automatisation assez facilement (lancer une appli, attendre l'affichage d'une fenêtre, cliquer sur un bouton).

n°2162028
Cedric_hou​elb
Posté le 30-10-2012 à 19:56:46  profilanswer
 

Bonjour tout le monde, je reviens donner des nouvelles concernant mon problème.
Alors il semble que:
 
- soit je doive passer par une application tiers du type "autoit". Option fort peu probable car j'ai besoin de faire bcp de cycle, mes temps de calcul risquent déjà d'être assez conséquent vu la complexité du probleme alors si mon programme doit ouvrir le soft avec son interface graphique puis jouer avec les menus c'est mort ... Quest sur un PC neuf à l'heure actuel c'est plusieurs minutes au démarrage multipliez ça par les milliers de boucles de la métaheuristique que je colle dessus fois les milliers de scénarii supplémentaires modélisant mon environnement fois les replications internes à la simulation cette option n'est juste pas envisageable.
 
- soit je lance le soft de simu "en fond". J'avais déjà fait ça pour un autre projet avec un soft de simulation différent (Siman Arena pour ceux qui connaissent) je posais ce topic ici pour savoir si quelqu'un connaissait un autre moyen apparemment ce n'est pas le cas.
 
Pour les gens qui en aurait l'utilité j'explique la seconde solution. Il s'agit d'appeler le moteur du soft de simulation (pour Siman Arena c'est un fichier en .p) sur le modele de simulation via la commande system("model.p" ) et le programme laisse la main au soft le temps de la simu qui se déroule "en fond" au sens où on se sert du moteur mais on ne lance pas le .exe, l'interface graphique et tout ce qui pompe du temps. Une fois la simu terminée le soft rend la main au programme.
 
La principale difficulté (également la raison pour laquelle j'étais venu ici) c'est qu'il faut que les développeur aient prévu cette possibilité d'utiliser le moteur du soft sans l'interface graphique et il faut également les contacter pour connaitre un minimum la syntaxe qu'ils y ont affecté. Une fois qu'on a ça c'est bon.
 
En tous les cas merci à ceux qui ont répondu et m'ont permis d'y voir plus clair
 
Houelb

n°2162040
breizhbugs
Posté le 31-10-2012 à 00:01:51  profilanswer
 

Cedric_houelb a écrit :


Maintenant ma question devient "comment faire faire des choses au programme entre le moment où il est lancé et le moment où il se ferme". Dans mon cas ce sera 1) ouvrir un modele de simulation 2) faire tourner la simulation 3) enregistrer certaines choses 4) quitter.  


Ca ça dépend de quel genre de soft il s'agit:
- si c'est un programme console, il "suffit" de le creer en redirigeant les entrées/sorties
 
- Ca a plutôt l'air d'être un programme style windows avec GUI. Dans ce cas la sous windows sois le programme a quelque chose de prévu pour être automatiser (genre des arguments en ligne de commande, ne serait ce que pour ouvrir un fichier) et la il faut l'appeler avec les bons arguments
Sinon avec des outils comme winspy++ (je crois) il est capable d'enregistrer tout les messages windows envoyé par l'utilisateur (via clavier / souris) et de récupérer à quel handle de widget ils ont été envoyé et cela devrait te permettre de trouver les composants auquel envoyé les messages.
winspy++ doit utiliser les hooks genre JournalRecordProc: http://msdn.microsoft.com/en-us/li [...] 85%29.aspx ainsi que JournalPlaybackProc  
( bien sur cela suppose que la manip soit strictement identique pour chaque simulation )
 
Sinon peut être que des fonctions comme ChildWindowFromPoint EnumChildWindows FindWindowEx pourront t'aider dans la recherche des bouton à activer programmatiquement, et sendmessage/postmessage/postthreadmessage pour activer les dits boutons.


---------------
Seul Google le sait...
n°2162166
Cedric_hou​elb
Posté le 01-11-2012 à 10:54:23  profilanswer
 

Salut, merci Breizhbugs.
En effet il s'agit plus d'un programme avec interface graphique etc ... donc comme je le disais dans le message précédent (et comme tu le dis toi aussi) je vais demander aux dev de la boites qui a fait le soft  (en esperant qu'ils l'aient prévu) de me donner la syntaxe et l'appeler avec les bons arguments.


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

  Déclenchement automatique de programme par enregistrement de fichier

 

Sujets relatifs
Probleme importation fichier.sql trop volumineuxprogramme C
[Python] Programme débutantCompilation fichier C et H
Aide programme vbaprogramme qui reconnait une phrase afficher à l'écran
[API] utilisation bouton fait Segfault le programmeModifier un mot d'un fichier.txt avec Visual basic 2010
Java JAIN-SIP + enregistrementFaire télécharger un fichier en changeant le nom
Plus de sujets relatifs à : Déclenchement automatique de programme par enregistrement de fichier


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