econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 2008
-
16 sept. 2005 à 16:21
dede38440
Messages postés7Date d'inscriptionvendredi 1 juillet 2011StatutMembreDernière intervention24 août 2014
-
28 juin 2011 à 14:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
dede38440
Messages postés7Date d'inscriptionvendredi 1 juillet 2011StatutMembreDernière intervention24 août 2014 28 juin 2011 à 14:09
Merci ! Bien expliqué, facile à personnaliser.
Slee84
Messages postés5Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention 2 avril 2008 25 mai 2007 à 11:41
Bonjour,
j'ai modifié la source présentée en prenant comme séparateur le caractère "" qui précèdera les noms de paramêtres.
Ce détail permet le passage des parametres dont les valeurs contiennent des espaces.
Rien de bien énorme en somme...
commande : toto.exe \PARAM1=mon Test \PARAM2=Cool \PARAM3=ALFRED
ou toto.exe \PARAM1:mon Test \PARAM2:Cool \PARAM3:ALFRED
l'utilisation reste la même : sRecupererParamLigneCommande("PARAM1")
Function sRecupererParamLigneCommande(ByVal sNomParametre As String) As String
Dim iPos As Integer
Dim iposFin As Integer
' on recherche le nom de parametre
iPos = InStr(Command$, sNomParametre)
If iPos > 0 Then
iposFin = InStr(iPos, Command$, "")
If iposFin > 0 Then
' on a un autre paramètre derriere le paramètre
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre) + 1, iposFin - iPos - Len(sNomParametre) - 1).Trim(" ")
Else
' on est a la fin de la ligne de parametres
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre) + 1).Trim(" ")
End If
Else
sRecupererParamLigneCommande = ""
End If
End Function
cs_miata
Messages postés86Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention19 août 2008 7 mars 2007 à 14:37
Merci !
pbeauducel
Messages postés2Date d'inscriptionlundi 13 novembre 2000StatutMembreDernière intervention 9 octobre 2008 7 mars 2007 à 11:45
Bonjour, par besoin j'ai ecrit cette class qui me permet de recupere les parametres de la ligne de commande.
Chaque parametres est placés dans une collection.
pour faire simple elle fait ceci:
Ligne de commande : "-F = "chemin + nom de fichier" -f=toto.txt -bidule
Param 1 = -F
param 2 = chemin + nom de fichier
param 3 = -f
param 4 = toto.txt
param 5 = -bidule
voici mon code si cela peut servir ;-)
Option Explicit
Private ArgCol As New Collection
' 1 = Juste pour executer dans VB, sinon 0
Const DebugCMD As Boolean = 1
Private Sub Class_Initialize()
Dim CmdL As String
If DebugCMD = 0 Then
Call ArgCol.Add(Command()) ' Recupere la ligne de commande
Else
' Ma ligne de commande pour debugage
CmdL "-F " + Chr(34) + "C:\DXFCAM\Escalier\S2\LIMONS\LIM002I1.DXF" + Chr(34)
CmdL = CmdL + " -F=" + Chr(34) + "C:\DXF CAM\Escalier\S2\LIMONS\LIM002I2.DXF" + Chr(34)
Call ArgCol.Add(CmdL)
End If
' Analyse la ligne de commande
Call ArgColInit(ArgCol.Item(1))
End Sub
Private Sub Class_Terminate()
Set ArgCol = Nothing
End Sub
' **************************************
' Retourne la ligne de commande analysée
' **************************************
Public Function LineCmd() As String
LineCmd = ArgCol.Item(1)
End Function
' ***********************************************
' Retourne un parametre n de la ligne de commande
' ***********************************************
Public Function Item(ByVal NumArg As Long) As String
Item = ArgCol.Item(1 + NumArg)
End Function
' *******************************************************
' Retourne le nombre de parametre de la ligne de commande
' *******************************************************
Public Property Get Nb_Arg() As Long
Nb_Arg = ArgCol.Count - 1
End Property
' **************************************************
' Analyse de la ligne de commande passe en parametre
' **************************************************
Private Sub ArgColInit(ByVal chaine As String)
Dim Count As Long
Dim Mode As Long
Dim CodeAscii As String
Dim parm As String
' Coupe a chaque espace et stocke le mot dans une collection et
' toute chaine entre guillemet
parm = ""
Mode = 0
For Count = 1 To Len(chaine)
CodeAscii = Mid(chaine, Count, 1) ' Lit un caractere
If Mode = 0 Then ' Le mode 0, coupe a chaque espace
' --------------------------------
If CodeAscii = "=" Then CodeAscii = " " ' Elimine le symbole =
' Si espace ou guillemet
If CodeAscii " " Or CodeAscii Chr(34) Then
If CodeAscii Chr(34) Then Mode 1 ' Si guillemet de debut passe en mode 1
Call Memorise_Param(parm) ' Memorise le parametre
Else
parm = parm + CodeAscii ' Ajoute un caractere au parametre
End If
Else ' le Mode 1, coupe a chaque guillement
' ------------------------------------
If CodeAscii = Chr(34) Then ' Si guillemet de fin repasse en mode 0
Mode = 0
Call Memorise_Param(parm) ' Memorise le parametre
Else
parm = parm + CodeAscii ' Ajoute un caractere au parametre
End If
End If
Next Count
Call Memorise_Param(parm) ' Memorise le dernier parametre
End Sub
Public Sub Memorise_Param(ByRef chaine As String)
If chaine <> "" Then ' Memorise le parametre si non nul
Call ArgCol.Add(chaine) ' Dans une collection
chaine = "" ' Efface le parametre
End If
End Sub
cs_miata
Messages postés86Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention19 août 2008 16 févr. 2007 à 20:21
Bonjour,
Le code tourne super bien, mais j'ai prob.
Fait clic droit sur un fichier > Oubrir avec > votre EXE
sa renverra :
mon.exe "C:\Le\Chemin du fichier\dans son dossier"
Il y a des espaces dans la commande envoyé, et ton code limite à chaque espace, comment récupérer la valeur entre guillemet ?
cs_nihaoma
Messages postés140Date d'inscriptionjeudi 2 mai 2002StatutMembreDernière intervention 2 février 2010 14 févr. 2006 à 14:00
heu, laissez tomber, j'ai poser la question sans réfléchir, mais il me suffit en fait de lire le contenu de Command$ pour y répondre.....
désolé pour le spam inutile...
cs_nihaoma
Messages postés140Date d'inscriptionjeudi 2 mai 2002StatutMembreDernière intervention 2 février 2010 14 févr. 2006 à 13:55
bonjour,
dans le meme esprit, j'ai une petite question,
grace à une bidouille avec la Registry, mon code est appelé quand on clic droit sur un fichier, avec en argument le Path du fichier en question (code.exe %1). Le problème, c'est que je ne connais pas le nom utiliser pour décrir l'argument, est-ce que quelqu'un pourait m'aider svp ?
merci
NiHaoMa
cs_franckydeluka
Messages postés228Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention 4 janvier 20081 26 janv. 2006 à 14:40
Salut !!
Ah OK je vois ce que tu veux dire.
En fait tu peux mettre autant d'arguments que tu le souhaites mais pour plus de clarté et de simplicité il vaut mieux se limiter car tu es obligé de les définir 1 par 1.
Si tu veux faire quelque chose de plus important et configurable alors il vaut mieux utiliser un fichier de configuration dans le style fichier INI.
voilà bonne prog !!
++
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 20062 24 janv. 2006 à 16:05
Merci pour la rapidité de ta réponse !
Ca fontionne bien ! !! 10/10
Dans ton exemple, pour gèrer le passages de plusieurs arguments tu fais :
param = sRecupererParamLigneCommande("/L=")
MsgBox (param)
param = sRecupererParamLigneCommande("/M=")
MsgBox (param)
...
Peut-on ne plus utiliser le L= M= ?
S'il y a n arguments, comment le gère t'on ?
Merci
;o)
cs_franckydeluka
Messages postés228Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention 4 janvier 20081 24 janv. 2006 à 14:59
Bonjour,
Je fais un exemple très simple parce que c'est vrau que ça peut paraître un peu obscur:
Premièrement ouvrir un projet vierge VB6, puis y copier/coller les fonctions "sRecupererParamLigneCommande" ainsi que "Form_Load" suivantes :
Function sRecupererParamLigneCommande(sNomParametre As String) As String
Dim iPos As Integer
Dim iposFin As Integer
' on recherche le nom de parametre
iPos = InStr(Command$, sNomParametre)
If iPos > 0 Then
iposFin = InStr(iPos, Command$, " ")
If iposFin > 0 Then
' on a un blanc derriere le parametre
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre), iposFin - iPos - Len(sNomParametre))
Else
' on est a la fin de la ligne de parametres et l'on n'a pas de blancs
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre))
End If
Else
sRecupererParamLigneCommande = ""
End If
End Function
Private Sub Form_Load()
Dim param As String
param = sRecupererParamLigneCommande("/L=")
MsgBox (param)
End Sub
compiler ensuite le programme et le mettre sur C:\ (il s'appelle par défaut Project1.exe) puis l'appeler dans "Démarrer/éxécuter" comme ceci:
C:\Project1.exe /L=FRANCAIS
Le programme doit afficher dans une Msgbox "FRANCAIS" pour dire qu'il a bien pris en compte l'option FRANCAIS.
Voilà tout simplement ;-)
++
cs_salazar
Messages postés241Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention19 février 20062 24 janv. 2006 à 14:06
Bonjour,
Il parait très intéressant ton programme avec passage d'arguments, mais j'éprouve quelques difficultés pour le faire fonctionner avec la commande EXECUTER de windows.
Demarrer/executer/... et là je tappe ton programme Lig_Cde.exe ca marche.
Si j'ajoute des arguments avec différentes syntaxes, ca ne marche plus :
Lig_Cde.exe -play
Lig_Cde.exe /play
Lig_Cde.exe \play
Lig_Cde.exe play
Que faut il exactement taper ? Il y a une étape que je n'ai pas bien compris. Pourriez vous m'expliquer sur un exemple concret...
Merci.
toopix
Messages postés30Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention16 avril 2010 5 déc. 2005 à 11:50
apparement je suis encore plus debutant que débutant, alors est ce que quelqu'un pourrait m'expliquer comment faire si je veux programmer des parametres à mon programme en VB6.
Parce que j'avoue j'ai pas tout saisi.
Merci d'avance.
toopix
Messages postés30Date d'inscriptionmercredi 2 novembre 2005StatutMembreDernière intervention16 avril 2010 5 déc. 2005 à 11:50
apparement je suis encore plus debutant que débutant, alors est ce que quelqu'un pourrait m'expliquer comment faire si je veux programmer des parametres à mon programme en VB6.
Parce que j'avoue j'ai pas tout saisi.
Merci d'avance.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 23 sept. 2005 à 15:46
Ne pas utiliser la fonction Split(), je pense que tu as tord .. c'est bien plus efficace ... code plus court et plus rapide...
Christophe
cs_franckydeluka
Messages postés228Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention 4 janvier 20081 23 sept. 2005 à 15:37
j'ai mis à jour ma source en simplifiant grandement le code !! Dites-moi ce que vous en pensez..
Merci à tous en tout cas !!
Je n'y ai pas mis la fonction Split car j'y ai préféré la fonction InStr.
DROMAX --> VB.NET mort de rire c'est vrai que c'est beaucoup plus simple! mais c'est moins drôle...
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 23 sept. 2005 à 13:53
Peuh !! VB.NET c'est même pas drôle !! Tout le travail est déjà mâché !!
Christophe
Dromax
Messages postés40Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention23 septembre 2005 23 sept. 2005 à 11:04
Vb.Net :
On utilise la propriété CommandLine de la classe Environment pour avoir la ligne entière dans une chaine de caractères
Console.WriteLine("La ligne de commande est : {0}", Environment.CommandLine)
On utilise GetCommandLineArgs pour obtenir un tableau de chaines de caractères contenant chaque argument.
'Arguments de ligne de commande Console.WriteLine("Arguments de ligne de commande") Dim i As Integer Dim args As String() Environment.GetCommandLineArgs() Dim j As Integer args.Length For i = 0 To j - 1 Console.WriteLine("Args({0}) = {1}", i, args(i)) Next
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 21 sept. 2005 à 03:55
(petite précisions...)
Vi, après, bien évidemment, il suffit d'extraire, dans un premier temps, les chaines inter slashiques "/chaine/" puis d'analyser ces chaines.
Pour se faire, il suffit de séparer la chaine en deux :
chaine_avant_les_deux_point
":"
chaine_après_les_deux_point
et ce en cherchant les ":".
Je te laisse regarder les diverses fonctions de traitements textuels tel que Split, Replace, Mid, Right, ..., ..., ...
Biensûr, cette méthode permettrait de connaître facilement la validité des arguments et ainsi d'éviter de perdre les arguments suivants une erreur :
/D:texte_a_la_con /Echiffre /C:lettres
Bon Faux Bon
>/D:texte_a_la_con /C:lettres
Enjoy
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 21 sept. 2005 à 03:37
Clair!
Non, franchement, c'est à chacun de faire comme il veut! Mais c'est bien quand même (pour les débutants) :-)
Sinon, pour résoudre le prob soulevé par Crenaud76, il suffit, comme la plupart des progs font, de séparer les paramètres par des anti-slashs "" ou des slashs "/". Par exemple :
/Argument:datas /D:bla bla /E:...
Tout simplement!
Enjoy
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 19 sept. 2005 à 10:01
Avec ton code ou avec la fonction Split, il faudra faire très attention aux parametres contenant des espaces ... comme un nom de fichier long entre guillemets !!!
Autre remarque ... Avec ta méthode, si je demande le 1er argument puis le second, puis le troisième,etc ... ton code fait x fois le même boulot (découpage de la chaine notamment) !!
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 18 sept. 2005 à 22:39
C'est clair, çà ne vaut quand même pas 2/10. Ton algo est propre et commenté.
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 17 sept. 2005 à 16:30
split sera plus performant...
certes on a jamais des milliers de params mais bon...
cs_franckydeluka
Messages postés228Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention 4 janvier 20081 17 sept. 2005 à 13:19
c'est cool de se pencher sur ma source
Merci les gars. et dès que j'ai le temps j'y ajoute la fonction "split" (je la connaissais déjà mais j'ai préféré boucler va savoir pourquoi...)
enfin je ne pense pas que le fait de ne pas y avoir mis cette fonction vaut en 2/10 à ma source mais c'est vrai que comme le dis ASIMENGO sur sa fiche la clarté et la finesse d'un code est aussi important que sa fonction elle même.
sur ce bonne prog à tous !!
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 17 sept. 2005 à 12:12
Une chose de plus apprise pour moi merci. Néanmoins prends en compte la suggestion de ECONS, tu pourra consulter l'aide sur les fonctions "SPLIT" et "JOIN" qui te seront certainement utiles.
Bonne Continuation.
ghuysmans99
Messages postés2496Date d'inscriptionjeudi 14 juillet 2005StatutContributeurDernière intervention 5 juin 20161 16 sept. 2005 à 22:50
pas mal !
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 16 sept. 2005 à 16:21
Bel effort.
Pour info, en beaucoup moins de lignes, avec la fonction Split :
Dim tablo() As String
dim slignedecommande As String
slignecommande = "monprog.exe param1 -param2 param3"
tablo = Split(slignecommande, " ", , vbTextCompare)
MsgBox "Nombre d'arguments : " & UBound(tablo)
MsgBox "Deuxième argument : " & tablo(2)
28 juin 2011 à 14:09
25 mai 2007 à 11:41
j'ai modifié la source présentée en prenant comme séparateur le caractère "" qui précèdera les noms de paramêtres.
Ce détail permet le passage des parametres dont les valeurs contiennent des espaces.
Rien de bien énorme en somme...
commande : toto.exe \PARAM1=mon Test \PARAM2=Cool \PARAM3=ALFRED
ou toto.exe \PARAM1:mon Test \PARAM2:Cool \PARAM3:ALFRED
l'utilisation reste la même : sRecupererParamLigneCommande("PARAM1")
Function sRecupererParamLigneCommande(ByVal sNomParametre As String) As String
Dim iPos As Integer
Dim iposFin As Integer
' on recherche le nom de parametre
iPos = InStr(Command$, sNomParametre)
If iPos > 0 Then
iposFin = InStr(iPos, Command$, "")
If iposFin > 0 Then
' on a un autre paramètre derriere le paramètre
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre) + 1, iposFin - iPos - Len(sNomParametre) - 1).Trim(" ")
Else
' on est a la fin de la ligne de parametres
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre) + 1).Trim(" ")
End If
Else
sRecupererParamLigneCommande = ""
End If
End Function
7 mars 2007 à 14:37
7 mars 2007 à 11:45
Chaque parametres est placés dans une collection.
pour faire simple elle fait ceci:
Ligne de commande : "-F = "chemin + nom de fichier" -f=toto.txt -bidule
Param 1 = -F
param 2 = chemin + nom de fichier
param 3 = -f
param 4 = toto.txt
param 5 = -bidule
voici mon code si cela peut servir ;-)
Option Explicit
Private ArgCol As New Collection
' 1 = Juste pour executer dans VB, sinon 0
Const DebugCMD As Boolean = 1
Private Sub Class_Initialize()
Dim CmdL As String
If DebugCMD = 0 Then
Call ArgCol.Add(Command()) ' Recupere la ligne de commande
Else
' Ma ligne de commande pour debugage
CmdL "-F " + Chr(34) + "C:\DXFCAM\Escalier\S2\LIMONS\LIM002I1.DXF" + Chr(34)
CmdL = CmdL + " -F=" + Chr(34) + "C:\DXF CAM\Escalier\S2\LIMONS\LIM002I2.DXF" + Chr(34)
Call ArgCol.Add(CmdL)
End If
' Analyse la ligne de commande
Call ArgColInit(ArgCol.Item(1))
End Sub
Private Sub Class_Terminate()
Set ArgCol = Nothing
End Sub
' **************************************
' Retourne la ligne de commande analysée
' **************************************
Public Function LineCmd() As String
LineCmd = ArgCol.Item(1)
End Function
' ***********************************************
' Retourne un parametre n de la ligne de commande
' ***********************************************
Public Function Item(ByVal NumArg As Long) As String
Item = ArgCol.Item(1 + NumArg)
End Function
' *******************************************************
' Retourne le nombre de parametre de la ligne de commande
' *******************************************************
Public Property Get Nb_Arg() As Long
Nb_Arg = ArgCol.Count - 1
End Property
' **************************************************
' Analyse de la ligne de commande passe en parametre
' **************************************************
Private Sub ArgColInit(ByVal chaine As String)
Dim Count As Long
Dim Mode As Long
Dim CodeAscii As String
Dim parm As String
' Coupe a chaque espace et stocke le mot dans une collection et
' toute chaine entre guillemet
parm = ""
Mode = 0
For Count = 1 To Len(chaine)
CodeAscii = Mid(chaine, Count, 1) ' Lit un caractere
If Mode = 0 Then ' Le mode 0, coupe a chaque espace
' --------------------------------
If CodeAscii = "=" Then CodeAscii = " " ' Elimine le symbole =
' Si espace ou guillemet
If CodeAscii " " Or CodeAscii Chr(34) Then
If CodeAscii Chr(34) Then Mode 1 ' Si guillemet de debut passe en mode 1
Call Memorise_Param(parm) ' Memorise le parametre
Else
parm = parm + CodeAscii ' Ajoute un caractere au parametre
End If
Else ' le Mode 1, coupe a chaque guillement
' ------------------------------------
If CodeAscii = Chr(34) Then ' Si guillemet de fin repasse en mode 0
Mode = 0
Call Memorise_Param(parm) ' Memorise le parametre
Else
parm = parm + CodeAscii ' Ajoute un caractere au parametre
End If
End If
Next Count
Call Memorise_Param(parm) ' Memorise le dernier parametre
End Sub
Public Sub Memorise_Param(ByRef chaine As String)
If chaine <> "" Then ' Memorise le parametre si non nul
Call ArgCol.Add(chaine) ' Dans une collection
chaine = "" ' Efface le parametre
End If
End Sub
16 févr. 2007 à 20:21
Le code tourne super bien, mais j'ai prob.
Fait clic droit sur un fichier > Oubrir avec > votre EXE
sa renverra :
mon.exe "C:\Le\Chemin du fichier\dans son dossier"
Il y a des espaces dans la commande envoyé, et ton code limite à chaque espace, comment récupérer la valeur entre guillemet ?
14 févr. 2006 à 14:00
désolé pour le spam inutile...
14 févr. 2006 à 13:55
dans le meme esprit, j'ai une petite question,
grace à une bidouille avec la Registry, mon code est appelé quand on clic droit sur un fichier, avec en argument le Path du fichier en question (code.exe %1). Le problème, c'est que je ne connais pas le nom utiliser pour décrir l'argument, est-ce que quelqu'un pourait m'aider svp ?
merci
NiHaoMa
26 janv. 2006 à 14:40
Ah OK je vois ce que tu veux dire.
En fait tu peux mettre autant d'arguments que tu le souhaites mais pour plus de clarté et de simplicité il vaut mieux se limiter car tu es obligé de les définir 1 par 1.
Si tu veux faire quelque chose de plus important et configurable alors il vaut mieux utiliser un fichier de configuration dans le style fichier INI.
voilà bonne prog !!
++
24 janv. 2006 à 16:05
Ca fontionne bien ! !! 10/10
Dans ton exemple, pour gèrer le passages de plusieurs arguments tu fais :
param = sRecupererParamLigneCommande("/L=")
MsgBox (param)
param = sRecupererParamLigneCommande("/M=")
MsgBox (param)
...
Peut-on ne plus utiliser le L= M= ?
S'il y a n arguments, comment le gère t'on ?
Merci
;o)
24 janv. 2006 à 14:59
Je fais un exemple très simple parce que c'est vrau que ça peut paraître un peu obscur:
Premièrement ouvrir un projet vierge VB6, puis y copier/coller les fonctions "sRecupererParamLigneCommande" ainsi que "Form_Load" suivantes :
Function sRecupererParamLigneCommande(sNomParametre As String) As String
Dim iPos As Integer
Dim iposFin As Integer
' on recherche le nom de parametre
iPos = InStr(Command$, sNomParametre)
If iPos > 0 Then
iposFin = InStr(iPos, Command$, " ")
If iposFin > 0 Then
' on a un blanc derriere le parametre
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre), iposFin - iPos - Len(sNomParametre))
Else
' on est a la fin de la ligne de parametres et l'on n'a pas de blancs
sRecupererParamLigneCommande = Mid$(Command$, iPos + Len(sNomParametre))
End If
Else
sRecupererParamLigneCommande = ""
End If
End Function
Private Sub Form_Load()
Dim param As String
param = sRecupererParamLigneCommande("/L=")
MsgBox (param)
End Sub
compiler ensuite le programme et le mettre sur C:\ (il s'appelle par défaut Project1.exe) puis l'appeler dans "Démarrer/éxécuter" comme ceci:
C:\Project1.exe /L=FRANCAIS
Le programme doit afficher dans une Msgbox "FRANCAIS" pour dire qu'il a bien pris en compte l'option FRANCAIS.
Voilà tout simplement ;-)
++
24 janv. 2006 à 14:06
Il parait très intéressant ton programme avec passage d'arguments, mais j'éprouve quelques difficultés pour le faire fonctionner avec la commande EXECUTER de windows.
Demarrer/executer/... et là je tappe ton programme Lig_Cde.exe ca marche.
Si j'ajoute des arguments avec différentes syntaxes, ca ne marche plus :
Lig_Cde.exe -play
Lig_Cde.exe /play
Lig_Cde.exe \play
Lig_Cde.exe play
Que faut il exactement taper ? Il y a une étape que je n'ai pas bien compris. Pourriez vous m'expliquer sur un exemple concret...
Merci.
5 déc. 2005 à 11:50
Parce que j'avoue j'ai pas tout saisi.
Merci d'avance.
5 déc. 2005 à 11:50
Parce que j'avoue j'ai pas tout saisi.
Merci d'avance.
23 sept. 2005 à 15:46
Christophe
23 sept. 2005 à 15:37
Merci à tous en tout cas !!
Je n'y ai pas mis la fonction Split car j'y ai préféré la fonction InStr.
DROMAX --> VB.NET mort de rire c'est vrai que c'est beaucoup plus simple! mais c'est moins drôle...
23 sept. 2005 à 13:53
Christophe
23 sept. 2005 à 11:04
On utilise la propriété CommandLine de la classe Environment pour avoir la ligne entière dans une chaine de caractères
Console.WriteLine("La ligne de commande est : {0}", Environment.CommandLine)
On utilise GetCommandLineArgs pour obtenir un tableau de chaines de caractères contenant chaque argument.
'Arguments de ligne de commande Console.WriteLine("Arguments de ligne de commande") Dim i As Integer Dim args As String() Environment.GetCommandLineArgs() Dim j As Integer args.Length For i = 0 To j - 1 Console.WriteLine("Args({0}) = {1}", i, args(i)) Next
21 sept. 2005 à 03:55
Vi, après, bien évidemment, il suffit d'extraire, dans un premier temps, les chaines inter slashiques "/chaine/" puis d'analyser ces chaines.
Pour se faire, il suffit de séparer la chaine en deux :
chaine_avant_les_deux_point
":"
chaine_après_les_deux_point
et ce en cherchant les ":".
Je te laisse regarder les diverses fonctions de traitements textuels tel que Split, Replace, Mid, Right, ..., ..., ...
Biensûr, cette méthode permettrait de connaître facilement la validité des arguments et ainsi d'éviter de perdre les arguments suivants une erreur :
/D:texte_a_la_con /Echiffre /C:lettres
Bon Faux Bon
>/D:texte_a_la_con /C:lettres
Enjoy
21 sept. 2005 à 03:37
Non, franchement, c'est à chacun de faire comme il veut! Mais c'est bien quand même (pour les débutants) :-)
Sinon, pour résoudre le prob soulevé par Crenaud76, il suffit, comme la plupart des progs font, de séparer les paramètres par des anti-slashs "" ou des slashs "/". Par exemple :
/Argument:datas /D:bla bla /E:...
Tout simplement!
Enjoy
19 sept. 2005 à 10:01
Autre remarque ... Avec ta méthode, si je demande le 1er argument puis le second, puis le troisième,etc ... ton code fait x fois le même boulot (découpage de la chaine notamment) !!
18 sept. 2005 à 22:39
17 sept. 2005 à 16:30
certes on a jamais des milliers de params mais bon...
17 sept. 2005 à 13:19
Merci les gars. et dès que j'ai le temps j'y ajoute la fonction "split" (je la connaissais déjà mais j'ai préféré boucler va savoir pourquoi...)
enfin je ne pense pas que le fait de ne pas y avoir mis cette fonction vaut en 2/10 à ma source mais c'est vrai que comme le dis ASIMENGO sur sa fiche la clarté et la finesse d'un code est aussi important que sa fonction elle même.
sur ce bonne prog à tous !!
17 sept. 2005 à 12:12
Bonne Continuation.
16 sept. 2005 à 22:50
16 sept. 2005 à 16:21
Pour info, en beaucoup moins de lignes, avec la fonction Split :
Dim tablo() As String
dim slignedecommande As String
slignecommande = "monprog.exe param1 -param2 param3"
tablo = Split(slignecommande, " ", , vbTextCompare)
MsgBox "Nombre d'arguments : " & UBound(tablo)
MsgBox "Deuxième argument : " & tablo(2)