рдЕрднреА рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ Elance рдкрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреАрддрд╛ рдерд╛ - рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ рдкрд░ рдПрдХ рд╕рд░рд▓ WinForms рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ Mettler Toledo PS60 рддрд░рд╛рдЬреВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкреИрдорд╛рдирд╛ USB HID рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдмреЗрд╕рд┐рдХ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .Net рдореЗрдВ рд╕рдорд╛рди HID рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдКрдВрдЧрд╛)
рдореИрдВрдиреЗ Google рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рдЦреЛрдЬ рдХреА, рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдВрдХ рдкрд╛рдПред
рдЕрд╕рд▓ рдореЗрдВ, рд╡реЗ
рдорд╛рдЗрдХ рдУ'рдмреНрд░рд╛рдпрди рдХреА USB HID рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдПрдХ рд▓реЗрдЦ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗ рд╕рдорд╛рди рднрд╛рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ:
nicholas.piasecki.name/blog/2008/11/reading-a-stamps-com-usb-scale-from-c-sharpрдореБрдЭреЗ рдЬреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛ рд╡рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╡рд╣ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдореИрдВ рдЦреБрдж рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реВрдБред
рдЦреИрд░, рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ MSDN рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддрд░рд╛рдЬреВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрд╛рдВрдЯрддреЗ рд╣реИрдВ:
"64067860 PS рд╕реНрдХреЗрд▓реНрд╕ рдСрдкрд░реЗрд╢рди рдПрдВрдб рдЯреЗрдХреНрдирд┐рдХрд▓ рдореИрдиреБрдЕрд▓ред рдкреАрдПрдлрдбреА" - Google рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛ред
рдЫрд┐рдкрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдмрд╛рдж рдореЗрдВ рдПрд╕реАрдПрд╕ рдПрдирдПрдлрд╕реА рд╕реНрдорд╛рд░реНрдЯрдХрд╛рд░реНрдб рд░реАрдбрд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛), рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
1) рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд░реВрд░рдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ DevicePath рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
((\ _ usb # vid_04a9 & pid_1097 # 207946 # {28d78fad-5a12-11d1-ae5b-0000f803a8c2})
2) GENERIC_READ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп CreateFile рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ DevicePath рдХреЛ рдЦреЛрд▓реЗрдВ
NativeMethods.CreateFile(DeviceInterfaceDetailData.DevicePath, NativeMethods.GENERIC_READ, NativeMethods.FILE_SHARE_READ + NativeMethods.FILE_SHARE_WRITE, security, NativeMethods.OPEN_EXISTING, 0, 0)
3) ReadFile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝реЗрдВ
res = NativeMethods.ReadFile(ioHandle, bufPtr, 10, bytesRead, IntPtr.Zero)
рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рддрд░рд╛рдЬреВ рдЦреЛрдЬрдиреЗ рдФрд░ HIDD_ATTRIBUTES рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП HidD_GetAttributes рдлрд╝рдВрдХреНрд╢рди (hidHandle, deviceAttributes) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХрджрдо:
1) рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЧрд╛рдЗрдб рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
NativeMethods.HidD_GetHidGuid(hidClass)
2) рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рдмрдирд╛рдПрдВ
DeviceInfoSet = NativeMethods.SetupDiGetClassDevs(hidClass, IntPtr.Zero, 0, NativeMethods.DIGCF_PRESENT + NativeMethods.DIGCF_DEVICEINTERFACE)
3) рд╣рдо рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ
Do While NativeMethods.SetupDiEnumDeviceInfo(DeviceInfoSet, deviceIndex, DeviceInfoData)
4) рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдк рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ
Do While NativeMethods.SetupDiEnumDeviceInterfaces(DeviceInfoSet, DeviceInfoData, hidClass, deviceIfaceIndex, DeviceInterfaceData)
5) рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
success = NativeMethods.SetupDiGetDeviceInterfaceDetailBuffer(DeviceInfoSet, DeviceInterfaceData, IntPtr.Zero, 0, RequiredSize, IntPtr.Zero)
рдпрд╣рд╛рдБ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдмрдлрд░ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╢рдХреНрдд рдЧреБрдЬрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИред рдЖрдзрд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕рдкреИрде рд╣реИред
6) рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ред
NativeMethods.CreateFile(DeviceInterfaceDetailData.DevicePath, NativeMethods.ACCESS_NONE, NativeMethods.FILE_SHARE_READ + NativeMethods.FILE_SHARE_WRITE, security, NativeMethods.OPEN_EXISTING, 0, 0)
рд╣рдо ACCESS_NONE рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ (рд╣рдореЗрдВ рдХреЗрд╡рд▓ pid & vid рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдбрд┐рд╡рд╛рдЗрд╕ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдВрдЧреЗ рдФрд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛)
7) рдФрд░ рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрдврд╝рд╛
Dim deviceAttributes As NativeMethods.HIDD_ATTRIBUTES deviceAttributes.cbSize = Marshal.SizeOf(deviceAttributes) NativeMethods.HidD_GetAttributes(hidHandle, deviceAttributes)
8) рдЕрдм рдХреЗрд╡рд▓ deviceAttributes.VendorID рдФрд░ deviceAttributes.ProductID рдХреА рддреБрд▓рдирд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣реА рдЪрд╛рд╣рд┐рдП - рдЖрдк рд╕рд╛рдЗрдХрд┐рд▓ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрд░рд╛рдЬреВ рдХреЗ рд▓рд┐рдПред рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рд╡реЗ рд╣рдореЗрдВ 6 рдмрд╛рдЗрдЯреНрд╕ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреИрдХреЗрдЬ рдХрд╛ рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИрдбреА рд╣реИред
рджреВрд╕рд░рд╛ рдорд╛рдк рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ: рддреНрд░реБрдЯрд┐, рд╕реНрдерд┐рд░ рд╡рдЬрди, рд╢реВрдиреНрдп рд╕реЗ рдХрдо, рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡, рдЖрджрд┐ред рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдХреЛрдб рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╣реИред
рддреАрд╕рд░реА рдЗрдХрд╛рдИ рд╣реИред рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдорд┐рд▓реАрдЧреНрд░рд╛рдо, рдЧреНрд░рд╛рдо, рдХрд┐рд▓реЛрдЧреНрд░рд╛рдо, рдЖрджрд┐ред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреНрд░реЙрдп рдФрдВрд╕ред
рдЕрдЧрд▓реЗ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╡рдЬрди рд╣реА рд╣реИрдВред
рд╡рдЬрди рдХреА рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рджрд╕рд┐рдпреЛрдВ рдХреА рд╢рдХреНрддрд┐ рд╣реИ, рдЕрдЧрд▓реЗ рджреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╣реИрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рдЬрди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
(рдмреА [рел] * реирелрем + рдмреА [рек]) * резреж ^ рдмреА [рей]
рдпрд╣ рдмрд╛рдд рд╣реИ - рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб:
NativeMethods.vb Public Class NativeMethods Public Const DIGCF_PRESENT = &H2 Public Const DIGCF_DEVICEINTERFACE = &H10 Public Const FILE_FLAG_OVERLAPPED = &H40000000 Public Const FILE_SHARE_READ = 1 Public Const FILE_SHARE_WRITE = 2 Public Const GENERIC_READ = &H80000000 Public Const GENERIC_WRITE = &H40000000 Public Const ACCESS_NONE = 0 Public Const INVALID_HANDLE_VALUE = -1 Public Const OPEN_EXISTING = 3 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Public Structure SP_DEVICE_INTERFACE_DETAIL_DATA Public cbSize As UInt32 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _ Public DevicePath As String End Structure Public Structure SP_DEVICE_INTERFACE_DATA Public cbSize As Integer Public InterfaceClassGuid As System.Guid Public Flags As Integer Public Reserved As UIntPtr End Structure Public Structure SP_DEVINFO_DATA Public cbSize As Integer Public ClassGuid As System.Guid Public DevInst As Integer Public Reserved As UIntPtr End Structure Public Const HIDP_INPUT = 0 Public Const HIDP_OUTPUT = 1 Public Const HIDP_FEATURE = 2 Public Structure HIDD_ATTRIBUTES Public cbSize As Integer Public VendorID As UShort Public ProductID As UShort Public VersionNumber As Short End Structure Public Structure SECURITY_ATTRIBUTES Public nLength As Integer Public lpSecurityDescriptor As IntPtr Public bInheritHandle As Boolean End Structure Public Declare Auto Function CreateFile Lib "kernel32.dll" (lpFileName As String, dwDesiredAccess As Integer, dwShareMode As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, dwCreationDisposition As Integer, dwFlagsAndAttributes As Integer, hTemplateFile As Integer) As IntPtr Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, ByVal Buffer As IntPtr, ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByVal Overlapped As IntPtr) As Integer Public Declare Auto Function CloseHandle Lib "kernel32.dll" (hObject As IntPtr) As Boolean Public Declare Auto Function SetupDiGetClassDevs Lib "setupapi.dll" (ByRef ClassGuid As System.Guid, ByVal Enumerator As Integer, ByVal hwndParent As IntPtr, ByVal Flags As Integer) As IntPtr Public Declare Auto Function SetupDiDestroyDeviceInfoList Lib "setupapi.dll" (deviceInfoSet As IntPtr) As Boolean Public Declare Auto Function SetupDiEnumDeviceInfo Lib "setupapi.dll" (ByVal DeviceInfoSet As Integer, ByVal MemberIndex As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Function SetupDiEnumDeviceInterfaces Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInfoData As SP_DEVINFO_DATA, ByRef InterfaceClassGuid As System.Guid, ByVal MemberIndex As UInteger, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetailBuffer Lib "setupapi.dll" Alias "SetupDiGetDeviceInterfaceDetail" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByVal DeviceInterfaceDetailData As IntPtr, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As IntPtr) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByRef DeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Sub HidD_GetHidGuid Lib "hid.dll" Alias "HidD_GetHidGuid" (ByRef hidGuid As Guid) Public Declare Auto Function HidD_GetAttributes Lib "hid.dll" (hidDeviceObject As IntPtr, ByRef attributes As HIDD_ATTRIBUTES) As Boolean End Class
" рдЙрд░реНрдл "SetupDiGetDeviceInterfaceDetail" (ByVal DeviceInfoSet рд░реВрдк IntPtr, ByRef DeviceInterfaceData рд░реВрдк SP_DEVICE_INTERFACE_DATA, ByVal DeviceInterfaceDetailData рд░реВрдк IntPtr, ByVal DeviceInterfaceDetailDataSize рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ, ByRef RequiredSize рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ, ByRef DeviceInfoData рд░реВрдк IntPtr) рдмреВрд▓рд┐рдпрди рдХреЗ рд░реВрдк рдореЗрдВ Public Class NativeMethods Public Const DIGCF_PRESENT = &H2 Public Const DIGCF_DEVICEINTERFACE = &H10 Public Const FILE_FLAG_OVERLAPPED = &H40000000 Public Const FILE_SHARE_READ = 1 Public Const FILE_SHARE_WRITE = 2 Public Const GENERIC_READ = &H80000000 Public Const GENERIC_WRITE = &H40000000 Public Const ACCESS_NONE = 0 Public Const INVALID_HANDLE_VALUE = -1 Public Const OPEN_EXISTING = 3 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Public Structure SP_DEVICE_INTERFACE_DETAIL_DATA Public cbSize As UInt32 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _ Public DevicePath As String End Structure Public Structure SP_DEVICE_INTERFACE_DATA Public cbSize As Integer Public InterfaceClassGuid As System.Guid Public Flags As Integer Public Reserved As UIntPtr End Structure Public Structure SP_DEVINFO_DATA Public cbSize As Integer Public ClassGuid As System.Guid Public DevInst As Integer Public Reserved As UIntPtr End Structure Public Const HIDP_INPUT = 0 Public Const HIDP_OUTPUT = 1 Public Const HIDP_FEATURE = 2 Public Structure HIDD_ATTRIBUTES Public cbSize As Integer Public VendorID As UShort Public ProductID As UShort Public VersionNumber As Short End Structure Public Structure SECURITY_ATTRIBUTES Public nLength As Integer Public lpSecurityDescriptor As IntPtr Public bInheritHandle As Boolean End Structure Public Declare Auto Function CreateFile Lib "kernel32.dll" (lpFileName As String, dwDesiredAccess As Integer, dwShareMode As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, dwCreationDisposition As Integer, dwFlagsAndAttributes As Integer, hTemplateFile As Integer) As IntPtr Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, ByVal Buffer As IntPtr, ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByVal Overlapped As IntPtr) As Integer Public Declare Auto Function CloseHandle Lib "kernel32.dll" (hObject As IntPtr) As Boolean Public Declare Auto Function SetupDiGetClassDevs Lib "setupapi.dll" (ByRef ClassGuid As System.Guid, ByVal Enumerator As Integer, ByVal hwndParent As IntPtr, ByVal Flags As Integer) As IntPtr Public Declare Auto Function SetupDiDestroyDeviceInfoList Lib "setupapi.dll" (deviceInfoSet As IntPtr) As Boolean Public Declare Auto Function SetupDiEnumDeviceInfo Lib "setupapi.dll" (ByVal DeviceInfoSet As Integer, ByVal MemberIndex As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Function SetupDiEnumDeviceInterfaces Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInfoData As SP_DEVINFO_DATA, ByRef InterfaceClassGuid As System.Guid, ByVal MemberIndex As UInteger, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetailBuffer Lib "setupapi.dll" Alias "SetupDiGetDeviceInterfaceDetail" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByVal DeviceInterfaceDetailData As IntPtr, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As IntPtr) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByRef DeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Sub HidD_GetHidGuid Lib "hid.dll" Alias "HidD_GetHidGuid" (ByRef hidGuid As Guid) Public Declare Auto Function HidD_GetAttributes Lib "hid.dll" (hidDeviceObject As IntPtr, ByRef attributes As HIDD_ATTRIBUTES) As Boolean End Class
" (ByVal DeviceInfoSet рд░реВрдк IntPtr, ByRef DeviceInterfaceData рд░реВрдк SP_DEVICE_INTERFACE_DATA, ByRef DeviceInterfaceDetailData рд░реВрдк SP_DEVICE_INTERFACE_DETAIL_DATA, ByVal DeviceInterfaceDetailDataSize рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ, ByRef RequiredSize рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ, ByRef DeviceInfoData рд░реВрдк SP_DEVINFO_DATA) рдмреВрд▓рд┐рдпрди рдХреЗ рд░реВрдк рдореЗрдВ Public Class NativeMethods Public Const DIGCF_PRESENT = &H2 Public Const DIGCF_DEVICEINTERFACE = &H10 Public Const FILE_FLAG_OVERLAPPED = &H40000000 Public Const FILE_SHARE_READ = 1 Public Const FILE_SHARE_WRITE = 2 Public Const GENERIC_READ = &H80000000 Public Const GENERIC_WRITE = &H40000000 Public Const ACCESS_NONE = 0 Public Const INVALID_HANDLE_VALUE = -1 Public Const OPEN_EXISTING = 3 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Public Structure SP_DEVICE_INTERFACE_DETAIL_DATA Public cbSize As UInt32 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _ Public DevicePath As String End Structure Public Structure SP_DEVICE_INTERFACE_DATA Public cbSize As Integer Public InterfaceClassGuid As System.Guid Public Flags As Integer Public Reserved As UIntPtr End Structure Public Structure SP_DEVINFO_DATA Public cbSize As Integer Public ClassGuid As System.Guid Public DevInst As Integer Public Reserved As UIntPtr End Structure Public Const HIDP_INPUT = 0 Public Const HIDP_OUTPUT = 1 Public Const HIDP_FEATURE = 2 Public Structure HIDD_ATTRIBUTES Public cbSize As Integer Public VendorID As UShort Public ProductID As UShort Public VersionNumber As Short End Structure Public Structure SECURITY_ATTRIBUTES Public nLength As Integer Public lpSecurityDescriptor As IntPtr Public bInheritHandle As Boolean End Structure Public Declare Auto Function CreateFile Lib "kernel32.dll" (lpFileName As String, dwDesiredAccess As Integer, dwShareMode As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, dwCreationDisposition As Integer, dwFlagsAndAttributes As Integer, hTemplateFile As Integer) As IntPtr Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, ByVal Buffer As IntPtr, ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByVal Overlapped As IntPtr) As Integer Public Declare Auto Function CloseHandle Lib "kernel32.dll" (hObject As IntPtr) As Boolean Public Declare Auto Function SetupDiGetClassDevs Lib "setupapi.dll" (ByRef ClassGuid As System.Guid, ByVal Enumerator As Integer, ByVal hwndParent As IntPtr, ByVal Flags As Integer) As IntPtr Public Declare Auto Function SetupDiDestroyDeviceInfoList Lib "setupapi.dll" (deviceInfoSet As IntPtr) As Boolean Public Declare Auto Function SetupDiEnumDeviceInfo Lib "setupapi.dll" (ByVal DeviceInfoSet As Integer, ByVal MemberIndex As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Function SetupDiEnumDeviceInterfaces Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInfoData As SP_DEVINFO_DATA, ByRef InterfaceClassGuid As System.Guid, ByVal MemberIndex As UInteger, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetailBuffer Lib "setupapi.dll" Alias "SetupDiGetDeviceInterfaceDetail" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByVal DeviceInterfaceDetailData As IntPtr, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As IntPtr) As Boolean Public Declare Auto Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" (ByVal DeviceInfoSet As IntPtr, ByRef DeviceInterfaceData As SP_DEVICE_INTERFACE_DATA, ByRef DeviceInterfaceDetailData As SP_DEVICE_INTERFACE_DETAIL_DATA, ByVal DeviceInterfaceDetailDataSize As Integer, ByRef RequiredSize As Integer, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean Public Declare Auto Sub HidD_GetHidGuid Lib "hid.dll" Alias "HidD_GetHidGuid" (ByRef hidGuid As Guid) Public Declare Auto Function HidD_GetAttributes Lib "hid.dll" (hidDeviceObject As IntPtr, ByRef attributes As HIDD_ATTRIBUTES) As Boolean End Class
ScaleReader.vb Public Class ScaleReader Private Const VendorId = &HEB8