using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms;
namespace wa_hooktest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } internal enum HookType //枚举,钩子的类型 {
//MsgFilter = -1,
//JournalRecord = 0,
//JournalPlayback = 1,
Keyboard = 2,
//GetMessage = 3,
//CallWndProc = 4,
//CBT = 5,
//SysMsgFilter = 6,
//Mouse = 7,
//Hardware = 8,
//Debug = 9,
//Shell = 10,
//ForegroundIdle = 11,
//CallWndProcRet = 12,
KeyboardLL = 13,
//MouseLL = 14,
};
[DllImport("kernel32.dll")] static extern int GetCurrentThreadId(); //取得当前线程编号的API
类似的问题好多............前几天就有人文这个问题。你也不说明什么问题就发代码... 新建一个form4窗体.增加2个button,增加事件。。然后复制代码 其实不一样的地方就是红色的地方 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection; using System.Diagnostics;
namespace WindowsApplication1 { /// <summary> /// Description of MainForm. /// </summary> public partial class Form4 : Form { //委托 public delegate int HookProc(int nCode, int wParam, IntPtr lParam); static int hHook = 0; public const int WH_KEYBOARD_LL = 13; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 HookProc KeyBoardHookProcedure; //键盘Hook结构函数 [StructLayout(LayoutKind.Sequential)] public class KeyBoardHookStruct { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } #region DllImport //设置钩子 [DllImport("user32.dll")] public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId); [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] //抽掉钩子 public static extern bool UnhookWindowsHookEx(int idHook); [DllImport("user32.dll")] //调用下一个钩子 public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
[DllImport("kernel32.dll")] public static extern int GetCurrentThreadId();
[DllImport("kernel32.dll")] public static extern IntPtr GetModuleHandle(string name);
#endregion #region 自定义事件 public void Hook_Start() { // 安装键盘钩子 if (hHook == 0) { KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);