2013-04-15 6 views
5

У меня есть небольшая консоль , которая вызывает другое консольное приложение. Что-то вроде Winamp - много окон (основная и плейлист). Дело в том, что когда я вызываю два, например, окна консоли, программы, открытые в панели задач , слишком много, мне не нужно открывать окна отдельно, я хочу только . Главное окно, чтобы оставаться на панели задач и когда я нажмите на него, его и все его дочерние приложения, чтобы всплывать.Скрыть консоль C++ Программа с панели задач

P.S. Я знаком с ShowWindow (GetConsoleWindow(), SW_HIDE);, но он также скрывает окно, и я хочу, чтобы он был скрыт только с панели задач.

ответ

5

Единственный способ, которым я знаю это сделать на консольном окне, - использовать интерфейс оболочки ITaskbarList.

hr = CoCreateInstance(
    CLSID_TaskbarList, 
    NULL, 
    CLSCTX_INPROC_SERVER, 
    IID_ITaskbarList, 
    reinterpret_cast<void**>(&taskbar)); 
if(!FAILED(hr)) 
{ 
    // Remove the icon from the task bar 
    taskbar->DeleteTab(GetConsoleWindow()); 
    // Release it 
    taskbar->Release(); 
} 
6

Благодаря капитану Obvlious и некоторые исследования, следующий код:

ITaskbarList *pTaskList = NULL; 
HRESULT initRet = CoInitialize(NULL); 
HRESULT createRet = CoCreateInstance(CLSID_TaskbarList, 
             NULL, 
             CLSCTX_INPROC_SERVER, 
             IID_ITaskbarList, 
             (LPVOID*)&pTaskList); 

if(createRet == S_OK) 
{ 

    pTaskList->DeleteTab(GetConsoleWindow()); 

    pTaskList->Release(); 
} 

CoUninitialize(); 

с включенным ShObjIdl.h работает!

Примечание: Вы должны получить S_OK в качестве значения в initRet и createRet!

+0

+1 Приятно следовать в процессе решения проблемы. –

Смежные вопросы