![]() |
|
|
#1
|
|||
|
|||
|
как пишется код отключения USB портов???
|
|
#2
|
|||
|
|||
|
Мне кстати тоже интересно...
![]() |
|
#3
|
|||
|
|||
|
Попробуй это:
Сначала продекларируй ф-ции: function SetupDiGetClassDevsA(ClassGuid: PGUID; Enumerator: PChar; hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall; external setupapi; function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO; MemberIndex: DWORD; DeviceInfoData: PSP_DEVINFO_DATA): boolean; stdcall; external setupapi; function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): boolean; stdcall; external setupapi; function CM_Get_Parent(pdnDevInst: PDWORD; dnDevInst: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi; function CM_Get_Device_ID_Size(pulLen: PDWORD; dnDevInst: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi; function CM_Get_Device_IDA(dnDevInst: DWORD; Buffer: PChar; BufferLen: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi; function CM_Locate_DevNodeA(pdnDevInst: PDWORD; pDeviceID: PChar; ulFlags: DWORD): DWORD; stdcall; external setupapi; function CM_Request_Device_EjectA(dnDevInst: DWORD; pVetoType: Pointer; pszVetoName: PChar; ulNameLength: DWORD; ulFlags: DWORD): DWORD; stdcall; external setupapi; Затем используй процедуру: procedure EjectUSB(); // Отключение флешки const GUID_DEVCLASS_DISKDRIVE: TGUID = (D1: $4D36E967; D2: $E325; D3: $11CE; D4: ($BF, $C1, $08, $00, $2B, $E1, $03, $18)); var hDevInfoSet: HDEVINFO; DevInfo : SP_DEVINFO_DATA; i : Integer; Parent : DWORD; VetoName : PChar; begin DevInfo.cbSize := sizeof(SP_DEVINFO_DATA); hDevInfoSet := SetupDiGetClassDevsA(@GUID_DEVCLASS_DISKDRIVE, nil, 0, 2); if hDevInfoSet = INVALID_HANDLE_VALUE then exit; i := 0; while (SetupDiEnumDeviceInfo(hDevInfoSet, i, @DevInfo)) do begin if (IsUSBDevice(DevInfo.DevInst)) and (CM_Get_Parent(@Parent, DevInfo.DevInst, 0) = 0) then begin VetoName := GetMemory(260); if (CM_Request_Device_EjectA(Parent, nil, VetoName, 260, 0) <> 0) then begin if (CM_Locate_DevNodeA(@Parent, VetoName, 0) <> 0) then begin FreeMemory(VetoName); continue; end; FreeMemory(VetoName); if (CM_Request_Device_EjectA(Parent, nil, nil, 0, 0) <> 0) then continue; end; FreeMemory(VetoName); break; end; inc(i); end; SetupDiDestroyDeviceInfoList(hDevInfoSet); end; |
|
#4
|
||||
|
||||
|
Не забывайте использовать тег [СODE]...[/СODE]! Читайте правила форума! Уже смотреть на код без тега [СODE]...[/СODE] тошно!
|
|
#5
|
|||
|
|||
|
А также можешь использовать проверку на наличие устройства в USB:
Код:
|