我可以设置通过跳转列表启动的任意进程的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)     
已邀请:
这里反应不多;] 与此同时,我设法自己解决了主要问题;它不是一个简单的解决方案,但它满足了要求:程序在后台运行并安装CBT挂钩。每次应用程序创建一个窗口(HookProc代码= HCBT_CREATEWND)时,钩子都会根据包含路径和所需应用程序ID的地图检查应用程序的路径。如果找到匹配项,则设置HWND的应用程序ID。由于这是在实际显示窗口之前发生的并且与自定义任务列表结合,因此从用户的角度来看,应用程序的行为就像支持最近/固定文档列表的应用程序一样。     

要回复问题请先登录注册