2012-04-10 52 views
1

目前我需要在C++/Qt中檢測是否在屏幕上可見屏幕上顯示設置爲「自動隱藏」的任務欄。我曾嘗試已經下面的解決方案,可惜沒有成功:如何檢測自動隱藏的任務欄是否可見?

  1. 經過自動隱藏狀態uState =(UINT)SHAppBarMessage(ABM_GETSTATE,PABD),這隻能返回自動隱藏屬性是否設置或不

  2. 使用SystemParametersInfo獲取工作區(SPI_GETWORKAREA,0,& rectWorkArea,0);不幸的是,工作區域始終是整個屏幕,當任務欄被設置爲「autohiden」的大小,即使是在屏幕上實際可見

  3. 葛亭AppBarData與SHAppBarMessage(ABM_GETTASKBARPOS,& ABD);使用這個函數,我可以獲得任務欄的大小和座標,但是它們總是返回,就像任務欄是可見的一樣,即使它是隱藏的。

所以用這些方法我也說不上來,無論是任務欄有「自動隱藏」的是在給定時刻屏幕上可見或不可見:-(

我將不勝感激:-)

+1

嗯,我不知道爲什麼,但是這看起來像樣的代碼,可以在雷蒙陳博客文章結束。爲什麼你需要知道這些信息?也許有另一種方法來實現你想要的。 – 2012-04-10 10:27:07

+0

對於你需要知道的任務欄是否可見? – RedX 2012-04-10 14:17:01

回答

4
任何幫助
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null); 
bool isVisible = IsWindowVisible(hTaskbarWnd); 

bool IsTaskbarWndVisible() { 
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null); 
HMONITOR hMonitor = MonitorFromWindow(hTaskbarWnd , MONITOR_DEFAULTTONEAREST); 
MONITORINFO info = { sizeof(MONITORINFO) }; 
if (GetMonitorInfo(hMonitor, &info)) 
{ 
    RECT rect; 
    GetWindowRect(hTaskbarWnd , &rect); 
    if ((rect.top >= info.rcMonitor.bottom - 4) || 
     (rect.right <= 2) || 
     (rect.bottom <= 4) || 
     (rect.left >= info.rcMonitor.right - 2)) 
    return false; 

    return true; 
} 
+0

看起來不錯,謝謝! – tomak 2012-04-18 15:55:56

+0

這是否處理屏幕左/右/頂部的塔斯巴爾的情況? – RedX 2013-09-11 12:36:20

+0

@RedX:是的,它的確如此 – Flot2011 2013-09-11 19:12:02

相關問題