我有两个设备,一个条形码扫描仪和一个键盘,通过USB连接到我的电脑。我的目标是阅读Barcode-Scanner的所有输入并使用我的程序处理。此外,应该为操作系统阻止扫描仪的输入。
我在这个主题上发现了一篇很好的文章: 组合原始输入和键盘钩子以选择性地阻止来自多个键盘的输入
通过这种方法,我可以为我的程序获取输入(以及来自哪个设备的输入)并为操作系统阻止它,就像我想要的那样。但这种方法非常复杂,因为它只适用于inputEvents和Hooks的组合。 Hook用于阻止OS的数据。 问题在于无法判断Hook来自哪个设备。
我的问题是:有没有人知道阻止来自特殊键盘输入的另一种方法,这种键盘不能与inputEvents和Hooks的这种组合一起使用?或者也许有可能告诉Hook来自哪个设备?
答案 0 :(得分:-2)
我使用timer.tick 为numpadkeys创建数组并循环遍历
GetAsyncKeyState(VK_LBUTTON)
,否则 https://msdn.microsoft.com/en-us/library/windows/desktop/ms646290(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows/desktop/ms646298(v=vs.85).aspx
How to Check if User input is from Barcode Scanner or Keyboard?
使用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添加到项目后,您可以通过以下方式收听事件:
//创建一个新的InputDevice对象并注册InputDevice KeyPressed事件处理程序。
input_dev = new InputDevice( Handle );
input_dev.KeyPressed += new InputDevice.DeviceEventHandler( m_KeyPressed );
The event handler m_KeyPressed lets you to distinguish your devices through 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.
}
希望有所帮助。
答案 1 :(得分:-3)
如果您阅读我的第一个链接。
<!DOCTYPE html>
<html>
<head>
........
$.ajax({
type: "POST",
url: "<?php echo base_url(); ?>" + "dashboard/show_data",
cache: false,
dataType: "json",
success: function(data){
$('#demo').html(data);
........
<script src="http://js.nicedit.com/nicEdit-latest.js" type="text/javascript"></script>
<script type="text/javascript">bkLib.onDomLoaded(nicEditors.allTextAreas);</script>
</head>
<body>
<textarea>Easy! You should check out MoxieManager!</textarea>
<section id="demo">
</section>
</body>
</html>
https://pusher.com https://msdn.microsoft.com/en-us/library/windows/desktop/hh448799(v=vs.85).aspx 并且可以使用vbcrlf
拆分来自扫描仪的数据POS for .NET | Differentiate between (barcode) scanner and keyboard input