Transition entre A.exe et B.exe

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Transition entre A.exe et B.exe

Message 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 ?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Transition entre A.exe et B.exe

Message par Fig »

Code : Tout sélectionner

RunProgram(B.exe","","")
Delay(2000)
End
Aucune idée si ça peut marcher, mais, tu as essayé ça ?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Transition entre A.exe et B.exe

Message 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é)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Transition entre A.exe et B.exe

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transition entre A.exe et B.exe

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transition entre A.exe et B.exe

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Transition entre A.exe et B.exe

Message 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


~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Transition entre A.exe et B.exe

Message 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+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Transition entre A.exe et B.exe

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transition entre A.exe et B.exe

Message par falsam »

Souci résolu sur le chat de Purebasic par G-Rom : Tout simplement une relation client serveur.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Transition entre A.exe et B.exe

Message par Zorro »

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Transition entre A.exe et B.exe

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre