【问题标题】:Win32 equivalent of .net SendKeysWin32 等效于 .net SendKeys
【发布时间】:2011-07-27 01:01:38
【问题描述】:

我正在设计一个系统,它可以从 Kinect 读取手势并做出一些动作。我正在尝试包含能够将 HotKey 发送到应用程序的系统。我的系统是用 c++ 编写的,但 UI 是用 C++.net 编写的。我已经能够从 UI 部分使用 SendKeys 并且它确实有效。

是否有 Win32 等效版本,以便我可以在我的系统中使用它?

提前致谢!

【问题讨论】:

  • 您是要在自己的 C++ 和 C# 代码之间进行通信,还是要向另一个单独的应用程序发送热键? (或者,换个方式问,手势是控制你自己的 UI,还是你想控制其他应用程序?)
  • 我正在尝试将热键发送到其他应用程序,例如 Windows Media Player、Adobe Reader 或 PowerPoint。
  • SendInput 可能是那时要走的路。请注意,就像 SendKeys 一样,输入最终会发送到当前具有焦点的任何应用程序,您并没有真正将输入“发送到应用程序”,您实际上将输入发送到系统,并且系统会适当地路由它。

标签: c++ winapi sendkeys


【解决方案1】:

在WIN32中,SendKeys被称为SendInput:

http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

还可以模拟鼠标移动等

【讨论】:

  • +1 - 小提示 - SendInput 不是 SendKeys 的直接等效项。 SendKeys 实际上是一个围绕 SendInput 的辅助包装器,它可以为您完成大部分工作。使用 SendInput,您必须为每次按键和释放填写一组结构,而不仅仅是传递一个简单的字符串。仍然可以在这里使用正确的 API。
【解决方案2】:

如果有多个应用程序,在 Vista 和更高版本上,UAC 完整性级别可能会阻止应用程序以这种方式发送/接收 Windows 消息。您可能需要调用ChangeWindowMessageFilterChangeWindowMessageFilterEx 函数以在更高提升的进程中启用消息接收。

【讨论】:

  • 这些只影响通过 SendMessage 和/或 PostMessage 发送的 windows 消息(WM_* 等),而不影响通过 SendInput 发送的输入。 (输入受完整性级别的影响,但这些 API 不会影响它的过滤方式。)
  • 您可能错了:“此功能受 UIPI 约束。应用程序只能将输入注入到具有相同或更低完整性级别的应用程序中。”
  • 这就是我所说的“输入受完整性级别影响,但这些 API 不会影响它的过滤方式”的意思。就像我说的,这些 API 不会影响 SendInput 的工作方式。在任何情况下,这些 API 只能在目标应用程序中使用,它可以有效地使用它们来“降低防护罩”,并允许进入 WM_ 消息,否则这些消息会被 UIPI 过滤掉——它们在首先调用 SendInput 的应用程序。如果您希望能够将输入发送到更高的 IL 应用程序,则需要运行提升。
  • 不正确,Windows Explorer的自定义消息“TaskbarCreated”是从较低的IL进程(explorer.exe)发送的,可以被较高的IL进程拦截。 social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/…
  • 我认为您混淆了输入/SendInput 与消息/SendMessage。这里的qu 是关于SendInput,它将低级keyup/keydown(或鼠标移动)输入发送到当前活动的线程。 Windows 会根据 IL 级别过滤它们,并且不考虑消息过滤器。 USER32 最终会将这些低级输入转换为与键相关的窗口消息,但到那个阶段它已经通过了 UIPI 过滤器。另一方面,低 IL 应用程序使用 SendMessage 或 PostMessage(包括“TaskbarCreated”)发送到高 IL 应用程序的 消息会被这些 API 过滤。
【解决方案3】:

【讨论】:

  • 根据 MSDN:“注意:此功能已被取代。请改用 SendInput。”
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2011-10-14
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多