我正在尝试从C#win32应用程序控制一个控制台应用程序,控制台应用程序(oclHashcat-lite32)对我来说是未知的,我没有代码,直到现在我无法在控制台中编写应用。我想编写任何命令(例如“q”,它终止底层进程),但似乎我的代码没有编写控制台应用程序的输入。这是代码:
StreamWriter processStreamWriter = OCLProcess.StandardInput;
processStreamWriter.Write("q");
processStreamWriter.Close();
我也尝试过使用
processStreamWriter.WriteLine("q");
而不是
processStreamWriter.Write("q");
但它没有用。有什么建议吗?
答案 0 :(得分:0)
我认为,使用项目文件中的选项,快速解决这个问题(在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#的翻译简单直接。