首先关于钩子,相比大家都明白,在程序监听事件时只能监听本程序所引发的事件,而不能监听全局事件,而window提供钩子则为我们提供这解决方案
当初想做这个最初是由于QQ截图(腾讯为数不多良心产品)没有像QQ自带那种ctrl+alt+A能调用出来
就想自己写程序做一个出来,然后,就有了这个东东
此程序通过封装一个类库(调用win32钩子hook函数)来给应用程序使用,此dll结构如下
其中实现了鼠标Hook与键盘Hook,都继承于这个抽象类GlobalHook
另外这个dll是某位大神写的,并不是我写的,只是本人拿来在用而已。
调用代码:
View Code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MouseKeyboardLibrary; using System.Runtime.InteropServices; using System.Diagnostics; namespace key { public partial class K : Form { public K() { InitializeComponent(); } MouseHook mouseHook = new MouseHook(); KeyboardHook keyboardHook = new KeyboardHook(); private void 完美N_Load(object sender, EventArgs e) { keyboardHook.KeyDown += new KeyEventHandler(keyboardHook_KeyDown); //mouseHook.MouseDown += new MouseEventHandler(mouseHook_MouseDown); //mouseHook.Start(); keyboardHook.Start(); this.Hide();//隐藏窗体 this.ShowInTaskbar = false; } void keyboardHook_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.A && e.Alt) { Process.Start(@"D:\JERRY\截图2012.exe"); } else if (e.Alt) { if (e.KeyCode == Keys.Q) { ProcessStartInfo psi = new ProcessStartInfo("mstsc"); Process.Start(psi); } if (e.KeyCode == Keys.Z) Process.Start(@"\\tstdev06"); if (e.KeyCode == Keys.A) Process.Start(@"D:\HKGTFS01"); if (e.KeyCode == Keys.E) Process.Start(@"C:\Program Files\Google\Chrome\Application\chrome.exe"); } } } }