【问题标题】:postmessage to qt window does not take effectpostmessage到qt窗口不生效
【发布时间】: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);
}

更多细节:

  1. 代码在其他窗口生效
  2. 当我使用鼠标单击 qt 窗口时。我可以使用 spy++ 观看发布到 qt 窗口的 WM_LBUTTONDOWN 和 WM_LBUTTONUP 消息
  3. 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


【解决方案1】:

最后,我找出了问题所在。 Windows UIPI 限制阻止我发布到目标进程的消息,因为目标进程的权限比我的更高。我应该在链接步骤的清单中将 uiAccess 设置为 true。

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2011-03-29
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多