2012-04-10 4 views
1

Im Moment muss ich in C++/Qt erkennen, ob eine Taskleiste, die auf "autohide" gesetzt ist, auf dem Bildschirm sichtbar ist oder nicht. Ich habe bereits versucht, folgende Lösung, leider ohne Erfolg:Wie erkennt man, ob die automatisch ausgeblendete Taskleiste sichtbar ist oder nicht?

  1. Auf den autohide Zustand mit uState = (UINT) SHAppBarMessage (ABM_GETSTATE, PABD), dies nur gibt zurück, ob autohide Eigenschaft festgelegt ist oder nicht

  2. Abrufen des Arbeitsbereichs mit SystemParametersInfo (SPI_GETWORKAREA, 0, & rectWorkArea, 0); Leider ist der Arbeitsbereich immer die Größe des gesamten Bildschirms, wenn Task-Leiste auf „autohiden“ gesetzt ist, auch wenn es auf dem Bildschirm tatsächlich sichtbar ist

  3. Geting AppBarData mit SHAppBarMessage (ABM_GETTASKBARPOS, & abd); Mit dieser Funktion kann ich sowohl die Größe als auch die Koordinaten der Taskleiste abrufen, sie werden jedoch immer so zurückgegeben, als ob die Taskleiste sichtbar wäre, auch wenn sie ausgeblendet ist.

Also mit diesen Methoden kann ich nicht sagen, ob Taskleiste mit „autohide“ auf im gegebenen Moment auf dem Bildschirm oder nicht :-(

ich :-)

+1

Hum, ich weiß nicht warum, aber das sieht aus wie die Art von Code, der in einem Raymond Chen Blog-Post könnte am Ende. Warum brauchen Sie diese Informationen? Vielleicht gibt es einen anderen Weg, um zu erreichen, was Sie wollen. –

+0

Für was müssen Sie wissen, ob die Taskleiste sichtbar ist? – RedX

Antwort

4
jede Hilfe sichtbar ist, würde schätzen
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null); 
bool isVisible = IsWindowVisible(hTaskbarWnd); 

oder

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

Sieht gut aus, danke! – tomak

+0

Handelt es sich um die Taskleiste auf der linken/rechten/oberen Seite des Bildschirms? – RedX

+0

@RedX: Ja, tut es – Flot2011

Verwandte Themen