如何获取任意窗口中的控件的位置,返回坐标vc的

如何获取任意窗口中的控件的位置,返回坐标vc的,第1张

有几种方法实现:

1创建一个桌面大小的"透明窗体",并且边框设为0。这样窗口坐标就是桌面坐标,在自己程序的消息循环中捕获鼠标消息就行了。QQ、RTX的"屏幕截图"功能就是这样实现的。

2使用SetWindowsHookEx捕获WH_MOUSE、WH_GETMESSAGE消息。并将SetWindowsHookEx的第四个参数设置为NULL,捕获全局的消息。然后在第二个参数的回调函数中调用CallNextHookEx,以及监听鼠标消息。程序关闭后,别忘记调用UnhookWindowsHookEx。还有就是程序要写在DLL中,因为系统会把它注入到其它进程中去捕获消息的。可以参考网上SetWindowsHookEx实现键盘记录的例子,实现鼠标记录。

3驱动中Inline Hook Mouclass鼠标类驱动的MouseClassServiceCallback函数,获得鼠标输入。

建议使用1、2中的一种方法。没必要开发驱动,这里只是介绍有几种方法可以获得鼠标全局点击事件。

来自:>

不需要HOOK

#include <windowsh>

int main()

{

HWND hwnd = FindWindow( 0, "plan - 记事本" ) ;

RECT rect ;

GetWindowRect( hwnd, &rect ) ;

cout << "左上角坐标:" << rectleft << " " << recttop << endl

<< "右下角坐标" << rectright << " " << rectbottom << endl ;

}

在我电脑上打印:

左上角坐标: 1115 384

右下角坐标: 1577 438

实时更简单,你要响应鼠标移动消息的实时,你就在WM_MOUSEMOVE里加入这两句代码

不然就WM_TIMER里加入这两句吧

HOOK方法 vs Non-Hook方法

HOOK无非是希望在目标窗口WM_MOVE,WM_SIZE里获取并更新坐标

但是要HOOK其他进程的窗口的话,你需要放CALLBACK放在DLL里

简洁但是麻烦

Non-Hook也就是上面两句代码简单但不是很有效率

最后说句,以后你可以把这种问题发布到MFC领域,那里会得到更多答案

因为这个不是C++而是win32编程,

以上就是关于如何获取任意窗口中的控件的位置,返回坐标vc的全部的内容,包括:如何获取任意窗口中的控件的位置,返回坐标vc的、按键精灵9怎么获取游戏窗口的后台坐标。高手解答下、C++怎样得到另一个窗口的位置坐标等信息,是通过HOOK来实现吗怎样实现我需要目标窗口实时坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9464483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存