【问题标题】:Windows: send Mouse/Keyboard event to background window?Windows:将鼠标/键盘事件发送到背景窗口?
【发布时间】:2014-10-04 10:03:24
【问题描述】:

我的应用程序是一个全屏窗口,它正在呈现指定的其他窗口(来自 dwm),例如 Google Chrome。我想知道是否可以向指定窗口发送事件(如鼠标键盘事件)。

当然,指定的窗口必须留在后台,而我当前的应用程序在前台。

我的应用程序是用 C++ 编写的。我正在使用 Windows 7/8。

【问题讨论】:

  • 我不确定该函数的确切名称是什么,但是在 windows API 中有一个函数可以将 windows 消息发送到指定的窗口。我认为这可能有效,但我不确定它是否正确,msdn.microsoft.com/en-us/library/k30c7s8w.aspx
  • 这个解决方案看起来很酷,除了我使用的是 QT-creator + minGW。您是否有任何解决方案可以将 包含在 qt 项目中?
  • 我不知道 Qt 是什么,我已经阅读了 100 倍。但是,如果你在 windows 中使用它,windows 中的每个窗口都有一个句柄。如果您有句柄(我认为),您应该能够向任何窗口发送任何消息。
  • 我问了stackoverflow.com/questions/25246770/…这个问题,看来您应该可以使用 WinAPI 来完成这项工作。
  • 我发现了这个:msdn.microsoft.com/en-us/library/windows/desktop/… 示例:if (appli->ImScrolling()) SendMessage(hwnd, WM_VSCROLL, 0, 0);这是有效的

标签: windows events keyboard mouse dwm


【解决方案1】:

只是为了回答。

基于这个问题Does any program/language/library that interacts with windows do it via the WIN32 API?,您应该能够使用 windows API 将 windows 消息发送到任何窗口。您需要得到的只是窗口句柄,或者您可以对所有窗口进行广播。

具体函数http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx

虽然该函数会阻塞直到窗口响应并处理消息,但这可能会损害 GUI 性能。如果您发现问题,请尝试实施 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644951(v=vs.85).aspx

【讨论】:

  • 实际上我对 SendMessage() 没有任何 gui 性能问题,但我会检查回调函数。感谢您的回答。
  • @AnotherUser 你不能通过 SendMessage() 发送 WM_KEY* 之类的键盘事件,它不会改变另一个应用程序的键盘状态。您需要使用 SendInput(),但它没有目标窗口,它发送到焦点窗口,但即使是隐藏窗口也可以设置焦点。人们报告说他们可以使用 PostMessage() 和 WM_KEY* 完成相同的操作,但我做不到,只有 SendInput()
猜你喜欢
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多