winapi获取鼠标指向当前元素

        最近接到这么个需求,要求获取 windows 下鼠标当前位置的所在应用。代码如下:

int main()
{
	POINT point;
	Sleep(1000);
	GetCursorPos(&point);    //获取鼠标当前坐标
	HWND h = WindowFromPoint(point);    //根据坐标获取所在窗口句柄

	printf("handle: %d\n", (int)h);
	printf("x=%d, y=%d\n", point.x, point.y);

	printf("window text: ");
	char s[400] = {0};
	boolean res = GetWindowText(h, s, 400);    //根据窗口句柄获取窗口标题
	for (int i = 0; i < 400; i++) {
		printf("%c", s[i]);
	}

	return 0;
}

        如代码中注释,主要就是用到 GetCursorPos()WindowFromPoint() 和 GetWindowText() 三个方法。编译、执行。当鼠标放在当前 vscode 窗口时:

        控制台 window text 一行显示的也是当前应用程序,没问题。当鼠标放到桌面任务栏时: 

        显示乱码了,这时需要修改项目属性,将字符集改成多字节字符集:

         修改后再重新编译执行:

        可见编码已正常输出。其实还可以将鼠标放到其他位置查看打印效果如何,此处就不再尝试了。

        到此基本就解决了获取鼠标指向当前应用的问题。此外由于前阵子接触了 jna 包,想着在 java 中试试看能否正常调用获取呢?而且 c 程序中还是存在些问题的,如字符数组 s 定义的长度是 400,理论上会造成一定空间的浪费的,如果利用 java 中的动态可变字符串类型,就可以避免这个问题了。

        但是在尝试写 java 代码过程中,jna 包中目前并没有 WindowFromPoint() 方法的定义。不过已经有小伙伴恰好在昨天提出来了,详情可点击链接:https://github.com/java-native-access/jna/issues/1463。其实也是可以自己实现添加的哈,此处就不多做操作啦!

        以上,欢迎交流~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值