我可以设置通过跳转列表启动的任意进程的AppUserModelID吗?
我有一个用C ++编写的简单控制台应用程序,它充当通过它的跳转列表启动另一个应用程序的存根。目的是将跳转列表功能添加到不支持此功能的应用程序。称之为stub.exe。运行stub.exe时,它会使用以下步骤创建自定义跳转列表(从MS示例中获取):
create an ICustomDestinationList
ICustomDestinationList::BeginList()
create an IObjectCollection
for_each item_to_add
create an IShellLink, set its path/arguments/title/icon
add IShellLink to the IObjectCollection
get the IObjectArray interface from the IObjectCollection
call ICustomDestinationList::AddUserTasks( IObjectArray interface )
ICustomDestinationList::CommitList()
将stub.exe固定到任务栏并右键单击它时,会出现跳转,它包含添加的所有IShellLink。单击某个项目时,它将启动相应的过程。
现在,我希望通过此跳转列表启动的进程将其窗口分组在stub.exe的任务栏图标下,而不是拥有自己的组。他们关键的工作似乎是AppUsermodelID。这是我到目前为止所尝试的:
仅用于测试,创建几个快捷方式并通过IPropertyStore-> SetValue(PKEY_AppUserModel_ID,“id”)设置id。实际上,在启动这些快捷方式时,它们都会在相同的任务栏图标下进行分组。
由于快捷方式做我想要的,我尝试添加快捷方式到stub.exe的跳转列表:没有效果。快捷方式甚至没有显示在跳转列表中(可能没有捷径的快捷方式?),但所有方法都返回S_OK
在每个加入跳转列表的IShellLinks上设置PKEY_AppUserModel_ID:无效果
调用ICustomDestinationList-> SetAppID():没有效果
而不是使用SubTasks,尝试使用SHAddToRecentDocs:没有效果。最近的文档列表没有显示出来。但现在事情变得混乱了。在负责固定任务栏项目的快捷方式(%APPDATA%/漫游/ Microsoft / Internet Explorer /快速启动/用户固定/任务栏中的一个)上设置AppUserModelID后,跳转列表发生了变化:它没有显示'任务'item',但确实显示'Recent'和我使用SHAddToRecentDocs添加的项目。现在点击它们时,我得到一个标题以“d: desktop”开头,后跟中文字符的对话框。将项目悬停在跳转列表中也会显示中文字符而不是我设置的描述。
问题:
跳转列表中的汉字是什么?
如何在任务栏快捷方式上设置应用程序ID在“任务”和“最近”部分之间切换,为什么它们不在那里?
如果可能的话,会有什么方法来实现我真正想要的东西:一个自定义跳转列表,其中启动的项目将在其任务栏图标下分组? (请注意,我计划将他们的流程设置为当前未设置的应用ID)
没有找到相关结果
已邀请:
1 个回复
香腔弥胯瓤