隐藏C++控制台程序在任务栏中的图标

7
我有一个小的控制台游戏,它调用另一个控制台应用程序。就像Winamp的许多窗口(主窗口和播放列表)。问题是当我调用两个控制台窗口时,任务栏中打开的程序太多了,我不需要分别打开窗口,我只想让主窗口留在任务栏中,当我点击它时,所有子应用程序都会弹出。
附言:我熟悉ShowWindow(GetConsoleWindow(), SW_HIDE);,但它也会隐藏窗口,而我只想从任务栏中隐藏它。
2个回答

9
感谢Captain 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的代码效果很好!

注意:在initRetcreateRet中应该得到S_OK作为返回值!


7

我所知道的在控制台窗口上实现这个功能的唯一方法是使用 shell 接口 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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接