标题:[求助]关于全局钩子和线程钩子的问题
只看楼主
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
 问题点数:0 回复次数:7 
[求助]关于全局钩子和线程钩子的问题

小弟在一个DLL文件中有如下代码:

//hWin是在CPP文件中已经获得的窗口句柄
void SetHook(HWND hWin)
{
……
ThisDllName = GetModuleHandle("Find.dll") ;
ThreadId = GetWindowThreadProcessId(hWin, NULL) ;
h_hBut = SetWindowsHookEx(WH_CALLWNDPROC, KeyFunc, ThisDllName, 0) ; //*
……
}

LRESULT CALLBACK KeyFunc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(wParam == VK_RETURN)
{
MessageBox("hello") ;
}
return CallNextHookEx(h_hBut, nCode, wParam, lParam) ;
}

此时运行程序,一切正常,按下“回车”之后,弹出对话框。
但因为不需要全局钩子,于是我将*号(红色的那句)最后一个参数改为:ThreadId ,但此时再运行时,按下“回车”却没有反应了。。查过MSDN后自己觉得GetWindowThreadProcessId函数的用法应该没错(我英语很错菜)。小弟实在不知这是为什么,请各位大虾帮帮忙。多谢了!!

搜索更多相关主题的帖子: 线程 钩子 全局 
2007-07-30 00:18
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 
线程获取错误,应该用
GetCurrentThreadID()函数,获取当前线程ID,最好是在主程序中获取线程ID

然后在设置HOOOK的时候,将线程D传入到DLL中,再在
SetWindowsHookEx时候,最后一个参数使用传入到DLL中的线程ID

不过如果不是全局的话,应该可以将HOOK放到程序内部比较方便。当然放到DLL中,方便以后修改成全局的拉。呵呵

2007-07-30 10:19
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
得分:0 

GetWindowThreadProcessId(

HWND hWnd,

LPDWORD lpdwProcessId);

LPDWORD lpdwProcessId为空,这个函数的功能就是使用进程标识符而取得进程PID的句柄嘛,你没写怎么回返回
它的PID呢?


2007-07-30 10:25
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
得分:0 
我说错了,我也不太懂呵呵!!!

2007-07-30 10:27
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
得分:0 
以下是引用余来在2007-7-30 10:19:55的发言:
线程获取错误,应该用
GetCurrentThreadID()函数,获取当前线程ID,最好是在主程序中获取线程ID

然后在设置HOOOK的时候,将线程D传入到DLL中,再在
SetWindowsHookEx时候,最后一个参数使用传入到DLL中的线程ID

不过如果不是全局的话,应该可以将HOOK放到程序内部比较方便。当然放到DLL中,方便以后修改成全局的拉。呵呵

线程获取错误,应该用GetCurrentThreadID()函数,获取当前线程ID??
我并不需要当前线程阿!! 我要获得的是另一个程序的线程,所以用的是GetWindowThreadProcessId函数。


鸟蛋开始孵化。。。我等待那一天Forever。。
2007-08-01 02:39
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 

这样使用
DWORD ID;
GetWindowThreadProcessId(窗口句丙,&ID);
其中ID就是要获取到的进程ID


2007-08-01 16:01
圆圆的鸟蛋
Rank: 1
等 级:新手上路
帖 子:216
专家分:0
注 册:2007-4-22
得分:0 
改了,还是没反应!!晕死我了

鸟蛋开始孵化。。。我等待那一天Forever。。
2007-08-02 13:02
whayne
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-8-5
得分:0 

检查一下hwnd是否正确,传错的话当然是没有反应的。

2007-08-05 12:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-159040-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021747 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved