Como Remover USB ou qualquer Hardware via Delphi
Pessoal gostaria de saber se tem como eu remover um dispositivo USB via Delphi, tipo Pen Drive ou Impressora? É o seguinte, gostaria de remover o dispositivo (por exemplo o Pen Drive) sem ter que clicar no ícone Remover Dispositivo com Segurança que fica ao lado do relógio do Windows. Existe alguma rotina que faça o mesmo que esse ícone via código Delphi?? Se alguém puder me ajudar ficarei muito grato!!!!
Vlw!!
Vlw!!
Ewerton Rodrigues
Curtidas 0
Respostas
Wilson Junior
22/11/2011
De uma olhada nestes links:
http://stackoverflow.com/questions/434688/how-can-i-remove-a-usb-flash-disk-programmatically-using-delphi
http://www.dicasbcb.com/forum/viewtopic.php?t=1333
Espero ter colaborado.
http://stackoverflow.com/questions/434688/how-can-i-remove-a-usb-flash-disk-programmatically-using-delphi
http://www.dicasbcb.com/forum/viewtopic.php?t=1333
Espero ter colaborado.
GOSTEI 0
Leonardo Xavier
22/11/2011
Cara de uma olhaada neste código não consegui testar, porque meu delphi deu pau :s, mas testa o código ai e diz se funcionou. Abraços.
// ==========================================================================
// USB - Insertion and Removal Detection Class
// Mike Heydon 2007
//
// Assignable Events
// eg. procedure TForm1.MyOnInsert(AObject : TObject;
// const ADevType,ADriverName,
// AFriendlyName : string)
//
// OnUsbInsertion : TOnUsbChangeEvent
// OnUsbRemoval : TOnUsbChangeEvent
//
// Example of string returned by API
//
// \\?\USB#Vid_4146&Pid_d2b5#0005050400044#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
//
// Example of output from above string from my Iomega Stick :
//
// USB Inserted
// Device Type = USB Mass Storage Device
// Driver Name = Disk drive
// Friendly Name = I0MEGA UMni1GB*IOM2J4 USB Device
//
// Example Code (Skeleton) ....
//
// interface
// uses MahUSB
//
// type
// TForm1 = class(TForm)
// procedure FormShow(Sender: TObject);
// procedure FormClose(Sender: TObject; var Action: TCloseAction);
// private
// { Private declarations }
// FUsb : TUsbClass;
// procedure UsbIN(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// procedure UsbOUT(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// public
// end;
//
// implementation
//
// procedure TForm1.FormShow(Sender: TObject);
// begin
// FUsb := TUsbClass.Create;
// FUsb.OnUsbInsertion := UsbIN;
// FUsb.OnUsbRemoval := UsbOUT;
// end;
//
// procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
// begin
// FreeAndNil(FUsb);
// end;
//
// procedure TForm1.UsbIN(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// begin
// showmessage(USB Inserted - Device Type = + ADevType + #13#10 +
// Driver Name = + ADriverName + #13+#10 +
// Friendly Name = + AFriendlyName);
// end;
//
//
// procedure TForm1.UsbOUT(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// begin
// showmessage(USB Removed - Device Type = + ADevType + #13#10 +
// Driver Name = + ADriverName + #13+#10 +
// Friendly Name = + AFriendlyName);
// end;
//
// end.
//
// =========================================================================
unit MahUSB;
interface
uses Windows, Messages, SysUtils, Classes, Registry, Masks;
type
{ Event Types }
TOnUsbChangeEvent = procedure(AObject : TObject;
const ADevType,ADriverName,
AFriendlyName : string) of object;
{ USB Class }
TUsbClass = class(TObject)
private
FHandle : HWND;
FOnUsbRemoval,
FOnUsbInsertion : TOnUsbChangeEvent;
procedure GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
procedure WinMethod(var AMessage : TMessage);
procedure RegisterUsbHandler;
procedure WMDeviceChange(var AMessage : TMessage);
public
constructor Create;
destructor Destroy; override;
property OnUsbInsertion : TOnUsbChangeEvent read FOnUsbInsertion
write FOnUsbInsertion;
property OnUsbRemoval : TOnUsbChangeEvent read FOnUsbRemoval
write FOnUsbRemoval;
end;
// -----------------------------------------------------------------------------
implementation
type
// Win API Definitions
PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE;
DEV_BROADCAST_DEVICEINTERFACE = record
dbcc_size : DWORD;
dbcc_devicetype : DWORD;
dbcc_reserved : DWORD;
dbcc_classguid : TGUID;
dbcc_name : char;
end;
const
// Miscellaneous
GUID_DEVINTF_USB_DEVICE : TGUID = {A5DCBF10-6530-11D2-901F-00C04FB951ED};
USB_INTERFACE = $00000005; // Device interface class
USB_INSERTION = $8000; // System detected a new device
USB_REMOVAL = $8004; // Device is gone
// Registry Keys
USBKEY = SYSTEM\CurrentControlSet\Enum\USB\%s\%s;
USBSTORKEY = SYSTEM\CurrentControlSet\Enum\USBSTOR;
SUBKEY1 = USBSTORKEY + \%s;
SUBKEY2 = SUBKEY1 + \%s;
constructor TUsbClass.Create;
begin
inherited Create;
FHandle := AllocateHWnd(WinMethod);
RegisterUsbHandler;
end;
destructor TUsbClass.Destroy;
begin
DeallocateHWnd(FHandle);
inherited Destroy;
end;
procedure TUsbClass.GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
var sWork,sKey1,sKey2 : string;
oKeys,oSubKeys : TStringList;
oReg : TRegistry;
i,ii : integer;
bFound : boolean;
begin
ADevType := ;
ADriverDesc := ;
AFriendlyName := ;
if ADeviceString <> then begin
bFound := false;
oReg := TRegistry.Create;
oReg.RootKey := HKEY_LOCAL_MACHINE;
// Extract the portions of the string we need for registry. eg.
// \\?\USB#Vid_4146&Pid_d2b5#0005050400044#{a5dcbf10- ..... -54334fb951ed}
// We need sKey1=Vid_4146&Pid_d2b5 and sKey2=0005050400044
sWork := copy(ADeviceString,pos(#,ADeviceString) + 1,1026);
sKey1 := copy(sWork,1,pos(#,sWork) - 1);
sWork := copy(sWork,pos(#,sWork) + 1,1026);
sKey2 := copy(sWork,1,pos(#,sWork) - 1);
// Get the Device type description from \USB key
if oReg.OpenKeyReadOnly(Format(USBKEY,[skey1,sKey2])) then begin
ADevType := oReg.ReadString(DeviceDesc);
oReg.CloseKey;
oKeys := TStringList.Create;
oSubKeys := TStringList.Create;
// Get list of keys in \USBSTOR and enumerate each key
// for a key that matches our sKey2=0005050400044
// NOTE : The entry we are looking for normally has &0
// appended to it eg. 0005050400044&0
if oReg.OpenKeyReadOnly(USBSTORKEY) then begin
oReg.GetKeyNames(oKeys);
oReg.CloseKey;
// Iterate through list to find our sKey2
for i := 0 to oKeys.Count - 1 do begin
if oReg.OpenKeyReadOnly(Format(SUBKEY1,[oKeys[i]])) then begin
oReg.GetKeyNames(oSubKeys);
oReg.CloseKey;
for ii := 0 to oSubKeys.Count - 1 do begin
if MatchesMask(oSubKeys[ii],sKey2 + *) then begin
// Got a match?, get the actual desc and friendly name
if oReg.OpenKeyReadOnly(Format(SUBKEY2,[oKeys[i],
oSubKeys[ii]])) then begin
ADriverDesc := oReg.ReadString(DeviceDesc);
AFriendlyName := oReg.ReadString(FriendlyName);
oReg.CloseKey;
end;
bFound := true;
end;
end;
end;
if bFound then break;
end;
end;
FreeAndNil(oKeys);
FreeAndNil(oSubKeys);
end;
FreeAndNil(oReg);
end;
end;
procedure TUsbClass.WMDeviceChange(var AMessage : TMessage);
var iDevType : integer;
sDevString,sDevType,
sDriverName,sFriendlyName : string;
pData : PDevBroadcastDeviceInterface;
begin
if (AMessage.wParam = USB_INSERTION) or
(AMessage.wParam = USB_REMOVAL) then begin
pData := PDevBroadcastDeviceInterface(AMessage.LParam);
iDevType := pData^.dbcc_devicetype;
// Is it a USB Interface Device ?
if iDevType = USB_INTERFACE then begin
sDevString := PChar(@pData^.dbcc_name);
GetUsbInfo(sDevString,sDevType,sDriverName,sFriendlyName);
// Trigger Events if assigned
if (AMessage.wParam = USB_INSERTION) and
Assigned(FOnUsbInsertion) then
FOnUsbInsertion(self,sDevType,sDriverName,sFriendlyName);
if (AMessage.wParam = USB_REMOVAL) and
Assigned(FOnUsbRemoval) then
FOnUsbRemoval(self,sDevType,sDriverName,sFriendlyName);
end;
end;
end;
procedure TUsbClass.WinMethod(var AMessage : TMessage);
begin
if (AMessage.Msg = WM_DEVICECHANGE) then
WMDeviceChange(AMessage)
else
AMessage.Result := DefWindowProc(FHandle,AMessage.Msg,
AMessage.wParam,AMessage.lParam);
end;
procedure TUsbClass.RegisterUsbHandler;
var rDbi : DEV_BROADCAST_DEVICEINTERFACE;
iSize : integer;
begin
iSize := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
ZeroMemory(@rDbi,iSize);
rDbi.dbcc_size := iSize;
rDbi.dbcc_devicetype := USB_INTERFACE;
rDbi.dbcc_reserved := 0;
rDbi.dbcc_classguid := GUID_DEVINTF_USB_DEVICE;
rDbi.dbcc_name := #0;
RegisterDeviceNotification(FHandle,@rDbi,DEVICE_NOTIFY_WINDOW_HANDLE);
end;
end.
GOSTEI 0
Leonardo Xavier
22/11/2011
Cara de uma olhaada neste código não consegui testar, porque meu delphi deu pau :s, mas testa o código ai e diz se funcionou. Abraços.
// ==========================================================================
// USB - Insertion and Removal Detection Class
// Mike Heydon 2007
//
// Assignable Events
// eg. procedure TForm1.MyOnInsert(AObject : TObject;
// const ADevType,ADriverName,
// AFriendlyName : string)
//
// OnUsbInsertion : TOnUsbChangeEvent
// OnUsbRemoval : TOnUsbChangeEvent
//
// Example of string returned by API
//
// \\?\USB#Vid_4146&Pid_d2b5#0005050400044#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
//
// Example of output from above string from my Iomega Stick :
//
// USB Inserted
// Device Type = USB Mass Storage Device
// Driver Name = Disk drive
// Friendly Name = I0MEGA UMni1GB*IOM2J4 USB Device
//
// Example Code (Skeleton) ....
//
// interface
// uses MahUSB
//
// type
// TForm1 = class(TForm)
// procedure FormShow(Sender: TObject);
// procedure FormClose(Sender: TObject; var Action: TCloseAction);
// private
// { Private declarations }
// FUsb : TUsbClass;
// procedure UsbIN(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// procedure UsbOUT(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// public
// end;
//
// implementation
//
// procedure TForm1.FormShow(Sender: TObject);
// begin
// FUsb := TUsbClass.Create;
// FUsb.OnUsbInsertion := UsbIN;
// FUsb.OnUsbRemoval := UsbOUT;
// end;
//
// procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
// begin
// FreeAndNil(FUsb);
// end;
//
// procedure TForm1.UsbIN(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// begin
// showmessage(USB Inserted - Device Type = + ADevType + #13#10 +
// Driver Name = + ADriverName + #13+#10 +
// Friendly Name = + AFriendlyName);
// end;
//
//
// procedure TForm1.UsbOUT(ASender : TObject; const ADevType,ADriverName,
// AFriendlyName : string);
// begin
// showmessage(USB Removed - Device Type = + ADevType + #13#10 +
// Driver Name = + ADriverName + #13+#10 +
// Friendly Name = + AFriendlyName);
// end;
//
// end.
//
// =========================================================================
unit MahUSB;
interface
uses Windows, Messages, SysUtils, Classes, Registry, Masks;
type
{ Event Types }
TOnUsbChangeEvent = procedure(AObject : TObject;
const ADevType,ADriverName,
AFriendlyName : string) of object;
{ USB Class }
TUsbClass = class(TObject)
private
FHandle : HWND;
FOnUsbRemoval,
FOnUsbInsertion : TOnUsbChangeEvent;
procedure GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
procedure WinMethod(var AMessage : TMessage);
procedure RegisterUsbHandler;
procedure WMDeviceChange(var AMessage : TMessage);
public
constructor Create;
destructor Destroy; override;
property OnUsbInsertion : TOnUsbChangeEvent read FOnUsbInsertion
write FOnUsbInsertion;
property OnUsbRemoval : TOnUsbChangeEvent read FOnUsbRemoval
write FOnUsbRemoval;
end;
// -----------------------------------------------------------------------------
implementation
type
// Win API Definitions
PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE;
DEV_BROADCAST_DEVICEINTERFACE = record
dbcc_size : DWORD;
dbcc_devicetype : DWORD;
dbcc_reserved : DWORD;
dbcc_classguid : TGUID;
dbcc_name : char;
end;
const
// Miscellaneous
GUID_DEVINTF_USB_DEVICE : TGUID = {A5DCBF10-6530-11D2-901F-00C04FB951ED};
USB_INTERFACE = $00000005; // Device interface class
USB_INSERTION = $8000; // System detected a new device
USB_REMOVAL = $8004; // Device is gone
// Registry Keys
USBKEY = SYSTEM\CurrentControlSet\Enum\USB\%s\%s;
USBSTORKEY = SYSTEM\CurrentControlSet\Enum\USBSTOR;
SUBKEY1 = USBSTORKEY + \%s;
SUBKEY2 = SUBKEY1 + \%s;
constructor TUsbClass.Create;
begin
inherited Create;
FHandle := AllocateHWnd(WinMethod);
RegisterUsbHandler;
end;
destructor TUsbClass.Destroy;
begin
DeallocateHWnd(FHandle);
inherited Destroy;
end;
procedure TUsbClass.GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
var sWork,sKey1,sKey2 : string;
oKeys,oSubKeys : TStringList;
oReg : TRegistry;
i,ii : integer;
bFound : boolean;
begin
ADevType := ;
ADriverDesc := ;
AFriendlyName := ;
if ADeviceString <> then begin
bFound := false;
oReg := TRegistry.Create;
oReg.RootKey := HKEY_LOCAL_MACHINE;
// Extract the portions of the string we need for registry. eg.
// \\?\USB#Vid_4146&Pid_d2b5#0005050400044#{a5dcbf10- ..... -54334fb951ed}
// We need sKey1=Vid_4146&Pid_d2b5 and sKey2=0005050400044
sWork := copy(ADeviceString,pos(#,ADeviceString) + 1,1026);
sKey1 := copy(sWork,1,pos(#,sWork) - 1);
sWork := copy(sWork,pos(#,sWork) + 1,1026);
sKey2 := copy(sWork,1,pos(#,sWork) - 1);
// Get the Device type description from \USB key
if oReg.OpenKeyReadOnly(Format(USBKEY,[skey1,sKey2])) then begin
ADevType := oReg.ReadString(DeviceDesc);
oReg.CloseKey;
oKeys := TStringList.Create;
oSubKeys := TStringList.Create;
// Get list of keys in \USBSTOR and enumerate each key
// for a key that matches our sKey2=0005050400044
// NOTE : The entry we are looking for normally has &0
// appended to it eg. 0005050400044&0
if oReg.OpenKeyReadOnly(USBSTORKEY) then begin
oReg.GetKeyNames(oKeys);
oReg.CloseKey;
// Iterate through list to find our sKey2
for i := 0 to oKeys.Count - 1 do begin
if oReg.OpenKeyReadOnly(Format(SUBKEY1,[oKeys[i]])) then begin
oReg.GetKeyNames(oSubKeys);
oReg.CloseKey;
for ii := 0 to oSubKeys.Count - 1 do begin
if MatchesMask(oSubKeys[ii],sKey2 + *) then begin
// Got a match?, get the actual desc and friendly name
if oReg.OpenKeyReadOnly(Format(SUBKEY2,[oKeys[i],
oSubKeys[ii]])) then begin
ADriverDesc := oReg.ReadString(DeviceDesc);
AFriendlyName := oReg.ReadString(FriendlyName);
oReg.CloseKey;
end;
bFound := true;
end;
end;
end;
if bFound then break;
end;
end;
FreeAndNil(oKeys);
FreeAndNil(oSubKeys);
end;
FreeAndNil(oReg);
end;
end;
procedure TUsbClass.WMDeviceChange(var AMessage : TMessage);
var iDevType : integer;
sDevString,sDevType,
sDriverName,sFriendlyName : string;
pData : PDevBroadcastDeviceInterface;
begin
if (AMessage.wParam = USB_INSERTION) or
(AMessage.wParam = USB_REMOVAL) then begin
pData := PDevBroadcastDeviceInterface(AMessage.LParam);
iDevType := pData^.dbcc_devicetype;
// Is it a USB Interface Device ?
if iDevType = USB_INTERFACE then begin
sDevString := PChar(@pData^.dbcc_name);
GetUsbInfo(sDevString,sDevType,sDriverName,sFriendlyName);
// Trigger Events if assigned
if (AMessage.wParam = USB_INSERTION) and
Assigned(FOnUsbInsertion) then
FOnUsbInsertion(self,sDevType,sDriverName,sFriendlyName);
if (AMessage.wParam = USB_REMOVAL) and
Assigned(FOnUsbRemoval) then
FOnUsbRemoval(self,sDevType,sDriverName,sFriendlyName);
end;
end;
end;
procedure TUsbClass.WinMethod(var AMessage : TMessage);
begin
if (AMessage.Msg = WM_DEVICECHANGE) then
WMDeviceChange(AMessage)
else
AMessage.Result := DefWindowProc(FHandle,AMessage.Msg,
AMessage.wParam,AMessage.lParam);
end;
procedure TUsbClass.RegisterUsbHandler;
var rDbi : DEV_BROADCAST_DEVICEINTERFACE;
iSize : integer;
begin
iSize := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
ZeroMemory(@rDbi,iSize);
rDbi.dbcc_size := iSize;
rDbi.dbcc_devicetype := USB_INTERFACE;
rDbi.dbcc_reserved := 0;
rDbi.dbcc_classguid := GUID_DEVINTF_USB_DEVICE;
rDbi.dbcc_name := #0;
RegisterDeviceNotification(FHandle,@rDbi,DEVICE_NOTIFY_WINDOW_HANDLE);
end;
end.
pode verificar neste linkj aqui tambem:http://cc.embarcadero.com/Item/26039
GOSTEI 0
Ewerton Rodrigues
22/11/2011
unit MahUSB;
interface
uses Windows, Messages, SysUtils, Classes, Registry, Masks;
type
{ Event Types }
TOnUsbChangeEvent = procedure(AObject : TObject;
const ADevType,ADriverName,
AFriendlyName : string) of object;
{ USB Class }
TUsbClass = class(TObject)
private
FHandle : HWND;
FOnUsbRemoval,
FOnUsbInsertion : TOnUsbChangeEvent;
procedure GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
procedure WinMethod(var AMessage : TMessage);
procedure RegisterUsbHandler;
procedure WMDeviceChange(var AMessage : TMessage);
public
constructor Create;
destructor Destroy; override;
property OnUsbInsertion : TOnUsbChangeEvent read FOnUsbInsertion
write FOnUsbInsertion;
property OnUsbRemoval : TOnUsbChangeEvent read FOnUsbRemoval
write FOnUsbRemoval;
end;
implementation
type
// Win API Definitions
PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE;
DEV_BROADCAST_DEVICEINTERFACE = record
dbcc_size : DWORD;
dbcc_devicetype : DWORD;
dbcc_reserved : DWORD;
dbcc_classguid : TGUID;
dbcc_name : char;
end;
const
// Miscellaneous
GUID_DEVINTF_USB_DEVICE = TGUID := A5DCBF10-6530-11D2-901F-00C04FB951ED;
USB_INTERFACE = $00000005; // Device interface class
USB_INSERTION = $8000; // System detected a new device
USB_REMOVAL = $8004; // Device is gone
// Registry Keys
USBKEY = System\CurrentControlSet\Enum\USB\%s\%s;
USBSTORKEY = SYSTEM\CurrentControlSet\Enum\USBSTOR;
SUBKEY1 = USBSTORKEY + \%s;
SUBKEY2 = SUBKEY1 + \%s;
constructor TUsbClass.Create;
begin
inherited Create;
FHandle := AllocateHWnd(WinMethod);
RegisterUsbHandler;
end;
destructor TUsbClass.Destroy;
begin
DeallocateHWnd(FHandle);
inherited Destroy;
end;
procedure TUsbClass.GetUsbInfo(const ADeviceString : string;
out ADevType,ADriverDesc,
AFriendlyName : string);
var sWork,sKey1,sKey2 : string;
oKeys,oSubKeys : TStringList;
oReg : TRegistry;
i,ii : integer;
bFound : boolean;
begin
ADevType := ;
ADriverDesc := ;
AFriendlyName := ;
if ADeviceString <> true then begin
bFound := false;
oReg := TRegistry.Create;
oReg.RootKey := HKEY_LOCAL_MACHINE;
// Extract the portions of the string we need for registry. eg.
// \\?\USB#Vid_4146&Pid_d2b5#0005050400044#{a5dcbf10- ..... -54334fb951ed}
// We need sKey1=Vid_4146&Pid_d2b5 and sKey2=0005050400044
sWork := copy(ADeviceString,pos(#,ADeviceString) + 1,1026);
sKey1 := copy(sWork,1,pos(#,sWork) - 1);
sWork := copy(sWork,pos(#,sWork) + 1,1026);
sKey2 := copy(sWork,1,pos(#,sWork) - 1);
// Get the Device type description from \USB key
if oReg.OpenKeyReadOnly(Format(USBKEY,[skey1,sKey2])) then begin
ADevType := oReg.ReadString(DeviceDesc);
oReg.CloseKey;
oKeys := TStringList.Create;
oSubKeys := TStringList.Create;
// Get list of keys in \USBSTOR and enumerate each key
// for a key that matches our sKey2=0005050400044
// NOTE : The entry we are looking for normally has &0
// appended to it eg. 0005050400044&0
if oReg.OpenKeyReadOnly(USBSTORKEY) then begin
oReg.GetKeyNames(oKeys);
oReg.CloseKey;
// Iterate through list to find our sKey2
for i := 0 to oKeys.Count - 1 do begin
if oReg.OpenKeyReadOnly(Format(SUBKEY1,[oKeys[i]])) then begin
oReg.GetKeyNames(oSubKeys);
oReg.CloseKey;
for ii := 0 to oSubKeys.Count - 1 do begin
if MatchesMask(oSubKeys[ii],sKey2 + *) then begin
// Got a match?, get the actual desc and friendly name
if oReg.OpenKeyReadOnly(Format(SUBKEY2,[oKeys[i],
oSubKeys[ii]])) then begin
ADriverDesc := oReg.ReadString(DeviceDesc);
AFriendlyName := oReg.ReadString(FriendlyName);
oReg.CloseKey;
end;
bFound := true;
end;
end;
end;
if bFound then break;
end;
end;
FreeAndNil(oKeys);
FreeAndNil(oSubKeys);
end;
FreeAndNil(oReg);
end;
end;
procedure TUsbClass.WMDeviceChange(var AMessage : TMessage);
var iDevType : integer;
sDevString,sDevType,
sDriverName,sFriendlyName : string;
pData : PDevBroadcastDeviceInterface;
begin
if (AMessage.wParam = USB_INSERTION) or
(AMessage.wParam = USB_REMOVAL) then begin
pData := PDevBroadcastDeviceInterface(AMessage.LParam);
iDevType := pData^.dbcc_devicetype;
// Is it a USB Interface Device ?
if iDevType = USB_INTERFACE then begin
sDevString := PChar(@pData^.dbcc_name);
GetUsbInfo(sDevString,sDevType,sDriverName,sFriendlyName);
// Trigger Events if assigned
if (AMessage.wParam = USB_INSERTION) and
Assigned(FOnUsbInsertion) then
FOnUsbInsertion(self,sDevType,sDriverName,sFriendlyName);
if (AMessage.wParam = USB_REMOVAL) and
Assigned(FOnUsbRemoval) then
FOnUsbRemoval(self,sDevType,sDriverName,sFriendlyName);
end;
end;
end;
procedure TUsbClass.WinMethod(var AMessage : TMessage);
begin
if (AMessage.Msg = WM_DEVICECHANGE) then
WMDeviceChange(AMessage)
else
AMessage.Result := DefWindowProc(FHandle,AMessage.Msg,
AMessage.wParam,AMessage.lParam);
end;
procedure TUsbClass.RegisterUsbHandler;
var rDbi : DEV_BROADCAST_DEVICEINTERFACE;
iSize : integer;
begin
iSize := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
ZeroMemory(@rDbi,iSize);
rDbi.dbcc_size := iSize;
rDbi.dbcc_devicetype := USB_INTERFACE;
rDbi.dbcc_reserved := 0;
rDbi.dbcc_classguid := GUID_DEVINTF_USB_DEVICE;
rDbi.dbcc_name := #0;
RegisterDeviceNotification(FHandle,@rDbi,DEVICE_NOTIFY_WINDOW_HANDLE);
end;
end.
o Máximo de erros que consegui tirar foi isto fica sem erro na barra lateral MAS não roda ainda
Vou tentar aqui mais este código ai acho que não func
Vlw
GOSTEI 0
Leonardo Xavier
22/11/2011
Tente este link: https://github.com/bgbennyboy/USB-Disk-Ejector/blob/master/uDriveEjector.pas
GOSTEI 0
Ewerton Rodrigues
22/11/2011
Deste site o Código é maior e A único coisa que muda é que os erros são violento tentei ir mudando mas não dá
Será que precisa deste monte coisas
Não tem um componente que você escolhe o Driver que quer remover e remove ele não
Vlw vou continuar na busca
Será que precisa deste monte coisas
Não tem um componente que você escolhe o Driver que quer remover e remove ele não
Vlw vou continuar na busca
GOSTEI 0
Ewerton Rodrigues
22/11/2011
Alguém saberia me responder como ejetar um drivers como por exemplo um pendriver
GOSTEI 0