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

Display USB Device

 
st
一般會員


發表:11
回覆:21
積分:11
註冊:2004-07-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-30 16:08:53 IP:211.22.xxx.xxx 未訂閱
看了版上有關 USB 的讀取及使用,小弟整理了一下將它寫了 一個"可用"的完整 BCB 程式,提供給任何有興趣的人參考.< >< > 1.請放TForm1,三個TButton(cmdAbout,cmdSave,smdGetUSB) TGroupBox,TSaveDialog,TSplitter,TListBox,TTreeView 各一個. 2.DisplayUSB.h //--------------------------------------------------------------------------- #ifndef UnitUSBH #define UnitUSBH //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include #include #include #include #include #include "winioctl.h" #include "usbioctl.h" #include "malloc.h" #include "cfgmgr32.h" #include "vndrlist.h" #include "stdio.h" #include "SETUPAPI.H" #include "UnitAbout.h" //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TSaveDialog *SaveDialog1; TGroupBox *GroupBox1; TTreeView *TreeView1; TSplitter *Splitter1; TListBox *ListBox1; TButton *cmdGetUSB; TButton *cmdSave; TButton *cmdAbout; void __fastcall cmdGetUSBClick(TObject *Sender); void __fastcall TreeView1Click(TObject *Sender); void __fastcall cmdSaveClick(TObject *Sender); void __fastcall FormResize(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall cmdAboutClick(TObject *Sender); private: // User declarations bool DEBUG; // Set to true to enable DEBUG messages SECURITY_ATTRIBUTES SA; // Needed for Win2000 int treeCount; //TreeView Count int treeLevel; //TreeView branch int usbCount; //For USB_Device_Handle_Array[20] int treePn; //TreeView branch point number bool treeBack; //TreeView branch back boolean int treeRoot; //TreeView root number //------------------------------------------------------------------------ //USB Device HANDLE Array struct _USB_Device_Handle_Array { HANDLE hWnd; AnsiString USBName; int treeNode; ULONG port; AnsiString RootHubName; AnsiString devicePath; AnsiString deviceSN; AnsiString deviceDesc; }USB_Device_Handle_Array[20]; //USB Device Information Array struct _USB_Device_Information { AnsiString deviceDesc; AnsiString localInfo; AnsiString DeviceID; AnsiString devicePath; AnsiString deviceSN; }USB_Device_Information; //------------------------------------------------------------ //Define all stuctures using UCHAR or BOOLEAN so that //the variables are not 'aligned' by the compiler typedef struct _DESCRIPTOR_REQUEST { ULONG ConnectionIndex; struct { UCHAR bmRequest; UCHAR bRequest; UCHAR wValue[2]; UCHAR wIndex[2]; UCHAR wLength[2]; } SetupPacket; UCHAR Data[2048]; }DESCRIPTOR_REQUEST, *PDESCRIPTOR_REQUEST; typedef struct _HUB_DESCRIPTOR { UCHAR bDescriptorLength; UCHAR bDescriptorType; UCHAR bNumberOfPorts; UCHAR wHubCharacteristics[2]; UCHAR bPowerOnToPowerGood; UCHAR bHubControlCurrent; UCHAR bRemoveAndPowerMask[64]; }HUB_DESCRIPTOR, *PHUB_DESCRIPTOR; typedef struct _USBDEVICEINFO { PUSB_NODE_INFORMATION HubInfo; // NULL if not a HUB PCHAR HubName; // NULL if not a HUB PUSB_NODE_CONNECTION_INFORMATION ConnectionInfo; // NULL if root HUB PUSB_DESCRIPTOR_REQUEST ConfigDesc; // NULL if root HUB PSTRING_DESCRIPTOR_NODE StringDescs; } USBDEVICEINFO, *PUSBDEVICEINFO; typedef struct _DEVICE_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; UCHAR bcdUSB[2]; UCHAR bDeviceClass; UCHAR bDeviceSubClass; UCHAR bDeviceProtocol; UCHAR bMaxPacketSize0; UCHAR idVendor[2]; UCHAR idProduct[2]; UCHAR bcdDevice[2]; UCHAR iManufacturer; UCHAR iProduct; UCHAR iSerialNumber; UCHAR bNumConfigurations; }DEVICE_DESCRIPTOR; typedef struct _NODE_INFORMATION { USB_HUB_NODE NodeType; HUB_DESCRIPTOR HubDescriptor; BOOLEAN HubIsBusPowered; }NODE_INFORMATION, *PNODE_INFORMATION; typedef struct _NODE_CONNECTION_INFORMATION { ULONG ConnectionIndex; DEVICE_DESCRIPTOR DeviceDescriptor; UCHAR CurrentConfigurationValue; bool LowSpeed; bool DeviceIsHub; UCHAR DeviceAddress[2]; UCHAR NumberOfOpenPipes[4]; UCHAR ConnectionStatus[4]; USB_PIPE_INFO PipeList[32]; }NODE_CONNECTION_INFORMATION; struct { ULONG ConnectionIndex; ULONG ActualLength; WCHAR Name[256]; }ConnectedHub; struct { ULONG Length; WCHAR Name[256]; } UnicodeName; // Common Class Endpoint Descriptor typedef struct _USB_ENDPOINT_DESCRIPTOR2 { UCHAR bLength; // offset 0, size 1 UCHAR bDescriptorType; // offset 1, size 1 UCHAR bEndpointAddress; // offset 2, size 1 UCHAR bmAttributes; // offset 3, size 1 USHORT wMaxPacketSize; // offset 4, size 2 USHORT wInterval; // offset 6, size 2 UCHAR bSyncAddress; // offset 8, size 1 }USB_ENDPOINT_DESCRIPTOR2, *PUSB_ENDPOINT_DESCRIPTOR2; DWORD EnumerateHostController(HANDLE HostControllerHandle); void GetPortData(HANDLE HubHandle, UCHAR PortCount, int HubDepth); USHORT DisplayDeviceDescriptor (HANDLE HubHandle, ULONG PortIndex, USHORT LanguageID, PUCHAR BufferPtr); USHORT DisplayConfigurationDescriptor(HANDLE HubHandle, ULONG PortIndex, USHORT LanguageID); PCHAR DriverNameToDeviceDesc(PCHAR DriverName); void DriverNameToDeviceDescInfo(PCHAR DriverName); PCHAR GetHCDDriverKeyName (HANDLE HCD); PCHAR WideStrToMultiStr (PWCHAR WideStr); PCHAR GetDriverKeyName (HANDLE Hub, ULONG ConnectionIndex); USHORT DisplayStringDescriptor (HANDLE HubHandle, ULONG PortIndex, USHORT LanguageID, UCHAR Index); void TreeLeaf(AnsiString Branch, AnsiString BranchName, int blevel); void OutPutHubInfomation(USHORT wHubChar); PCHAR GetVendorString(USHORT idVendor); void DisplayPipeInfo(ULONG NumPipes, USB_PIPE_INFO *PipeInfo); void DisplayEndpointDescriptor(PUSB_ENDPOINT_DESCRIPTOR EndpointDesc); void GetUSBDeviceAlong(HANDLE HubHandle, ULONG PortIndex); AnsiString LookingString(AnsiString Sour, AnsiString Dest); //GUID OpenINIFiles(AnsiString SectionName); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
st
一般會員


發表:11
回覆:21
積分:11
註冊:2004-07-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-04 09:27:13 IP:211.22.xxx.xxx 未訂閱
sorry, 貼錯了,請版主刪除此篇, Thanks 寫程式與攝影一樣重要
Roger1213888
一般會員


發表:0
回覆:1
積分:0
註冊:2004-09-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-04 17:43:58 IP:220.130.xxx.xxx 未訂閱
有沒有搞錯ㄚ!!這好像是C 的程式ㄟ
系統時間:2024-06-26 22:06:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!