鼠标钩子问题,为什么不能钩其他进程鼠标消息

blastball 2002-03-03 09:36:42
程序如下,但MouseProc只能铺捉调用进程
mouseHook=(HHOOK)SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc, theApp.m_hInstance, 0 );
...全文
73 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cowboy22 2002-03-05
  • 打赏
  • 举报
回复
给你发了一个程序,不过是勾WH_CALLWNDPROCRET的。
ygd 2002-03-05
  • 打赏
  • 举报
回复
倒数第二参数错误
应该动态库本模块句柄
madfox 2002-03-05
  • 打赏
  • 举报
回复
在dll cpp中:
LRESULT CALLBACK cbMouseProc(int nCode, WPARAM wParam, LPARAM lParam )
{
...
return CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);

}

void StartHook()
{
g_hMouseHook=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)cbMouseProc,theApp.m_hInstance,0 );
}
在app调用:例如
OnOk()
{
StartHook();
}
没有不成功的,试试




dongfa 2002-03-05
  • 打赏
  • 举报
回复
错了.
SetWindowsHookEx(WH_MOUSE,HookProc,hInstance,0);
dongfa 2002-03-05
  • 打赏
  • 举报
回复
SetWindowsHookEx(WH_MOUSE,HookProc,NULL,0);
blastball 2002-03-05
  • 打赏
  • 举报
回复
谢谢大家,解决了
QLSoft 2002-03-05
  • 打赏
  • 举报
回复
何不用消息挂钩试试??
HHOOK = SetWindowsHookEx(WH_MESSAGE,(HOOKPROC)MesssageHookProc,wParam,lParam);
回调函数:
LRESULT CALLBACK MesssageHookProc(int ncode,WPARAM wparam,LPARAM lparam);
小弟有关于“挂钩”的相关源码,小弟此前做过几乎所有的挂钩程序[指Windows所支持的各种类型].
suntingting 2002-03-05
  • 打赏
  • 举报
回复
倒msdn中查一查SetWindowsHookEx的内容,你就知道怎样用全局钩子
全局钩子一定要为.dll文件
strip 2002-03-04
  • 打赏
  • 举报
回复
为什么不看看上面的例子先?
blastball 2002-03-04
  • 打赏
  • 举报
回复
tar(GPS)共享段,有什么规定吗,msdn怎么没说,
如何说明呢
strip 2002-03-04
  • 打赏
  • 举报
回复
同意gpib2000, 你可以参见msdn中的例子(里面生成了moushook.dll 和 testapp.exe):

MousHook.exe Demonstrates Windows 3.1 WH_MOUSE Hook (Q81333)

http://support.microsoft.com/support/kb/articles/Q81/3/33.ASP

