FAQ 0158: Pfad der eigenen Anwendung ermitteln
von Dario S.
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
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
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
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.