Windows桌面隐藏和显示

隐藏、显示任务栏

原理

使用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编程之–桌面壁纸实现深入探索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值