我有一个小的控制台游戏,可以调用另一个控制台应用。像 Winamp 这样的东西有很多窗口(主和播放列表)。问题是,当我打电话给两个例如控制台窗口时,在任务栏中打开的程序太多了,我不需要单独打开窗口,我只想要 main 停留在任务栏中的窗口,当我点击它时, it 和所有子应用程序将弹出。
P.S。我熟悉ShowWindow ( GetConsoleWindow(), SW_HIDE );
,但它也隐藏了窗口,我希望它只能从任务栏中隐藏。
答案 0 :(得分: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
的效果很好!
注意:您应该在 initRet 和 createRet 中获得 S_OK 值!
答案 1 :(得分: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();
}