关于Set Hook的问题(100分)

  • 主题发起人 主题发起人 山药蛋
  • 开始时间 开始时间

山药蛋

Unregistered / Unconfirmed
GUEST, unregistred user!
请看以下安装Hook的代码,是Dll中的。
运行后hKeyBoardHook非零,似乎是成功安装了,
但是我在那个被监视的窗口上按键却不能触发KeyBoardProc,
要令dW=0,改为全局Hook才能触发,请教这是为什么?
让Hook单独监视一个窗口线程不行吗?谢谢!
HWND hWnd1=::FindWindow("#32770","Title");
DWORD dW=GetWindowThreadProcessId(hWnd1,NULL);
hKeyBoardHook=SetWindowsHookEx(
WH_KEYBOARD,KeyBoardProc,NULL,dW);
 
应该没有问题。
 
你该看看MSDN中那个函数参数说明。我记得一般最后一个参数一般为0。
若你要监视一个窗口,你可以在回调函数中对当前窗口是否是你要的窗口加以判断,
用if(::GetForegroundWindow()==::FindWindow("@32770","Title"))判断为真就执行你的代码。
我就是用这招在N年前做了个盗QQ密码的东西自己在学校用。
 
to fu_qi_ming:
你说的对,不是代码上的问题。我后来才发现,是调试方法不对:Dll中监视其它线程的hook代码会被映射到受监视的进程空间,这样是没法在代码窗用断点拦下来的,但不等于这个代码不起作用。
to sky:
你的方法的确能实现监视个别线程窗口的目的,但是系统花消会比较大,因为hook代码在所有进程都映射了一份。
希望各位能关注我的另外一个hook问题的讨论:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2476431
谢谢!
 

Similar threads

后退
顶部