Die Definition stimmt:
Delphi-Quellcode:
Function SetVolumeMountPointW(VolumeMountPoint, VolumeName: PWideChar): LongBool;
External 'kernel32.dll' Name 'SetVolumeMountPointW';
Function DeleteVolumeMountPointW(VolumeMountPoint: PWideChar): LongBool;
External 'kernel32.dll' Name 'DeleteVolumeMountPointW';
Aufrufen tu ich es so:
Delphi-Quellcode:
If DeleteVolumeMountPointW(PWideChar(GetText(D.ComboBox4))) Then
Button1.Click Else ShowLastError;
Was in meinem Testfall dem entspricht:
DeleteVolumeMountPoint('Y:\'#0);
Aber es kommt immer nur:
Zitat:
---------------------------
Fehler
---------------------------
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
---------------------------
OK
---------------------------
Hab schon alles Mögliche versucht,
Zitat:
'Y:\'
'Y:'
'\\.\Y:\'
'\\.\Y:'
obwohl die Erste Angabe schon stimmen sollte.
Zitat:
[in] Pointer to a string that indicates the volume mount point to be unmounted. This may be a root directory (X:\, in which case the DOS drive letter assignment is removed) or a directory on a volume (X:\mnt\). A trailing backslash is required.
Im
PSDK zwar sowas
Zitat:
To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0500 or later. For more information, see Using the
SDK Headers.
aber wie soll ich das in Delphi machen, wenn überhaupt nötig?
System: WinXP SP2
Die beiden Funktionen, wie sie sich hinter den Buttons "Add" und "Delete" bei den "Locical Drives" in
http://www.delphipraxis.net/internal...=587272#587272 (siehe Anhang) verstecken:
Delphi-Quellcode:
Procedure TForm1.Button4Click(Sender: TObject);
Var Di: Integer;
D: TVolumeMountPoint_AddDialog;
Begin
Di := TreeView2.Selected.Index;
D := TVolumeMountPoint_AddDialog.Create(Self);
Try
SetText(D.Label2, LogicalDrives[Di].VolumeName);
If D.ShowModal = mrOK Then
If SetVolumeMountPointW(PWideChar(GetText(D.Edit4)),
PWideChar(LogicalDrives[Di].VolumeName + '\')) Then
Button1.Click Else ShowLastError;
Finally
D.Free;
End;
End;
Procedure TForm1.Button5Click(Sender: TObject);
Var Di, i: Integer;
D: TVolumeMountPoint_DeleteDialog;
S: WideString;
Begin
Di := TreeView2.Selected.Index;
If LogicalDrives[Di].VolumePathNames = '' Then Exit;
D := TVolumeMountPoint_DeleteDialog.Create(Self);
Try
SetText(D.Label2, LogicalDrives[Di].VolumeName);
S := LogicalDrives[Di].VolumePathNames;
While S <> '' do Begin
i := Pos(#9, S);
If i = 0 Then i := Length(S) + 1;
D.ComboBox4.Items.Add(Copy(S, 1, i - 1));
Delete(S, 1, i);
End;
D.ComboBox4.ItemIndex := 0;
If D.ShowModal = mrOK Then
If DeleteVolumeMountPointW(PWideChar(GetText(D.ComboBox4))) Then
Button1.Click Else ShowLastError;
Finally
D.Free;
End;
End;
Hab's natürlich auch schon in einogen Tests mit direkten Aufrufen, mit Sringconstanten, Stringvariablen und auch mit den AnsiVersionen versucht