如何从C#传递字符串输入到控制台?

时间:2013-08-15 02:05:18

标签: c# input console pinvoke

我按照以下步骤将字符串输入从C#传递到控制台:

  1. 我使用AllocConsole()方法通过pInvoking Kernel32.dll为Visual Studio Process分配控制台。
  2. 我从Visual Studio(C#)调用Perl进程。 Perl进程自动附加到此控制台。 (这对我来说没问题。)
  3. 我通过将Ctrl C信号传递给它来杀死'仅'Perl进程。(我为Visual Studio抑制了Ctrl C信号)
  4. 现在我想向这个控制台发送一个命令(基本上是一个简单的字符串)。
  5. 将输入字符串传递给控制台的方法是什么?

    我正在尝试使用writeConsoleInput(),通过pInvoking Kernel32.dll,但我被困在这个函数的参数上。功能签名是:

    [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool WriteConsoleInput(IntPtr hConsoleInput,
        [Out] INPUT_RECORD[] lpBuffer,
        int nLength,
        out int lpNumberOfEventsWritten);
    

    有人可以帮我成功调用WriteConsoleInput()或提供替代选项。

    非常感谢!

1 个答案:

答案 0 :(得分:1)

问题的细节似乎是这个评论:

  

我杀了Perl进程。我想跑一个   之后命令提示符命令。

控制台本身就是愚蠢的。除了接收输入和显示输出之外,它无法做任何事情。要运行命令,您需要一个命令解释器。在Windows上,这是cmd.exe。找到命令解释器路径的通用方法是读取COMSPEC环境变量。

因此,您将需要启动一个新的命令解释程序进程来运行您的命令。启动此新进程时,将该命令作为参数传递。