SetWindowsHookEx函数
在mydll中我启动一个钩子,如下。
SetWindowsHookEx(WH_GETMESSAGE, MYHOOKPROC, hin, threadId);
然后再写一个控制台程序,去获取要钩的窗口进程threadid 传入,钩子能创建成功但是无法相应消息。如果 threadid传入为0 却可以响应。
流程大概就这样:主线程调用如下:
hwnd = FindWindow(TEXT("Progman"), NULL);
threadId = GetWindowThreadProcessId(hwnd, &pid);; // 我获取这个进程的子线程或者子线程的子线程都不行
HINSTANCE hi = LoadLibrary(TEXT("../../HookDll/Debug/HookDll.dll"));
LOADHOOK lh = (LOADHOOK)GetProcAddress(hi, "LOADHOOK");
lh(threadId);;
在dll中的LOODHOOK方法直接 SetWindowsHookEx(WH_GETMESSAGE, MYHOOKPROC, hin, threadId);
LRESULT CALLBACK MYHOOKPROC(int code, WPARAM w, LPARAM l) {
MessageBox(........) //如果threadid传入为0即可调用,但是传入线程id就调用不了,新手求指点。
}
是这样的,我希望拦截打开应用程序的消息,然后给弹窗是否做选择,我试过很多网上的办法 但是现在都卡在这地方。真的不知道是哪里错了。