Page 1 sur 1
[RESOLU] Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 6:28
par PhM
Bonjour,
Il semblerait qu'il soit possible d'envoyer des paramètres d'un programme principal à un autre pour son exécution par la cde RunProgram() avec paramètres.
Malgré les explications de la doc. en ligne, je n'arrive pas à comprendre le principe de fonctionnement de l'envoi et la réception.
Je souhaiterai envoyer au lancement d'un programme auxiliaire (aux.exe) piloter par un programme principal (princ.exe) des informations comme :
"LFMT", "1", "oui" qui seraient lues et interpréter par le programme receveur.
- De quelle manière envoyer ces "instructions" depuis princ.exe ?
- Quelle est la méthode pour que le prg receveur (aux.exe) utilise ces données lors de son lancement ?
Merci pour vos éclaircissements.
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 7:13
par microdevweb
Bonjour avec SetEnvironmentVariable et GetEnvironmentVariable
exemple receiver
Code : Tout sélectionner
Define a.s
a = GetEnvironmentVariable("a")
If Len(a)
MessageRequester("PRG1","a = "+a)
Else
MessageRequester("PRG1","a was no seted")
EndIf
exemple sender
Code : Tout sélectionner
SetEnvironmentVariable("a","hello world")
RunProgram("prg1.exe")
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 8:01
par Marc56
Programme émetteur:
Tous les paramètres dans le champs 2 et par défaut séparés par un espace
Programme récepteur:
CountProgramParameters() et ProgramParameter(i)
Premier paramètre 0
Code : Tout sélectionner
For i = 0 To CountProgramParameters()
Debug ProgramParameter(i)
Next
Cela permet aussi de traiter les fichiers reçus sur l'icône du programme lors d'un drag and drop
C'est comme en C: nombre de paramètres et tableau des paramètres, sauf qu'en PB il n'y a pas besoin de le préciser.
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 8:18
par PhM
Bonjour et merci pour vos réponses "éclairs"...
Je teste cela et je vous tiens au courant !
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 14:38
par PhM
Bon, pour le moment, cela ne fonctionne pas trop !
Voici mes lignes de commandes :
Programme émetteur :
Code : Tout sélectionner
iaco$ = "LFKC"
avion$ = "Takeoff"
RunProgram("PHM\OACI\Fiche_airport.exe", iaco$ + " " + avion$, "")
ou, qui ne fonctionne pas mieux !
Code : Tout sélectionner
ID1 = RunProgram("PHM\OACI\Fiche_airport.exe", "LFKC Takeoff" , "")
Programme récepteur (Fiche_airport.exe) :
Code : Tout sélectionner
;Premières lignes du programme récepteur
For i = 0 To CountProgramParameters()
Debug ProgramParameter(i)
Next
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
Le programme récepteur s'ouvre mais, il est visible que les paramètres n'ont pas été reçus ?
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 15:29
par PhM
Cela évolu !
Les paramètres sont bien reçus, j'ai vérifier sur le programme récepteur en ajoutant :
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
If OpenConsole()
PrintN("Code airport : " + iaco$)
PrintN("Code Avion : " + avion$ + ".png")
Delay(8000)
CloseConsole()
EndIf
avion$ = avion$ + ".png"
;avion$ = "Takeoff.png"
;iaco$ = "LFKC"
Mais, le programme ne prends pas en compte les deux variables reçues alors, qu'en enlevant les 2 point-virgules ensuite, cela fonctionne normalement

Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 16:15
par Marc56
Mais, le programme ne prends pas en compte les deux variables reçues alors, qu'en enlevant les 2 point-virgules ensuite, cela fonctionne normalement
Je ne comprends pas bien.
Il manque le reste du programme, mais je suppose que tu sais que ce qui est après une commande Debug est ignoré une fois compilé en EXE donc préférer MessageRequester() plutôt qu'un éventuel Debug avions$ qui n'affichera rien.
Donc
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
; If OpenConsole()
; PrintN("Code airport : " + iaco$)
; PrintN("Code Avion : " + avion$ + ".png")
; Delay(1000)
; CloseConsole()
; EndIf
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = avion$ + ".png"
;avion$ = "Takeoff.png"
;iaco$ = "LFKC"
MessageRequester("", avion$ + #CRLF$ + iaco$)
Code : Tout sélectionner
---------------------------
---------------------------
Takeoff.png
LFKC
---------------------------
OK
---------------------------
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 16:51
par PhM
C'est complètement fou ???
Le reste du programme ne devrait pas te donner beaucoup d'informations sachant que :
Cela fonctionne comme cela :
Code : Tout sélectionner
;iaco$ = ProgramParameter(0)
;avion$ = ProgramParameter(1)
;avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = "Takeoff.png"
iaco$ = "LFBT"
Cela ne fonctionne plus comme cela :
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
;avion$ = "Takeoff.png"
;iaco$ = "LFBT"
Et, cela ne fonctionne plus comme cela :
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = "Takeoff.png"
iaco$ = "LFBT"
Alors, que j'écrase les variables reçues !
Et, dans ce dernier cas, je visualise aussi les variables en entrée.
J'ai aussi tenté de modifier les variables envoyées, sans plus de succès :
Code : Tout sélectionner
SENDiaco$ = ProgramParameter(0)
SENDavion$ = ProgramParameter(1)
avion$ = SENDavion$ + ".png"
MessageRequester("", SENDiaco$ + #CRLF$ + SENDavion$)
avion$ = SENDavion$
iaco$ = SENDiaco$
Je pense que je vais passer par un fichier *.ini depuis l'émetteur pour l'exploiter par le récepteur sans problème. Mais c'est dommage quand même...
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 17:13
par Marc56
Tu peux tester dans l'IDE la réception de paramètres comme s'ils avaient été envoyés par un autre programme, ça simplifie de dév:
Compilateur >
Options du Compilateur >
Compiler/Exécuter >
Paramètres de l'exécutable >
et là tu mets les paramètres séparés par un espace
Takeoff LFBT
Ton code
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
Affiche bien
Code : Tout sélectionner
---------------------------
Takeoff
LFBT.png
---------------------------
OK
---------------------------
Dans tes exemples tu ne fais pas d'affichage final
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
; N'affiche que .png si aucun paramètre n'est passé (normal)
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = "Takeoff.png"
iaco$ = "LFBT"
; Ne pas oublier de réafficher...
; Affichera bien les deux chaines puisque réatualisées
MessageRequester("", iaco$ + #CRLF$ + avion$)
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 17:51
par PhM
Cela ne change rien. Dans les deux cas ci-dessous, les deux messages s'affichent correctement mais :
Dans ce premier cas, cela ne fonctionne pas :
Code : Tout sélectionner
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = "Takeoff.png"
iaco$ = "LFBT"
MessageRequester("", iaco$ + #CRLF$ + avion$)
dans celui-ci, cela ne fonctionne toujours pas avec le premier message vide, évidement et le deuxième rempli :
Code : Tout sélectionner
;iaco$ = ProgramParameter(0)
;avion$ = ProgramParameter(1)
;avion$ = avion$ + ".png"
MessageRequester("", iaco$ + #CRLF$ + avion$)
avion$ = "Takeoff.png"
iaco$ = "LFBT"
MessageRequester("", iaco$ + #CRLF$ + avion$)
On dirait que le fait de recevoir les données de l'émetteur annule la valeur des variables avion$ et iaco$.
Ce dernier exemple, par contre, fonctionne lorsque je lance directement ce programme récepteur sans l'appel précédent de l'émetteur !
Pour rappel, l'émetteur envoi cela :
Code : Tout sélectionner
avion$ = "Takeoff"
ID1 = RunProgram("PHM\OACI\Fiche_airport.exe", iaco$ + " " + avion$, "")
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mar. 11/févr./2020 18:26
par case
Salut
a compiler en "params.exe"
Code : Tout sélectionner
OpenConsole("")
a=CountProgramParameters()
If a
For param=1 To a
PrintN( ProgramParameter() )
Next
Else
PrintN("no params")
EndIf
Input()
a sauvegarder et executer dans le meme dossier que params.exe
Code : Tout sélectionner
RunProgram("params.exe","/test /lol test "+Chr(34)+"ceci est un texte contenant des espaces"+Chr(34),"")
Re: Envoi de paramètres d'un *.exe à un autre *. exe ?
Publié : mer. 12/févr./2020 6:27
par PhM
Bonjour,
J'ai trouvé (

) !
Depuis le départ, la méthode de Marc est correct mais, c'est Case qui m'a mis sur la piste :
Il faut que les programmes émetteur des paramètres et récepteur des paramètres
soient dans le même dossier.
Et, ce n'était pas le cas hier !
Pourtant, les chemins étaient indiqués et le récepteur recevait bien les paramètres, mais cela ne suffit donc pas !
Une fois déplacé, tout fonctionne normalement.
Merci à tous pour votre aide
L'émetteur envoie cela :
Code : Tout sélectionner
iaco$ = "LFMT"
avion$ = "Takeoff"
RunProgram("Fiche.exe", iaco$ + " " + avion$, "")
Et, le récepteur (Fiche.exe) reçoit et traite cela (dans le même dossier):
iaco$ = ProgramParameter(0)
avion$ = ProgramParameter(1)
avion$ = avion$ + ".png"
Sans avoir recours à : MessageRequester("", iaco$ + #CRLF$ + avion$)
Re: [RESOLU] Envoi de paramètres d'un *.exe à un autre *. ex
Publié : mer. 12/févr./2020 8:33
par Marc56
Depuis le départ, la méthode de Marc est correcte
Sauf mention contraire, je teste toujours ce que je poste
Il faut que les programmes émetteur des paramètres et récepteur des paramètres soient dans le même dossier.
Non (heureusement, car ça limiterait les possibilités)
Simplement si le programme qui reçoit les données est dans un répertoire différent de celui qui les envoie, il faut mettre le chemin complet.
Ex:
Code : Tout sélectionner
iaco$ = "LFMT"
avion$ = "Takeoff"
RunProgram("c:\tmp\Fiche.exe", iaco$ + " " + avion$, "")
Les paramètres sont passés dans des variable d'environnement donc le chemin n'a pas d'importance.
Ton premier exemple
RunProgram("PHM\OACI\Fiche_airport.exe"
utilisait un chemin relatif (pas de lecteur) et non pas absolu.
Sans avoir recours à : MessageRequester("", iaco$ + #CRLF$ + avion$)
Ça c'est simplement pour afficher le résultat dans l'exemple de code.
MessageRequester à la place de Debug, car le programme Fiche.exe étant compilé, les commandes Debug sont ignorées.
