Win32:如何通过hWnd在任务栏中隐藏第三方窗口

我必须隐藏第三方库中的popup窗口

我已经用SetWindowsHookEx实现了windows钩子的东西,并知道所有新创build的hWnd(s)。 我听HSHELL_WINDOWCREATEDcallback,并执行以下操作:

 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); 

我在这里做错了在任务栏中隐藏新创build的窗口?

在使用SetWindowLong之前,调用ShowWindow(hWnd, SW_HIDE) ,然后调用SetWindowLong ,然后像ShowWindow(hWnd, SW_SHOW)一样再次调用ShowWindow 所以你的代码如下所示:

 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 

以下是来自微软网站的相关报价:

要防止将窗口按钮放置在任务栏上,请使用WS_EX_TOOLWINDOW扩展样式创建无主窗口。 或者,您可以创建一个隐藏窗口,并将此隐藏窗口设置为可见窗口的所有者。

只有当窗口样式支持可见的任务栏按钮时,Shell才会从任务栏中删除一个窗口的按钮。 如果要动态地将窗口样式更改为不支持可见任务栏按钮的样式,则必须先隐藏窗口(通过使用SW_HIDE调用ShowWindow),更改窗口样式,然后显示窗口。