如何解决SetWindowsHookEx c#
我想钩住一个特定的进程而不是全局钩子,但是我不知道在调用它时必须在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 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());
}
谢谢!
解决方法
HookProc是您希望在发生HookType时执行的回调函数(编写)。
第三个参数(IntPtr hMod)仅在您的HookProc驻留在另一个库(也称为DLL)中时才相关。如果在代码中定义了HookProc,则可以为此第三个参数指定NULL。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。