|
Gelegentlich brauchen Sie Zugriff auf bestimmte Systemordner,
beispielsweise um Dateien dort hin zu kopieren oder auf
Systemkomponenten zugreifen zu können.
Über die API-Funktionen GetWindowsDirectory,
GetSystemDirectory
und GetTempPath
können Sie den Pfad des Windows-, System- bzw. des Temp-Ordners
ermitteln.
Diese API-Funktionen geben jedoch nicht wie eine Visual
Basic-Funktion einen String zurück. Sie erwarten statt dessen als
Parameter einen vorbereiteten String, einen sogenannten
"Puffer", in dem sie das gewünschte Ergebnis ablegen
können. Die Länge dieses Strings ist ausreichend zu wählen, damit
Windows nicht über das Ende des Strings hinaus ins "Speicher-Outback"
schreibt, was zu schweren Systemabstürzen führen kann. Im
Rückgabewert dieser API-Funktionen erhalten Sie die tatsächliche
Länge des im Puffer abgelegten Strings.
Die beiden Funktionen GetWindowsDirectory und GetSystemDirectory
gleichen sich von der Syntax her - im ersten Parameter wird der
Puffer-String übergeben, im zweiten dessen Länge. Bei GetTempPath
ist die Parameter-Reihenfolge genau umgekehrt - warum das so ist,
weiß wohl niemand.
Ebenfalls unterschiedlich ist der Abschluss des zurückgegebenen
Pfades. GetTempPath schließt den im Puffer zurückgegebenen Pfad
mit einem Backslash ("\") ab, GetWindowsDirectory und
GetSystemDirectory hingegen nicht.
Damit Sie sich die ganze Pufferei samt den Parameter- und
Rückgabe-Unterschieden sparen können, verpacken wir die drei
API-Funktionen in einem Standard-Modul modWinSysDirs in handliche,
VB-gewohnte Funktionen. Ob der von diesen Funktionen zurückgegebene
Pfad mit einem Backslash abschließt, legen Sie mit dem optionalen
Parameter AddBackslash fest. Ist dieser False oder fehlt er,
schließt der zurückgegebene Pfade nicht mit einem Backslash ab.
Schlägt der Aufruf der jeweiligen API-Funktion fehl, wird einfach
ein leerer String zurückgegeben.
Private Declare Function GetSystemDirectory Lib "kernel32" _
Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Declare Function GetTempPath Lib "kernel32" _
Alias "GetTempPathA" (ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long
Private Declare Function GetWindowsDirectory Lib "kernel32" _
Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Const kLength = 255&
Public Function GetSysDir(Optional ByVal AddBackslash As Boolean) _
As String
Dim nBuffer As String
Dim nReturn As Long
nBuffer = Space(kLength)
nReturn = GetSystemDirectory(nBuffer, kLength)
If nReturn > 0 Then
If AddBackslash Then
GetSysDir = Left(nBuffer, nReturn) & "\"
Else
GetSysDir = Left(nBuffer, nReturn)
End If
End If
End Function
Public Function GetTempDir(Optional ByVal AddBackslash As Boolean) _
As String
Dim nBuffer As String
Dim nReturn As Long
nBuffer = Space(kLength)
nReturn = GetTempPath(kLength, nBuffer)
If nReturn > 0 Then
If AddBackslash Then
GetTempDir = Left(nBuffer, nReturn)
Else
GetTempDir = Left(nBuffer, nReturn - 1)
End If
End If
End Function
Public Function GetWinDir(Optional ByVal AddBackslash As Boolean) _
As String
Dim nBuffer As String
Dim nReturn As Long
nBuffer = Space(kLength)
nReturn = GetWindowsDirectory(nBuffer, kLength)
If nReturn > 0 Then
If AddBackslash Then
GetWinDir = Left(nBuffer, nReturn) & "\"
Else
GetWinDir = Left(nBuffer, nReturn)
End If
End If
End Function
 |
So haben Sie bequemen Zugriff auf
verschiedene Systemordner - Windows, System und Temp

|
Eine Alternative zur Ermittlung des Temp-Ordners über die
API-Funktion soll hier nicht verschwiegen werden. In der Regel ist
der Temp-Ordner auch in den Umgebungsvariablen des Systems abgelegt
und kann daher über die VB-Funktion Environ$ ausgelesen werden.
"Alte Hasen" wissen allerdings, dass man den Temp-Ordner
in zwei verschieden lautenden Umgebungsvariablen finden kann -
meistens unter "TEMP", gelegentlich aber auch unter
"TMP". Das liegt daran, dass sich die Entwicklerwelt nie
ganz einig darüber war, unter welcher dieser beiden
Umgebungsvariablen der Temp-Ordner ordnungsgemäß anzugeben und zu
finden wäre. Manche Anwendungen verwenden die eine, manche die
andere Bezeichnungen. Es kann aber auch sein, dass auf einem System
gerade die falsche, oder gar keine Angabe festgelegt worden ist.
Falls Ihnen das Hantieren mit API-Funktionen suspekt erscheinen
sollte, können Sie den Temp-Ordner auch über die Funktion
GetTempDir2 ermitteln.
Public Function GetTempDir2(Optional ByVal AddBackslash As Boolean) _
As String
Dim nTempDir As String
On Error Resume Next
nTempDir = Environ$("temp")
If Len(nTempDir) = 0 Then
nTempDir = Environ$("tmp")
End If
If Len(nTempDir) Then
If AddBackslash Then
GetTempDir2 = nTempDir & "\"
Else
GetTempDir2 = nTempDir
End If
End Function
Korrekturen und Ergänzungen:
12.10.1999: Ergänzung der Funktionen mit dem optionalen Parameter
AddBackslash
12.10.1999: und Ermittlung des
Temp-Ordners über Umgebungsvariablen.
|