无法从win32应用程序在控制台应用程序中编写

时间:2011-07-22 16:22:30

标签: c#

我正在尝试从C#win32应用程序控制一个控制台应用程序,控制台应用程序(oclHashcat-lite32)对我来说是未知的,我没有代码,直到现在我无法在控制台中编写应用。我想编写任何命令(例如“q”,它终止底层进程),但似乎我的代码没有编写控制台应用程序的输入。这是代码:

StreamWriter processStreamWriter = OCLProcess.StandardInput;
processStreamWriter.Write("q"); 
processStreamWriter.Close(); 

我也尝试过使用

processStreamWriter.WriteLine("q");

而不是

 processStreamWriter.Write("q");

但它没有用。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

IIRC,如果您将win32应用程序构建为GUI应用程序,标准流不会与任何内容相关联 - StandardInput永远不会给您任何输入,而StandardOutput会抛弃输出。

我认为,使用项目文件中的选项,快速解决这个问题(在C中 - 所以需要一小撮盐)是将GUI应用程序构建为控制台应用程序。控制台应用程序仍然可以使用所有常规的Win32 API,包括GUI,因此它们仍然可以提供GUI样式的界面。

但是,除非您真的希望对GUI应用程序的标准输入/输出进行I / O操作(与您的子控制台应用程序的标准输入/输出不同),否则您不需要它。有一种方法可以启动一个进程,为新启动的进程提供标准输入,标准输出和标准错误流的流句柄,这样就可以发送该进程将作为标准输入接收的输出等。

http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx

顺便提一下,该链接还会显示正在使用的GetStdHandle(STD_OUTPUT_HANDLE)和类似的调用。

对不起C语法 - 我希望C#的翻译简单直接。