2012-04-22 43 views
0

是否可以使用Windows API設置任務欄位置/寬度/高度? 我正在運行3臺顯示器,並且我想阻止任務欄橫跨所有顯示器,並且始終保持最佳狀態。設置任務欄位置Win7 C++

這是我迄今沒有運氣嘗試......我不知道,如果有什麼錯我的代碼,或者它只是被封鎖。

#include <iostream> 
#include "Windows.h" 

using namespace std; 

class MyClass 
{ 
public: 
    int getTaskBarHeight(); 
    void setTaskBarPos(); 
}; 

int MyClass::getTaskBarHeight() 
{ 
    RECT rect; 
    HWND taskBar = FindWindow(L"Shell_traywnd", NULL); 
    if(taskBar && GetWindowRect(taskBar, &rect)) { 
     return rect.bottom - rect.top; 
    } 
} 

void MyClass::setTaskBarPos() 
{ 
    RECT rect; 
    HWND taskBar = FindWindow(L"Shell_traywnd", NULL); 
    if(taskBar && GetWindowRect(taskBar, &rect)) { 

     SetWindowPos(taskBar, HWND_TOPMOST, 0, 0, 1080, 46, SWP_NOZORDER); 

    } 
} 

int main(void) 
{ 
    MyClass taskbar; 
    cout << taskbar.getTaskBarHeight(); 

    taskbar.setTaskBarPos(); 

    int a; 
    cin >> a; 
} 
+1

如果沒有辦法來約束它,只要你想通過Windows的常用設置/控制面板方面,我懷疑有一個編程接口,它是適當的 - 有任意程序與任務欄干擾將不會是一個很好的一般經驗。 – 2012-04-22 06:38:12

+0

這個評論是題外話題,但它看起來像你沒有得到正確的類的概念。窗口句柄應該是類MyClass的成員變量,而不是成員函數中的局部變量。 – user877329 2012-04-22 12:43:37

+0

您是否在任務欄中找到了句柄? – user877329 2012-04-22 12:44:23

回答

0

要回答「Spanning accross all 3 displays」的問題,這通常取決於顯示適配器的配置。您可以有3個獨立的顯示器(每個顯示器1個),或者1個大顯示器橫跨所有三個顯示器。後者聽起來像你的情況,而Windows沒有辦法讓應用欄只佔用顯示器的一部分。

最好的辦法是調整顯示驅動程序來創建3個indiividual顯示,而不是1大的。

+0

nVidia控制面板中的SLi選項(測試版)實際調整大小並移動起始欄,不知道它們是如何做的。但它將其鎖定在中心位置,並導致填充屏幕應用出現問題。 – FallingReign 2012-04-23 11:27:12

+0

恰恰爲什麼它不應該:)應用程序欄使用單個顯示的整個邊緣,而不是其中一部分。 – Deanna 2012-04-23 11:33:45

+0

但nVidia實際上有任務欄使用我的3臺顯示器中的1/3(這被視爲單個顯示器) – FallingReign 2012-04-23 23:36:18