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