请教:如何能获取鼠标形状信息?

zxzx3323 2018-03-06 07:30:33
想法:做一个简单的窗口程序,用于获取鼠标在所有其它窗口下的形状信息,然后根据获取的鼠标形状信息再做判断。
比如:在浏览器窗口下:鼠标的普通区域为标准箭头,在无链接文字处是工字形,有链接处是手形。
如何获取鼠标的这些形状信息,以便于区别判断呢?
...全文
806 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxzx3323 2018-03-10
  • 打赏
  • 举报
回复
非常感谢schlafenhamster 的帮助,根据你程序中的代码,我成功获取了鼠标形状信息,还是这里高手多啊!给分结贴!
赵4老师 2018-03-08
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
"ScreenRecord.zip" https://download.csdn.net/my/uploads/18
纠正为http://download.csdn.net/download/schlafenhamster/4022912
schlafenhamster 2018-03-08
  • 打赏
  • 举报
回复
zxzx3323 2018-03-07
  • 打赏
  • 举报
回复
回复Visual Eleven(我感觉还是这名字好听) : GetCursorInfo()得到的是 CURSORINFO 结构体,只包含DWORD cbSize; DWORD flags; HCURSOR hCursor; POINT ptScreenPos; 没有鼠标形状信息啊? 请帮我再想想别的办法,谢谢
zxzx3323 2018-03-07
  • 打赏
  • 举报
回复
回schlafenhamster : GetCursor();得到是的光标的句柄。打开浏览器的一个网页,用调试状态经测试,无论鼠标是手形,还是箭头,还是工字形,GetCursor得到的句柄是一样的,无法判断鼠标状态。 是不是我什么地方搞错了,请你帮我测试一下,谢谢
Eleven 2018-03-07
  • 打赏
  • 举报
回复
GetCursorInfo() 试试~
schlafenhamster 2018-03-07
  • 打赏
  • 举报
回复

#define IDC_HAND MAKEINTRESOURCE(32649) // 500
void CCheckCursorDlg::LoadAllCursors(CPtrArray &array)
{
	HCURSOR hcur;
	hcur=::LoadCursor(0,IDC_ARROW);// 10003
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_IBEAM);// 10005
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_WAIT); // MAKEINTRESOURCE(32514)
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_CROSS);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_UPARROW);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_SIZENWSE);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_SIZENESW);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_SIZEWE);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_SIZENS);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_SIZEALL);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_NO);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_HAND);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_APPSTARTING);
	array.Add(hcur);
	hcur=::LoadCursor(0,IDC_HELP);
	array.Add(hcur);
}
初始化·
	CPtrArray m_hCursors;
	LoadAllCursors(m_hCursors);
比较
	HCURSOR tmp=GetCursor();
	if(tmp != m_hCursors[idx])
	{
		AfxMessageBox("Not Same !");
		return;
	}

Lafite_MoMo 2018-03-07
  • 打赏
  • 举报
回复
zxzx3323 2018-03-07
  • 打赏
  • 举报
回复
回复schlafenhamster :谢谢你的耐心回复。但由于我水平有限,还不能领会用法。是否可以再麻烦你将调试过的原程序打包发给我。再次感谢!
schlafenhamster 2018-03-07
  • 打赏
  • 举报
回复
另一个进程使用 AttachThreadInput // We try to get the cursor's icon HCURSOR CScreenRecordDlg::GetMouse(LPPOINT pt) {// HCURSOR tmp=0; CWnd *pwin=WindowFromPoint(*pt); DWORD TidOrig=GetWindowThreadProcessId(pwin->m_hWnd,0); DWORD Tid=GetCurrentThreadId(); if(TidOrig==Tid) {// if same threads ;then use current tmp=GetCursor(); } else if(AttachThreadInput(Tid,TidOrig,TRUE)) {// if different threads; use the orignal tmp=GetCursor(); // we have to detach AttachThreadInput(Tid,TidOrig,FALSE); } return tmp; }
zxzx3323 2018-03-07
  • 打赏
  • 举报
回复
打开浏览器的一个网页,用调试状态经测试,无论鼠标是手形,还是箭头,还是工字形,GetCursor得到的句柄是一样的,无法判断鼠标状态。
zgl7903 2018-03-07
  • 打赏
  • 举报
回复
标准的光标可以对比句柄 hCursor, 如果有办法识别图像 那么 可以使用 CopyImage

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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