我知道有一个关于 Windows 窗体的问题,但它在控制台中不起作用,或者至少我无法让它工作。即使控制台没有焦点,我也需要捕获按键。
问问题
12583 次
1 回答
15
您也可以在控制台应用程序中创建全局键盘挂钩。
这是完整的工作代码:
https ://docs.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c
您创建一个控制台应用程序,但必须添加对System.Windows.Forms的引用才能使其正常工作。控制台应用程序没有理由不能引用该 dll。
我刚刚使用此代码创建了一个控制台应用程序,并验证了它是否按下了每个键,无论控制台应用程序是否具有焦点。
编辑
主线程将运行Application.Run() 直到应用程序退出,例如通过调用Application.Exit()。完成其他工作的最简单方法是启动一个新任务来执行该工作。这是执行此操作的链接代码中 Main() 的修改版本
public static void Main()
{
var doWork = Task.Run(() =>
{
for (int i = 0; i < 20; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Application.Exit(); // Quick exit for demonstration only.
});
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
笔记
可能提供退出控制台应用程序的方法,例如,根据您的特定需求按下特殊组合键时。在里面
于 2012-06-11T22:16:59.040 回答