terminateprocess() boucle problème - C++ - Programmation
Marsh Posté le 25-08-2011 à 18:42:03
Citation : comment se fait il qu'il execute la partie du code dans if(ligne2.compare(ligne1)!=0) alors que la condition n'est même pas remplit ? |
En clair, ça veut dire quoi "la condition n'est même pas remplie"?
A+,
Marsh Posté le 25-08-2011 à 18:45:51
bah en gros même si ligne2 est pareil que ligne1 il exécute quand même ce qui suit. Je sais pas si c'est très clair désolé je débute en prog
Marsh Posté le 26-08-2011 à 10:56:08
S'il exécute le code, c'est surement que ligne1 et ligne 2 ne sont pas identiques. A toi de tester et de voir pourquoi.
A+,
Marsh Posté le 26-08-2011 à 10:58:07
Ok je vais voir merci déjà de m'avoir confirmé cela. Bonne journée
Marsh Posté le 26-08-2011 à 12:29:16
Bonjour,
Y a que moi à trouver terminateprocess() hyper violent?
Pourquoi ne pas envoyer un ALT+F4 ou un WM_CLOSE programatiquement à l'application?
Marsh Posté le 26-08-2011 à 13:35:53
Oui, ça devrait être ExitProcess à priori.
A+,
Marsh Posté le 26-08-2011 à 18:05:24
Hello, je sais que j'arrive après après la bataille mais pour faire un truc propre il faudrait utiliser l'interface COM de powerpoint (enfin ça n'engage que moi), ce qui est assez chiant en C mais peut se faire assez simplement avec autoit.
J'ai bricolé ça rapide :
Code :
|
[edit] sinon la solution "barbare" marche aussi en autoit :
Code :
|
Marsh Posté le 26-08-2011 à 23:40:31
gilou a écrit : Oui, ça devrait être ExitProcess à priori. |
non exitprocess termine le processus courant, pas un autre...
+1 pour l'automation mais est-elle dispo juste avec le viewer ou faut-il tout powerpoint?
sinon je tenterais le WM_CLOSE avec SendMessage -> http://msdn.microsoft.com/en-us/li [...] 85%29.aspx et http://msdn.microsoft.com/en-us/li [...] 85%29.aspx
ce qui donnerait grosso merdo
SendMessage(Findwindows(NULL, "nom de ta fenetre powerpoint?" ), WM_CLOSE, 0, 0);
Marsh Posté le 27-08-2011 à 00:03:54
Effectivement, pas sûr que l'on puisse faire de l'automation avec seulement le viewer.
D'un autre côté je suis pas sûr non plus que la fenêtre du viewer a un titre.
Il doit y avoir moyen de bricoler un truc à base de EnumWindows et GetWindowThreadProcessId pour récupérer la handle de la fenêtre
[edit]
Code :
|
Ca a l'air de marcher (avec notepad en tout cas )
Marsh Posté le 27-08-2011 à 09:36:51
breizhbugs a écrit : |
Euh oui, j'avais lu la doc trop vite pour exitprocess
Ici, puisqu'on à le threadId dans la structure pi, faire un PostThreadMessage avec WM_QUIT devrait coller, non?
Bref, un truc comme:
ResumeThread(pi.hThread);
PostThreadMessage(pi.dwThreadId, WM_QUIT, 0, 0);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
A+,
Marsh Posté le 27-08-2011 à 12:55:27
Effectivement.
J'ai toujours été persuadé que PostThreadMessage ne marchait que pour les threads appartenant au processus lui même alors que rien ne l'indique dans la doc.
Marsh Posté le 27-08-2011 à 18:36:37
Non, mais dans un cadre général, il y a peut-être une question de droits sous Vista et W7 pour qu'il accepte les messages d'un autre programme.
A+,
Marsh Posté le 27-08-2011 à 19:29:15
gilou a écrit : Non, mais dans un cadre général, il y a peut-être une question de droits sous Vista et W7 pour qu'il accepte les messages d'un autre programme. |
Ah ce propos:
http://msdn.microsoft.com/en-us/li [...] 85%29.aspx
PostThreadMessage: When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied).
ainsi que:
http://blogs.msdn.com/b/vishalsi/a [...] vista.aspx
Marsh Posté le 25-08-2011 à 17:10:31
Bonjour,
J'ai un petit soucis avec mon code que je n'arrive pas à résoudre.
Tout d'abord le but de mon code est de récupérer dans un fichier texte le chemin d'accès d'un fichier et l'exécute. Il vérifie ensuite toutes les x secondes si le chemin a changé.Si non il continu à exécuter le fichier ,si oui il ferme l'ancien fichier et exécute le nouveau.
Je suis arrivé avec de l'aide sur les forums à tout faire mais je n'arrive pas à fermer le premier fichier exécuté lorsque l'on doit exécuté le nouveau.
Ma boucle n'est pas parfaite je sais si quelqu'un pourrait m'aiguiller ou m'expliquer qq trucs ça serait gentil.
Mon code :
De plus il y a un truc déjà qui me dérange dans ma boucle infini (while(true)) comment se fait il qu'il execute la partie du code dans if(ligne2.compare(ligne1)!=0) alors que la condition n'est même pas remplit ?
Merci.
Cordialement,