2011-08-28 50 views
15

隱藏任務欄第三方窗戶我不得不隱藏在第三方庫彈出窗口。的Win32:如何通過的hWnd

我已經實現了窗口掛鉤的東西與SetWindowsHookEx,知道所有的newely創建的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);  

我錯了這裏隱藏在任務欄newely創建的窗口嗎?

+1

WS_EX_ *必須獲取/設置與GWL_EXSTYLE - 不GWL_STYLE。 (WS_EX_TOOLWINDOW具有值0x00000080,而如果你使用它作爲一個GWL_STYLE而不是_EXSTYLE,將最終修改的的是通常不用於應用窗口一個窗口風格的一部分,所以會顯得空操作,低部分的窗口樣式通常用於特定於控件的樣式位 - 例如,對於按鈕,這與BS_BITMAP具有相同的值。) – BrendanMcK

回答

20

您使用SetWindowLong之前,調用ShowWindow(hWnd, SW_HIDE),然後調用SetWindowLong,然後再次調用ShowWindowShowWindow(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擴展的無主窗口樣式。作爲 替代方案,您可以創建一個隱藏窗口,並將此隱藏窗口作爲可見窗口的所有者。

殼牌將僅在 窗口的樣式支持可視任務欄按鈕在任務欄刪除窗口的按鈕。如果您想 將窗口樣式動態地更改爲不支持 可見任務欄按鈕的樣式,則必須先隱藏該窗口(通過調用 ShowWindow和SW_HIDE),更改窗口樣式,然後顯示 窗口。

+0

對不起,它不適用於我。現在,我成功隱藏的Windows現在可以顯示在任務欄中。 –

+0

@安德魯很奇怪。它可能不起作用,但爲了好奇心,在你調用ShowWindow(hWnd,SW_SHOW);''後,試着'SetWindowLong'。所以代碼會去'ShowWindow(hWnd,SW_HIDE); SetWindowLong(hWnd,GWL_STYLE,style); ShowWindow(hWnd,SW_SHOW); SetWindowLong(hWnd,GWL_STYLE,style);' –

+0

@Andrew你還使用了哪個標誌作爲SetWindowsHookEx的第一個參數? –

0

您必須使用GWL_EXSTYLE來獲取/設置EX標誌,GWL_STYLE不適用於EX標誌。

相關問題