c# - AppWinStyle 不适用于 Process.start

标签 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)

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

最佳答案

样板示例:

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 参数传递您指定的值。应用程序对该值的实际操作完全取决于应用程序。样板实现是将其传递给 ShowWindow() 调用,即使其主窗口可见的调用。

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

当然,绝对希望这起作用。不应该。

关于c# - AppWinStyle 不适用于 Process.start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115814/

相关文章:

c# - 何时期望 IEnumerable 以及何时期望来自 Linq 查询的 IQueryable

c# - 如何在 SQLite 的 C# 类中创建外键

c# - 为什么 VB 编译器不能捕获对接口(interface)类型的无效隐式转换,而 C# 可以?

windows - 显示 SET 变量

windows - 来自另一个进程的 MiniDumpWriteDump

c# - Page_Load() 可以异步吗

c# - 如何知道 MemberInfo 是否是属性的显式实现

asp.net - 使用 asp.net mvc 和 Identity 的每个选项卡 session

mysql - having/where 子句中的未知列

c# - Windows 服务状态存储的推荐位置?