ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 12.10.1999

Diese Seite wurde zuletzt aktualisiert am 12.10.1999
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

Von Jan Krumsiek mailto:jkrumsiek@aboutvb.de

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 MSDN Library - API GetWindowsDirectoryGetWindowsDirectory, MSDN Library - API GetSystemDirectoryGetSystemDirectory und MSDN Library - API GetTempPathGetTempPath 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.


Modul WinSysDirs (modWinSysDirs.bas - ca. 2,2 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer