在做WPF桌面端软件的时候需要调用别人的exe控制台程序,单独运行exe需要手动输入参数,并进行一些参数选择,要控制exe程序就需要用到匿名管道。
主要步骤:
1.启动控制台exe的Process对象
2.输入输出流重定向,获取exe的输入输出流,然后就可以进行输入了(相当于手动打开exe手动输入);
3.如果exe控制台程序需要接收某个按键消息,需要引用系统”user32.dll”调用系统API函数,获取exe窗口指针进行按键信息传递。
[DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]
public static extern int PostMessage(IntPtr hWnd, int Msg, System.Windows.Forms.Keys wParam, int lParam);//传递按键消息
private bool ConvertIMRFile(string imrPath, string outputPath)
{
if (!File.Exists(imrPath))
{
throw new Exception("File does not exist!");
}
if (runCount == 0)
{
ConsoleManager.Show(); // 分配控制台 这里主要是针对WPF程序,调用控制台程序需要进行控制台分配
handle = Process.GetCurrentProcess().MainWindowHandle;
//ConsoleManager.ShowWindowAsync(handle, 0);
runCount++;
}
long filesize = new FileInfo(imrPath).Length;
int sec = (