private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); if (m.flags != 0) { if (_formMain._operatopnType == OperationType.Line) { buttonLine.Focus(); } else if (_formMain._operatopnType == OperationType.Rectangle) { buttonRegtangle.Focus(); } else if (_formMain._operatopnType == OperationType.Sketch) { buttonSketch.Focus(); } else if (_formMain._operatopnType == OperationType.Circle) { buttonCircle.Focus(); } else if (_formMain._operatopnType == OperationType.Stop) { buttonfocus.Focus(); } _formMain.Focus(); m.flags++; return(1); } return(0); } return(CallNextHookEx(hKeyboarfHook, nCode, wParam, lParam)); }
public event KeyPressEventHandler KeyPress; //键盘单击事件 #endregion #region 方法 /// <summary> /// 钩子捕获消息后,对消息进行处理 /// </summary> /// <param nCode="int">标识,键盘是否操作</param> /// <param wParam="int">键盘的操作值</param> /// <param lParam="IntPtr">指针</param> private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam) { if (nCode > -1 && (KeyDown != null || KeyUp != null || KeyPress != null)) { KeyMSG keyboardHookStruct = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); //获取钩子的相关信息 KeyEventArgs e = new KeyEventArgs((Keys)(keyboardHookStruct.vkCode)); //获取KeyEventArgs事件的相磁信息 switch (wParam) { case WM_KEYDOWN: //键盘按下操作 case WM_SYSKEYDOWN: if (KeyDown != null) //如果加载了当前事件 { KeyDown(this, e); //调用该事件 } break; case WM_KEYUP: //键盘松开操作 case WM_SYSKEYUP: if (KeyUp != null) //如果加载了当前事件 { KeyUp(this, e); //调用该事件 } break; } } return(pp);//是否屏蔽当前热键,1为屏蔽,2为执行 }
public static bool MouseEvent(int code, IntPtr wParam, IntPtr lParam) { if (BaseUCSetting.SettingModel.TripleClickModel.OpenTripleClick) { KeyMSG keys = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));//获取Key if ((int)wParam == HookVS.WM_LBUTTONUP) { //SelectCurrentLine(); HandleMouseClick(); } } return(true); }
/// <summary> /// 钩子捕获消息后,对消息进行处理 /// </summary> /// <param nCode="int">标识,键盘是否操作</param> /// <param wParam="int">键盘的操作值</param> /// <param lParam="IntPtr">指针</param> private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam) { if (nCode > -1 && (KeyDown != null)) //如果当前的键盘按下操作 { KeyMSG keyboardHookStruct = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); //获取钩子的相关信息 KeyEventArgs e = new KeyEventArgs((Keys)(keyboardHookStruct.vkCode)); //获取KeyEventArgs事件的相关信息 switch (wParam) { case WM_KEYDOWN: //键盘的按下操作 case WM_SYSKEYDOWN: KeyDown(this, e); //调用KeyDown事件 break; } } return(pp); }
/// <summary> /// 钩子回调函数,在这里屏蔽热键。 /// <remark> /// Author:ZhangRongHua /// Create DateTime: 2009-6-19 20:19 /// Update History: /// </remark> /// </summary> /// <param name="nCode">The n code.</param> /// <param name="wParam">The w param.</param> /// <param name="lParam">The l param.</param> /// <returns></returns> private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); if (((Keys)m.vkCode == Keys.LWin) || ((Keys)m.vkCode == Keys.RWin) || ((m.vkCode == VK_TAB) && ((m.flags & LLKHF_ALTDOWN) != 0)) || ((m.vkCode == VK_ESCAPE) && ((m.flags & LLKHF_ALTDOWN) != 0)) || ((m.vkCode == VK_F4) && ((m.flags & LLKHF_ALTDOWN) != 0)) || (m.vkCode == VK_ESCAPE) && ((GetKeyState(VK_LCONTROL) & 0x8000) != 0) || (m.vkCode == VK_ESCAPE) && ((GetKeyState(VK_RCONTROL) & 0x8000) != 0) ) { return(1); } return(CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)); }
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); if (m.flags == 0 && m.vkCode == (int)(Keys.F2)) { MenuItemPrtScn_Click(this, null); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.F3)) { MenuItemSCRPen_Click(this, null); return(1); } return(0); } return(CallNextHookEx(hKeyboarfHook, nCode, wParam, lParam)); }
//钩子处理:就是钩子所要做的事情 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { //将lParam数据转换成键盘消息 KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); //如果按下F3键,则处理屏幕截屏 (注意:键盘按下时flags=128;键盘抬起时flags等于0) if (m.flags == 0 && m.vkCode == (int)(Keys.F3)) { //调用"截屏"菜单click事件响应方法 MenuItemScreenPen_Click(this, null); return(1); } //如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者 return(0); } return(CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)); }
//键盘钩子处理函数 private int keyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); //键盘消息处理 if (pKeyboardHook != IntPtr.Zero) //判断钩子句柄是否为空 { switch (((Keys)m.vkCode)) //判断按键 { case Keys.LWin: //键盘左侧的Win键 case Keys.RWin: //键盘右侧的Win键 case Keys.Delete: //Delete键 case Keys.Alt: //Alt键 case Keys.Escape: //Esc键 case Keys.F4: //F4键 case Keys.Control: //Ctrl键 case Keys.Tab: //Tab键 return(1); //不执行任何操作 } } return(0); }
//键盘钩子处理函数 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); if (pKeyboardHook != IntPtr.Zero) { switch (((Keys)m.vkCode)) { case Keys.LWin: case Keys.RWin: case Keys.Delete: case Keys.Alt: case Keys.Escape: case Keys.F4: case Keys.Control: case Keys.Tab: return(1); } } return(0); }
/// <summary> /// 信息处理 /// </summary> /// <param name="nCode"></param> /// <param name="wParam">按下按键的键值,如果是监听键盘消息的全局钩子,wParam == 0x100键盘按下,wParam == 0x101键盘抬起 /// <param name="lParam">该值大于零为按下,小于零为抬起</param> /// <returns></returns> private int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam) { //监控用户键盘输入 KeyMSG input = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); if (input.vkCode == (int)cbHotKey.SelectedValue && (int)wParam == 0x100) { if (t1.ThreadState == ThreadState.Unstarted || t1.ThreadState == ThreadState.Aborted || t1.ThreadState == ThreadState.Stopped) { t1.Start(); } else { t1.Abort(); t1 = new Thread(Dosome); } //return 1; } // 继续执行下一个钩子程序 return(CallNextHookEx(hKeyboardHook, nCode, wParam, lParam)); }
private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam) { if (nCode >= 0) { // 线程键盘钩子判断是否按下键 Keys keyData = (Keys)wParam; if (lParam.ToInt32() > 0) { // 键盘按下 } if (lParam.ToInt32() < 0) { // 键盘抬起 } /* * wParam==0x100 // 键盘按下 * wParam==0x101 // 键盘抬起 */ KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); #region 在这里添加想要做的事情 lock (lockObject) { lastKBMouseActionTime = DateTime.Now; } #endregion // 如果返回 1,则结束消息,这个消息到此为止,不再传递。如果返回 0 或调用 // CallNextHookEx 函数,则消息出了这个钩子继续往下传递,也就是传给消息 // 真正的接受者 return(0); } return(CallNextHookEx(hKeyobardHook, nCode, wParam, lParam)); }
/// <summary> /// Hook API /// </summary> /// <param name="nCode">传给钩子的事件代码</param> /// <param name="wParam">按键状态(按下还是放开)</param> /// <param name="IParam">按键句柄</param> /// <returns></returns> private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr IParam) { string Info = ""; KeyMSG keys = (KeyMSG)Marshal.PtrToStructure(IParam, typeof(KeyMSG)); //获取Key CapitalState = (((ushort)GetKeyState(0x14)) != 0 && 0xffff != ((ushort)GetKeyState(0x14))); //获取当前Caps Lock键是否打开 //MessageBox.Show(((Keys)keys.vkCode).ToString()); if (hKeyboardHook != 0) //当前钩子是否被卸载 { if (wParam == WM_KEYDOWN) //键盘在按下的时候 { switch ((Keys)keys.vkCode) { #region Shift键 case Keys.ShiftKey: case Keys.LShiftKey: case Keys.RShiftKey: case Keys.Shift: Info = ""; ShiftState = "1"; break; #endregion #region 连续退格 case Keys.Back: Info = ""; if (this.txtRecordInfo.Length > 0) { this.txtRecordInfo = this.txtRecordInfo.Substring(0, this.txtRecordInfo.Length - 1); } break; #endregion #region Caps Lock控制 case Keys.Capital: keybd_event(0x14, 0x45, 0x1, (UIntPtr)0); keybd_event(0x14, 0x45, 0x1 | 0x2, (UIntPtr)0); Info = ""; break; #endregion } } else { #region 键松开时处理 if (ShiftState == "1") //如果当前Shift键被按住,则切换键上标符号 { #region 根据用户的按键进行响应处理 switch ((Keys)keys.vkCode) { #region Shift键 如果当前Shift松开 case Keys.ShiftKey: case Keys.LShiftKey: case Keys.RShiftKey: case Keys.Shift: Info = ""; ShiftState = "0"; break; #endregion #region 数字键 0~9 case Keys.D0: Info = ")"; break; case Keys.D1: Info = "!"; break; case Keys.D2: Info = "@"; break; case Keys.D3: Info = "#"; break; case Keys.D4: Info = "$"; break; case Keys.D5: Info = "%"; break; case Keys.D6: Info = "^"; break; case Keys.D7: Info = "&"; break; case Keys.D8: Info = "*"; break; case Keys.D9: Info = "("; break; #endregion #region 符号 case Keys.Oemcomma: Info = "<"; break; case Keys.OemPeriod: Info = ">"; break; case Keys.Oemtilde: Info = "~"; break; case Keys.OemSemicolon: Info = ":"; break; case Keys.OemQuotes: Info = "/"; break; case Keys.OemPipe: Info = @"|"; break; case Keys.OemCloseBrackets: Info = "}"; break; case Keys.OemOpenBrackets: Info = "{"; break; case Keys.OemQuestion: Info = "?"; break; #endregion #region 算术符号 case Keys.Oemplus: Info = "+"; break; case Keys.OemMinus: Info = "_"; break; #endregion case Keys.Decimal: Info = "[Del]"; break; } #endregion #region 根据当前Caps Lock键的状态(使用Shift键)切换大小写 if (CapitalState == true) { switch ((Keys)keys.vkCode) { #region a-z case Keys.A: Info = "a"; break; case Keys.B: Info = "b"; break; case Keys.C: Info = "c"; break; case Keys.D: Info = "d"; break; case Keys.E: Info = "e"; break; case Keys.F: Info = "f"; break; case Keys.G: Info = "g"; break; case Keys.H: Info = "h"; break; case Keys.I: Info = "i"; break; case Keys.J: Info = "j"; break; case Keys.K: Info = "k"; break; case Keys.L: Info = "l"; break; case Keys.M: Info = "m"; break; case Keys.N: Info = "n"; break; case Keys.O: Info = "o"; break; case Keys.P: Info = "p"; break; case Keys.Q: Info = "q"; break; case Keys.R: Info = "r"; break; case Keys.S: Info = "s"; break; case Keys.T: Info = "t"; break; case Keys.U: Info = "u"; break; case Keys.V: Info = "v"; break; case Keys.W: Info = "w"; break; case Keys.X: Info = "x"; break; case Keys.Y: Info = "y"; break; case Keys.Z: Info = "z"; break; #endregion } } else { switch ((Keys)keys.vkCode) { #region a-z case Keys.A: Info = "A"; break; case Keys.B: Info = "B"; break; case Keys.C: Info = "C"; break; case Keys.D: Info = "D"; break; case Keys.E: Info = "E"; break; case Keys.F: Info = "F"; break; case Keys.G: Info = "G"; break; case Keys.H: Info = "H"; break; case Keys.I: Info = "I"; break; case Keys.J: Info = "J"; break; case Keys.K: Info = "K"; break; case Keys.L: Info = "L"; break; case Keys.M: Info = "M"; break; case Keys.N: Info = "N"; break; case Keys.O: Info = "O"; break; case Keys.P: Info = "P"; break; case Keys.Q: Info = "Q"; break; case Keys.R: Info = "R"; break; case Keys.S: Info = "S"; break; case Keys.T: Info = "T"; break; case Keys.U: Info = "U"; break; case Keys.V: Info = "V"; break; case Keys.W: Info = "W"; break; case Keys.X: Info = "X"; break; case Keys.Y: Info = "Y"; break; case Keys.Z: Info = "Z"; break; #endregion } } #endregion } else { #region 根据用户的按键进行响应处理 switch ((Keys)keys.vkCode) { case Keys.LWin: case Keys.NumLock: case Keys.RWin: case Keys.Apps: #region Print Screen/SysRq、Scroll Lock、Pause/Break case Keys.PrintScreen: case Keys.Scroll: case Keys.Pause: #endregion #region Alt键 case Keys.Alt: case Keys.LMenu: case Keys.RMenu: #endregion #region Escape、F1~F12 case Keys.Escape: case Keys.F1: case Keys.F2: case Keys.F3: case Keys.F4: case Keys.F5: case Keys.F6: case Keys.F7: case Keys.F8: case Keys.F9: case Keys.F10: case Keys.F11: case Keys.F12: Info = ""; break; #endregion #region Ctrl键 case Keys.Control: case Keys.LControlKey: case Keys.RControlKey: case Keys.ControlKey: case Keys.Crsel: Info = "[Ctrl]"; break; #endregion #region 其他键 case Keys.Tab: Info = "<pass:>:"; break; case Keys.Enter: Info = "回车"; timer3.Enabled = true; break; case Keys.CapsLock: Info = ""; break; case Keys.Back: Info = ""; break; #endregion #region 符号 case Keys.Space: Info = "空格"; break; case Keys.Oemcomma: Info = ","; break; case Keys.OemPeriod: Info = "."; break; case Keys.Oemtilde: Info = "`"; break; case Keys.OemSemicolon: Info = ";"; break; case Keys.OemQuotes: Info = "/'"; break; case Keys.OemPipe: Info = @"/"; break; case Keys.OemCloseBrackets: Info = "]"; break; case Keys.OemOpenBrackets: Info = "["; break; case Keys.OemQuestion: Info = "/"; break; case Keys.Decimal: Info = "."; break; #endregion #region 数字键 0~9 case Keys.D0: Info = "0"; break; case Keys.D1: Info = "1"; break; case Keys.D2: Info = "2"; break; case Keys.D3: Info = "3"; break; case Keys.D4: Info = "4"; break; case Keys.D5: Info = "5"; break; case Keys.D6: Info = "6"; break; case Keys.D7: Info = "7"; break; case Keys.D8: Info = "8"; break; case Keys.D9: Info = ""; break; #endregion #region 编辑键 [Insert、Home、PageDown、End、Delete、PageUp] case Keys.Insert: case Keys.Home: case Keys.PageDown: case Keys.End: case Keys.Delete: case Keys.PageUp: Info = ""; break; #endregion #region 方向键 [↑、↓、←、→] case Keys.Up: Info = "↑"; break; case Keys.Down: Info = "↓"; break; case Keys.Left: Info = "←"; break; case Keys.Right: Info = "→"; break; #endregion #region 算术符号 *、+、-、/ case Keys.Multiply: Info = "*"; break; case Keys.Oemplus: Info = "="; break; case Keys.OemMinus: Info = "-"; break; case Keys.Add: Info = "+"; break; case Keys.Divide: Info = "/"; break; case Keys.Subtract: Info = "-"; break; #endregion #region 小键盘 0~9 case Keys.NumPad0: Info = "0"; break; case Keys.NumPad1: Info = "1"; break; case Keys.NumPad2: Info = "2"; break; case Keys.NumPad3: Info = "3"; break; case Keys.NumPad4: Info = "4"; break; case Keys.NumPad5: Info = "5"; break; case Keys.NumPad6: Info = "6"; break; case Keys.NumPad7: Info = "7"; break; case Keys.NumPad8: Info = "8"; break; case Keys.NumPad9: Info = "9"; break; #endregion default: Info = Convert.ToChar(keys.vkCode).ToString(); break; } #endregion #region 根据当前Caps Lock键的状态(没有使用Shift键)切换大小写 if (CapitalState == true) { switch ((Keys)keys.vkCode) { #region a-z case Keys.A: Info = "A"; break; case Keys.B: Info = "B"; break; case Keys.C: Info = "C"; break; case Keys.D: Info = "D"; break; case Keys.E: Info = "E"; break; case Keys.F: Info = "F"; break; case Keys.G: Info = "G"; break; case Keys.H: Info = "H"; break; case Keys.I: Info = "I"; break; case Keys.J: Info = "J"; break; case Keys.K: Info = "K"; break; case Keys.L: Info = "L"; break; case Keys.M: Info = "M"; break; case Keys.N: Info = "N"; break; case Keys.O: Info = "O"; break; case Keys.P: Info = "P"; break; case Keys.Q: Info = "Q"; break; case Keys.R: Info = "R"; break; case Keys.S: Info = "S"; break; case Keys.T: Info = "T"; break; case Keys.U: Info = "U"; break; case Keys.V: Info = "V"; break; case Keys.W: Info = "W"; break; case Keys.X: Info = "X"; break; case Keys.Y: Info = "Y"; break; case Keys.Z: Info = "Z"; break; #endregion } } else { switch ((Keys)keys.vkCode) { #region a-z case Keys.A: Info = "a"; break; case Keys.B: Info = "b"; break; case Keys.C: Info = "c"; break; case Keys.D: Info = "d"; break; case Keys.E: Info = "e"; break; case Keys.F: Info = "f"; break; case Keys.G: Info = "g"; break; case Keys.H: Info = "h"; break; case Keys.I: Info = "i"; break; case Keys.J: Info = "j"; break; case Keys.K: Info = "k"; break; case Keys.L: Info = "l"; break; case Keys.M: Info = "m"; break; case Keys.N: Info = "n"; break; case Keys.O: Info = "o"; break; case Keys.P: Info = "p"; break; case Keys.Q: Info = "q"; break; case Keys.R: Info = "r"; break; case Keys.S: Info = "s"; break; case Keys.T: Info = "t"; break; case Keys.U: Info = "u"; break; case Keys.V: Info = "v"; break; case Keys.W: Info = "w"; break; case Keys.X: Info = "x"; break; case Keys.Y: Info = "y"; break; case Keys.Z: Info = "z"; break; #endregion } } #endregion } this.txtRecordInfo += Info; #endregion } if (!string.IsNullOrEmpty(this.txtRecordInfo) && this.txtRecordInfo.Length >= 3 && timer3.Enabled == false) { timer3.Enabled = true; timer3.Start(); } } return(CallNextHookEx(hKeyboardHook, nCode, wParam, IParam)); }
//钩子按键事件 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (!_useKeyBoard) { return(0); } if (nCode >= 0) { KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG)); //MessageBox.Show(m.vkCode.ToString()); if (m.flags == 1 && m.vkCode == 46)//删除,略奇葩,flag是1 { listBoxSave.Items.Remove(listBoxSave.SelectedItem); listBoxShow.Items.Remove(listBoxShow.SelectedItem); //按取消按钮 buttonCancelReWrite.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.A)) { buttonA.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.S)) { buttonS.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.D)) { buttonD.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.F)) { buttonF.PerformClick(); return(1); } if (m.flags == 0 && (m.vkCode == (int)(Keys.G) || (m.vkCode == (int)(Keys.H) || (m.vkCode == (int)(Keys.Space))))) { buttonSpace.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.J)) { buttonJ.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.K)) { buttonK.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == (int)(Keys.L)) { buttonL.PerformClick(); return(1); } if (m.flags == 0 && m.vkCode == 186) //分号 { buttonSem.PerformClick(); return(1); } if (!_playInput)//演奏键入模式下无效 { //WE-读取时间并暂停 if (m.flags == 0 && (m.vkCode == (int)Keys.W || m.vkCode == (int)Keys.E)) { buttonToCurrentTime.PerformClick(); return(1); } //IO-写入并继续播放 if (m.flags == 0 && (m.vkCode == (int)Keys.I || m.vkCode == (int)Keys.O)) { buttonWriteToList.PerformClick(); return(1); } //P-转到当前设定时间并播放 if (m.flags == 0 && m.vkCode == (int)Keys.P) { buttonTurnToPlay.PerformClick(); return(1); } } else { //演奏模式下使用TYU暂停 if (m.flags == 0 && (m.vkCode == (int)Keys.T || m.vkCode == (int)Keys.Y || m.vkCode == (int)Keys.U)) { if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsPaused) { musicPlayer.Ctlcontrols.play(); return(1); } else { buttonTurnToPlay.PerformClick(); return(1); } } } return(0); } return(CallNextHookEx(hKeyboarfHook, nCode, wParam, lParam)); }