(这个sample的项目文件是makefile,调用nmake来build:
nmake /f makefile
tar 2002-03-04
  • 打赏
  • 举报
回复
共享断的说
sandiii 2002-03-04
  • 打赏
  • 举报
回复
我也在找例子,大侠能不能给我也发一个,谢谢
gerysand@hotmail.com
blastball 2002-03-04
  • 打赏
  • 举报
回复
函数声明:
LRESULT CALLBACK MouseProc(int ncode,WPARAM wparam,LPARAM lparam);
gpib2000 2002-03-04
  • 打赏
  • 举报
回复
要想捕捉其它进程的鼠标消息,应在DLL中设置钩子,然后在你的应用中调用。
georgehuang 2002-03-04
  • 打赏
  • 举报
回复
上面的大侠,你给个例子好么,拜托了
blastball 2002-03-04
  • 打赏
  • 举报
回复
谁有全局的鼠标钩子例子吗,上面的方式还是不行啊,
我的email: tyt@263.net 谢了
bbasd88 2002-03-04
  • 打赏
  • 举报
回复
系统里可没这个函数,MouseProc要定义成一个基本的回调函数。
georgehuang 2002-03-04
  • 打赏
  • 举报
回复
应该怎么声明这个函数呢?它不是系统消息本来就会处理的函数吗
bbasd88 2002-03-04
  • 打赏
  • 举报
回复
MouseProc没有在前面声明,只在后面有实现的?
加载更多回复(6)
三:程序的设计: I:设置 设置是通过SetWindowsHookEx ()的API函数. 原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId) idhook:装入的类型. lpfn: 进程的入口地址 hMod: 应用程序的事件句柄 dwThreadId: 装入的线程标示 参数: idHook: 这个参数可以是以下值: WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、 WH_KEYBOARD_LL、WH_MOUSE、WH_MOUSE_LL、WH_MSGFILTER、WH_SHELL、WH_SYSMSGFILTER。 对于这些参数,我不想一一加以解释,因为MSDN中有关于他们的详细注解。我只挑选其中的几个加以中文说明。 WH_KEYBOARD:一旦有键盘敲打消息(键盘的按下、键盘的弹起),在这个消息被放在应用程序的消息队列前,WINDOWS将会调用你的函数。函数可以 改变和丢弃键盘敲打消息。 WH_MOUSE:每个鼠标消息在被放在应用程序的消息队列前,WINDOWS将会调用你的函数。函数可以改变和丢弃鼠标消息。 WH_GETMESSAGE:每次当你的应用程序调用一个GetMessage()或者一个PeekMessage()为了去从应用程序的消息队列中要求一个消息时,WINDOWS都会调用你的函数。 而函数可以改变和丢弃这个消息。 II:释放 的释放使用的是UnhookWindowsHookEx()函数 原形:BOOL UnhookWindowsHookEx( HHOOK hhk ) UnhookWindowsHookEx()函数将释放的是链中函数SetWindowsHookEx所装入的进程。 hhk: 将要释放的进程的句柄。 III:进程 进程使用函数HookProc;其实HookProc仅仅只是应用程序定义的符号。比如你可以写成KeyBoardHook.但是参数是不变的。Win32 API提供了诸如:CallWndProc、 GetMsgProc、DebugProc、CBTProc、MouseProc、KeyboardProc、MessageProc等函数,对于他们的详细讲解,可以看MSDN我在此只讲解一下KeyBoardHook的含义。 原形:LRESULT CALLBACK KeyBoardHook (int nCode, WPARAM wParam, LPARAM lParam) 说明:进程是一些依附在一个上的一些函数,因此进程只被WINDOWS调用而不被应用程序调用,他们有时就需要作为一个回调函数(CALLBACK)。 参数说明: nCode:代码,进程使用代码去决定是否执行。而代码的值是依靠的种类来定的。每种种类都有他们自己一系列特性的代码。比如对于WH_KEYBOARD, 代码的参数有:HC_ACTION,HC_NOREMOVE。HC_ACTION的意义:参数wParam 和lParam 包含了键盘敲打消息的信息,HC_NOREMOVE的意义:参数wParam 和lParam包含了 键盘敲打消息的信息,并且,键盘敲打消息一直没有从消息队列中删除。(应用程序调用PeekMessage函数,并且设置PM_NOREMOVE标志)。也就是说当nCode等于HC_ACTION时, 进程必须处理消息。而为HC_NOREMOVE时,进程必须传递消息给CallNextHookEx函数,而不能做进一步的处理,而且必须有CallNextHookEx函数的返回值。 wParam:键盘敲打所产生的键盘消息,键盘按键的虚拟代码。 lParam:包含了消息细节。 注意:如果进程中nCode小于零,进程必须返回(return) CallNextHookEx(nCode,wParam,lParam);而进程中的nCode大于零,但是进程并不处理消息, 作者推荐你调用CallNextHookEx并且返回该函数的返回值。否则,如果另一个应用程序也装入WH_KEYBOARD ,那么该将不接受通知并且返回一个不正确的值。 如果进程处理了消息,它可能返回一个非零值去阻止系统传递该信息到其它剩下的或者windows进程。所以最好在进程的最后都返回CallNextHookEx的返回

15,471

社区成员

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

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