是否可以使用Windows API执行“自动隐藏任务栏”功能?

问题描述 投票:0回答:1

我正在尝试使用C语言操作Windows 11中的自动隐藏任务栏功能。我想在单独使用笔记本电脑时启用自动隐藏,并在通过 C 型连接显示器时禁用它。然而,当我编写并执行如上所示的代码时,它不起作用。

可以使用代码完全隐藏或显示任务栏,但似乎没有直接的方法可以通过代码启用或禁用自动隐藏功能。

感谢您的回复。

#include <Windows.h>
#include <tchar.h>
#include <shellapi.h>
#include <stdio.h>


int main() {
    DISPLAY_DEVICE displayDevice = { 0 };
    displayDevice.cb = sizeof(DISPLAY_DEVICE);
    DWORD deviceIndex = 0;


    HWND taskbar = FindWindow(_T("Shell_TrayWnd"), NULL);
    APPBARDATA abd = { 0 };
    memset(&abd, 0, sizeof(APPBARDATA));
    abd.cbSize = sizeof(APPBARDATA);
    abd.hWnd = taskbar;
    //SHAppBarMessage(ABM_SETAUTOHIDEBAR, 0, 0, &abd);

    while (EnumDisplayDevices(NULL, deviceIndex, &displayDevice, 0)) {
        if (displayDevice.StateFlags == DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) {
            SHAppBarMessage(ABM_SETSTATE, ABS_AUTOHIDE, &abd);
        }
        deviceIndex++;
    }
    return 0;
}
windows taskbar windows-api-code-pack
1个回答
0
投票

我也有同样的问题。这是我使用的代码,与你的不同:

HWND hwndTaskbar = FindWindowW(L"Shell_TrayWnd", NULL);

APPBARDATA appBarData = { sizeof(appBarData) };
appBarData.cbSize = sizeof(appBarData);
appBarData.hWnd = hwndTaskbar;
appBarData.lParam = ABS_AUTOHIDE | ABS_ALWAYSONTOP;

SHAppBarMessage(ABM_SETSTATE, &appBarData);

代码在Windows 10中运行正常,但在Windows 11中无法正常执行。任务栏消失一会儿,然后自动再次显示。

© www.soinside.com 2019 - 2024. All rights reserved.