您可以将sendKeys用于Visual Studio控制台应用程序中的进程吗?

时间:2017-05-13 12:17:14

标签: c# visual-studio console-application

我知道您可以在Windows窗体应用程序中使用sendKeys,但是如何将密钥发送到控制台应用程序中的进程?

1 个答案:

答案 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中而不是在命令行上设置输入流。