Page 1 sur 2
End MonCodeDeRetour ; comment çà marche ?
Publié : mer. 02/nov./2005 20:52
par Flype
où je sais plus programmer, ou il y a un problème !
comment on se sert de la commande End pour faire en sorte que l'exécutable généré retourne un code de retour réutilisable dans un autre programme quand on fait RunProgram() ?
par exemple un programme bidon qu'on compile et appelle rc.exe :
Code : Tout sélectionner
; code de retour
ExitCode.l = MessageRequester("test","test",#PB_MessageRequester_YesNoCancel|#MB_SETFOREGROUND)
; fin
End ExitCode
et un programme tout aussi bidon qui appelle rc.exe :
Code : Tout sélectionner
rc = RunProgram("rc.exe","","",1|2)
Debug rc ; manifestement ce n'est pas mon code de retour d'origine

je n'ai pas trouvé comment on fait...
Publié : mer. 02/nov./2005 20:58
par Flype
cool j'ai trouvé :
Code : Tout sélectionner
; exécutable
processId.l = RunProgram("rc.exe","","",1|2)
; code de retour
If GetExitCodeProcess_(processId,@ExitCode.l)
MessageRequester("code de retour",Str(ExitCode))
EndIf
Publié : mer. 02/nov./2005 21:05
par nico
Encore un truc à savoir en plus, merci Flype!

Publié : mer. 02/nov./2005 21:57
par Droopy
Merci Flype, je m'étais cassé les dents sur le même problème.
Enfin résolu

Publié : jeu. 03/nov./2005 12:54
par Chris
Ben non, Flype!
Désolé, mais ça ne résoud pas le problème initial qui est "
comment on se sert de la commande End pour faire en sorte que l'exécutable généré retourne un code de retour...".
Le code que tu donnes fonctionne, il n'y a pas de doute, mais "End" n'y apparaît pas.
Ben oui

Publié : jeu. 03/nov./2005 14:06
par Droopy
Publié : jeu. 03/nov./2005 14:42
par Chris
Publié : jeu. 03/nov./2005 15:08
par Droopy
Code : Tout sélectionner
; code de retour
ExitCode.l = MessageRequester("test","test",#PB_MessageRequester_YesNoCancel|#MB_SETFOREGROUND)
; fin
End ExitCode
la dernière commande est bien End non ?
Publié : jeu. 03/nov./2005 15:11
par Chris
Oui, seulement, cette partie là est dans la question, et pas dans la réponse
Flype a écrit :où je sais plus programmer, ou il y a un problème !
comment on se sert de la commande End pour faire en sorte que l'exécutable généré retourne un code de retour réutilisable dans un autre programme quand on fait RunProgram() ?
par exemple un programme bidon qu'on compile et appelle rc.exe :Code:
; code de retour
ExitCode.l = MessageRequester("test","test",#PB_MessageRequester_YesNoCancel|#MB_SETFOREGROUND)
; fin
End ExitCode
et un programme tout aussi bidon qui appelle rc.exe :Code:
rc = RunProgram("rc.exe","","",1|2)
Debug rc ; manifestement ce n'est pas mon code de retour d'origine
je n'ai pas trouvé comment on fait...
Publié : jeu. 03/nov./2005 17:26
par Droopy
Bien vu, j'avais pas vu

Publié : jeu. 03/nov./2005 20:47
par Flype
Je comprends rien a ce que vous dites.
Au départ je pensais que End [ExitCode] ne fonctionnait pas correctement, puisque d'une manière ou d'une autre je n'arrivais pas à récupérer cet ExitCode depuis un autre source.
Mais en fait tout va bien, End [ExitCode] fait son travail correctement, c'est RunProgram qui devrait intégrer un nouvel argument (un pointeur sur une variable pour stocker le code de retour).
peut etre à mettre dans la wishlist.

Publié : jeu. 03/nov./2005 22:10
par Chris
Ben oui, parce qu'en fait, le ExitCode, tu peux le récupèrer avec un GetExitCodeProcess_(), mais c'est pas vraiment le but.
Il faudrait pouvoir le récupérer, soit avec le RunProgram(), soit avec une autre fonction, mais qui soit incluse dans Pure.
Je me suis amusé à faire ça, tout à l'heure:
Code : Tout sélectionner
;- Programme à compiler : "Test.exe"
OpenWindow(0, 100, 100, 100, 100, #PB_Window_SystemMenu, "Test.exe")
Select MessageRequester("Test.exe", "Voulez vous terminer ce programme ?", #MB_OKCANCEL|#MB_ICONQUESTION)
Case #IDOK
End 100
EndSelect
Repeat : Until WaitWindowEvent() = #PB_EventCloseWindow
End
Code : Tout sélectionner
;- Programme pour tester "Test.exe"
processID = RunProgram("Test.exe", "", "", 1)
While code <> 100 : GetExitCodeProcess_(processID, @code.l) : Wend
MessageRequester("Fini", "Le programme ''Test.exe'' est terminé")
End
Publié : ven. 04/nov./2005 21:35
par Flype
oui on est bien d'accord Chris - par contre RunProgram("Test.exe","","",1) devrait être RunProgram("Test.exe","","",0) sinon ton test ne sert à rien ( 1 = on attends la fin du program, 0 = exécution en tache de fond )

Publié : ven. 04/nov./2005 21:41
par Chris
Ah oui, tiens....
J'avais pas fait gaffe!
Bref, l'important, c'est quand même qu'il manque quelque chose pour la récupérer, cette valeur retournée par End
Publié : ven. 04/nov./2005 21:44
par Flype
Tout à fait d'accord
