Code
·
73 lines
·
1601 bytes
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73using System;
using System.Runtime.InteropServices;
using System.Text;
namespace HidApiNet
{
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
unsafe struct HidDeviceInfo
{
[MarshalAs(UnmanagedType.LPStr)]
public readonly string path;
public readonly ushort vendor_id;
public readonly ushort product_id;
[MarshalAs(UnmanagedType.LPWStr)]
private readonly IntPtr _serial_number;
public readonly ushort release_number;
[MarshalAs(UnmanagedType.LPWStr)]
private readonly IntPtr _manufacturer_string;
[MarshalAs(UnmanagedType.LPWStr)]
private readonly IntPtr _product_string;
public readonly ushort usage_page;
public readonly ushort usage;
public readonly int interface_number;
public readonly IntPtr next;
private int StringLength(IntPtr ptr, int maxlen)
{
if (ptr == IntPtr.Zero)
return 0;
for (int intLen = 0; intLen < maxlen; intLen++)
{
int* endchar = (int*)ptr;
if (*endchar == 0)
return intLen;
ptr = new IntPtr(ptr.ToInt32() + 4);
}
return 0;
}
private string GetString(IntPtr ptr)
{
int intLen = StringLength(ptr, 128);
if (intLen == 0)
return null;
var buf = new byte[intLen * 4];
Marshal.Copy(ptr, buf, 0, buf.Length);
return Encoding.Unicode.GetString(buf);
}
public string product_string
{
get
{
return GetString(_product_string);
}
}
public string manufacturer_string
{
get
{
return GetString(_manufacturer_string);
}
}
public string serial_number
{
get
{
return GetString(_serial_number);
}
}
}
}