强制 WPF 应用程序在 Windows 启动时最大化

Force WPF application to maximize on Windows startup

我有一个 WPF 应用程序,它通过 ClickOnce 安装在 Windows 10 Pro 上并使用 MahApps.Metro。

它设置为在 Windows 启动时使用没有密码的非管理员帐户启动。平板电脑模式已启用。

我希望应用程序全屏弹出以创建类似 kiosk 的体验,但是 应用程序在启动时开始最小化。澄清一下,WindowState 已最大化,但 Windows 不显示它,而是显示开始屏幕。手动启动时全屏最大化。

这是一些代码,但我想这更多是配置问题而不是代码问题:

这是我设置开机启动的方式:

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
string startPath = Environment.GetFolderPath(Environment.SpecialFolder.Programs)
                       + @"\Publisher\AppName.appref-ms";
rkApp.SetValue("AppName", startPath);

这是MainWindow.xaml

<Controls:MetroWindow x:Class="AppName.MainWindow"
IgnoreTaskbarOnMaximize="True" ShowTitleBar="False" WindowStyle="None" WindowState="Maximized">
...
</Controls:MetroWindow>

您可以在 MainWindow.xaml.cs 中通过添加最大化窗口状态来执行此操作。

public MainWindow()
{
    InitializeComponent();
    this.WindowState = WindowState.Maximized;
}

查看 Windows 10 的 Kiosk 模式。

来自Set up a device for anyone to use (kiosk mode)

A single-use device is easy to set up in Windows 10 for desktop editions (Pro, Enterprise, and Education). For a kiosk device to run a Universal Windows app, use the assigned access feature. For a kiosk device (Windows 10 Enterprise or Education) to run a Classic Windows application, use Shell Launcher to set a custom user interface as the shell.

来自Assigned access (Industry 8.1)

Administrators can use assigned access to restrict a user account to access a single application. You can use assigned access to set up single-function devices, such as restaurant menus or displays at trade shows.

以下 table 标识可在每个 Windows 10 版本上用于创建自助服务终端设备的应用程序类型。

A Universal Windows app is built on the Universal Windows Platform (UWP), which was first introduced in Windows 8 as the Windows Runtime. A Classic Windows application uses the Classic Windows Platform (CWP) (e.g., COM, Win32, WPF, WinForms, etc.) and is typically launched using an .EXE or .DLL file.

在 ContentRendered 事件处理程序中设置 Window 状态:

protected override void OnStartup(StartupEventArgs e)
{  
    Application.Current.MainWindow.ContentRendered += (s, a) => 
        Application.Current.MainWindow.WindowState = WindowState.Maximized;

}

解决方案(hack)是在启动时使用任务计划程序打开任何其他 window(例如 powershell),在打开另一个 window 之后,我们可以在 powershell 中调用 Alt+Tab脚本使用。

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("%{TAB}")