为了账号安全,请及时绑定邮箱和手机立即绑定

如何利用QT实现模拟鼠标点击?

如何利用QT实现模拟鼠标点击?

C++
烙印99 2018-09-04 16:12:50
QT入门,windows开发入门选手。我想利用QT实现一个模拟鼠标点击的功能(Windows平台),具体来说是这样的:首先获取某个特定名称窗口的句柄,然后再模拟单击这个窗口的特定位置,并且要求窗口可以不在桌面最前方显示(即是虚拟的点击,而不是把鼠标指针移到那个位置再点击)根据网上的内容我写了一个简单的SLOT函数,如下:void MainWindow::clickTest() {     HWND hwndGameWindow=::FindWindow(NULL,L"窗口名称");     gameWindow=QWidget::find((WId)hwndGameWindow);     qDebug()<<(QString)(gameWindow->windowTitle());     QPoint *pos=new QPoint(112,83);     QMouseEvent *clickEvent=new QMouseEvent(QEvent::MouseButtonPress,*pos,Qt::LeftButton,Qt::LeftButton,Qt::NoModifier);     QApplication::sendEvent(gameWindow,clickEvent); }当我触发这个槽函数的时候,系统报段错误,程序强制退出。请教各位错误出在哪?若能再给出实现我所描述功能的方法,不胜感激。
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

QWidget::find() 仅适用于 Qt 当前进程创建的窗口,而 FindWindow() 查询的是整个操作系统下的顶级窗口。
因此,你若传递非 Qt 当前进程创建的窗口 ID 给 QWidget::find(),它将返回 NULL。

要给其他进程的窗口发送消息,大致流程是这样的

  1. 用 FindWindow 找到目标窗口的顶级窗口

  2. 在顶级窗口下,用 FindWindowEx 找到目标窗口

  3. 构造需要发送的消息

  4. 用 SendMessage 或 PostMessage 向目标窗口发送消息


查看完整回答
反对 回复 2018-09-07
  • qq_慕UI8271673
    qq_慕UI8271673
    我打开了软件,找到菜单栏,然后怎么操作菜单栏里面的选项,并且是连续操作,比如说点击开始,然后多个选项中点击新建,才会跳出另一个窗口。
  • 1 回答
  • 0 关注
  • 3385 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信