强制 WPF 应用程序在 Windows 启动时最大化
Posted
技术标签:
【中文标题】强制 WPF 应用程序在 Windows 启动时最大化【英文标题】:Force WPF application to maximize on Windows startup 【发布时间】:2017-02-21 07:44:42 【问题描述】:我有一个 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>
【问题讨论】:
***.com/questions/3501151/… @Fabriziostellato 你指的问题是WinForms
,OP使用的是WPF
。
我认为这个链接可能会有所帮助,***.com/questions/18721904/…
链接的问题无法处理 Windows 启动问题
【参考方案1】:
了解适用于 Windows 10 的 Kiosk 模式。
来自Set up a device for anyone to use (kiosk mode):
在 Windows 10 桌面版中轻松设置一次性设备 版本(专业版、企业版和教育版)。让自助服务终端设备运行 通用 Windows 应用,使用分配的访问权限功能。对于售货亭 设备(Windows 10 企业版或教育版)运行经典 Windows 应用程序,使用 Shell Launcher 将自定义用户界面设置为 外壳。
来自Assigned access (Industry 8.1):
管理员可以使用分配的访问权限将用户帐户限制为 访问单个应用程序。您可以使用分配的访问权限来设置 单功能设备,例如餐厅菜单或贸易展示 显示。
下表确定了可在每个 Windows 10 版本上用于创建展台设备的应用程序类型。
通用 Windows 应用是在通用 Windows 平台上构建的 (UWP),它在 Windows 8 中作为 Windows 运行时首次引入。 经典 Windows 应用程序使用经典 Windows 平台 (CWP) (例如,COM、Win32、WPF、WinForms 等)并且通常启动 使用 .EXE 或 .DLL 文件。
【讨论】:
我知道这一点,但感谢其他寻求答案的用户的良好概述。分配的访问权限不是一个选项,因为我有一个经典的 windows 应用程序并且企业版不可用。我希望有比 Shell Launcher 更简单的方法,但我可能需要研究一下。【参考方案2】:您可以在 MainWindow.xaml.cs 中通过添加最大化的窗口状态来执行此操作。
public MainWindow()
InitializeComponent();
this.WindowState = WindowState.Maximized;
【讨论】:
OP 已经具有 XAML 等效项:WindowState="Maximized"
windows启动时应该会弹出,怎么做?【参考方案3】:
解决方案(hack)是在启动时使用任务计划程序打开任何其他窗口(例如 powershell),在另一个窗口打开后,我们可以在 powershell 脚本中调用 Alt+Tab。
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("%TAB")
【讨论】:
多年后仍然对这个解决方案感到惊讶。谢谢微软。【参考方案4】:在 ContentRendered 事件处理程序中设置 Window 状态:
protected override void OnStartup(StartupEventArgs e)
Application.Current.MainWindow.ContentRendered += (s, a) =>
Application.Current.MainWindow.WindowState = WindowState.Maximized;
【讨论】:
问题是 WindowState 已经最大化,但 Windows 不知何故决定不查看该程序。也许他们故意禁用了它。 所以问题不在于最大化,而是你的主窗口被隐藏了? 在启动时,Windows 仅显示开始屏幕,即使窗口状态已最大化。在其他情况下它工作得很好。以上是关于强制 WPF 应用程序在 Windows 启动时最大化的主要内容,如果未能解决你的问题,请参考以下文章