Einzelnen Beitrag anzeigen

invalid_operation
(Gast)

n/a Beiträge
 
#1

USB-Stick abziehen nicht vergessen

  Alt 13. Mär 2009, 17:22
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
  Mit Zitat antworten Zitat