本人打算入住此博客园了,希望此地能记录我的程序历程。
首先关于钩子,相比大家都明白,在程序监听事件时只能监听本程序所引发的事件,而不能监听全局事件,而window提供钩子则为我们提供这解决方案
当初想做这个最初是由于QQ截图(腾讯为数不多良心产品)没有像QQ自带那种ctrl+alt+A能调用出来
就想自己写程序做一个出来,然后,就有了这个东东
此程序通过封装一个类库(调用win32钩子hook函数)来给应用程序使用,此dll结构如下
其中实现了鼠标Hook与键盘Hook,都继承于这个抽象类GlobalHook
另外这个dll是某位大神写的,并不是我写的,只是本人拿来在用而已。
调用代码:


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"); } } } }
其中此dll下载地址为:http://files.cnblogs.com/MyJie/MouseKeyboardLibrary.rar
另外由于钩子本身可以做很多很危险事(请自行脑补)所以请大家在c#方面还是别做些恶意程序
另附微软msdn里的Keys的枚举:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.keys(v=VS.80).aspx
本人的第一篇正式分享博文,希望对大家有帮助
注:如果你觉得此文章对你有帮助,请点下”推荐“,你的支持才是我最大的动力