Win32: Как скрыть сторонние окна на панели задач hWnd

Мне нужно скрыть всплывающие окна в сторонней библиотеке.

Я реализовал файлы с подключением окон с помощью SetWindowsHookEx и знаю все новые созданные hWnd (s). Я слушаю обратный вызов HSHELL_WINDOWCREATED и делаю следующее:

long style= GetWindowLong(hWnd, GWL_STYLE);
style &= ~(WS_VISIBLE);    // this works - window become invisible 

style |= WS_EX_TOOLWINDOW;   // flags don't work - windows remains in taskbar
style &= ~(WS_EX_APPWINDOW); 

SetWindowLong(hWnd, GWL_STYLE, style);      

Что я делаю неправильно здесь, чтобы скрыть вновь созданные окна в панели задач?

Ответы

Ответ 1

Прежде чем использовать SetWindowLong, вызовите ShowWindow(hWnd, SW_HIDE), затем вызовите SetWindowLong, затем вызовите ShowWindow снова, как ShowWindow(hWnd, SW_SHOW). Таким образом, ваш код будет выглядеть так:

long style= GetWindowLong(hWnd, GWL_STYLE);
style &= ~(WS_VISIBLE);    // this works - window become invisible 

style |= WS_EX_TOOLWINDOW;   // flags don't work - windows remains in taskbar
style &= ~(WS_EX_APPWINDOW); 

ShowWindow(hWnd, SW_HIDE); // hide the window
SetWindowLong(hWnd, GWL_STYLE, style); // set the style
ShowWindow(hWnd, SW_SHOW); // show the window for the new style to come into effect
ShowWindow(hWnd, SW_HIDE); // hide the window so we can't see it

Вот соответствующая цитата из Веб-сайт Microsoft:

Чтобы предотвратить включение кнопки окна на панели задач, создайте незанятое окно с расширенным стилем WS_EX_TOOLWINDOW. Как альтернативу, вы можете создать скрытое окно и сделать это скрытым окно владельца видимого окна.

Shell удалит кнопку окна с панели задач, только если стиль окна поддерживает видимые кнопки панели задач. Если ты хочешь динамически изменить стиль окна на тот, который не поддерживает видимые кнопки панели задач, вы должны сначала скрыть окно (путем вызова ShowWindow с SW_HIDE), измените стиль окна, а затем покажите окно.