【发布时间】:2013-06-12 14:07:33
【问题描述】:
我已阅读有关此问题的类似问题,包括 Best way to tackle global hotkey processing in C#? 和 Set global hotkeys using C#。我还调查了一个 NuGet 包Global Hotkeys,它似乎还处于起步阶段。
这里的问题是,它们中的大多数似乎是为 Winforms 设计的,或者可能在 WPF 中运行。他们使用的 P/Invoke 似乎需要一个窗口句柄。我正在考虑在这里有一个无窗口的应用程序,即在没有主窗体或窗口的情况下运行,除非按下某个组合键,所以实际上可能没有句柄。
那么,传递一个厚颜无耻的 0 作为 P/Invoke 的窗口句柄会导致它不寻找一个窗口来处理按键吗?还是我最好的选择是使用不可见的不可聚焦的窗口?
为了添加一点上下文,我正在制作一个无窗口应用程序,与 TTS 一起使用,提供控制反馈,我的目标受众是盲人和视障用户。有时,必须输入一些东西,所以我希望能够在必要时启动表单,但在大多数情况下,我希望没有窗口把东西弄得乱七八糟。
一些示例代码(我无法验证这是否可以正常工作)。
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ScreenReader.sapiEnable(true);
ScreenReader.SayString("Launching application...");
// bind hotkeys here
Application.Run();
}
// called when the right keyboard shortcut is pressed
static void ExitApp()
{
ScreenReader.SayString("Exiting program");
Application.Exit();
}
感谢您提供的任何帮助。
【问题讨论】: