全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:9759
推到 Plurk!
推到 Facebook!

[BCB] USB device 的 GUID

答題得分者是:popzone
tunkai
一般會員


發表:3
回覆:6
積分:6
註冊:2008-11-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-29 13:20:08 IP:140.115.xxx.xxx 訂閱
小弟參考之前的討論,寫了一段找出所有USB裝置的GUID的程式,
印出下面的結果;
[Dev] Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C8: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C9: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27CA: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27CB: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Intel(R) 82801G (ICH7 Family) USB2 Enhanced Host Controller - 27CC: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Root Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Root Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Root Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Root Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Root Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Mass Storage Device: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Generic USB Hub: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Mass Storage Device: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] Altera USB-Blaster: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Composite Device: {36FC9E60-C465-11CF-8056-444553540000}
[Dev] USB Composite Device: {36FC9E60-C465-11CF-8056-444553540000}


小弟發現他們GUID號碼都一樣,想說是不是程式寫錯了,
用Regedit.exe到HKEY_LOCAL_MACHINE中去看,發現GUID的號碼的確都是一樣的,
請問如果我想要取得的設備是Altera USB-Blaster: {36FC9E60-C465-11CF-8056-444553540000}的話
我該用哪一個GUID去取得handle??
tunkai
一般會員


發表:3
回覆:6
積分:6
註冊:2008-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-30 02:07:18 IP:140.115.xxx.xxx 訂閱
小弟搜尋一些討論後發現
DevicePath的格式為 \\\\?\\USB#Vid_09fb&Pid_6001#91#d2#8408#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
這是代表我已知VID與PID後按照他的格式排列,就可以去取他的handle了嗎?
popzone
一般會員


發表:0
回覆:4
積分:10
註冊:2005-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-03 13:31:51 IP:121.35.xxx.xxx 訂閱

===================引 用 tunkai 文 章===================
小弟搜尋一些討論後發現
DevicePath的格式為 \\\\?\\USB#Vid_09fb&Pid_6001#91#d2#8408#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
這是代表我已知VID與PID後按照他的格式排列,就可以去取他的handle了嗎?

USB GUID
Class = USB
ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}

USB 设备 GUID
Identifier GUID_DEVINTERFACE_USB_DEVICE
Class GUID {A5DCBF10-6530-11D2-901F-00C04FB951ED}

设备GUID跟你的驱动互相联系
需要你自己去找

可以利用USB插拔的消息帧测 ,以下USB DELPHI 代码

1 ,首先注册消息

//==============================================================================
// Register USB Drvicer Notify
//==============================================================================
function TForm1.DoRegisterDeviceInterfaceToHwnd(
const InterfaceClassGuid: TGUID; const hWnd: HWND;
Var hDeviceNotify: HDEVNOTIFY): Boolean;
var
NotificationFilter : DEV_BROADCAST_DEVICEINTERFACE ;
begin
ZeroMemory( @NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size := sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid := InterfaceClassGuid; //你的硬件GUID ,还没有得到 用USB ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}
hDeviceNotify := RegisterDeviceNotification(
hWnd, // events recipient
@NotificationFilter, // type of device
DEVICE_NOTIFY_WINDOW_HANDLE {or DEVICE_NOTIFY_ALL_INTERFACE_CLASSES //还没有得到 就 捕获所有硬件更改消息}
);
if hDeviceNotify = NIL then
begin
ShowMessage('USB Initializtion Error !');
Result := FALSE;
exit
end;
Result := TRUE;
end;

2 在窗体主消息循环里侦测 注册的消息
//==============================================================================
// Windows Message
//==============================================================================
procedure TForm1.FormWndProc(var Message: TMessage);
var
devType: Integer;
Datos: PDEV_BROADCAST_HDR;
B : PDEV_BROADCAST_DEVICEINTERFACE;
begin
OldWindowProc(Message);
case Message.Msg of
WM_DEVICECHANGE :
begin
if (Message.wParam = DBT_DEVICEARRIVAL) or (Message.wParam = DBT_DEVICEREMOVECOMPLETE) then
begin
{// B := PDEV_BROADCAST_DEVICEINTERFACE(Message.lParam);
// Memo1.Lines.Add(GUIDToString(B.dbcc_classguid));// 这里打印出你的需要侦测的 GUID}
Datos := PDEV_BROADCAST_HDR(Message.lParam);
devType := Datos^.dbch_devicetype;
if devType = DBT_DEVTYP_DEVICEINTERFACE then
begin // USB Device
if Message.wParam = DBT_DEVICEARRIVAL then
begin
//showmessage('USBArrival');
end
else
begin
//showmessage('USBRemove');
end;
end;
end;
end;
// else
// DefWindowProc(Self.Handle, Msg, wParam, lParam);
end;
end;
編輯記錄
popzone 重新編輯於 2008-12-03 13:34:06, 註解 無‧
popzone
一般會員


發表:0
回覆:4
積分:10
註冊:2005-09-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-03 13:41:45 IP:121.35.xxx.xxx 訂閱
\\\\?\\USB#Vid_09fb&Pid_6001#5&1bb9c9f4&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

DevicePath 详解
\\\\?\\USB -------> 代表USB设备
Vid_09fb&Pid_6001 -------> 硬件厂商和产品编号
5&1bb9c9f4&0&1 -------> USB 连接编号
{a5dcbf10-6530-11d2-901f-00c04fb951ed} ---> 设备GUID( 通用GUID请参见 WINDOWS DDK)
系統時間:2017-12-15 6:47:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!