網上C#USB通信的資料比較少, 基本上都是基於LibUsbDotNet 和 CyUsb, 關於打印機設備的還有一個OPOS。
本篇文章基於LibUsbDotNet。
1. 下載並安裝 LibUsbDotNet 安裝文件。
2. 運行Filter Wizard, Install a device filter。 安裝需要通信的usb設備。
3. 建一個簡單的控制台項目,進行測試, 下圖為打印需要通信設備的信息。
相關代碼:
引用
1
2
3
|
using
LibUsbDotNet;
using
LibUsbDotNet.Main;
using
LibUsbDotNet.Info;
|
PrintUsbInfo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
public
static
void
PrintUsbInfo()
{
UsbDevice usbDevice =
null
;
UsbRegDeviceList allDevices = UsbDevice.AllDevices;
Console.WriteLine(
"Found {0} devices"
, allDevices.Count);
foreach
(UsbRegistry usbRegistry
in
allDevices)
{
Console.WriteLine(
"Got device: {0}\r\n"
, usbRegistry.FullName);
if
(usbRegistry.Open(
out
usbDevice))
{
Console.WriteLine(
"Device Information\r\n------------------"
);
Console.WriteLine(
"{0}"
, usbDevice.Info.ToString());
Console.WriteLine(
"VID & PID: {0} {1}"
, usbDevice.Info.Descriptor.VendorID, usbDevice.Info.Descriptor.ProductID);
Console.WriteLine(
"\r\nDevice configuration\r\n--------------------"
);
foreach
(UsbConfigInfo usbConfigInfo
in
usbDevice.Configs)
{
Console.WriteLine(
"{0}"
, usbConfigInfo.ToString());
Console.WriteLine(
"\r\nDevice interface list\r\n---------------------"
);
ReadOnlyCollection<UsbInterfaceInfo> interfaceList = usbConfigInfo.InterfaceInfoList;
foreach
(UsbInterfaceInfo usbInterfaceInfo
in
interfaceList)
{
Console.WriteLine(
"{0}"
, usbInterfaceInfo.ToString());
Console.WriteLine(
"\r\nDevice endpoint list\r\n--------------------"
);
ReadOnlyCollection<UsbEndpointInfo> endpointList = usbInterfaceInfo.EndpointInfoList;
foreach
(UsbEndpointInfo usbEndpointInfo
in
endpointList)
{
Console.WriteLine(
"{0}"
, usbEndpointInfo.ToString());
}
}
}
usbDevice.Close();
}
Console.WriteLine(
"\r\n----- Device information finished -----\r\n"
);
}
}
|
調用
1
2
3
4
5
6
7
|
public
static
void
Main(
string
[] args)
{
PrintUsbInfo();
// Wait for user input..
Console.ReadKey();
}
|