2012-04-22 94 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