Page 1 sur 1

Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 17:14
par SPH
Salut

j'ai un programme "A.exe" qui appelle un programme "B.exe".
Le programme A.exe se termine donc par :

Code : Tout sélectionner

RunProgram(B.exe","","")
End
Le probleme, c'est que "B.exe" est un peu gros et ne s'execute pas sur le champ. Du coup, on vois une demi seconde le bureau de windows...

Comment faire une transition propre ?

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 17:34
par Fig

Code : Tout sélectionner

RunProgram(B.exe","","")
Delay(2000)
End
Aucune idée si ça peut marcher, mais, tu as essayé ça ?

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 17:39
par SPH
Fig a écrit :

Code : Tout sélectionner

RunProgram(B.exe","","")
Delay(2000)
End
Aucune idée si ça peut marcher, mais, tu as essayé ça ?
Oui, et j'ai eu une fois une erreur (le B.exe a planté)

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 17:39
par MLD
Bonjour SPH
ceci m'est déjà arrivé.
il faut savoir si tu est le programmeur du programme B.exe.
si c'est le cas il te faut une fenêtre d'attente, qui disparait a la fin du chargement.

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 18:45
par falsam
Je ne sais pas si c'est la solution la plus satisfaisante mais ça devrait fonctionner

ExeA

Code : Tout sélectionner

Declare Start()
Declare RunExeB()
Declare Exit()

Start()

Procedure Start()
  OpenWindow(0, 0, 0, 0, 0, "EXE A", #PB_Window_SystemMenu | #PB_Window_Maximize ) 
  ButtonGadget(0, 10, 10, 80, 24, "Lance ExeB")
  
  BindGadgetEvent(0, @RunExeB())
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure RunExeB()
  Protected Run = RunProgram("exeB.exe", "EXEA", "", #PB_Program_Open)
    
  If Run    
    CloseProgram(Run)
    Delay(500)
    Exit()
  Else
    MessageRequester("Ooops", "ExeB.exe n'existe pas")
  EndIf
EndProcedure

Procedure Exit()  
  End
EndProcedure
ExeB

Code : Tout sélectionner

Declare Start()
Declare Exit()

;Si ce n'est pas exeA qui lance ce code alors fin du lancement
If ProgramParameter(0) <> "EXEA"
  End
Else  
  Start()  
EndIf

Procedure Start()    
  OpenWindow(0, 0, 0, 0, 0, "EXE B", #PB_Window_BorderLess | #PB_Window_Maximize | #PB_Window_BorderLess)
  ButtonGadget(0, 10, 10, 80, 24, "Close EXEB")
  
  BindGadgetEvent(0, @Exit())
  BindEvent(#PB_Event_CloseWindow, @Exit())
  
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Procedure Exit()  
  End
EndProcedure

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 18:54
par falsam
Ce sujet m’intéresse : Comment Exe B peut renvoyer des informations à Exe A ?

j'ai essayé avec une variable d'environnement :
-Exe B crée une variable d’environnement

Code : Tout sélectionner

SetEnvironmentVariable("DUMMY", "999")
-Exe A cherche à lire cette variable d'environnement après le lancement de Exe B

Code : Tout sélectionner

GetEnvironmentVariable("DUMMY")
mais hélas aucun résultat.

Re: Transition entre A.exe et B.exe

Publié : dim. 01/avr./2018 20:12
par Ar-S
J'ai testé avec un gros exe.
Lorsque le programme est détecté l'exe principale se ferme bien.

Code : Tout sélectionner

Global P$ ="P:\PROG\CyberlinkPhoto7\PhotoDirector7\PhotoDirector7.exe"
Global prog
Global.b exit

  If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StickyWindow(0,1)
    ButtonGadget  (1, 10, 60, 200, 30, "Fermer")
    AddWindowTimer(0,10,500)
    
      prog = RunProgram(P$,"","",#PB_Program_Open)
   
   
   Repeat
     Event = WaitWindowEvent(10)
     
     Select Event
         
       Case #PB_Event_Timer  
         Select EventTimer()
           Case 10
             Debug exit
             If IsProgram(prog) <> 0
               exit = 1
             EndIf  
           EndSelect
         
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 
              CloseWindow(0)
              End  
         EndSelect
            
     EndSelect
   Until Event = #PB_Event_CloseWindow Or exit = 1
   End
 EndIf



Re: Transition entre A.exe et B.exe

Publié : lun. 02/avr./2018 23:18
par PAPIPP
Bonjour à tous

@falsam pour échanger entre 2 prg

comme ceci il n'est pas nécessaire de créer un exécutable mais de lancer les 2 prg suivants en même temps.
prg test 1

Code : Tout sélectionner

;Programe # 1
;POUR PASSER_DES INFOS TEST 1 A TEST 2
;Programe # 1

OpenWindow(1,20,20,300,300,"Test 1",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(4, 120,250, 80, 25,"Test")
StringGadget(1,10,10,220,20,"")
StringGadget(2,10,40,220,20,"")
StringGadget(3,10,70,220,20,"")


Repeat
  ev = WaitWindowEvent()
  Select ev
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 4
          Text$="E:\temp\dummy.avi"
          Text2$="F:\dummy2.avi"
          Text3$="This is StrinGadget XX"
          hWnd = FindWindow_(0,"Test 2")         
          hWndEdit = FindWindowEx_(hWnd, 0, "edit", 0)
          hWndEdit2 = GetWindow_(hWndEdit,#GW_HWNDNEXT)
          hWndEdit3 = GetWindow_(hWndEdit2,#GW_HWNDNEXT)
          SendMessage_(hWndEdit,#WM_SETTEXT,0,@Text$)
          SendMessage_(hWndEdit2,#WM_SETTEXT,0,@Text2$)
          SendMessage_(hWndEdit3,#WM_SETTEXT,0,@Text3$)
;           ev = #PB_Event_CloseWindow

     
      EndSelect
  EndSelect
Until ev = #PB_Event_CloseWindow 


Prg test 2

Code : Tout sélectionner

;Programe # 2
;POUR PASSER_DES INFOS TEST 2 A TEST 1
;Programe # 2

OpenWindow(0,20,20,300,300,"Test 2",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(4, 120,250, 80, 25,"Test")
StringGadget(1,10,10,220,20,"")
StringGadget(2,10,40,220,20,"")
StringGadget(3,10,70,220,20,"")

Repeat
  ev = WaitWindowEvent()
  Select ev
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 4
          Text$="c:\temp\dummy3.avi"
          Text2$="c:\dummy3.avi"
          Text3$="This is StrinGadget 3"
          hWnd = FindWindow_(0,"Test 1")         
          hWndEdit = FindWindowEx_(hWnd, 0, "edit", 0)
          hWndEdit2 = GetWindow_(hWndEdit,#GW_HWNDNEXT)
          hWndEdit3 = GetWindow_(hWndEdit2,#GW_HWNDNEXT)
          SendMessage_(hWndEdit,#WM_SETTEXT,0,@Text$)
          SendMessage_(hWndEdit2,#WM_SETTEXT,0,@Text2$)
          SendMessage_(hWndEdit3,#WM_SETTEXT,0,@Text3$)
;           ev = #PB_Event_CloseWindow
         
      EndSelect
  EndSelect
Until ev = #PB_Event_CloseWindow

A+

Re: Transition entre A.exe et B.exe

Publié : mar. 03/avr./2018 0:25
par Ollivier
@Falsam

regarde les i/o possibles dans la librairie Process.
Il faut régler RunProgram avec option Open+ Write+ Read.

Puis échanger avec Read/Write ProgramData pour des infos en binaire.

Une simple chaîne de texte peut aussi être transmise sans pipe dans la chaîne parameter$ de RunProgram.

Re: Transition entre A.exe et B.exe

Publié : mar. 03/avr./2018 13:16
par falsam
Souci résolu sur le chat de Purebasic par G-Rom : Tout simplement une relation client serveur.

Re: Transition entre A.exe et B.exe

Publié : mar. 03/avr./2018 14:01
par Zorro

Re: Transition entre A.exe et B.exe

Publié : mar. 03/avr./2018 14:10
par falsam
Merci Zorro mais je souhaitais une solution sans API (j'ai oublié de le préciser. Desolé) pour que mon code fonctionne aussi sur mac os et linux.