SetWindowsHookEx注入问题,很疑惑,大家帮忙,谢谢

cidkr 2011-10-25 05:55:22
原因:
如果我事先打开一个"记事本",那么用
HWND myh=FindWindow(NULL,"无标题 - 记事本");
DWORD tid=GetWindowThreadProcessId(myh,NULL);

::SetWindowsHookEx(WH_KEYBOARD,&nuoya1keyboardproc,::GetModuleHandle("123.dll"),tid);
可以注入成功,而且按HOME键可以呼出窗口.

可是:我如果用CreatdProcess创建一个进程,用得到的 线程ID
来注入,按HOME去没有反应.(就是创建进程之后马上注入)

代码如下:


STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWMAXIMIZED;
ZeroMemory( &pi, sizeof( pi ) );


if( !CreateProcess( NULL, // No module name (use command line).
"c://windows/notepad.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
AfxMessageBox( "CreateProcess failed." );
}
DWORD tid=pi.dwProcessId;
::SetWindowsHookEx(WH_KEYBOARD,&nuoya1keyboardproc,::GetModuleHandle("123.dll"),tid);

请教下各位,这是什么原因,要怎么解决..按理来说,创建进程,而且马上注入,没什么问题啊


...全文
425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2012-03-14
  • 打赏
  • 举报
回复
也就是我遇到的这个问题:
http://topic.csdn.net/u/20120311/16/2dc818c3-f799-4dab-b06d-304daa12a200.html

加上WaitForInputIdle吧
jiang469708842 2012-02-08
  • 打赏
  • 举报
回复
正在研究钩子哈哈
cuigg2011 2011-10-30
  • 打赏
  • 举报
回复
可以联系我:390486423
注明:vc 编程
l460602540 2011-10-29
  • 打赏
  • 举报
回复

不好意思这两天有事就没来论坛看看

下面是我写的。你看看
LRESULT CALLBACK keyboardproc(int nCode ,WPARAM wParam,LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (wParam == WM_KEYDOWN)
{
int code = ((KBDLLHOOKSTRUCT*)lParam)->vkCode;
if (code == VK_HOME)
{
MessageBoxW(NULL,TEXT("hello"),TEXT("hello"),0);
return 1;
}
}
}
return CallNextHookEx(keyboard,nCode,wParam,lParam);
}

有问题加460602540我们一起讨论一下
Lactoferrin 2011-10-28
  • 打赏
  • 举报
回复
keyboardproc是什么

cidkr 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 l460602540 的回复:]
问题一:
::SetWindowsHookEx(WH_KEYBOARD,&nuoya1keyboardproc,::GetModuleHandle("123.dll"),tid);
中的第二个参数有问题,函数名就是函数的地址没必要再加一个&
问题二:
如果该进程是你刚创建的,和你的钩子函数在一起的,就没必要用dll直接写一个回到函数就行了省得麻烦。
msdn上讲setwi……
[/Quote]
感谢各位的答复,第一个问题我已经改过来了,请问第二个问题.要怎么写回调函数.麻烦仁兄详细点,我好学习
cidkr 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 l460602540 的回复:]
问题一:
::SetWindowsHookEx(WH_KEYBOARD,&nuoya1keyboardproc,::GetModuleHandle("123.dll"),tid);
中的第二个参数有问题,函数名就是函数的地址没必要再加一个&
问题二:
如果该进程是你刚创建的,和你的钩子函数在一起的,就没必要用dll直接写一个回到函数就行了省得麻烦。
msdn上讲setwi……
[/Quote]
第一个问题我改过来了,,请教仁兄,第二个问题 要怎么写回调函数呢.希望详细点,可以让我好好学习一下
jacky_qiu 2011-10-26
  • 打赏
  • 举报
回复
我認為創建后不能馬上就SetWindowHookEx。因為進程還有些東西沒有做完。
你可以嘗試CreateProcess後 Sleep(2000) 再調用SetWindowHookEx
l460602540 2011-10-25
  • 打赏
  • 举报
回复
问题一:
::SetWindowsHookEx(WH_KEYBOARD,&nuoya1keyboardproc,::GetModuleHandle("123.dll"),tid);
中的第二个参数有问题,函数名就是函数的地址没必要再加一个&
问题二:
如果该进程是你刚创建的,和你的钩子函数在一起的,就没必要用dll直接写一个回到函数就行了省得麻烦。
msdn上讲setwindowshoookex只有在HOOK其他进程的时候采用dll。

仅供楼主参考
cidkr 2011-10-25
  • 打赏
  • 举报
回复
DWORD tid=pi.dwProcessId;
上面这句写错了,我改成这样DWORD tid=pi.dwThreadId;
还是一样,注入不到新创建的进程中..用360看了下,怎么注入到了 调用程序 自己本身 中去了

15,471

社区成员

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

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