如何防止 WPF 应用程序中的开始菜单固定

Posted

技术标签:

【中文标题】如何防止 WPF 应用程序中的开始菜单固定【英文标题】:How to prevent Start Menu Pinning in WPF App 【发布时间】:2021-11-14 11:41:32 【问题描述】:

使用WindowsAPICodePack.Shell 我试图阻止用户将 WPF 应用程序固定到“开始”菜单和任务栏。我在 Windows 10 机器上执行此操作。

我尝试了两种方法,都可以阻止固定到任务栏,但仍然可以固定到开始菜单。

选项 1

    public void PreventPin()
    
        Window parentWindow = Window.GetWindow(ShellWindow);

        string appID = "UI";
        Guid propGuid = new Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"); 

        PropertyKey idProperty = new PropertyKey(propGuid, 5);              // System.AppUserModel.ID
        PropertyKey preventTaskbarPinning = new PropertyKey(propGuid, 9);  // System.AppUserModel.PreventPinning
        PropertyKey preventStartPinning = new PropertyKey(propGuid, 12);  // System.AppUserModel.PreventPinning

        //Important: Set PreventPinning before ID
        WindowProperties.SetWindowProperty(parentWindow, preventTaskbarPinning, "True");
        WindowProperties.SetWindowProperty(parentWindow, preventStartPinning, "2");
        WindowProperties.SetWindowProperty(parentWindow, idProperty, appID);
    

选项 2 - 在 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\NoStartPageAppUserModelIDs\ 的注册表中也存在 UI,并带有“UI”条目

    public void PreventPin()
    
        Window parentWindow = Window.GetWindow(ShellWindow);

        string appID = "UI";
        Guid propGuid = new Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3"); 

        PropertyKey idProperty = new PropertyKey(propGuid, 5);              // System.AppUserModel.ID
        WindowProperties.SetWindowProperty(parentWindow, idProperty, appID);
    

任何想法我做错了什么?

一些参考资料:

https://docs.microsoft.com/en-us/previous-versions//jj553605(v=vs.85)?redirectedfrom=MSDN

Control path to pinned exe in Windows taskbar and start menu

https://docs.microsoft.com/en-us/windows/win32/shell/how-to-exclude-items-from-taskbar-pinning-and-recent-frequent-lists

【问题讨论】:

【参考方案1】:

我有个提议,设置你的主窗口,防止用户使用windows上的其他资源:

WindowStyle="None" WindowState="Maximized"

这不是仅显示您的应用的最佳解决方案。

【讨论】:

我不确定这有什么帮助。用户肯定需要使用机器上的其他应用程序。我只需要他们阻止他们选择“Pin to Start”

以上是关于如何防止 WPF 应用程序中的开始菜单固定的主要内容,如果未能解决你的问题,请参考以下文章

如何防止屏幕阅读器/旁白阅读隐藏在 WPF 中的控件?

如何防止 ComboBox 中的 NewItemPlaceholder 行绑定到与 WPF 中的 DataGrid 相同的 DataTable

如何使用批处理文件固定到开始菜单(Windows 10)

如何使用 WPF 中的 Alt 键切换主菜单可见性?

如何防止滚动条覆盖 IE10 中的内容?

如何防止根设备绕过 Android 中的证书固定?