我必须在第三方库中隐藏弹出窗口。
我已经使用SetWindowsHookEx实现了Windows钩子的东西,并且知道所有新创建的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);
我在这里错误地隐藏了任务栏中新创建的窗口?
答案 0 :(得分:21)
在您使用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的相关引用:
要阻止窗口按钮放在任务栏上,请创建 具有WS_EX_TOOLWINDOW扩展样式的无主窗口。作为一个 替代方案,您可以创建一个隐藏的窗口并使其隐藏 窗口是可见窗口的所有者。
Shell只会在任务栏中删除窗口的按钮 window的样式支持可见的任务栏按钮。如果你想 动态地将窗口的样式更改为不支持的样式 可见任务栏按钮,您必须先隐藏窗口(通过调用 ShowWindow with SW_HIDE),改变窗口样式,然后显示 窗口。
答案 1 :(得分:1)
您必须使用GWL_EXSTYLE来获取/设置EX标志,GWL_STYLE将不适用于EX标志。