Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Laufwerksbuchstaben ändern (https://www.delphipraxis.net/118495-laufwerksbuchstaben-aendern.html)

ThoPos 8. Aug 2008 18:18


Laufwerksbuchstaben ändern
 
Hallo,

zuerst einmal hoffe ich, daß ich meine Frage in der richtigen Rubrik eingestellt habe.

Aber nun zu meinem Problem.

Wie kann man von Delphi aus den Laufwerksbuchstaben eines Wechseldatenträger ändern?

Gruß aus Köln

Thomas

new32 13. Aug 2008 16:10

Re: Laufwerksbuchstaben ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Es gibt da 3 Funktionen, mit denen du recht einfach die Mount Points (wie die von DOS bekannten Laufwerksbuchstaben) bearbeiten kannst.

Code:
GetVolumeNameForVolumeMountPoint
SetVolumeMountPoint
DeleteVolumeMountPoint
Ein bisschen frisch getippter Beispielcode. Naja is zwar C aber sollte recht leicht zu lesen sein.
Code:
#include<windows.h>
#include<stdio.h>

int main(int argc, char **argv){
  char Vol[512];
  if(argc!=3) return 0;
  if(!GetVolumeNameForVolumeMountPoint(argv[1], Vol, 512)){
    printf("Error: %i", GetLastError());
    return -1;
  }   
  printf("Vol: %s\n", Vol);
  if(!DeleteVolumeMountPoint(argv[1])){
    printf("Error: %i", GetLastError());
    return -1;
  }
  printf("%s Deleted\n", argv[1]);
 
  if(!SetVolumeMountPoint(argv[2], Vol)){
    printf("Error mounting %s to %s: %i", Vol, argv[2], GetLastError());
    return -1;
  } 
  printf("mounted to %s", argv[2]);

  return 0;
}
Allerdings läuft dieser Code nur auf NT5 (sprich 2000) und neuer

Für mehr infos: -> MS PSDK

Code:
rmv E:\ G:\
ändert Laufwerksbuchstaben E: zu G:
MfG

Der.Kaktus 13. Aug 2008 16:34

Re: Laufwerksbuchstaben ändern
 
Zitat:

Zitat von new32
Hallo!

Es gibt da 3 Funktionen, mit denen du recht einfach die Mount Points (wie die von DOS bekannten Laufwerksbuchstaben) bearbeiten kannst.

Code:
GetVolumeNameForVolumeMountPoint
SetVolumeMountPoint
DeleteVolumeMountPoint
Ein bisschen frisch getippter Beispielcode. Naja is zwar C aber sollte recht leicht zu lesen sein.
Code:
#include<windows.h>
#include<stdio.h>

int main(int argc, char **argv){
  char Vol[512];
  if(argc!=3) return 0;
  if(!GetVolumeNameForVolumeMountPoint(argv[1], Vol, 512)){
    printf("Error: %i", GetLastError());
    return -1;
  }   
  printf("Vol: %s\n", Vol);
  if(!DeleteVolumeMountPoint(argv[1])){
    printf("Error: %i", GetLastError());
    return -1;
  }
  printf("%s Deleted\n", argv[1]);
 
  if(!SetVolumeMountPoint(argv[2], Vol)){
    printf("Error mounting %s to %s: %i", Vol, argv[2], GetLastError());
    return -1;
  } 
  printf("mounted to %s", argv[2]);

  return 0;
}
Allerdings läuft dieser Code nur auf NT5 (sprich 2000) und neuer

Für mehr infos: -> MS PSDK

MfG

Prima im Delphi-Forum *sfg*(habs ja verstanden..aber.....?) ;-)

Aber hier nen Tip ;-) Netconnect

ThoPos 13. Aug 2008 18:10

Re: Laufwerksbuchstaben ändern
 
Vielen Dank schon mal für den Tipp.

Soweit ich das sehe, muß ich die Aufrufe

Delphi-Quellcode:
GetVolumeNameForVolumeMountPoint
SetVolumeMountPoint
DeleteVolumeMountPoint
importieren. Das habe ich noch nie gemacht, aber mal 'ne tolle Herausforderung für's Wochenende.

Gruß aus Köln
Thomas

ThoPos 14. Aug 2008 19:14

Re: Laufwerksbuchstaben ändern
 
Hallo Zusammen,

ich habe heute schon mal etwas getestet und versucht die Funktion GetVolumeNameForVolumeMountPoint zu importieren.

Delphi-Quellcode:
Function GetVolumeNameForVolumeMountPoint(
             lpszVolumeMountPoint: PAnsiChar;
             lpszVolumeName: PAnsiChar;
             cchBufferLength: DWORD): Boolean;
             stdcall;
             external 'kernel32.dll' name 'GetVolumeNameForVolumeMountPointW';
Soweit klar. Aber wie baue ich die Funktion ein?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  vmp    : PAnsiChar;
  vn     : PAnsiChar;
  i      : Integer;
begin
  vmp := PAnsiChar('D:\');
  GetVolumeNameForVolumeMountPoint(vmp, vn, i);
  showmessage(string(vn));
end;
Bei mir ist vn immer leer.
Kann mir einer helfen?

Gruß aus Köln
Thomas

messie 14. Aug 2008 19:20

Re: Laufwerksbuchstaben ändern
 
Mir fällt zuerst auf, dass Du Ansi- und Unicode-Aufrufe hast. Lass mal bei
Zitat:

GetVolumeNameForVolumeMountPointW
das W weg. Denn die Funktion darfst Du wahrscheinlich nicht mit PAnsiChar füttern.


Grüße, Messie

ThoPos 14. Aug 2008 19:30

Re: Laufwerksbuchstaben ändern
 
Danke Messie,

der Tipp führte genau in die richtige Richtung. Das weglassen des W führte erstmal zur Fehlermeldung, daß die DLL diese Funktion nicht enthält. Aber ein Austausch des W gegen ein A war der Bringer. :-)

Gruß aus Köln
Thomas

ThoPos 19. Aug 2008 18:34

Re: Laufwerksbuchstaben ändern
 
Hallo Zusammen,

mein Programm läuft soweit super - unter 2000 und XP.

Nur unter Vista Home gibt es Probleme. Das Rechtemanagement verhindet die Mount-Befehle. Wenn ich das Programm über das Kontextmenü als Admin starte funktioniert es.

Hat jemand 'ne Idee, wie ich das Programm normal starten kann und trotzdem das umbenennen hinbekomme?

Gruß aus Köln
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz