Question avec RunPogram()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Question avec RunPogram()

Message par Guimauve »

Comment passer plusieurs paramètres à un programme avec RunProgram?

Je fais comme ça dans le programme appellant :

param$ = "500" +Chr(0149)+ "400" +Chr(0149)+ "No" +Chr(0149)+ "Français" + Chr(0149)+"1"
RunProgram(GetExeDirectory() +"Aide\Aide.exe",param$,"")


Et j'essai de récupèrer les paramètres comme ça dans le programme appelé :

Parametre$ = ProgramParameter()
; "400•300•YES•Français•1"
LargeurFenetre = Val(StringField(Parametre$, 1, Chr(0149)))
HauteurFenetre = Val(StringField(Parametre$, 2, Chr(0149)))
OptionAffichage$ = StringField(Parametre$, 3, Chr(0149))
Language$ = StringField(Parametre$, 4,Chr(0149))
No_rubrique_afficher = Val(StringField(Parametre$, 5, Chr(0149)))


Dans le Débogeur param$ à bien 500•400•No•Français•1 comme valeur dans le programme appelant. Et Le programme appelé est bien lancé mais avec les valeur par défaul et non celles qui proviennent du programme appelant.

Je comprends pas pourquoi ça marche pas. Si Paramètre est une chaine de caractère je peux bien passe une chaine aussi longue que nécessaire.

#hein À l'aide

Merci à l'avance

A+
Guimauve
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

il faut appeller PogramParameter auttant de foi qu'il y a de parametre
LargeurFenetre = Val(ProgramParameter() )
HauteurFenetre = Val(ProgramParameter() )
OptionAffichage$ = ProgramParameter()
Language$ = ProgramParameter()
No_rubrique_afficher = Val(ProgramParameter() )

et param doi ressembler a ça :
param$ = "500 400 No Français 1" ; un espace permet de separer les different parametre

dit moi si sa marche, j'ai pas tester
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

dès qu'il y a un espace on passe au paramètres suivant.

pour récupérer tous les paramètes, espace compris, tu peux utiliser ce code :

Code : Tout sélectionner

    Txt.s = ProgramParameter()
    Param.s = ""
    If Txt
      Repeat
        Param = Param + " " + Txt
        If Txt
          Param = ProgramParameter()
        EndIf
      Until Txt = ""
    EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

C'est pas ça le problème. Au début de mon programme je dois faire un choix de démarrage entre un appel avec des paramètres et un démarrage avec un fichier .ini.

Et ça ne fonctionne pas le programme démarre avec les paramètres du fichier ini.

Je pense que la solution qui reste est d'aller réécrire le fichier ini du programme appellé avant de lancer.

A+
Guimauve
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

pourquoi ?

d'abord, tu charges le fichier ini avec les param par défaut, ensuite, tu lis les paramètres de lancement et tu changes les variables d'après tes paramètres :)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Guimauve,
j'ai fait un petit test en reprenant ton bout de code, et ça marche très bien!
Tu es sûr que le problème ne vient pas d'une autre partie de ton prog?
Peut-être que tu as oublié ou mal placé un test, et qu'il charge le "ini" même s'il a reçu des paramètres... :roll:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Bref ça ressemblait à ça. Si ProgramParameter() est non null on ajuste le programme avec les paramètres si non on charge le fichier ini. Si le fichier ini n'existe pas, créer le fichier ini, redémarrer le programme puis fermer le programme qui à créer le fichier ini. Si le fichier existe l'ouvrir et ajuster les valeurs.

Code : Tout sélectionner

If ProgramParameter() <> ""
     LargeurFenetre = Val(ProgramParameter())
     HauteurFenetre = Val(ProgramParameter())
     OptionAffichage$ = ProgramParameter()
     Language$ = ProgramParameter()
     No_rubrique_afficher = Val(ProgramParameter())
     
Else
     
     If OpenPreferences("Aide.ini") = 0
          ; Le fichier n'existe pas, on créer celui par défaut
          If CreatePreferences("Aide.ini")
               WritePreferenceLong("Window Width", 400)
               WritePreferenceLong("Window Height", 300)
               WritePreferenceString("Always on top", "Yes")
               WritePreferenceString("Language", "Français")
               WritePreferenceLong("Default Help Topic", 1)
               ClosePreferences()
          EndIf
          ; Le fichier Aide.ini est créé. On relance le programme.
          RunProgram(GetFilePart(GetExeName()))
          ; Puis on ferme le programme qui à généré le fichier Aide.ini
          ; afin de ne pas avoir 2 programmes qui tournent en même temps.
          End
          
     Else
          
          LargeurFenetre = ReadPreferenceLong("Window Width", 400)
          HauteurFenetre = ReadPreferenceLong("Window Height", 300)
          OptionAffichage$ = ReadPreferenceString("Always on top", "Yes")
          Language$ = ReadPreferenceString("Language", "Français")
          No_rubrique_afficher = ReadPreferenceLong("Default Help Topic", 1)
          ClosePreferences()
     EndIf
