PostMessage发送WM_LBUTTONDOWN消息给QT窗口无效
Solved
Chinese
-
大家好, 遇到一个问题请教一下:
向qt app的窗口发送消息, 模拟鼠标点击, 没有效果, 代码如下:void SimuClick(HWND hwnd, int x, int y) { LPARAM point = MAKELPARAM(x, y); ::PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, point); ::PostMessage(hwnd, WM_LBUTTONUP, 0, point); }
如果遇到相似问题, 并有解决办法, 请不吝赐教, 谢谢!
-
可以不用Windows原生的事件。直接使用Qt的Qt Test就可以模拟点击。看看Qt的帮助文档吧。
-
非常感谢, 我改为以下的代码, 但是依然没有效果:
void SimuClick(HWND hwnd, int x, int y) { SetForegroundWindow(hwnd); QWindow *wnd = QWindow::fromWinId((WId)hwnd); if (wnd != nullptr) { QTest::mouseClick(wnd, Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), QPoint(x, y)); return; } }
可以确认, hwnd没有问题, 并且QWindow::fromWindId也返回了一个QWindow。 x,y坐标和在spy++里面看到的一样。
参数没有错误, 就是没有效果。
-
@jiancaiyang 我又做了实验, 自己用qt creator创建的窗口, 用PostMessage是可以点击成功的。
难道现在无法实现模拟点击的app使用了什么特殊的办法来过滤掉模拟点击? -
最好不要用平台相关的本来Qt是跨平台的应用程序框架所以最好你制作的是跨平台的应用程序。
-
@jiancaiyang QTest::mouseClick也无效。。。