C++ 设置任务栏位置Win7 c++;

C++ 设置任务栏位置Win7 c++;,c++,winapi,C++,Winapi,是否可以使用windows API设置任务栏的位置/宽度/高度? 我正在运行3台显示器,我想防止任务栏跨越所有显示器,而不是一直处于顶部 这是我到目前为止所做的尝试,但没有成功。。。我不确定我的代码是否有问题,或者只是被阻止了 #include <iostream> #include "Windows.h" using namespace std; class MyClass { public: int getTaskBarHeight(); void setTa

是否可以使用windows API设置任务栏的位置/宽度/高度? 我正在运行3台显示器,我想防止任务栏跨越所有显示器,而不是一直处于顶部

这是我到目前为止所做的尝试,但没有成功。。。我不确定我的代码是否有问题,或者只是被阻止了

#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;
}
#包括
#包括“Windows.h”
使用名称空间std;
类MyClass
{
公众:
int getTaskBarHeight();
void setTaskBarPos();
};
int MyClass::getTaskBarHeight()
{
RECT-RECT;
HWND taskBar=FindWindow(L“Shell\u traywnd”,NULL);
if(任务栏和GetWindowRect(任务栏和rect)){
返回rect.bottom-rect.top;
}
}
void MyClass::setTaskBarPos()
{
RECT-RECT;
HWND taskBar=FindWindow(L“Shell\u traywnd”,NULL);
if(任务栏和GetWindowRect(任务栏和矩形)){
SetWindowPos(任务栏,HWND_顶部,0,0,1080,46,SWP_NOZORDER);
}
}
内部主(空)
{
MyClass任务栏;
cout>a;
}
要回答“跨越所有3个显示器”的问题,这通常取决于显示器适配器的配置。您可以有3个单独的显示器(每个显示器1个),也可以有一个跨越所有三个显示器的大显示器。后者听起来像是你的情况,Windows无法让应用程序栏只占据部分显示


您最好调整显示器驱动程序,以创建3个独立显示器,而不是1个大显示器。

如果无法通过Windows的常规设置/控制面板区域对其进行约束,我怀疑是否有一个合适的编程界面——让任意程序干扰任务栏不是一个好的一般体验。这个评论是离题的,但看起来你没有正确理解类的概念。窗口句柄应该是MyClass类的成员变量,而不是成员函数中的局部变量。您在任务栏中找到句柄了吗?它们不是一开始的类,在我添加该类时一定忘了更改变量。现在没什么大不了的。当我返回英伟达函数的高度时,我得到了句柄。设置SWPHI-HIDEFLUP或SWPI-SoFlash实际上隐藏/显示任务栏,因此它是正确的句柄。NVIDIA控制面板中的SLI选项(beta)实际上调整了大小和移动了开始栏,而不确定它们是如何做的。但它将其锁定在中心位置,并导致填充屏幕应用程序出现问题。这正是它不应该出现的原因:)应用程序栏使用单个显示器的整个边缘,而不是其一部分。但nVidia实际上使用了我的3个显示器中的1/3(它们被视为单个显示器。但正如你所说的“…并一直导致填充屏幕应用程序出现问题。”。这难道不支持这是一种黑客行为,并且从根本上被破坏的观点吗?