隐藏鼠标的实现

在他乡奋斗 2011-04-11 11:05:53
如果采用ShowCursor(FALSE)只能隐藏本窗口的鼠标,我需要隐藏系统是鼠标。请问各位高手如何入手。
...全文
176 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2011-04-11
  • 打赏
  • 举报
回复
这样当前被加载的图标还会继续显示
Dreadnought 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lactoferrin 的回复:]

如果只是隐藏,不影响位置和点击功能该如何办
[/Quote]
删除系统全部的*.cur之类的文件如何?
Lactoferrin 2011-04-11
  • 打赏
  • 举报
回复
如果只是隐藏,不影响位置和点击功能该如何办
lumei_1123 2011-04-11
  • 打赏
  • 举报
回复
一种比较常见的方法,创建一个线程。在线程中一直响应mouse_event消息,强制将鼠标移到(0,0)点。这种方法实现简单
但很占CPU。
实例代码为:
/**
* 隐藏鼠标的线程
*/
DWORD WINAPI HideMouseThread(PVOID param)
{
POINT cursorNew;
while(1){
GetCursorPos(&cursorNew);
::mouse_event(MOUSEEVENTF_MOVE,cursorNew.x,cursorNew.y,0,0);
}
}
一种方法为设置一个全局钩子。在钩子中将鼠标的位置移到(0,0)坐标。这种方法需要写动态链接库,因为全局钩子需要
放在动态库中,占用的资源较少。实例代码为:
/**
* 隐藏鼠标钩子的回调函数
*/
LRESULT CALLBACK HideMouseHookProc(int nCode ,WPARAM wParam,LPARAM lParam);

/**
* 安装隐藏鼠标钩子
*/
DLLEXPORT int CALLBACK InstallHideMouseHook()
{
theApp.m_hMouseHook = SetWindowsHookEx(WH_MOUSE,HideMouseHookProc,theApp.m_hInstance,0);

return 1;
}

/**
* 卸载隐藏鼠标钩子
*/
DLLEXPORT int CALLBACK UnInstallMouseHideHook()
{
if (theApp.m_hMouseHook)
{
UnhookWindowsHookEx(theApp.m_hMouseHook);
}

theApp.m_hMouseHook = NULL;

return TRUE;
}


/**
* 窗口消息过滤钩子的回调函数
*/
LRESULT CALLBACK HideMouseHookProc(int nCode ,WPARAM wParam,LPARAM lParam)
{
POINT cursorNew;

GetCursorPos(&cursorNew);
::mouse_event(MOUSEEVENTF_MOVE,cursorNew.x,cursorNew.y,0,0);

return CallNextHookEx(theApp.m_hMouseHook,nCode,wParam,lParam);
}
Eleven 2011-04-11
  • 打赏
  • 举报
回复
或者使用
ClipCursor(CRect(0,0,0,0));
ShowCursor(FALSE);//
Eleven 2011-04-11
  • 打赏
  • 举报
回复
可以用HOOK
许文君 2011-04-11
  • 打赏
  • 举报
回复
如果不需要拦截鼠标事件,可不启用钩子。
许文君 2011-04-11
  • 打赏
  • 举报
回复
绘制个透明的鼠标,使用 setsystemcursor替换系统鼠标,然后启用个钩子,拦截鼠标消息。
quwei197874 2011-04-11
  • 打赏
  • 举报
回复
HCURSOR hCursor;
hCursor = AfxGetApp()-> LoadCursor(IDC_MOUSE);
SystemParametersInfo(SPI_SETMOUSEVANISH,...)

15,471

社区成员

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

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