AppWinStyle不适用于Process.start

时间:2014-03-01 14:49:33

标签: c# vb.net windows process process.start

我正在尝试将AppWinStyle与Process.start一起使用,但它不能像我预期的那样工作。 下面的代码将打开文件1.txt,它将被最小化而不关注它。

Shell("notepad D:\1.txt", AppWinStyle.MinimizedNoFocus)

但是下面的代码会打开1.txt,重点关注它。它不会被最小化。

Process.Start("D:\1.txt", AppWinStyle.MinimizedNoFocus)

为什么会这样?请帮我解决这个问题

2 个答案:

答案 0 :(得分:3)

样板示例:

using System;
using System.Diagnostics;

class Program {
    static void Main(string[] args) {
        var psi = new ProcessStartInfo("notepad.exe");
        //psi.WindowStyle = ProcessWindowStyle.Hidden;
        Process.Start(psi);
    }
}

运行一次以确保其有效,然后删除注释并观察结果。您将简要地看到记事本窗口闪烁,但它会立即再次终止。可能依赖于Windows版本,我描述了Windows 8.1的发生情况

GUI应用程序获取您通过其WinMain() entry point指定的ProcessWindowStyle,nCmdShow参数传递您指定的值。该应用程序实际上对该值的作用完全取决于应用程序。 Boilerplate实现是将它传递给ShowWindow()调用,使其主窗口可见。

使用ProcessWindowStyle.Hidden通常非常有问题,正确编写的GUI应用程序会忽略它,就像Notepad一样。因为你要求它做的是启动程序但不显示任何窗口,甚至不显示任务栏按钮。换句话说,你要求它变成 zombie ,这个过程在没有任何方式让用户运行的情况下运行。用户唯一可能做的就是运行任务管理器并终止该过程。

当然,肯定希望这个工作。它不应该。

答案 1 :(得分:1)

使用Process.Start

这样的重载

Process.Start("D:\1.txt", AppWinStyle.MinimizedNoFocus)

在此处查看所有重载:Process.Start Method

要使用Process.Start实现该目标,请使用ProcessStartInfo.WindowStyle,将其设置为ProcessWindowStyle.Minimized

顺便说一下,AppWinStyle枚举器特定于Shell函数:

  

表示调用时用于调用程序的窗口样式    Shell 功能。