我知道您可以在Windows窗体应用程序中使用sendKeys,但是如何将密钥发送到控制台应用程序中的进程?
答案 0 :(得分:0)
也可能有其他选项,但在这个答案中我想关注文件流作为输入。
命令看起来像这样:
c:\>MyConsole < c:\temp\streamin.txt
以下示例是一个简单的控制台应用程序,它接受来自文件的输入,直到“q”被“按下”。
计划1
static void Main(string[] args)
{
var isBusy = true;
while (isBusy)
{
var k = Console.In.Read();
if (k > -1)
{
var c = Convert.ToChar(k);
// quit if 'q' was pressed.
if (c == 'q')
isBusy = false;
Console.WriteLine($"Key pressed: {c}");
}
Thread.Sleep(500);
}
Console.WriteLine();
Console.WriteLine("Done. Closing in 5 seconds.");
Thread.Sleep(5000);
}
请注意,由于输入来自文件, Console.ReadKey 将不可用。
如果您在记事本中打开文件并追加键并保存该文件,您会注意到程序1将读取密钥。
您还可以创建另一个将密钥附加到文件的程序。
计划2
static void Main(string[] args)
{
var f = new FileStream(@"c:\temp\streamin.txt", FileMode.Append);
var key = new ConsoleKeyInfo();
while (key.KeyChar != 'q')
{
key = Console.ReadKey(false);
f.Write(new[] { Convert.ToByte(key.KeyChar) }, 0, 1);
f.Flush();
}
f.Close();
f.Dispose();
Console.WriteLine();
Console.WriteLine("Done. Press any key to quit.");
Console.ReadKey(true);
Console.WriteLine();
}
这些是非常简单的程序,只是为了说明可行的方法。程序2将继续向文件附加键,而程序1将继续读取文件,直到按下“q”。
您也可以使用Console.SetIn()
在程序1中而不是在命令行上设置输入流。