源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

无焦点获取条码枪返回值示例

  • 时间:2021-09-30 12:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:无焦点获取条码枪返回值示例
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Reflection; namespace BookLibraryManagement.CommonTools {     class BarCodeHook     {         public delegate void BarCodeDelegate(BarCodes barCode);         public event BarCodeDelegate BarCodeEvent;         public struct BarCodes         {             public int VirtKey;      //虚拟码              public int ScanCode;     //扫描码              public string BarCode;   //条码信息              public bool IsValid;     //条码是否有效              public DateTime Time;    //扫描时间          }         private struct EventMsg         {             public int message;             public int paramL;             public int paramH;             public int Time;             public int hwnd;         }         [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]         private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);         [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]         private static extern bool UnhookWindowsHookEx(int idHook);         [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]         private static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);         delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);         BarCodes barCode = new BarCodes();         int hKeyboardHook = 0;         List<char> _barcode = new List<char>(100);         private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)         {             if (nCode == 0)             {                 EventMsg msg = (EventMsg)Marshal.PtrToStructure(lParam, typeof(EventMsg));                 if (wParam == 0x100)   //WM_KEYDOWN = 0x100                  {                     barCode.VirtKey = msg.message & 0xff;  //虚拟码                      barCode.ScanCode = msg.paramL & 0xff;  //扫描码                                          if (DateTime.Now.Subtract(barCode.Time).TotalMilliseconds > 100)                     {                         _barcode.Clear();                     }                     else                     {                         if ((msg.message & 0xff) == 13 && _barcode.Count > 0)   //回车                          {                             barCode.BarCode = new String(_barcode.ToArray());                             barCode.IsValid = true;                             _barcode.Clear();                         }                     }                     barCode.Time = DateTime.Now;                     if (BarCodeEvent != null) BarCodeEvent(barCode);    //触发事件                      barCode.IsValid = false;                     _barcode.Add(Convert.ToChar(msg.message & 0xff));                 }             }             return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);         }         private static HookProc hookproc;         // 安装钩子           public bool Start()         {             if (hKeyboardHook == 0)             {                 hookproc = new HookProc(KeyboardHookProc);                 //WH_KEYBOARD_LL = 13                  hKeyboardHook = SetWindowsHookEx(13, hookproc, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);             }             return (hKeyboardHook != 0);         }         // 卸载钩子           public bool Stop()         {             if (hKeyboardHook != 0)             {                 return UnhookWindowsHookEx(hKeyboardHook);             }             return true;         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部