Разгруппировать отдельные процессы на панели задач

Я пишу приложение с использованием C ++ и Qt, которое может запускать несколько экземпляров на одном компьютере. Каждый экземпляр приложения имеет два-три окна, связанные с ними. На данный момент все экземпляры приложения и их окна сгруппированы на панели задач (верхнее изображение). Я хочу, чтобы у каждого процесса была своя собственная группа на панели задач (нижнее изображение). Как этого достичь?

введите описание изображения здесь

0

Решение

Вы можете установить другой идентификатор приложения для определенных окон или определенных процессов. Это то, что Windows использует, чтобы определить, следует ли группировать значки или нет.

Пожалуйста, смотрите эту статью: http://msdn.microsoft.com/en-us/magazine/dd942846.aspx


Уместная цитата:

Установка идентификатора приложения для процесса включает вызов SetCurrentProcessExplicitAppUserModelID Функция Win32 из 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());
2

Другие решения

Это решение разделит панель задач в соответствии с идентификатором процесса. Недостатком является то, что пиннинг не работает хорошо.

 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);
}
1

По вопросам рекламы [email protected]