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

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

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

C++
暮色呼如 2018-09-02 14:30:53
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); }当我触发这个槽函数的时候,系统报段错误,程序强制退出。请教各位错误出在哪?若能再给出实现我所描述功能的方法,不胜感激。
查看完整描述

2 回答

?
繁星点点滴滴

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

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

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

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

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

  3. 构造需要发送的消息

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


查看完整回答
反对 回复 2018-09-02
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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

查看完整回答
反对 回复 2018-09-02
  • 2 回答
  • 0 关注
  • 1266 浏览

添加回答

举报

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