关于SetWindowsHookEx

永磁体呵呵哒 永磁体呵呵哒 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

HHOOK g_hhook = NULL;

//回调函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
wchar_t buf[128] = {0};
wsprintf(buf,_T("nCode:%d"), nCode);
MessageBoxW(NULL, buf,L"",MB_OK);

return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}

BOOL InstallHook()
{
//获得窗口句柄
HWND hWnd = FindWindow(_T("Notepad"),NULL);
if (NULL == hWnd)
{
MessageBoxW(NULL,_T("获得窗口句柄为空"), L"", MB_OK);
return FALSE;
}
//获得线程ID
DWORD dwThreadId = 0;
dwThreadId = GetWindowThreadProcessId(hWnd,NULL);
if (dwThreadId == 0)
{
MessageBoxW(NULL,_T("获得窗口线程句柄不正"), L"", MB_OK);
return FALSE;
}
g_hhook = SetWindowsHookExA(WH_KEYBOARD, KeyboardProc, GetModuleHandleA("本Dll的名字"), dwThreadId);
if (NULL == g_hhook)
{
//MessageBoxW(_T("SetWindowsHookExA Fail"));
int err = GetLastError();
wchar_t buf[128] = {0};
wsprintf(buf,_T("LGLE:%d"), err);
MessageBoxW(NULL, buf,L"",MB_OK);
}
return TRUE;
}


在dllmain中调用了InstallHook这个函数进行HOOK

现在我想把此dll注入到记事本中,用其它的方法注入的。而不是通过另一个程序调用InstallHook这个函数
我通过调试发现走到这一步(if (NULL == g_hhook))的时候都没有问题,但是,就是没有HOOK 成功,用别的工具看不到消息钩子。按键盘也不弹框。便是dll己经注入了

怎么回事儿,请指点一下。
...全文
评论 7
收藏 已收藏
分享
返回顶部