7

我有一个调用另一个控制台应用程序的小型控制台游戏。Winamp的许多窗口(主要播放列表)。问题是当我调用两个例如控制台窗口时,在任务栏中打开的程序太多了,我不需要单独打开窗口,我只希望窗口留在任务栏中,当我点击它时,及其所有子应用程序都会弹出。

PS我很熟悉ShowWindow ( GetConsoleWindow(), SW_HIDE );,但它也隐藏了窗口,我希望它只从任务栏中隐藏。

4

2 回答 2

8

感谢上尉 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作为initRetcreateRet中的值!

于 2013-04-16T18:51:42.830 回答
6

我知道在控制台窗口上完成此操作的唯一方法是使用 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();
}
于 2013-04-15T20:14:15.487 回答