我正在尝试使用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;
}
我也有同样的问题。这是我使用的代码,与你的不同:
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中无法正常执行。任务栏消失一会儿,然后自动再次显示。