Falls ein Programm von einem USB-Stick gestartet wurde und beim Herunterfahren von Windows im CanClose einen Hinweis ausspucken soll, daß man den Stick noch nicht abgezogen hat:
Delphi-Quellcode:
function ExeIsOnAnUSBStick: Boolean;
var
HomeDrive:
string;
DriveLetters:
string;
procedure List_Drives;
const
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;
var
r: LongWord;
Drives:
array[0..128]
of char;
pDrive: PChar;
begin
r := GetLogicalDriveStrings(SizeOf(Drives), Drives);
if r = 0
then Exit;
if r > SizeOf(Drives)
then
raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
pDrive := Drives;
while pDrive^ <> #0
do
begin
if GetDriveType(pDrive) = DRIVE_REMOVABLE
then
DriveLetters := DriveLetters + (pDrive);
Inc(pDrive, 4);
end;
end;
begin
HomeDrive := AnsiUpperCase(paramstr(0)[1]);
List_Drives;
DriveLetters := AnsiUpperCase(DriveLetters);
Result := (pos(HomeDrive, DriveLetters) > 0);
end;
Funktioniert mit meinen USB-Sticks und SD-Karten, aber nicht mit externen USB-Festplatten
Getestet mit XP und Vista, Delphi5.
Beispiel in einem CanClose:
Delphi-Quellcode:
if ExeIsOnAnUSBStick
then MessageBox(
Handle,'
Vergessen Sie bitte nicht, Ihren USB-Stick abzuziehen!','
Hinweis',mb_Ok
or mb_IconStop
or mb_DefButton1);
CanClose := True;
Vielleicht hilft es ja jemandem / HTH