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/)
-   -   Delphi Notification wenn neues Laufwerk verfügbar/entfernt (https://www.delphipraxis.net/46863-notification-wenn-neues-laufwerk-verfuegbar-entfernt.html)

SleepyMaster 1. Jun 2005 21:00


Notification wenn neues Laufwerk verfügbar/entfernt
 
Hi ihrs...

Wisst ihr wie ich mein Programm informieren lassen kann, wenn ein neues Laufwerk (E:/F:/G:/...) verfügbar ist oder entfernt wurde?!?

Vielen Dank für eure Hilfe

mh166 1. Jun 2005 22:53

Re: Notification wenn neues Laufwerk verfügbar/entfernt
 
Such mal im PSDK nach ner Message... ich glaub die hieß WM_DEVICECHANGE oder ähnlich. Da solltest du fündig werden. Außerdem glaub ich nicht, dass die Suche hier im Board keine Ergebnisse zu Tage fördert...

mfg, mh166

SleepyMaster 2. Jun 2005 15:29

Re: Notification wenn neues Laufwerk verfügbar/entfernt
 
ok... thx...

habs so gelöst:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  DBT_DEVICEARRIVAL = $8000;
  DBT_DEVICEREMOVECOMPLETE = $8004;
  DBT_DEVTYP_VOLUME = $00000002;
type
  PDEV_BROADCAST_VOLUME = ^DEV_BROADCAST_VOLUME;
  DEV_BROADCAST_VOLUME = record
    dbcv_size: DWORD;
    dbcv_devicetype: DWORD;
    dbcv_reserved: DWORD;
    dbcv_unitmask: DWORD;
    dbcv_flags: DWORD;
    end;
  PDevBroadcastHdr = ^DEV_BROADCAST_HDR;
  DEV_BROADCAST_HDR = packed record
    dbch_size: DWORD;
    dbch_devicetype: DWORD;
    dbch_reserved: DWORD;
  end;

function BitMaskToChar(BitMask: DWORD): char;
var
  i: integer;
  c: char;
begin
for i := 0 to 25 do
  begin
  if (BitMask and 1) = 1 then
    Result := Char(i + Ord('A'));
  BitMask := BitMask shr 1;
  end;
end;

procedure TForm1.WMDeviceChange(var Msg: TMessage);
begin
  if (Msg.wParam = DBT_DEVICEARRIVAL) or (Msg.wParam = DBT_DEVICEREMOVECOMPLETE) then
    if PDevBroadcastHdr(Msg.LParam).dbch_devicetype = DBT_DEVTYP_VOLUME then
      begin
      if Msg.wParam = DBT_DEVICEARRIVAL then
        Messagebox(0, 'Neues Ding...', pchar(BitMaskToChar(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+''), 64);
      if Msg.wParam = DBT_DEVICEREMOVECOMPLETE then
        Messagebox(0, 'Ding wech...', pchar(BitMaskToChar(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+''), 64);
      end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  dbv: DEV_BROADCAST_VOLUME;
begin
  ZeroMemory(@dbv, SizeOf(DEV_BROADCAST_VOLUME));
  dbv.dbcv_size := SizeOf(DEV_BROADCAST_VOLUME);
  dbv.dbcv_devicetype := DBT_DEVTYP_VOLUME;
  dbv.dbcv_reserved := 0;
  dbv.dbcv_unitmask := $FFFFFFFF;
  dbv.dbcv_flags := 0;
  RegisterDeviceNotification(Handle, @dbv, DEVICE_NOTIFY_WINDOW_HANDLE);
end;
Bin mir aber ned ganz sicher ob das alles so richtig uns "sauber" ist... vor allem bei dem FormCreate...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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