所以我通过IPropertyStore
通过SHGetPropertyStoreForWindow
将我的窗口从主标签组拆分为:
IPropertyStore_SetValue(pps, PKEY_AppUserModel_ID.address(), 'Contoso.Scratch');
pps->Commit();
然后,用户稍后决定要重命名,以便使用我的功能:
IPropertyStore_SetValue(pps, PKEY_AppUserModel_RelaunchCommand, customLaunchPath);
IPropertyStore_SetValue(pps, PKEY_AppUserModel_RelaunchDisplayNameResource, 'my first name');
pps->Commit();
这是第一次成功运作。但如果他想再次更改RelaunchCommand
和RelaunchDisplayNameResource
,除非我同时更改ID
,否则它将无法正常工作。
我在此提供了RelaunchCommand
和RelaunchDisplayNameResource
,在我的实际案例中,用户还希望更改图标但同样的问题,它每次ID
首次使用。无论如何要多次运行而不必每次都更改ID
?
由于
PS:
这个解决方案的另一个重要原因是我的一个窗口已经有一个System.AppUserModel.ID
并且已经固定。我想只更改icon / relaunchCommand / etc,如果我更改了System.AppUserModel.ID
,那么它将有效地取消它。 :(
答案 0 :(得分:2)
此主题的解决方案是我正在使用的解决方法:
Detecting Application Pin State
在设置属性之前,我通过查看以下文件夹来测试它是否被固定:
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
我在所有快捷方式上做了IPropertyStore::getValue
,如果它与我的AppUserModelID匹配,那么我就更改了图标,标签等,立即在任务栏中更新它。
这样可行,但我会不接受这个解决方案,因为它没有记录,所以可能不是正确的方法。
如果在快捷方式中找不到AppUserModel.ID,我只是在我的应用程序的窗口上IPropertyStore::setValue
(我必须在每个窗口上做,我无法找到一种方法来完成整个过程应用程序)