【发布时间】:2018-01-12 12:00:40
【问题描述】:
这是windows平台的问题。我的windows是win 10 64位。 我有一个 qt 应用程序,可以通过 findwindow 找到窗口。然后我使用另一个进程的postmessage来模拟qt窗口上的鼠标点击,但这并没有生效。我的代码如下。
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);
}
更多细节:
- 代码在其他窗口生效
- 当我使用鼠标单击 qt 窗口时。我可以使用 spy++ 观看发布到 qt 窗口的 WM_LBUTTONDOWN 和 WM_LBUTTONUP 消息
- qt 窗口具有 WS_POPUP|WS_CAPTION|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX 样式
【问题讨论】:
-
“代码在其他窗口生效”是什么意思?当您知道您的事件由另一个窗口执行时,您应该知道必须在哪里搜索错误。
-
改用
SendInput -
@user743414 。 “代码在其他窗口生效”是指不在 qt 应用程序中的窗口通过 postmessage 到这些窗口运行良好。显然,我无法区分 qt 应用程序中的窗口和其他非 qt 应用程序窗口之间的区别。所以我无法指出错误是什么。
-
@DmitrySazonov 感谢您的建议。但 SendInput 没有指定窗口。如果我想在窗口最小化时simuclick生效,SendInput是否有效?
-
我做了一些测试。 SendInput 也不会生效。但是我自己用 qt creator 创建了一个 qt 应用程序,PostMessage 在我自己的 qt 应用程序上工作。它是有线的。应用程序是否通过某种方法过滤掉消息?
标签: c++ qt postmessage