SetWindowsHookEx c#
Posted
技术标签:
【中文标题】SetWindowsHookEx c#【英文标题】: 【发布时间】:2020-08-18 10:51:46 【问题描述】:我想挂钩一个特定进程而不是全局挂钩,但我不知道在调用它时我必须在 SetWindowsHookEx 中放入什么。
我不明白HookProc和第三个参数是什么。
public Form1()
InitializeComponent();
public enum HookType : int
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll")]
static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);
public uint findWindowThreadId()
uint idprocess;
idFirstGt = GetWindowThreadProcessId(FindWindow(default(string), "ProcessName"), IntPtr.Zero);
return idProcess;
public void SetHook()
hhook = SetWindowsHookEx(HookType.WH_KEYBOARD,/* HERE , AND HERE */, findWindowThreadId());
谢谢!
【问题讨论】:
【参考方案1】:HookProc 是您希望在 HookType 发生时执行的回调函数(您编写的)。
第三个参数(IntPtr hMod)仅在您的 HookProc 驻留在另一个库(又名 DLL)中时才相关。如果在您的代码中定义了 HookProc,那么您可以为此第三个参数指定 NULL。
【讨论】:
以上是关于SetWindowsHookEx c#的主要内容,如果未能解决你的问题,请参考以下文章
为啥必须将 SetWindowsHookEx 与 Windows 消息队列一起使用
增加 Windows 7 中的 SetWindowsHookEx 限制