-1

我正在开发 ac# 桌面应用程序。

我们需要根据条件数量取消固定我们的应用程序磁贴。这可能在应用程序生命周期的任何时候发生,而不仅仅是在安装期间。

我看到了这个关于如何在 CPP 中取消固定磁贴的问题。我也尝试在 C# 中这样做,但没有成功。

有什么帮助吗?

更新:

我能够编写将 AppUserModel_StartPinOption 设置为 APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL 的 C# 代码,但它没有帮助:(

这是代码:

private static void InstallShortcut(string linkPath)
    {

        // Find the path to the current executable
        // String exePath = Process.GetCurrentProcess().MainModule.FileName;  //Path to the current exe file that is running.  C:\\...
        IShellLinkW newShortcut = (IShellLinkW)new CShellLink();

        // Create a shortcut to the exe
        ErrorHelper.VerifySucceeded(newShortcut.SetPath(targetPath));
       ErrorHelper.VerifySucceeded(newShortcut.SetArguments(""));

        // Open the shortcut property store, set the AppUserModelId property
        IPropertyStore newShortcutProperties = (IPropertyStore)newShortcut;


            var APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL = new PropVariant(0);
            var StartPinOption = new PropertyKey(new Guid("{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}"), 12);
            ErrorHelper.VerifySucceeded(newShortcutProperties.SetValue(StartPinOption, APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL));


            ErrorHelper.VerifySucceeded(newShortcutProperties.Commit());


        // Commit the shortcut to disk
        IPersistFile newShortcutSave = (IPersistFile)newShortcut;

        ErrorHelper.VerifySucceeded(newShortcutSave.Save(linkPath, true));
    }

我尝试了两种方法:删除磁贴然后重新创建它,并更改现有磁贴的参数,但没有任何效果,磁贴保持固定在开始菜单上。

4

2 回答 2

2

您是在谈论您的主要应用程序磁贴还是辅助磁贴?如果您指的是辅助磁贴,本文中有取消固定的示例代码。它的核心是(为了简单起见,我做了一些修改;完整代码请参见文章):

 // Check to see if this restaurant exists as a secondary tile and then unpin it
 string restaurantKey = this.m_ViewModel.Restaurant.Key;
 Button button = sender as Button;
 if (button != null)
 {
     if (Windows.UI.StartScreen.SecondaryTile.Exists(restaurantKey))
     {
         SecondaryTile secondaryTile = new SecondaryTile(restaurantKey);
         bool isUnpinned = await secondaryTile.RequestDeleteForSelectionAsync(GetElementRect((FrameworkElement)sender), Windows.UI.Popups.Placement.Above);

         if (!isUnpinned)
         {
             // Do error handling here
         }
     }
     else
     {
         // If we ever get to this point, something went wrong or the user manually 
         // removed the tile from their Start screen.  
         Debug.WriteLine(restaurantKey + " is not currently pinned.");
     }
 }
于 2012-12-24T03:09:23.023 回答
0

根据MSDN 文章: System.AppUserModel.StartPinOption (Windows),No pin install 选项应该是 (1)

var APPUSERMODEL_STARTPINOPTION_NOPINONINSTALL = new PropVariant(1);

我这样做了。

于 2013-01-15T01:34:26.777 回答