USB扫码枪为即插即用,通过类似键盘的方式和系统进行交互,扫描出来的数据获取方式有两种实现方式。
(1)文本框输入获取焦点,扫描后自动显示在文本框内。
(2)使用键盘钩子,勾取扫描枪虚拟按键,进行键盘虚拟码和ASCII码的转换后获取数据。
在程序进行开发时,一般使用第二种方式,下面在U3D开发环境下,接收USB扫码枪扫描数据方面的问题进行探讨分享。
在程序开发中要实现系统钩子其实很简单,调用Win32的API即可。
(1)SetWindowsHookEx 用于设置钩子。(设立一道卡子,盘查需要的信息)
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
(2)CallNextHookEx 用于传递钩子(消息是重要的,所以从哪里来,就应该回到哪里去,除非你决定要封锁消息)
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
(3)UnhookWindowsHookEx 卸载钩子(卸载很重要,卡子设多了会造成拥堵)