【问题标题】:How to pass string input to console from C#?如何将字符串输入从 C# 传递到控制台?
【发布时间】:2013-08-15 02:05:17
【问题描述】:

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

  1. 我使用 AllocConsole() 方法通过 pInvoking Kernel32.dll 将控制台分配给 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() 或提供替代选项。

非常感谢!

【问题讨论】:

  • 您要向控制台发送什么“命令”?你只想在控制台上写文字吗?您必须解释您的更大目的是什么,因为您问题中的描述没有意义。
  • 试试这个link
  • 确定只需要写在perl进程标准输入上?
  • 我想我可以改进我的问题以使其更清楚:它类似于 stackoverflow.com/questions/1469764/run-command-prompt-commands 而不是创建 system.diagonostic.process,我已经有一个控制台附加到 Visual Studio 进程(由 AllocConsole ()) 并且我想在这个控制台中运行我的命令提示符命令。
  • @jiMMischel:它是一个命令提示符命令。

标签: c# input console pinvoke


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多