2

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

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

将输入字符串传递到控制台的方法是什么?

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

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

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

非常感谢!

4

1 回答 1

1

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

我杀死了 Perl 进程。之后我想运行命令提示符命令。

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

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

于 2013-08-15T08:22:14.063 回答