Récupération des arguments d'un éxécutable lancé en ligne de commande

Soyez le premier à donner votre avis sur cette source.

Vue 5 240 fois - Téléchargée 336 fois

Description

D'accord, la fonction Command() renvoie l'ensemble des paramètres, encore faut-il les interprétés. Le code proposé se résume à une fonction qui vous remplit un tableau de string avec un paramètre par élément du tableau. Moi je l'utilise pour un programme lancé par un item du menu qui est déclenché par le bouton droit de la souris dans l'explorateur de fichier.
L'utilisateur sélectionne n fichiers, puis les envoie à mon application par bouton droit, MonAppli.

Source / Exemple :


Attribute VB_Name = "MainModule"
Option Explicit

' Le projet doit démarrer sur SubMain (Options du projet)

Private Sub Main()
    Dim SaveTitle As String
    
    ' Vérifie qu'une autre instance du programme n'est pas déjà en cours...
    If App.PrevInstance Then
        SaveTitle = App.Title
        AppActivate SaveTitle
        End
    End If
    
    ' Récupère les paramètres de la ligne de commande
    Dim strArgArray() As String
    Dim intNbArgs As Integer

    If GetCommandLine(strArgArray, intNbArgs) Then
        ' Ici on dispose d'un tableau strArgArray contenant intNbArgs arguments
        ' On peut afficher la feuille par Load Form1 puis Form1.Show
    End If
End Sub

Private Function GetCommandLine( _
    ByRef ArgArray() As String, _
    ByRef NbArgs As Integer, _
    Optional MaxArgs) As Boolean
    
    Dim Char As String * 1
    Dim CommandLine As String
    Dim CommandLineLength, CharNumber As Integer
    Dim InArg, InLongArg As Boolean
    
    ' Contrôle si un nombre max d'arguments est précisé, sinon max=3
    If IsMissing(MaxArgs) Then MaxArgs = 3
    ' Récupère la ligne de commande
    CommandLine = Command()
    CommandLineLength = Len(CommandLine)
    ' Trouve les arguments un par un
    NbArgs = 0
    For CharNumber = 1 To CommandLineLength
        Char = Mid(CommandLine, CharNumber, 1)
        ' Vérifie s'il y a des guillemets dans les arguments (pour les noms de fichier long, par exemple
        If Char = """" Then InLongArg = True
        If InLongArg Then
            If Char = """" Then
                If Not InArg Then
                    If NbArgs = MaxArgs Then Exit For
                    NbArgs = NbArgs + 1
                    ReDim Preserve ArgArray(1 To NbArgs) As String
                    InArg = True
                Else
                    InArg = False
                    InLongArg = False
                End If
            Else
                If InArg Then
                    ArgArray(NbArgs) = ArgArray(NbArgs) & Char
                End If
            End If
        Else
            If Char <> " " And Char <> vbTab Then
                If Not InArg Then
                    If NbArgs = MaxArgs Then Exit For
                    NbArgs = NbArgs + 1
                    ReDim Preserve ArgArray(1 To NbArgs) As String
                    InArg = True
                End If
                ArgArray(NbArgs) = ArgArray(NbArgs) & Char
            Else
                InArg = False
            End If
        End If
    Next CharNumber
    GetCommandLine = (NbArgs > 0)
End Function

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Rabba
Messages postés
16
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2005
-
C'est bon, j'ai enfin trouvé le problème! Il y avait un espace avant le chemin comme par exemple: " C:monfichier.txt" Ce qui générait une belle erreur... Il suffit d'utiliser Trim() pour enlever les espace a gauche... Merci quand même pour votre aide!
facdaar
Messages postés
64
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
23 février 2009
-
Pour commencer, je ne vois pas en effet pourquoi Open ne fonctionne pas. Peut-être je pourrais mieux comprendre si j'avais le vrai message d'erreur et ce que contient strTxtPath.

Ceci dit, j'ai qd même une remarque. Je pense qu'il serait mieux pour traiter un fichier texte d'utiliser l'objet FileSystemObject. Pour ce faire, il faut d'abord ajouter une référence au projet : la référence Microsoft ScriptingRuntime Ensuite, onpeut faire comme ça :

Dim objFSO as Scripting.FileSystemObject
Dim objTS as Scriptint.TextStream

set objFSO=new FileSystemObject
set objTS=objFSO.OpenTextFile("c: est.txt",ForReading,false)
set objFSO=nothing

! Maintenant on peut lire le fichier ligne par ligne
Do while not objTS.AtEndOfStream
sTxtLine = objTS.ReadLine()
Loop

Set objTS=nothing
cs_Rabba
Messages postés
16
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2005
-
J'ai un ptit problème... Mon but est de créer des fichiers de sauvegarde avec une certaine extension contenant du texte et que lorsque je clique sur ce fichier mon programme s'ouvre et lit dans le fichier les info de sauvegarde... J'ai essayé ce code et ca me retourne le bon chemin d'accès, mais lorsque je veux faire un " open strTxtPath For input As #1" ca me génère une erreur... Pourriez-vous me contrer cette dernière? Merci d'avance...
cs_shaoni
Messages postés
186
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
12 septembre 2007
-
tu pourrais gagner pas mal de lignes avec la fonction split !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.