在Windows 7任务栏“跳转列表”中自定义默认任务栏任务

时间:2013-01-09 16:23:13

标签: winapi windows-7 windows-shell taskbar

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

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

如果无法做到这一点,是否还有其他解决方法(即shell链接,快捷方式等)可用于获取此功能?或者只是一种完全禁用该任务列表的方法吗?

提前致谢。如果这个问题不明确,请告诉我,我会更新说明。

1 个答案:

答案 0 :(得分:0)

此问题的一个很好的解决方案是使用快捷方式(.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);

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