我必须在第三方库中隐藏弹出窗口。
我已经用 SetWindowsHookEx 实现了 Windows 钩子(Hook)的东西 |并知道所有新创建的 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);
在任务栏中隐藏新创建的窗口我做错了什么?
最佳答案
在使用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's Website 的相关引述:
To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style. As an alternative, you can create a hidden window and make this hidden window the owner of your visible window.
The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons. If you want to dynamically change a window's style to one that doesn't support visible taskbar buttons, you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.
关于c++ - Win32 : How to hide 3rd party windows in taskbar by hWnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24485664/