我正在尝试将AppWinStyle与Process.start一起使用,但它不能像我预期的那样工作。 下面的代码将打开文件1.txt,它将被最小化而不关注它。
Shell("notepad D:\1.txt", AppWinStyle.MinimizedNoFocus)
但是下面的代码会打开1.txt,重点关注它。它不会被最小化。
Process.Start("D:\1.txt", AppWinStyle.MinimizedNoFocus)
为什么会这样?请帮我解决这个问题
答案 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
功能。