Die Community zu .NET und Classic VB.
Menü

FAQ 0158: Pfad der eigenen Anwendung ermitteln

 von 

Frage 

Wie kann ich den Pfad meiner Anwendung ermitteln?

VB-Bordmittel  

Mit dem App-Objekt kann man zahlreiche Informationen über das eigene Programm ermitteln, darunter auch Pfadinformationen. Durch deren Kombination kann man den gesuchten Pfad ermitteln:

Function GetAppExeName() As String
    Static sstrName As String

    If Len(sstrName) = 0 Then
        sstrName = App.Path
        If Right$(sstrName, 1) <> "\" Then sstrName = sstrName & "\"
        sstrName = sstrName & App.EXEName & ".exe"
    End If

    GetAppExename = sstrName
End Function

Listing 1: Pfad und Name der eigenen Anwendung ermitteln I

App.Path gibt dabei den Ordner an, in welchem sich die Anwendung befindet. Allerdings muss ein \ angefügt werden, wenn der Ordnerpfad nicht schon einen am Ende besitzt. App.EXEName ist der Dateiname ohne .exe.

Win32-API: GetCommandLine  

Folgender Code ermittelt mit GetCommandLine die Befehlszeile, die neben möglichen Parametern den Anwendungspfad enthält:

Private Declare Function GetCommLine Lib "kernel32" _
                Alias "GetCommandLineA" ( _
                ) As Long
Private Declare Function lStrLen Lib "kernel32" _
                Alias "lstrlenA" ( _
                ByVal lpString As Long _
                ) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
                Alias "RtlMoveMemory" ( _
                ByRef pDst As Any, _
                ByVal pSrc As Long, _
                ByVal ByteLen As Long)

Private Function GetCommandLine() As String
    Dim RetPtr As Long
    Dim CmdLength As Long
    Dim Buffer As String

    RetPtr = GetCommLine

    CmdLength = lStrLen(RetPtr)
    
    If CmdLength > 0 Then
        GetCommandLine = Space$(CmdLength)
        Call CopyMemory(ByVal GetCommandLine, RetPtr, CmdLength)
    Else
        GetCommandLine = ""
    End If
End Function

Private Function GetPathByCommand() As String
    GetPathByCommand = Split(GetCommandLine, """")(1)
End Function

Listing 2: Pfad und Name der eigenen Anwendung ermitteln II

Win32-API: GetModuleFileName  

Und noch die 2. API-Alternative:

Private Const MAX_PATH As Long = 260&

Private Declare Function GetModuleHandle Lib "kernel32.dll" _
                Alias "GetModuleHandleA" ( _
                ByVal lpModuleName As String _
                ) As Long
                
Private Declare Function GetModuleFileName Lib "kernel32.dll" _
                Alias "GetModuleFileNameA" ( _
                ByVal hModule As Long, _
                ByVal lpFileName As String, _
                ByVal nSize As Long _
                ) As Long
                 
Function GetPathByModule() As String
    Dim lngBufSize As Long
    Dim Buffer As String
    
    '   Speicher reservieren
    lngBufSize = MAX_PATH
    Buffer = Space$(lngBufSize)
    
    '   Pfad auslesen
    Call GetModuleFileName(GetModuleHandle(vbNullString), Buffer, lngBufSize)
    
    '   abschließenden NullChar abschneiden
    lngBufSize = InStr(1&, Buffer, vbNullChar)
    If lngBufSize <> 0& Then
        Buffer = Left$(Buffer, lngBufSize - Len(vbNullChar))
    End If
    
    '   Fertig
    GetPathByModule = Buffer
End Function

Listing 3: Pfad und Name der eigenen Anwendung ermitteln III

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.