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。
要给其他进程的窗口发送消息,大致流程是这样的
用
FindWindow
找到目标窗口的顶级窗口在顶级窗口下,用
FindWindowEx
找到目标窗口构造需要发送的消息
用
SendMessage
或PostMessage
向目标窗口发送消息
- 1 回答
- 0 关注
- 3385 浏览
添加回答
举报
0/150
提交
取消