In Ihrem Programm soll der Anwender irgendwelche Daten auf einer
Diskette speichern können und Sie möchten es ihm ermöglichen
zuvor eine Diskette frisch zu formatieren? Dann sollten Sie sich
nicht lange mit der Entwicklung eigener Formatier-Routinen und
-Dialogen aufhalten, sondern dem Anwender den entsprechenden
Standard-Dialog anzeigen. Zum einen ist die dahinterstehende
Operation des Betriebssystems als ausgereift und stabil zu
betrachten. Zum anderen ist der Standard-Dialog dem Anwender in der
Regel vertraut. Und er hat die Möglichkeit, sich zwischen der
vollständigen Formatierung und der Schnellformatierung des
Datenträgers zu entscheiden, und er kann auch einen
Datenträgernamen angeben bzw. einen vorhandenen Namen ändern.
Die API-Funktion SHFormatDrive ist weder in im Windows-SDK
dokumentiert noch sind Deklaration und Konstanten in den
C-Include-Dateien enthalten. Dennoch sollte man die Funktion
bedenkenlos und auch zukunftssicher verwenden können, da Microsoft
selbst in einem Artikel
der Knowledge-Base die dokumentations-üblichen Informationen
dazu liefert.
Die Funktion FormatDriveDlg vereinfacht den Aufruf der
API-Funktion und bietet zugleich die Möglichkeit, das gewünschte
Laufwerk sowohl über den Laufwerksbuchstaben als auch über die
MS-DOS-übliche Nummer (beginnend ab 0, also Laufwerk
A: gleich 0) zu spezifizieren. Da der besagte
Knowledge-Base-Artikel anmahnt, immer ein Fenster als Bezug zu
übergeben, sollten Sie das entsprechende Fenster-Handle eines Forms
(hWnd-Eigenschaft) verwenden. Da im Grunde das Handle des Desktops
genauso geeignet ist, können Sie im optionalen Parameter hWnd der
Funktion FormatDriveDlg auch 0 übergeben oder ihn ganz weglassen.
In der Funktion wird dann über die API-Funktion GetDesktopWindow
automatisch das Handle des Desktops ermittelt und verwendet.
Den Erfolg der Aktion meldet die Funktion in ihrem Rückgabewert.
Die möglichen Werte sind hier als enumerierte Konstanten
bereitgestellt. Bricht der Anwender selbst den Dialog ab
(Schaltfläche "Schließen"), ohne die Formatierung
gestartet zu haben, wird fdRetCancelled zurückgegeben. Wurde
versehentlich die Kennung eines nicht-formatierbaren Laufwerks
übergeben (etwa ein CD-ROM-Laufwerk), wird fdRetNotFormattable
zurückgegeben. Alle übrigen Fehler auf Betriebsystemebene werden
als fdRetError unspezifiziert gemeldet. Während für diese
Rückgabewerte die API-Funktion SHFormatDrive zuständig ist, wird
der Rückgabewert fdRetInvalidDrive von der Funktion FormatDriveDlg
selbst generiert, wenn ein "unmöglicher"
Laufwerksbuchstabe oder eine entsprechende Laufwerksnummer
übergeben worden ist.
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SHFormatDrive Lib "shell32" _
(ByVal hWnd As Long, ByVal Drive As Long, ByVal fmtID As Long, _
ByVal Options As Long) As Long
Public Enum fdReturnConstants
fdRetSuccess = 0
fdRetError = -1
fdRetCancelled = -2
fdRetNotFormattable = -3
fdRetInvalidDrive = -4
End Enum
Public Function FormatDriveDlg(Drive As Variant, _
Optional ByVal hWnd As Long) As fdReturnConstants
Dim nDriveNumber As Long
Dim nWnd As Long
Const SHFMT_ID_DEFAULT = &HFFFF&
Const SHFMT_OPT_FULL = 1
If IsNumeric(Drive) Then
Select Case CLng(Drive)
Case 0 To 25
nDriveNumber = CLng(Drive)
Case Else
FormatDriveDlg = fdRetInvalidDrive
Exit Function
End Select
ElseIf VarType(Drive) = vbString Then
Select Case UCase$(Left$(Drive, 1))
Case "A" To "Z"
nDriveNumber = Asc(UCase$(Left$(Drive, 1))) - 65
Case Else
FormatDriveDlg = fdRetInvalidDrive
Exit Function
End Select
End If
If hWnd = 0 Then
nWnd = GetDesktopWindow()
Else
nWnd = hWnd
End If
FormatDriveDlg = SHFormatDrive(nWnd, nDriveNumber, _
SHFMT_ID_DEFAULT, SHFMT_OPT_FULL)
End Function
 |
Die Funktion FormatDriveDlg öffnet den
Standard-Dialog zum Formatieren von Datenträgern

|

|