我如何启动进程并隐藏它的窗口?
本文关键字:隐藏 窗口 进程 何启动 启动 | 更新日期: 2023-09-27 17:50:27
我试过了:
ProcessStartInfo psi = new ProcessStartInfo("https://stackoverflow.com/");
psi.RedirectStandardOutput = false;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
Process.Start(psi);
但是我在line上得到异常Process.Start(psi);
Win32Exception系统找不到指定的文件
如果我改变行psi。UseShellExecute = true;然后它工作,但它不隐藏窗口。
我希望,当它打开浏览器,例如https://stackoverflow.com/用户将不会看到窗口在任何时候,但窗口仍将被打开。不是关闭,而是隐藏。
尝试谷歌搜索,但没有找到有效的解决方案。
Win32Exception消息:
System.ComponentModel.Win32Exception was unhandled
HResult=-2147467259
Message=The system cannot find the file specified
Source=System
ErrorCode=-2147467259
NativeErrorCode=2
StackTrace:
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at CuteDadyImages.Form1.OpenBroswerTab() in d:'C-Sharp'test'Form1.cs:line 155
at CuteDadyImages.Form1..ctor() in d:'C-Sharp'test'Form1.cs:line 55
at CuteDadyImages.Program.Main() in d:'C-Sharp'test'Program.cs:line 35
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
在代码中添加以下内容
[DllImport("user32.dll")]
private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);
然后尝试使用以下命令启动浏览器:
var process = new Process
{
StartInfo =
{
FileName = "firefox.exe",
Arguments = "http://stackoverflow.com/",
CreateNoWindow = true,
ErrorDialog = false,
WindowStyle = ProcessWindowStyle.Hidden
}
};
process.Start();
Thread.Sleep(1000);
ShowWindow(process.MainWindowHandle, 0);
您可以从ApplicationOpenForms
找到所有打开的表单,然后您可以隐藏所有表单,但存在一个问题,该数组是刚刚打开的表单列表,当其中一个关闭或隐藏时,该表单从列表中删除,您的For或Foreach循环将异常!
测试这个代码隐藏所有打开的表单后打开你的URL:
Process.Start("http://stackoverflow.com/");
List<Form> oForms = new List<Form>();
foreach (Form form in Application.OpenForms)
{
oForms.Add(form);
}
foreach (var form in oForms)
{
form.Hide();
}