C#如何全局发送热键(后台进程需要,在系统任务栏中运行)

时间:2018-08-13 21:32:23

标签: c# winforms global system-tray keystroke

我正在编写一个程序来为我自动化一些工作。

我安装了另一个程序(OBS Studio),用于捕获视频。将OBS Studio最小化到系统托盘,并收听我配置的热键CTRL +1。

当我在任意位置按CTRL + 1时,软件开始记录。哪个应用程序在前台都没关系。

我正在尝试从我的应用程序执行相同的操作,发送一个“全局”热键。我花了数小时试图实现这一目标,但没有任何结果。 SendKeys仅适用于当前打开的窗口(不存在),PostMessage也没有结果,我尝试了包装器“ InputSimulator”

所以,总结一下:

  • 是否可以针对每个应用程序全局发送热键/击键?
  • 如果没有,如何将热键发送到没有窗口的后台运行程序?我不想将应用程序放在前台。

希望对这些概念有更深入了解的人可以指导我...

我发现了类似的问题,但仍未得到解答:

Send global keystroke / fake a global hotkey from a Winforms application

我研究过的资料(以及其他资料):

https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys(v=vs.110).aspx https://dailyoverdose.wordpress.com/2009/10/28/postmessage-and-sendmessage/ https://ourcodeworld.com/articles/read/520/simulating-keypress-in-the-right-way-using-inputsimulator-with-csharp-in-winforms

1 个答案:

答案 0 :(得分:0)

我认为您可以使用Hook全局捕获关键事件。

如果您需要C#中的Hook示例,则可以参考以下链接:https://blogs.msdn.microsoft.com/calvin_hsia/2016/11/30/its-easy-to-use-windows-hooks-even-from-c/