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

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);
}

当我触发这个槽函数的时候,系统报段错误,程序强制退出。
请教各位错误出在哪?若能再给出实现我所描述功能的方法,不胜感激。

阅读 8.2k
2 个回答

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

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

  1. FindWindow 找到目标窗口的顶级窗口
  2. 在顶级窗口下,用 FindWindowEx 找到目标窗口
  3. 构造需要发送的消息
  4. SendMessagePostMessage 向目标窗口发送消息
新手上路,请多包涵

单步看看前面步骤是否找了空指针啊之类的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题