第一种 (全屏不可触发)
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) { int WM_KEYDOWN = 256; int WM_SYSKEYDOWN = 260; if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN) { switch (keyData) { case Keys.Escape: DialogResult dr = MessageBox.Show("确定要退出吗?", "退出系统", MessageBoxButtons.OKCancel); if (dr == DialogResult.OK)//如果点击“确定”按钮 { FormPassword form = new FormPassword(); form.StartPosition = FormStartPosition.CenterScreen; form.ShowDialog(); // this.Close();//esc关闭窗体 //System.Environment.Exit(0); } break; } } return false; }
//第二种方法 (全屏可触发)
private void timer2_Tick(object sender, EventArgs e) { //因为回车的ASCII码是13 所以我们这里就用把回车的ascii传递过去 //需要监控什么按键就写某个按键的ASCII码 if (GetAsyncKeyState(27) != 0) { ////MessageBox.Show("你按下了ESC"); DialogResult dr = MessageBox.Show("确定要退出吗?", "退出系统", MessageBoxButtons.OKCancel); //if (dr == DialogResult.OK)//如果点击“确定”按钮 //{ // //Form2 form = new Form2(); // //form.StartPosition = FormStartPosition.CenterScreen; // //form.ShowDialog(); // // this.Close();//esc关闭窗体 // System.Environment.Exit(0); //} //this.Close(); } } [DllImport("user32")] public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo); private readonly int MOUSEEVENTF_MOVE = 0x0001;//模拟鼠标左键按下 private readonly int MOUSEEVENTF_LEFTUP = 0x0004;//模拟鼠标左键抬起 [DllImport("user32.dll")] //函数声明 public static extern int GetAsyncKeyState(int vKey);
//第三种方法 视频播放器按键事件 (全屏不可触发)
private void axWindowsMediaPlayer1_KeyDownEvent_1(object sender, _WMPOCXEvents_KeyDownEvent e) { if (e.nKeyCode == (int)Keys.Escape) //32 { //MessageBox.Show("test"); this.Close(); } }
//第四种方法
HOOK, 只能触发几下 就失效了 不知道为啥 ,........