В прикрепленных файлах лежит пример опроса USB на наличие устройств.
Никак немогу найти код для оключения порта, хотелось бы что то типа
// Отображение информации о порте
procedure TForm1.ShowHubPortDetail(hRoot : THandle; iPort : Integer);
var Success : LongBool; NodeConnInfo : TNodeConnectionInformation;
BytesReturned : Cardinal; PortStatus : Byte;
begin
NodeConnInfo.ConnectionIndex:= iPort+1; // нумерация с 1!
// IOCTL_USB_GET_NODE_CONNECTION_INFORMATION
Success:= DeviceIoControl(hRoot, GetUSBCtlCode(4),
@NodeConnInfo, sizeof(NodeConnInfo),
@NodeConnInfo, sizeof(NodeConnInfo),
BytesReturned, nil
);
If not(Success) then begin
Log(' Ошибка получения информации о порте');
Exit;
End;
PortStatus:= NodeConnInfo.ConnectionStatus[1];
If (PortStatus <> Byte(DeviceConnected)) then begin
If (PortStatus = Byte(NoDeviceConnected)) then begin
Log(Format(' К порту %d устройств не подключено',[iPort]));
End else begin
Log(Format(' Состояние порта %d = %d',[iPort, Byte(PortStatus)]));
End;
End else begin
If not(NodeConnInfo.DeviceIsHub) then begin
Log(Format(' К порту %d подключено устройство', [iPort]));
ShowDeviceDetail(hRoot, iPort);
End else begin
Log(Format(' К порту %d подключен хаб', [iPort]));
// послать IOCTL_USB_GET_NODE_CONNECTION_NAME
// получить дескриптор хаба и повторить операцию для
// каждого порта этого хаба
// рекурсия: ShowRootHubDetail(hRoot : THandle);
End;
End;
end;
http://msdn2.microsoft.com/en-us/library/aa476228.aspx справка по USB
вобщем нужно отключить устройство через DeviceIoControl(
например
USB#ROOT_HUB#4&39633dbc&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
), но как заполнять DeviceIoControl( я незнаю.
F1 справка ничего по нему не находит
но даже если будет документация понему, это не сильно поможет, DeviceIoControl требует указания каких то буферов чтения, их размеров адресов.
P.S. забил прекрипить проект