Я пишу приложение с использованием C++ и Qt, которое может запускать несколько экземпляров на одном компьютере. Каждый экземпляр приложения имеет от двух до трех окон, связанных с ними. На данный момент все экземпляры приложения и их окна сгруппированы в панели задач (верхнее изображение). Я хочу, чтобы каждый процесс имел свою группу на панели задач (нижнее изображение). Как это можно достичь?Разгруппирование отдельных процессов с панели задач
ответ
Вы можете установить другой идентификатор приложения для некоторых из окон, или некоторые из процессов. Это то, что Windows использует для определения того, следует ли группировать значки или нет.
Пожалуйста, обратитесь к этой статье: http://msdn.microsoft.com/en-us/magazine/dd942846.aspx
Соответствующая цитата:
Установка идентификатора приложения для процесса включает в себя вызов функции Win32 SetCurrentProcessExplicitAppUserModelID
из shell32.dll. Для установки идентификатора приложения для окна необходимо вызвать функцию 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());
Это решение будет разделять панель задач в соответствии с идентификатором 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);
}
Это должно работать во время запуска приложения, хотя нет? Как это не будет работать, как только окна покажут? – Noitidart
Ссылки могут ухудшиться. Вы должны включить подробные сведения о том, как сделать разгруппировку здесь в ответе. –
Достаточно честный. Добавлена цитата из статьи. – jwismar
Это правильный путь. Используйте уникальный AppUserModeId. – Abhishek