사용자가 동일한 컴퓨터에서 여러 인스턴스를 실행할 수있는 C++ 및 Qt를 사용하여 응용 프로그램을 작성하고 있습니다. 응용 프로그램의 각 인스턴스에는 두 개에서 세 개의 창이 있습니다. 현재 응용 프로그램의 모든 인스턴스와 해당 창은 작업 표시 줄에 그룹화되어 있습니다 (맨 위 이미지). 각 프로세스가 작업 표시 줄에 자체 그룹을 갖기를 원합니다 (하단 이미지). 어떻게이 일을 성취 할 수 있습니까?작업 표시 줄에서 개별 프로세스 그룹 해제
0
A
답변
2
당신은 윈도우의 일부, 또는 프로세스의 특정에 대해 다른 응용 프로그램 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
이 솔루션은 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);
}
+0
이것은 응용 프로그램을 시작할 때 실행해야합니까? 창문이 보이면 작동하지 않으니까요? – Noitidart
링크가 잘못 될 수 있습니다. 여기에 그룹 해제를 수행하는 방법에 대한 자세한 내용을 포함시켜야합니다. –
충분합니다. 기사에서 따옴표를 추가했습니다. – jwismar
이것이 올바른 길입니다. 고유 한 AppUserModeId를 사용하십시오. – Abhishek