Это относительно легко сделать с помощью RAW Input API.
Взгляните на " Отличительные сканеры штрих-кода от клавиатуры в WinForms "
У меня есть программа, которая читает 3 разных USB-сканера и перенаправляет ввод на 3 разных «канала» для обработки. Код довольно обширный, поэтому я не буду размещать его здесь.
Если хотите, я могу вставить некоторые фрагменты или отправить вам проект по электронной почте.
В качестве подсказки можно привести:
#region Raw Input API
[DllImport( "User32.dll" )]
extern static uint GetRawInputDeviceList( IntPtr pRawInputDeviceList, ref uint uiNumDevices, uint cbSize );
[DllImport( "User32.dll" )]
extern static uint GetRawInputDeviceInfo( IntPtr hDevice, uint uiCommand, IntPtr pData, ref uint pcbSize );
[DllImport( "User32.dll" )]
extern static bool RegisterRawInputDevices( RAWINPUTDEVICE[ ] pRawInputDevice, uint uiNumDevices, uint cbSize );
[DllImport( "User32.dll" )]
extern static uint GetRawInputData( IntPtr hRawInput, uint uiCommand, IntPtr pData, ref uint pcbSize, uint cbSizeHeader );
#endregion
После добавления InputDevice
в свой проект вы можете прослушивать события:
// Create a new InputDevice object and register InputDevice KeyPressed event handler.
input_dev = new InputDevice( Handle );
input_dev.KeyPressed += new InputDevice.DeviceEventHandler( m_KeyPressed );
Обработчик событий m_KeyPressed
позволяет вам различать ваши устройства по e.Keyboard.SubClass
private void m_KeyPressed( object sender, InputDevice.KeyControlEventArgs e )
{
// e.Keyboard.SubClass tells you where from the event came.
// e.Keyboard.key gives you the input data.
}
Надеюсь, что помог.