/// <summary> /// 鼠标钩子回调函数 /// </summary> private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam) { // 假设正常执行而且用户要监听鼠标的消息 if ((nCode >= 0)) { var eventArgs = GetMouseEventArgs(wParam, lParam); switch (wParam) { case ConstDefintion.WM_LBUTTONDOWN: OnMouseClickHanler(this, eventArgs); break; case ConstDefintion.WM_LBUTTONUP: break; case ConstDefintion.WM_LBUTTONDBLCLK: break; case ConstDefintion.WM_MOUSEMOVE: OnMouseMoveHandler(this, eventArgs); break; case ConstDefintion.WM_RBUTTONDOWN: break; case ConstDefintion.WM_RBUTTONUP: break; case ConstDefintion.WM_RBUTTONDBLCLK: break; } } //启动下一次钩子 return(BaseWin32Api.CallNextHookEx(_hMouseHook, nCode, wParam, lParam)); }
/// <summary> /// 获取键盘消息 /// </summary> /// <param name="nCode"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <returns></returns> private int KeyboardHookProcess(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { var message = (BaseWin32Api.KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(BaseWin32Api.KeyboardHookStruct)); if (wParam == ConstDefintion.WM_KEYUP) { #region 数据处理 data.VirtKey = message.vkCode & 0xff; //虚拟吗 data.ScanCode = message.scanCode & 0xff; //扫描码 StringBuilder keyName = new StringBuilder(225); if (BaseWin32Api.GetKeyNameText(data.ScanCode * 65536, keyName, 255) > 0) { data.KeyName = keyName.ToString().Trim(new char[] { ' ', '\0' }); } else { data.KeyName = ""; } byte[] kbArray = new byte[256]; uint uKey = 0; BaseWin32Api.GetKeyboardState(kbArray); if (BaseWin32Api.ToAscii(data.VirtKey, data.ScanCode, kbArray, ref uKey, 0)) { data.Ascll = uKey; data.Chat = Convert.ToChar(uKey); } TimeSpan ts = DateTime.Now.Subtract(data.Time); #endregion #region 手动输入 //时间戳,大于50 毫秒表示手动输入 if (ts.TotalMilliseconds > 50) { keyCodeStr = data.Chat.ToString(); data.Code = keyCodeStr; data.IsValid = false; TextHelper.Write($"json -01 ->{JsonConvert.SerializeObject(data)}"); } #endregion #region 扫码枪或者刷脸设备键盘 else { if (keyCodeStr.Length > 5) { data.IsValid = true; } keyCodeStr += data.Chat.ToString(); data.Code = keyCodeStr; TextHelper.Write($"json -02 ->{JsonConvert.SerializeObject(data)}"); } data.Time = DateTime.Now; #endregion #region 数据传输事件 if (OnDataEvent != null && wParam == ConstDefintion.WM_KEYUP) { OnDataEvent(data); } #endregion } } return(BaseWin32Api.CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)); }