473,287 Members | 1,978 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,287 software developers and data experts.

reading from a USB keyboard (HID)

rs
Hi guys,

I am trying to read from a USB keyboard using vb.net and HID classes. the
USB keyboard is not my primary keyboard. I have a ps2 keyboard connected and
is detected in device manager as my keyboard. the USB keyboard is detected
as HID keyboard device. the program finds the keyboard if it is attached.
and I am getting valid handles. however, everytime I use the readfile
function I am getting "object reference not set to an instant of an object"
exception. if i use any other function it fails and I am getting -1 in the
"success" parameter. I am including my code:

HidD_GetHidGuid(HidGuid)

'Friend Function FindDeviceFromGuid _

'(ByVal myGuid As System.Guid, _

'ByRef devicePathName() As String) _

'As Boolean

'Purpose : Uses SetupDi API functions to retrieve the device path name of an

' : attached device that belongs to an interface class.

'Accepts : myGuid - an interface class GUID.

' : devicePathName - a pointer to an array of strings that will contain

' : the device path names of attached devices.

'Returns : True if at least one device is found, False if not.

'Fill an array with the device path names of all attached HIDs.

DeviceFound = MyDeviceManagement.FindDeviceFromGuid _

(HidGuid, _

DevicePathName)

'If there is at least one HID, attempt to read the Vendor ID and Product ID

'of each device until there is a match or all devices have been examined.

If DeviceFound = True Then

MemberIndex = 0

Do

HIDHandle = CreateFile _

(DevicePathName(MemberIndex), _

0, _

FILE_SHARE_READ, _

Security, _

OPEN_EXISTING, _

0, _

0)

If (HIDHandle <> INVALID_HANDLE_VALUE) Then

MyHID.DeviceAttributes.Size = Marshal.SizeOf(MyHID.DeviceAttributes)

Result = HidD_GetAttributes(HIDHandle, MyHID.DeviceAttributes)


If (Result <> 0) Then

'Find out if the device matches the one we're looking for.

If (MyHID.DeviceAttributes.VendorID = MyVendorID) And _

(MyHID.DeviceAttributes.ProductID = MyProductID) Then

MyDeviceDetected = True

'Save the DevicePathName so OnDeviceChange() knows which name is my device.

MyDevicePathName = DevicePathName(MemberIndex)

Else

'It's not a match, so close the handle.

MyDeviceDetected = False

Result = CloseHandle(HIDHandle)

End If

Else

'There was a problem in retrieving the information.

MyDeviceDetected = False

Result = CloseHandle(HIDHandle)

End If

End If

'Keep looking until we find the device or there are no more left to examine.

MemberIndex = MemberIndex + 1

Loop Until ((MyDeviceDetected = True) Or _

(MemberIndex = UBound(DevicePathName) + 1))

If MyDeviceDetected Then

rtbstatus.Text = rtbstatus.Text + vbCrLf + "keyboard found"

'The device was detected.

'Register to receive notifications if the device is removed or attached.

Success = MyDeviceManagement.RegisterForDeviceNotifications _

(MyDevicePathName, _

Me.Handle, _

HidGuid, _

DeviceNotificationHandle)
'Debug.WriteLine("RegisterForDeviceNotifications = " & Success)

'Learn the capabilities of the device.

MyHID.Capabilities = MyHID.GetDeviceCapabilities _

(HIDHandle)

If Success Then

'Get and display the Input report buffer size.

'GetInputReportBufferSize()

rtbstatus.Text = rtbstatus.Text + vbCrLf + "register notification is set"

'*******************************

ReadHandle = CreateFile _

(MyDevicePathName, _

GENERIC_READ, _

0, _

Security, _

OPEN_EXISTING, _

0, _

0) I also tried it with overlaping. nogo

rtbstatus.Text = rtbstatus.Text + vbCrLf + "handle created"

'(optional)

'Flush any waiting reports in the input buffer.

MyHID.FlushQueue(ReadHandle)

MyHID.FlushQueue(HIDHandle)

'*****************************************

'start reading

Dim InputReportBuffer() As Byte

Dim NumberOfBytesRead As Long

ReDim InputReportBuffer(32)

success = HidD_GetFeature _

(hidHandle, _

InputReportBuffer(0), _

CInt(UBound(inFeatureReportBuffer) + 1))

'sucess always = false and input report buffer = 0s. I also tried

HidD_GetInputReport and read file functions. nogo.

any idea what i am doing wrong? any input is appreciated.


Nov 21 '05 #1
0 6541

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: CMiYC | last post by:
I'm attempting to open an USB HID device using createfile from kernel32. The open attempt always fails. This is the call I'm using: CreateFile(HidName$, &HC0000000, 3, 0, 3, 0 ,0) HidName$...
2
by: Michael Bendzick | last post by:
Is there a simple way in python to read a keyboard scan code? I'm working on a shell script that interfaces with a proprietary keyboard device (extra buttons) and need to be able to distinguish...
2
by: Hubert Hermanutz | last post by:
Hello, Where can i get a sample about HID communication with .NET Framework? I don't know enough about HID communication, only that with VC++ it is possible to using the Windows Device...
7
by: Don Riesbeck Jr. | last post by:
I'm working on an application (OEM) using C# that utilizes input from a keyboard, and USB Barcode Scanner. The scanner is a HID Keyboard device, and input from it is sent to the system as if it...
1
by: Eric Renken | last post by:
We are developing an HID device and I have a couple questions about communicating with it. I need to be able to do a direct Interrupt Endpoint call to the USB device. Is this possible to do from...
2
by: rs | last post by:
Hi guys, I am trying to read from a USB keyboard using vb.net and HID classes. the USB keyboard is not my primary keyboard. I have a ps2 keyboard connected and is detected in device manager as...
0
by: Chris Herring | last post by:
I am writing a WinForms app that will integrate a handheld voting device system into the app. The handhelds communicate to the PC via a USB connection. The USB device has no manufacturer driver,...
3
by: jodansmif | last post by:
I've been teaching myself Python as part of my senior design project at university. The obstacle our group currently faces is communicating with a microcontroller (ACS USB Servo II) that appears...
0
by: LawrenceK | last post by:
Hi All, I don't know if this is the right forum for my question. I want to be able configure a USB HID through a web page (i.e. using IE). I read some where in this forum that it was possible to...
0
by: MeoLessi9 | last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....
0
by: DolphinDB | last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation. Take...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: marcoviolo | last post by:
Dear all, I would like to implement on my worksheet an vlookup dynamic , that consider a change of pivot excel via win32com, from an external excel (without open it) and save the new file into a...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.