猿问

如何利用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);
}

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


烙印99
浏览 3386回答 1
1回答

德玛西亚99

QWidget::find()&nbsp;仅适用于 Qt 当前进程创建的窗口,而&nbsp;FindWindow()&nbsp;查询的是整个操作系统下的顶级窗口。因此,你若传递非 Qt 当前进程创建的窗口 ID 给&nbsp;QWidget::find(),它将返回 NULL。要给其他进程的窗口发送消息,大致流程是这样的用&nbsp;FindWindow&nbsp;找到目标窗口的顶级窗口在顶级窗口下,用&nbsp;FindWindowEx&nbsp;找到目标窗口构造需要发送的消息用&nbsp;SendMessage&nbsp;或&nbsp;PostMessage&nbsp;向目标窗口发送消息
随时随地看视频慕课网APP
我要回答