创建一个新进程后用HOOK失效。

lliangcn 2005-10-26 09:21:34
BOOL bRet = ::CreateProcess(NULL,
LPTSTR(LPCTSTR(path)),
NULL,
NULL,
TRUE,
CREATE_SUSPENDED,
NULL,
LPCTSTR(lpCurrentDirectory),
&si,
&pi);

然后调用另一个DLL中的输出函数,执行内有代码:
g_hhook = ::SetWindowsHookEx(WH_KEYBOARD,
(HOOKPROC)KeyboardProc, g_hins, dwThreadId);

症状,第一次启动程序的时候会HOOK失败,第二次以后启动就会正常。而且每次重启系统后的第一次启动程序总会HOOK失败,之后再启动就又正常了。非常不解,望高手指点。
...全文
109 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
millercq 2006-04-30
  • 打赏
  • 举报
回复
用了CREATE_SUSPENDED后,要调用ResumeThread(),然后sleep()一段时间等待进程启动,然后SetWindowsHookEx就能成功了
lliangcn 2005-10-26
  • 打赏
  • 举报
回复
要装什么东西呢。因为就是同一个程序(一个.exe和一个.dll),别的就没有了啊。只要是系统启动后的第一次运行就会出错。真不知道是什么原因。
rabo 2005-10-26
  • 打赏
  • 举报
回复
一定是你第一次有东西没装上,然后给装上了。第二次就可以直接用了。

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