2014-03-25 81 views
2

过程中,我有这样的代码:如何启动与隐藏窗口

string d = "-f image2 -framerate 9 -i E:\\REC\\Temp\\%06d.jpeg -r 30 E:\\REC\\Video\\" + label1.Text + ".avi"; 

//string d = "-f dshow -i video=\"screen-capture-recorder\" E:\\REC\\" + label1.Text + ".flv"; 
Process proc = new Process(); 
proc.StartInfo.FileName = "E:\\ffmpeg\\bin\\ffmpeg.exe"; 
proc.StartInfo.Arguments = d; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = false; 
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
proc.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 

if (!proc.Start()) 
{ 
    Console.WriteLine("Error starting"); 
    return; 
} 
proc.WaitForExit(); 

当它运行的ffmpeg.exe有这样的:

enter image description here

我的问题是如何隐藏这个窗口?

+3

'CreateNoWindow'应该是true。 – Luaan

+1

确实它是假的 –

+0

另外请注意,如果你重定向标准输出,你*有*读取它(通常是异步的,但在你的情况下不是必需的)。 – Luaan

回答

3

您需要的设置如下组合:

proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = true; 

就是这样。

原因是密钥设置为CreateNoWindow必须是true。但UseShellExecutefalseCreateNoWindow只有效果。这是因为CreateNoWindow映射到传递到CreateProcessCREATE_NO_WINDOW进程创建标志。仅在UseShellExecutefalse时才被调用。

更多信息可以从documentation发现:

属性值

如果这个过程不应该创建一个新的窗口,包含它的启动;否则,虚假。缺省值为false

备注

如果UseShellExecute属性为true或用户名和密码 属性不为空,则CreateNoWindow属性值将被忽略 并创建一个新的窗口。

+0

这对我来说隐藏了一个控制台程序。 – jftuga

1

这将保持所有进程在同一控制台窗口。不允许打开新的'

Process process = new Process(); 

// Stop the process from opening a new window 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.CreateNoWindow = true; 

// Setup executable and parameters 
    process.StartInfo.FileName = @"E:\\ffmpeg\\bin\\ffmpeg.exe" 

//Optional 
    string d = "-f image2 -framerate 9 -i E:\\REC\\Temp\\%06d.jpeg -r 30 E:\\REC\\Video\\" + label1.Text + ".avi"; 
process.StartInfo.Arguments = d; 

// Go 
    process.Start();