【问题标题】:Customize default taskbar tasks in Windows 7 taskbar "jump list"在 Windows 7 任务栏“跳转列表”中自定义默认任务栏任务
【发布时间】:2024-01-18 01:33:01
【问题描述】:

我有一个程序 A.exe,它引导另一个进程 B.exe,将动态命令行参数传递给 B.exe。默认的 Windows 7 任务栏任务列表将提供启动另一个 B.exe 实例的选项作为其顶部选项。例如:http://cl.ly/image/2C1X2g1A2K0k 顶部选项将打开命令窗口的另一个实例。

我希望通过 Win32/Shell API 自定义此默认任务列表,以便顶部选项实际上打开 A.exe 而不是 B.exe。这可能吗?这也适用于“固定”应用程序时;固定按钮应指向并加载 A.exe。因为 B.exe 需要由 A.exe 确定的动态命令行参数,所以这是一个要求。 B.exe 不知道 A.exe。

如果这不可能,是否有任何其他解决方法(即 shell 链接、快捷方式等)可用于获得此功能?或者有没有办法完全禁用该任务列表?

提前致谢。如果这个问题不清楚,请告诉我,我会更新描述。

【问题讨论】:

  • 对于固定,您可以使用 System.AppUserModel.RelaunchCommand 属性。示例程序here.

标签: winapi windows-7 windows-shell taskbar


【解决方案1】:

解决此问题的一个好方法是使用快捷方式 (.lnk) 文件,并结合 STARTF_TITLEISLINKNAME 标志 as explained on the MSDN page。 Windows 将使用快捷方式作为其任务栏任务项来启动应用程序的新实例(任务列表的顶部条目)以及将应用程序固定到任务栏时。

例如,假设B.lnk指向B.exe,我们可以放入A.exe:

PROCESS_INFORMATION piProcInfo;
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));

STARTUPINFO siStartInfo;
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpTitle = (LPTSTR)L"C:\Path\to\B.lnk";
siStartInfo.dwFlags = STARTF_TITLEISLINKNAME;

CreateProcess(NULL,
              (LPTSTR)L"C:\Path\to\B.exe",
              NULL,
              NULL,
              TRUE,
              CREATE_NO_WINDOW,
              NULL,
              NULL,
              &siStartInfo,
              &piProcInfo);

希望对有类似利基用例的人有所帮助。

【讨论】: