Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi USB-Stick abziehen nicht vergessen (https://www.delphipraxis.net/130814-usb-stick-abziehen-nicht-vergessen.html)

invalid_operation 13. Mär 2009 16:22


USB-Stick abziehen nicht vergessen
 
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 :wink:

DeddyH 13. Mär 2009 17:06

Re: USB-Stick abziehen nicht vergessen
 
Ginge das theoretisch nicht auch in etwa so?
Delphi-Quellcode:
function ExeIsOnAnUSBStick: Boolean;
begin
  Result := GetDriveType(PChar(ParamStr(0)[1] + ':\')) = DRIVE_REMOVABLE;
end;
Außerdem meint das MSDN
Zitat:

To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property.

invalid_operation 13. Mär 2009 17:40

Re: USB-Stick abziehen nicht vergessen
 
Zitat:

Zitat von DeddyH
Ginge das theoretisch nicht auch in etwa so?
Delphi-Quellcode:
function ExeIsOnAnUSBStick: Boolean;
begin
  Result := GetDriveType(PChar(ParamStr(0)[1] + ':\')) = DRIVE_REMOVABLE;
end;
Außerdem meint das MSDN
Zitat:

To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property.

Vermutlich schon (keine Ahnung, ob es unter Delphi5 bereits geht)?

Hab's mit D5 geschrieben und unter XP und Vista getestet: Funktioniert!

Eventuell mögliche Optimierungen überlasse ich den geneigten Fachleuten (Dir) :oops:

LG / HTH

P.S.: "etwa" heißt sinngemäß "ungefähr"! Du benutzt oben "in etwa" falsch! In etwa 95% aller Fälle wird "in etwa" falsch benutzt! Dein "in" bei "in etwa" klingt gut/modisch, ist aber FALSCH!

Flips 13. Mär 2009 17:42

Re: USB-Stick abziehen nicht vergessen
 
Ich hab es mal spontan getestet,
auf einem USB-Stick melden sich beide Versionen, ebenso auf einer CF-Karte.
Auf einer externen LAN-Festplatte meldet sich nur die Version von invalid_operation.

invalid_operation 13. Mär 2009 17:56

Re: USB-Stick abziehen nicht vergessen
 
Zitat:

Zitat von Flips
Ich hab es mal spontan getestet,
auf einem USB-Stick melden sich beide Versionen, ebenso auf einer CF-Karte.
Auf einer externen LAN-Festplatte meldet sich nur die Version von invalid_operation.

Welche "beiden" Versionen?

Seit wann ist eine externe LAN-Festplatte auf einem USB-Stick?

Kann das hier (mangels Deiner Hardware) nicht testen, aber der Source ist wohl oben...

LG / HTH

Edit: Was zum Teufel nochmal ist eine "CF-Karte"?

neo4a 13. Mär 2009 18:39

Re: USB-Stick abziehen nicht vergessen
 
Zitat:

P.S.: "etwa" heißt sinngemäß "ungefähr"! Du benutzt oben "in etwa" falsch! In etwa 95% aller Fälle wird "in etwa" falsch benutzt! Dein "in" bei "in etwa" klingt gut/modisch, ist aber FALSCH!
Die Polemik gegen den flaschen Gebrauch von Floskeln und amerikanischem Deutsch "macht" "in etwa" soviel Sinn, wie "in 2009" über den höllisch warmen Sommer "in 1941" zu jammern. SCNR.

Zitat:

Was zum Teufel nochmal ist eine "CF-Karte"?
CompactFlash nennt u.a. die kleinen Speicherkarten in den digitalen Knipsen.

--
Andreas

DeddyH 13. Mär 2009 19:20

Re: USB-Stick abziehen nicht vergessen
 
Zitat:

Zitat von invalid_operation
P.S.: "etwa" heißt sinngemäß "ungefähr"!

Und so war es auch gemeint. Trotzdem Danke für die Belehrung über den korrekten Gebrauch meiner Muttersprache :mrgreen:

invalid_operation 13. Mär 2009 20:10

Re: USB-Stick abziehen nicht vergessen
 
@neo4a #6: Hast ja recht... :oops:

OldGrumpy 13. Mär 2009 23:34

Re: USB-Stick abziehen nicht vergessen
 
Zitat:

Zitat von invalid_operation
Zitat:

Zitat von DeddyH
Ginge das theoretisch nicht auch in etwa so?

[...]P.S.: "etwa" heißt sinngemäß "ungefähr"! Du benutzt oben "in etwa" falsch! In etwa 95% aller Fälle wird "in etwa" falsch benutzt! Dein "in" bei "in etwa" klingt gut/modisch, ist aber FALSCH!

Sogar die Duden-Sprachberatung benutzt "in etwa" - so falsch kanns also nicht sein ;)

invalid_operation 14. Mär 2009 01:49

Re: USB-Stick abziehen nicht vergessen
 
Und der Letzte macht bitte das Licht aus :twisted:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr.
Seite 1 von 2  1 2      

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