4

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();

这是第一次成功。但是,如果他想只更改一次RelaunchCommandRelaunchDisplayNameResource除非我也更改一次,否则它将无法正常工作ID

我在这里举了一个例子RelaunchCommandRelaunchDisplayNameResource在我的真实案例中,用户也想更改图标,但同样的问题,它是第一次工作ID。无论如何要运行多次而不必ID每次都更改?

谢谢

PS:这个解决方案的另一个重要原因是我的一个窗口已经有一个System.AppUserModel.ID并且已经固定了。我只想更改图标/重新启动命令/等,如果我更改,System.AppUserModel.ID那么它将有效地取消固定它。:(

4

1 回答 1

3

该主题的解决方案是我正在使用的解决方法:

检测应用程序引脚状态

在设置属性之前,我通过查看以下文件夹来测试它是否被固定:

  • %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在我的应用程序的窗口上(我必须在每个窗口上做,我找不到在整个应用程序中做的方法)

于 2015-02-07T23:57:39.880 回答