读取键盘输入而不总是关注我的控制台应用程序?
Read keyboard inputs without always having my console application focused?
是否可以在不始终关注我的控制台应用程序的情况下读取键盘输入?
我想用一个按钮做一些事情而不总是去控制台。
这难道不能以某种方式处理事件吗?不幸的是,我只找到了难看的 Forms 解决方案。
@Siarhei Kuchuk 的这个解决方案也没有帮助我:
Global keyboard capture in C# application
OnKeyPressed 事件已激活但未触发。
有人知道吗?
这是可能的。您可能会 google “键盘记录器”并找到许多示例,但我会给您一个非常粗略的简单示例。
但首先你必须添加对 System.Windows.Forms.dll
的引用才能工作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
static void Main(string[] args)
{
while (true)
{
Thread.Sleep(500);
for (int i = 0; i < 255; i++)
{
int state = GetAsyncKeyState(i);
if (state != 0)
{
string pressedKey= ((System.Windows.Forms.Keys)i).ToString();
switch (pressedKey)
{
default:
Console.WriteLine("You have pressed: " + pressedKey);
break;
}
}
}
}
}
}
}
是否可以在不始终关注我的控制台应用程序的情况下读取键盘输入? 我想用一个按钮做一些事情而不总是去控制台。
这难道不能以某种方式处理事件吗?不幸的是,我只找到了难看的 Forms 解决方案。
@Siarhei Kuchuk 的这个解决方案也没有帮助我: Global keyboard capture in C# application
OnKeyPressed 事件已激活但未触发。
有人知道吗?
这是可能的。您可能会 google “键盘记录器”并找到许多示例,但我会给您一个非常粗略的简单示例。
但首先你必须添加对 System.Windows.Forms.dll
的引用才能工作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
static void Main(string[] args)
{
while (true)
{
Thread.Sleep(500);
for (int i = 0; i < 255; i++)
{
int state = GetAsyncKeyState(i);
if (state != 0)
{
string pressedKey= ((System.Windows.Forms.Keys)i).ToString();
switch (pressedKey)
{
default:
Console.WriteLine("You have pressed: " + pressedKey);
break;
}
}
}
}
}
}
}