我想挂接一个特定的进程,而不是全局挂接,但我不知道在调用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());
}谢谢你!
发布于 2020-10-07 01:14:27
HookProc是您希望在发生HookType时执行的回调函数(由您编写)。
第三个参数(IntPtr DLL)仅在您的HookProc驻留在另一个库(也称为DLL)中时才相关。如果在您的代码中定义了HookProc,那么您可以为第三个参数指定NULL。
https://stackoverflow.com/questions/63467086
复制相似问题