有几种方法实现:
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来实现吗怎样实现我需要目标窗口实时坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)