Page 2 sur 2

Publié : sam. 05/nov./2005 9:39
par gnozal
Personnellement, je n'utilise pas RunProgram().
Je fais comme çà :

Code : Tout sélectionner

          StartupInfo.STARTUPINFO
          StartupInfo\cb = SizeOf(STARTUPINFO)
          StartupInfo\dwFlags = #STARTF_USESHOWWINDOW
          StartupInfo\wShowWindow = #SW_HIDE	
          ProcessInfo.PROCESS_INFORMATION
          If CreateProcess_(0, @CommandLine.s, 0, 0, 0, 0, 0, 0, @StartupInfo, @ProcessInfo) = 0
           ; Impossible de lancer CommandLine
          Else
            ProcessExitCode.l
            Repeat
              DoEvents() ; ne pas figer l'application pendant l'appel au programme externe
              GetExitCodeProcess_(ProcessInfo\hProcess, @ProcessExitCode)
            Until ProcessExitCode <> #STILL_ACTIVE
            If ProcessExitCode > 0
              Select ProcessExitCode
               ; gestion de l'exit code
              EndSelect
            EndIf
          EndIf

Publié : sam. 05/nov./2005 10:08
par Backup
DoEvents()
heu c'est du Visual Basic ça !

ou bien une lib laquelle ? 8O :lol:

Publié : sam. 05/nov./2005 10:17
par Chris
gnozal a écrit :Personnellement, je n'utilise pas RunProgram().
Je fais comme çà :

Code : Tout sélectionner

          StartupInfo.STARTUPINFO
          StartupInfo\cb = SizeOf(STARTUPINFO)
          StartupInfo\dwFlags = #STARTF_USESHOWWINDOW
          StartupInfo\wShowWindow = #SW_HIDE	
          ProcessInfo.PROCESS_INFORMATION
          If CreateProcess_(0, @CommandLine.s, 0, 0, 0, 0, 0, 0, @StartupInfo, @ProcessInfo) = 0
           ; Impossible de lancer CommandLine
          Else
            ProcessExitCode.l
            Repeat
              DoEvents() ; ne pas figer l'application pendant l'appel au programme externe
              GetExitCodeProcess_(ProcessInfo\hProcess, @ProcessExitCode)
            Until ProcessExitCode <> #STILL_ACTIVE
            If ProcessExitCode > 0
              Select ProcessExitCode
               ; gestion de l'exit code
              EndSelect
            EndIf
          EndIf
Je ne vois pas vraiment ce que ça apporte d'aller réinventer des commandes qui existent déjà.

Mais après tout, chacun fait comme il veut... :?

Publié : sam. 05/nov./2005 10:24
par gnozal
Dobro a écrit :
DoEvents()
heu c'est du Visual Basic ça !

ou bien une lib laquelle ? 8O :lol:
J'ai repris le nom VB car il résume bien la fonction.

On peut utiliser :

Code : Tout sélectionner

Procedure DoEvents() 
    msg.MSG 
    If PeekMessage_(msg,0,0,0,1) 
      TranslateMessage_(msg) 
      DispatchMessage_(msg) 
    Else 
      Delay(1) 
    EndIf 
EndProcedure
ou

Code : Tout sélectionner

Procedure DoEvents() 
  While WindowEvent(): Wend 
EndProcedure
Chris a écrit :Je ne vois pas vraiment ce que ça apporte d'aller réinventer des commandes qui existent déjà.
L'intérêt c'est que l'application n'est pas totalement figée (raffraîchissement des fenêtres etc...) en attendant la fin du programme appelé, ce qui est le cas avec RunProgram() qui en plus ne renvoie pas d'exit code.

Publié : sam. 05/nov./2005 10:47
par Chris
Gnozal a écrit :L'intérêt c'est que l'application n'est pas totalement figée (raffraîchissement des fenêtres etc...) en attendant la fin du programme appelé, ce qui est le cas avec RunProgram() qui en plus ne renvoie pas d'exit code.
Je n'avais jamais remarqué que l'application était "figée", sauf avec 1 ou 2 comme dernier paramètre.

Mais si tu le dis, c'est sûrement que tu l'as constaté. :)

Publié : sam. 05/nov./2005 10:57
par gnozal
Chris a écrit :Je n'avais jamais remarqué que l'application était "figée", sauf avec 1 ou 2 comme dernier paramètre.
Bien entendu avec le paramètre 1 : le programme ne répond plus avant que l'application appelée soit terminée.

Publié : dim. 06/nov./2005 11:58
par Flype
DoEvents() est présent dans la compil PBOSL.