我如何开始处理并隐藏它的窗口?

时间:2015-05-23 14:58:08

标签: c# .net winforms

我试过了:

ProcessStartInfo psi = new ProcessStartInfo("https://stackoverflow.com/");
            psi.RedirectStandardOutput = false;
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.UseShellExecute = false;

            Process.Start(psi);

但我在Process.Start(psi);

行上遇到异常

Win32Exception系统找不到指定的文件

如果我更改了行psi.UseShellExecute = true; 然后它正在工作,但它不会隐藏窗口。

我希望当它打开broswer例如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: 

2 个答案:

答案 0 :(得分:3)

在代码中的某处添加以下内容

[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);

答案 1 :(得分:-1)

您可以找到ApplicationOpenForms中的所有打开表单,然后您可以隐藏所有这些表单,但是存在一个问题,该数组是刚打开表单的列表,当其中一个关闭或隐藏时,该表单将从list和你的For或Foreach循环转到异常!

在打开网址后,测试此代码以隐藏所有打开的表单:

    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();
    }