WH_MOUSE_LL

HHHHHHHH123H 2011-05-17 09:40:51
想实现一个全局的鼠标钩子WH_MOUSE只能检测程序的 不能检测全局的
所以使用WH_MOUSE_LL 把钩子放到DLL当中 。 放在对话框当中做测试
然后我点程序标题栏右上角的关闭按钮,程序会有明显的呆滞问题,要过好几秒钟才正常响应关闭动作

下面的几个帖子 也是同样的问题 但是都没人解决
http://topic.csdn.net/u/20100417/16/c4492d0b-a0ac-4304-8ad0-5dfa1585d9a9.html
http://topic.csdn.net/u/20100429/16/42af8761-340e-4f6c-a630-e58676cabf33.html

如果改成WH_MOUSE就不会有停滞 但是不能实现全局的 有人说是代码的问题
LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
{
if (nCode>=0 && wparam==WM_MOUSEMOVE)
{

}

return CallNextHookEx(g_MouseHook,nCode,wparam,lparam);
}
我把我的代码屏蔽掉了 里面什么都没有 但还是有问题

求解
...全文
522 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
康斯坦汀 2011-05-24
  • 打赏
  • 举报
回复
做鼠标钩子不要用WH_MOUSE_LL,用WH_GETMESSAGE。一般人我不告诉他。哈哈。
jamseyang 2011-05-23
  • 打赏
  • 举报
回复
UP,UP,UP
Lactoferrin 2011-05-18
  • 打赏
  • 举报
回复
LRESULT CALLBACK LowLevelMouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if(wParam==WM_LBUTTONDOWN)
cout<<"aaa"<<endl;
return CallNextHookEx(0,nCode,wParam,lParam);
}
HHOOK hook;
BOOL WINAPI HandlerRoutine(
DWORD dwCtrlType
)
{
UnhookWindowsHookEx(hook);
ExitProcess(0);
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
MSG msg;
hook=SetWindowsHookExW(WH_MOUSE_LL,LowLevelMouseProc,GetModuleHandleW(0),0);
SetConsoleCtrlHandler(HandlerRoutine,1);
while(GetMessageW(&msg,0,0,0))DispatchMessageW(&msg);
return 0;
}
Eleven 2011-05-18
  • 打赏
  • 举报
回复
试了一下,关闭没觉得有有明显的停滞
HHHHHHHH123H 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lactoferrin 的回复:]

WH_MOUSE_LL的钩子过程无需放在dll中,直接在exe中完成

#include<iostream>
#include<windows.h>
using namespace std;

LRESULT CALLBACK LowLevelMouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if(wParam=……
[/Quote]

但是你的这个做法 当点击关闭按钮的时候 还是有点 停滞
Lactoferrin 2011-05-18
  • 打赏
  • 举报
回复
393957321
把你的程序发到ribonucleic_acid@126.com给我看
HHHHHHHH123H 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lactoferrin 的回复:]

那是你的程序的问题,不是我给的程序关闭时卡
你把我给的代码放在哪里?
[/Quote]

钩子的安装放在了对话框初始化的时候 能留个QQ吗
Lactoferrin 2011-05-18
  • 打赏
  • 举报
回复
那是你的程序的问题,不是我给的程序关闭时卡
你把我给的代码放在哪里?
HHHHHHHH123H 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lactoferrin 的回复:]

就你的卡,你点的什么关闭按钮
[/Quote]

我在一个多文档做的测试 当关闭一个子文档的时候 有明显的停滞 你可以自己试试
Lactoferrin 2011-05-18
  • 打赏
  • 举报
回复
就你的卡,你点的什么关闭按钮
HHHHHHHH123H 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lactoferrin 的回复:]

LRESULT CALLBACK LowLevelMouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if(wParam==WM_LBUTTONDOWN)
cout<<"aaa"<<endl;
return CallNextHookEx(0,nCode,wParam,lParam);
}
HHOOK hook;
BO……
[/Quote]

照样卡
  • 打赏
  • 举报
回复
调试一下 你要关闭的程序 看他最后几秒都干了什么
Lactoferrin 2011-05-17
  • 打赏
  • 举报
回复
WH_MOUSE_LL的钩子过程无需放在dll中,直接在exe中完成

#include<iostream>
#include<windows.h>
using namespace std;

LRESULT CALLBACK LowLevelMouseProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
if(wParam==WM_LBUTTONDOWN)
cout<<"aaa"<<endl;
return CallNextHookEx(0,nCode,wParam,lParam);
}

int _tmain(int argc, _TCHAR* argv[])
{
MSG msg;
SetWindowsHookExW(WH_MOUSE_LL,LowLevelMouseProc,GetModuleHandleW(0),0);
while(GetMessageW(&msg,0,0,0))DispatchMessageW(&msg);
return 0;
}

15,471

社区成员

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

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