Hallo,
ich möchte ein Programm schreiben, was Usb-Sticks erkennt, und auf ihnen gespeicherte Autorun.inf-Dateien ausführt. Dafür muss ich erkennen wann ein Usb-Stick eingesteckt wird, und wie der Laufwerksbuchstabe lautet. Ich habe hier eine (nicht funktionierende) Unit gefunden, die schonmal prüfen soll, ob ein Usb-Stick eingesteckt wurde.
Weiß jemand, wie man das machen kann?
Viele Dank im Voraus,
Finn
Usb Stick erkennen
-
- Beiträge: 19
- Registriert: Di 30. Apr 2019, 14:43
- OS, Lazarus, FPC: Windows 10, Lazarus 2.0.2, FPC 3.0.4
- CPU-Target: 64Bit
- Wohnort: Nordhessen
Usb Stick erkennen
Windows 10, 64bit, Lazarus 2.0.2, Fpc 3.0.4
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Usb Stick erkennen
Hallo!
Erkennen wenn eine USB Gerät reingestopft wird gibt es schon mal im Internationalen Forum hier: https://forum.lazarus.freepascal.org/ ... ic=44539.0
In Reply #4 gibt user rvk einen kurzen Demo-Code für Windows.
Winni
Erkennen wenn eine USB Gerät reingestopft wird gibt es schon mal im Internationalen Forum hier: https://forum.lazarus.freepascal.org/ ... ic=44539.0
In Reply #4 gibt user rvk einen kurzen Demo-Code für Windows.
Winni
-
- Beiträge: 19
- Registriert: Di 30. Apr 2019, 14:43
- OS, Lazarus, FPC: Windows 10, Lazarus 2.0.2, FPC 3.0.4
- CPU-Target: 64Bit
- Wohnort: Nordhessen
Re: Usb Stick erkennen
Vielen Dank, das funktioniert. Mein Code sieht jetzt so aus:
Allerdings habe ich noch nicht verstanden wie ich den Laufwerksbuchstaben rauskriege. Kann da nochmal jemand helfen?
Vielen Dank im Voraus,
Finn
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses windows;
{$R *.lfm}
var PrevWndProc: WNDPROC;
{ TForm1 }
function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam): LRESULT; stdcall;
begin
if uMsg = WM_DEVICECHANGE then
begin
if(wParam = $8000)then Form1.Caption := 'Eingesteckt um: ' + TimeToStr(Time);
if(wParam = $8004)then Form1.Caption := 'Rausgezogen um: ' + TimeToStr(Time);
end;
Result := CallWindowProc(PrevWndProc, Ahwnd, uMsg, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PrevWndProc := Windows.WNDPROC(SetWindowLongPtr(Self.Handle, GWL_WNDPROC, PtrInt(@WndCallback)));
end;
end.
Vielen Dank im Voraus,
Finn
Windows 10, 64bit, Lazarus 2.0.2, Fpc 3.0.4
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: Usb Stick erkennen
Den Laufwerksbuchstaben des zuletzt hinzugefügten USB-Sticks könnte man mit WMI/WQL ermitteln (Plattform: Windows):Allerdings habe ich noch nicht verstanden wie ich den Laufwerksbuchstaben rauskriege. Kann da nochmal jemand helfen?
Hier ist eine UNIT mit GetUsbDriveLetter:
Code: Alles auswählen
unit UsbDriveLetter;
interface
uses
windows;
// Laufwerksbuchstabe vom letzten Wechseldatenträger
function GetUsbDriveLetter:String;
implementation
uses
ActiveX,
ComObj,
Variants;
function GetUsbDriveLetter:String;
const
WbemUser ='';
WbemPassword ='';
WbemComputer ='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject: {$IF FPC_FULLVERSION>=30000}OleVariant{$ELSE}Variant{$ENDIF};
oEnum: IEnumvariant;
CeltFetched: ULONG;
begin
Result:='';
FSWbemLocator:=CreateOleObject('WbemScripting.SWbemLocator');
FWMIService:=FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_LogicalDisk WHERE Access=0 AND DriveType=2','WQL',wbemFlagForwardOnly);
oEnum:=IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject{$IF FPC_FULLVERSION>=30000}, CeltFetched{$ENDIF}) = 0 do begin
Result:=FWbemObject.Properties_.Item('DeviceID').Value;
FWbemObject:=Unassigned;
end;
end;
end.
Dirk