EndIf
Est-ce qu'il y a quelqu'un qui voit l'erreur ?

A+
Guimauve
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Tu as complètement changé de synthaxe depuis le 1er post :roll:
Comment est-ce que tu construit la ligne de commande dans le prog appelant, maintenant ?
If ProgramParameter() <> ""
avec ça, le 1er paramètre est perdu, tu en a bien tenu compte?
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Tu as complètement changé de synthaxe depuis le 1er post
Pas vraiment, j'avais juste copier la partie de code où je croyais à problème.

Et non, j'ai pas pensé que j'allais perdre le premier paramètre en faisant comme ça.

Je vais être obliger de faire autrement.

Je vous donne des nouvelles.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Je l'ai eu ... j'ai joué du coude un peu mais bon ça marche.

Dans le programme appelant :

Code : Tout sélectionner

Case #Aide
    Mastername$ = ReplaceString(GetExeName(), Chr(32), Chr(0149)) 
    param$ = "Slave " + Mastername$ + " 500 400 No " + langue$ + " 1"
    RunProgram(GetExeDirectory() + "Aide\Aide.exe",param$,"")
Et dans le programme appelé :

Code : Tout sélectionner

If ProgramParameter() = "Slave"
     Master$ = ReplaceString(ProgramParameter(), Chr(0149), Chr(32)) 
     LargeurFenetre = Val(ProgramParameter())
     HauteurFenetre = Val(ProgramParameter())
     OptionAffichage$ = ProgramParameter()
     Language$ = ProgramParameter()
     No_rubrique_afficher = Val(ProgramParameter())
     
Else
     
     If OpenPreferences("Aide.ini") = 0
          ; Le fichier n'existe pas, on créer celui par défaut
          If CreatePreferences("Aide.ini")
               WritePreferenceLong("Window Width", 400)
               WritePreferenceLong("Window Height", 300)
               WritePreferenceString("Always on top", "Yes")
               WritePreferenceString("Language", "Français")
               WritePreferenceLong("Default Help Topic", 1)
               ClosePreferences()
          EndIf
          ; Le fichier Aide.ini est créé. On relance le programme.
          RunProgram(GetFilePart(GetExeName()))
          ; Puis on ferme le programme qui à généré le fichier Aide.ini
          ; afin de ne pas avoir 2 programmes qui tournent en même temps.
          End
          
     Else
          
          LargeurFenetre = ReadPreferenceLong("Window Width", 400)
          HauteurFenetre = ReadPreferenceLong("Window Height", 300)
          OptionAffichage$ = ReadPreferenceString("Always on top", "Yes")
          Language$ = ReadPreferenceString("Language", "Français")
          No_rubrique_afficher = ReadPreferenceLong("Default Help Topic", 1)
          ClosePreferences()
     EndIf
EndIf
Maintemant que ça marche, je dois trouver comment surveiller si le programme appelant tourne ou non pour que la fermeture des programmes soit synchronisé.

A+
Guimauve
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

bon, autre chose au sujet du fichier .ini

il est inutile de relancer le programe si le fichier .ini n'existe pas.
c'est tout simple, pour le chargement, il faut absolument pas mettre de test pour vérifier la présence du fichier.

donc il faut écrire un truc du genre :

Code : Tout sélectionner

openpreferences("truc.ini")
X = readpreferencelong("X", 128)
closepreferences()
et si le fichier n'a pas pu être ouvert car il n'existe pas ou si l'entrée "X" n'existe pas dans le fichier, x prendra la valeur par défaut qui est ici 128.
il ne faut pas se préocuper de savoir si le fichier existe ou pas pour la lecture des preferences, il me semble d'ailleur que ce point est indiquée dans l'aide ;)
tu fais compliqué pour rien :D

sinon, pour le programparameter(), il faut l'enregistrer dans un string et faire le test après sur ce string, voir mon exemple plus haut.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Oui je sais comment ça marche les préférences.

Sauf qu'avec la méthode que j'utilise j'ai pas besoin d'avoir un programme d'installation qui va créer le fichier ini pour donner la chance à tout le monde d'ajuster les paramètres. Le programme le fait lui même. Et même si le fichier existe mais qu'il est vide par exemple et bien ça va fonctionner quand même.

Si non je vais être obliger d'aller modifier les paramètres par défaut dans l'exe et j'aime vraiment pas ça. Je préfère le faire à partir de l'externe à l'aide d'un fichier texte.

Une autre raison pour laquelle le fichier ini est créer, c'est qu'à la fin du programme je mets le fichier ini à jour. Si le programme est lancer avec un raccourci et il va s'exécuter avec les derniers paramètres qu'on lui a donné. Ce qui me semble logique.

C'est mon caprice à moi.

A+
Guimauve
Répondre