![]() |
neues Laufwerk erkennen
Hallo,
zur Zeit sieht mein Programm folgendermaßen aus: Es läuft ein Timer der in einem bestimmten Abstand alle Laufwerke abfragt und schaut ob Laufwerk L: dabei ist...hmm, ein wenig doof. Deshalb wollte ich fragen, wie man denn quasi das Programm die Nachricht "abfangen" lassen könnte, wenn ein neues Laufwerk hinzukommt bzw. eines wieder entfernt wird z.B. USB Stick (Wechselmedium). vielen Dank Florian BTW: Hat ein USB Stick auch änhlich zu einer Festplatte eine Unique Device ID, oder vergleichbares? |
Re: neues Laufwerk erkennen
Windows Schick da eine nachricht, wenn ein USB Gerät angeschlossen wird. Allerdings weiß ich jetzt nicht welche. Robert Marquardt ist aber unser USB Experte. Such mal nach Beiträgen von ihm, die mit USB zu tun haben.
|
Re: neues Laufwerk erkennen
Bei jeder Aenderung an den Geraeten bekommt man eine WM_DEVICECHANGE Nachricht.
Ich verweise jetzt mal auf JwaDbt.pas aus dem Modul win32api der Jedi-Apilib. ![]() Da sind auch Kommentare von Microsoft mit dabei. Ansonsten hilft immer MSDN weiter. Microsoft hat das alles online. |
Re: neues Laufwerk erkennen
Ich habe zig Prozeduren ausprobiert...keine jedoch erfolgreich. Es wird mir angezeigt, wenn ein Laufwerk dazu kommt bzw. entfernt wird, jedoch bräuchte ich den Laufwerksbuchstaben oder ähnliches?
eine Beispiel Prozedur aus dem Forum übernommen:
Delphi-Quellcode:
[Drive] ist leer...Msg.lParam liefert eine mehrstellige Zahl.
procedure TfrmMain.WMDeviceChange(var Msg: TMessage);
type PDevBroadcastHdr = ^TDevBroadcastHdr; TDevBroadcastHdr = packed record dbcd_size, dbcd_devicetype, dbcd_reserved: DWORD; end; type PDevBroadcastVolume = ^TDevBroadcastVolume; TDevBroadcastVolume = packed record dbcv_size, dbcv_devicetype, dbcv_reserved, dbcv_unitmask: DWORD; dbcv_flags: Word; end; function GetDrive(pDBVol: PDevBroadcastVolume): string; var i: Byte; Maske: DWORD; begin if (pDBVol^.dbcv_flags and $0001) = $0001 then begin Maske := pDBVol^.dbcv_unitmask; for i := 0 to 25 do begin if (Maske and 1) = 1 then Result := Char(i + Ord('A')) + ': '; Maske := Maske shr 1; end; end; end; var Drive: String; begin case Msg.wParam of $8000: if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then ShowMessage('Datenträger in Laufwerk '+GetDrive(PDevBroadcastVolume(Msg.lParam))+'eingelegt'); $8004: if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then begin Drive := GetDrive(PDevBroadcastVolume(Msg.lParam)); ShowMessage('Datenträger aus Laufwerk '+Drive+'entfernt'); if not(Drive = '') and (Drive[1] = ExtractFilePath(ParamStr(0))[1]) then Close; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz