我正在使用C ++和Qt编写应用程序,用户可以在同一台机器上运行多个实例。应用程序的每个实例都有两到三个与之关联的窗口。目前,应用程序及其窗口的所有实例都在任务栏中组合在一起(顶部图像)。我希望每个进程在任务栏中都有自己的组(底部图像)。如何实现这一目标?
答案 0 :(得分:3)
您可以为某些窗口或某些进程设置不同的应用程序ID。这是Windows用于确定是否对图标进行分组的方法。
请参阅此文章:http://msdn.microsoft.com/en-us/magazine/dd942846.aspx
相关报价:
设置进程的应用程序ID涉及从shell32.dll调用SetCurrentProcessExplicitAppUserModelID
Win32函数。设置窗口的应用程序ID需要调用SHGetPropertyStoreForWindow
函数,然后操作返回的IPropertyStore
对象。以下示例说明如何执行此操作:
PROPVARIANT pv;
InitPropVariantFromString(L"MyAppID", &pv);
IPropertyStore* pps;
VERIFY(SHGetPropertyStoreForWindow(hwnd, IID_PPV_ARGS(&pps)));
VERIFY(pps->SetValue(PKEY_AppUserModel_ID, pv));
VERIFY(pps->Commit());
答案 1 :(得分:1)
此解决方案将根据processID分离任务栏。缺点是钉扎效果不佳。
OSVERSIONINFO v;
v.dwOSVersionInfoSize= sizeof(OSVERSIONINFO);
GetVersionEx(&v);
if (v.dwMajorVersion == 6 && v.dwMinorVersion > 1 || v.dwMajorVersion > 6)
{
//on Windows 7 or higher ungroup taskbar for separate process
DWORD currentProcessId = GetCurrentProcessId();
WCHAR AppID[100];
swprintf(AppID, sizeof(AppID) / sizeof(AppID[0]), L"AppID%u", currentProcessId);
SetCurrentProcessExplicitAppUserModelID(AppID);
}