求C#高手帮忙!关于线程和钩子,代码就两三句
调用了user32的FindWindow()、SetWindowsHookEX()和GetThreadProcessId()三个函数,请看代码:代码一:staticint...
调用了user32的FindWindow()、SetWindowsHookEX()和GetThreadProcessId()三个函数,请看代码:
代码一:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetCurrentProcessId());
这时候hHook输出结果不为0,就是说设置钩子成功,但是钩子放在了本程序上;
代码二:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
int a;
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetWindowsThreadProcessId(hWnd,out a));
这时候hHook输出结果居然是0,设置钩子失败,我就是不明白啊!我想设置局部的钩子,这是最后一步啊,代码一成功说明SetWindowsHookEX前面三个参数是正确的,说明只有最后一个参数有问题,但是大家都是输出一个整数,应该会无论如何hHook都不会为0,就是说设置钩子都会成功但是设置的对象不一定正确而已,但是实际并非如此,很诡异啊!希望各位可以帮帮忙解决,谢谢了!
然后我尝试将代码一这样改:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetCurrentProcessId()+1);
结果输出hHook的值为0,求救啊!! 展开
代码一:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetCurrentProcessId());
这时候hHook输出结果不为0,就是说设置钩子成功,但是钩子放在了本程序上;
代码二:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
int a;
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetWindowsThreadProcessId(hWnd,out a));
这时候hHook输出结果居然是0,设置钩子失败,我就是不明白啊!我想设置局部的钩子,这是最后一步啊,代码一成功说明SetWindowsHookEX前面三个参数是正确的,说明只有最后一个参数有问题,但是大家都是输出一个整数,应该会无论如何hHook都不会为0,就是说设置钩子都会成功但是设置的对象不一定正确而已,但是实际并非如此,很诡异啊!希望各位可以帮帮忙解决,谢谢了!
然后我尝试将代码一这样改:
static int hHook=0;
HookProc hp = new HookProc(KbHookProc)
IntPtr hWnd = FindWindow(null, "QQ2013");
hHook=SetWindowsHookEX(2,hp,IntPtr.Zero,GetCurrentProcessId()+1);
结果输出hHook的值为0,求救啊!! 展开
4个回答
展开全部
FindWindows函数应该有问题,单凭窗口标题来获取句柄不太可靠,可以尝试一下用SPY。另外看你的代码好像你不是要做线程钩子吧,代码一是线程钩子,没什么问题,代码二是全局钩子,得放到DLL里面去,多看看资料吧,《Windows核心编程》里好像有关于HOOK的资料,网上也很多,多看多写,理解了原理写起来就简单了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MSDN原文:
If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes.
大概意思是如果想钩住别的进程,需要以dll的形式
如果以exe的形式,也就是LZ这样的做法,只能钩住本线程,或者全局钩子
楼主代码一的GetCurrentProcessId()获取的就是本进程的线程ID,所以勾住的是自己.
代码二LZ想勾的QQ2013属于"othre processes",所以会失败
If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes.
大概意思是如果想钩住别的进程,需要以dll的形式
如果以exe的形式,也就是LZ这样的做法,只能钩住本线程,或者全局钩子
楼主代码一的GetCurrentProcessId()获取的就是本进程的线程ID,所以勾住的是自己.
代码二LZ想勾的QQ2013属于"othre processes",所以会失败
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这钩子程序写 到处是问题 把你全部程序贴出来
追问
我写得很不规范,源码很长,我怕你们看着烦了,能不能你写一个 笔记本的HOOK,,我想参考一下!谢谢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我想说 你是管理员权限么
或者你用的Windows 8就会这样...
或者你用的Windows 8就会这样...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询