隐藏、显示任务栏
原理
使用spy++查看下任务栏属性
这就是整个任务栏的属性,包括开始按钮和通知区域。
我们要做的就是找到这个窗口,然后隐藏它。
实现
void HideTaskBar()
{
//Shell_TrayWnd
HWND hwndBar;
hwndBar = FindWindow(TEXT("Shell_traywnd"), TEXT(""));
if (hwndBar != 0)
{
//隐藏桌面图标
if (IsWindowVisible(hwndBar))
{
ShowWindow(hwndBar, SW_HIDE);
// 也可以使用下面这种方法
// SetWindowPos(hwndBar, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);
}
}
}
void ShowTaskBar()
{
//Shell_TrayWnd
HWND hwndBar;
hwndBar = FindWindow(TEXT("Shell_traywnd"), TEXT(""));
if (hwndBar != 0)
{
if (!IsWindowVisible(hwndBar))
{
ShowWindow(hwndBar, SW_SHOW);
// 也可以使用下面这种方法
// SetWindowPos(hwndBar, 0, 0, 0, 0, 0, SWP_SHOWWINDOW);
}
}
}
隐藏、显示桌面图标
原理
跟上面隐藏任务栏的原理相同,也是先找到对应的窗口,再隐藏它
其中负责桌面图标显示的是"FolderView"这个窗口,我们只要隐藏它就可以了
实现
void HideDesktopIcon()
{
HWND hwndPm, hwndPm2, hwndDesktop;
hwndPm = FindWindowA(NULL, "Program Manager");
if (hwndPm != 0)
{
hwndPm2 = FindWindowExA(hwndPm, 0, NULL, "");
if (hwndPm2 != 0)
{
hwndDesktop = FindWindowExA(hwndPm2, 0, NULL, "FolderView");
if (hwndDesktop != 0)
{
//隐藏桌面图标
if (IsWindowVisible(hwndDesktop))
{
ShowWindow(hwndDesktop, SW_HIDE);
}
}
}
}
}
void ShowDesktopIcon()
{
HWND hwndPm, hwndPm2, hwndDesktop;
hwndPm = FindWindowA(NULL, "Program Manager");
if (hwndPm != 0)
{
hwndPm2 = FindWindowExA(hwndPm, 0, NULL, "");
if (hwndPm2 != 0)
{
hwndDesktop = FindWindowExA(hwndPm2, 0, NULL, "FolderView");
if (hwndDesktop != 0)
{
//显示桌面图标
if (!IsWindowVisible(hwndDesktop))
{
ShowWindow(hwndDesktop, SW_SHOW);
}
}
}
}
}
隐藏、显示桌面
有时候我们希望整个桌面隐藏——背景全黑、鼠标、拖拽无反应
原理
还是看上面这张图,我们可以尝试在"Program Manager"这个窗口下面尝试逐个隐藏,最终测试的效果是,隐藏"Program Manager"这个窗口就会实现桌面全黑且鼠标点击无反应。
实现
void HideDesktop()
{
HWND hwndPm, hwndPm2;
hwndPm = FindWindowA(NULL, "Program Manager");
if (hwndPm != 0)
{
DEBUG_INFO("find program Manager");
if (IsWindowVisible(hwndPm))
{
ShowWindow(hwndPm, SW_HIDE);
}
}
}
void ShowDesktop()
{
HWND hwndPm, hwndPm2;
hwndPm = FindWindowA(NULL, "Program Manager");
if (hwndPm != 0)
{
DEBUG_INFO("find program Manager");
if (!IsWindowVisible(hwndPm))
{
ShowWindow(hwndPm, SW_SHOW);
}
}
}
其他
我们还可以继续测试spy++抓到的哪些桌面窗口,可以发现一些有趣的行为
参考
windows桌面窗口层次解析以及C语言设置壁纸原理应用
Windows视频桌面壁纸实现(libvlc)(类似于wall paper engine效果)
Draw Behind Desktop Icons in Windows 8+
Windows编程之–桌面壁纸实现深入探索