C语言,快速隐藏/显示桌面图标和任务栏_脚本打开关闭,任务栏,显示隐藏的图标-程序员宅基地

技术标签: 隐藏桌面图标  C  快速隐藏  一键隐藏  显示桌面图标  

一般隐藏/显示桌面图标的方法大多数人都知道了,只需要 “桌面右键→查看→显示桌面图标” 即可。如果这样已经满足你的要求,就不需要往下看了;如果你觉得多次点击麻烦,可以接着往下看


先说一下我写这个程序的目的
本人本就是一个追求简洁干净的男子,桌面只有几个常用软件和几个常用文件夹,大多数图标都放在“开始”屏幕,和同事相比我的桌面真是清清爽爽,可谓是一股清流;可是公司竟要把我逼上绝路,要求桌面软件只能有此电脑、网络、浏览器等图标,还不准有文件夹!
作为一个有原则的人,怎么可能随随便便改变自己的习惯,于是乎,为了应付检查,我写了这个快速隐藏/显示桌面图标的程序,然后将程序固定到“开始”屏幕里,只要来检查,打开“开始”,再轻轻一点,桌面瞬间清空,完美。


本程序使用C语言编写,调用的Windows API,所以只能在windows上运行

本程序无界面,启动后直接隐藏/显示桌面图标,运行结束后自动退出

操作系统:windows 10
开发工具:Visual Studio 2019

下面先贴源代码:
(以下是旧程序,可能不可用,新程序在后面)

#include <stdio.h>
#include <Windows.h>
#include <WinUser.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) // 设置入口地址,为了隐藏控制台黑框,调试时黑框不会消失,运行exe文件时才能隐藏黑框

int main(void)
{
    
	HWND hWndPm, hWndPm2, hWndDeskop;
	hWndPm = FindWindowA(NULL, "Program Manager");  //获取桌面句柄
	if (hWndPm != 0)
	{
    
		hWndPm2 = FindWindowExA(hWndPm, 0, NULL, "");  //获取 hWndPm 的子句柄
		if (hWndPm2 != 0)
		{
    
			hWndDeskop = FindWindowExA(hWndPm2, 0, NULL, "FolderView");  //获取 hWndPm2 的子句柄
			if (hWndDeskop != 0)
			{
    
				//!!!以下三种方式不可同时使用!!!
				
				/*
				* 如果仅隐藏桌面图标,使用下面程序
				*/
				//if (IsWindowVisible(hWndDeskop))
				//{
    
				//	ShowWindow(hWndDeskop, SW_HIDE);
				//}
				
				/*
				* 如果仅显示桌面图标,使用下面程序
				*/
				//if (!IsWindowVisible(hWndDeskop))
				//{
    
				//	ShowWindow(hWndDeskop, SW_SHOW);
				//}
				
				/*
				* 如果需要隐藏-显示桌面图标,使用下面程序
				* 可以在 隐藏-显示 之间循环切换
				*/
				//if (IsWindowVisible(hWndDeskop))
				//{
    
				//	ShowWindow(hWndDeskop, SW_HIDE);
				//}
				//else
				//{
    
				//	ShowWindow(hWndDeskop, SW_SHOW);
				//}
				
				//!!!以上三种方式不可同时使用!!!
				
				/*
				* 下面程序为模拟 “Win+D” 快捷键,显示桌面
				* 可根据需要添加
				*/
				//Sleep(100);
				//keybd_event(VK_LWIN, 0, 0, 0);                //按下 Win 键
				//keybd_event('D', 0, 0, 0);                    //按下 D 键
				//Sleep(100);
				//keybd_event(VK_LWIN,0, KEYEVENTF_KEYUP,0);    //抬起 Win 键
				//keybd_event('D', 0, KEYEVENTF_KEYUP, 0);      //抬起 D 键
			}
			else
			{
    
				printf("hWndDeskop未找到!\n");
			}
		}
		else
		{
    
			printf("hWndPm2未找到!\n");
		}
	}
	else
	{
    
		printf("hWndPm未找到!\n");
	}
	return 0;
}

20210811更新如下:
旧程序不可用的原因就是句柄路径发生了变化,新程序遍历了所有路径找桌面句柄。
并且新程序新增了隐藏任务栏的功能。

#include <stdio.h>
#include <windows.h>
#include <WinUser.h>
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) // 设置入口地址


//遍历全部子窗口的子窗口 , Z序遍历
HWND findChildWindowHandleByName(HWND parent, int level, TCHAR* winNameBuf)
{
    
	HWND child = NULL;
	HWND hWnd = NULL;
	TCHAR buf[MAX_PATH];
	DWORD pid = 0, tid = 0;
	do {
    
		child = FindWindowEx(parent, child, NULL, NULL);
		int ret = GetWindowText(child, buf, MAX_PATH);
		buf[ret] = 0;
		tid = GetWindowThreadProcessId(child, &pid);
		for (int i = 0; i < level; ++i)
			printf("\t");
		printf("%s ,  pid:%d, tid:%d\n", buf, pid, tid);
		if (memcmp(winNameBuf, buf, sizeof(winNameBuf)) == 0)
		{
    
			hWnd = child;
			return hWnd;
		}
		if (child)
			hWnd = findChildWindowHandleByName(child, level + 1, winNameBuf);
		if (hWnd != NULL)
		{
    
			return hWnd;
		}
	} while (child);
	return NULL;
}

//遍历全部 explore 下的窗口 , Z序遍历
HWND findWindowHandleByName(TCHAR* winNameBuf)
{
    
	HWND child = NULL;
	HWND hWnd = NULL;
	TCHAR buf[MAX_PATH];
	DWORD pid = 0, tid = 0;

	do {
    
		//查找 Explore 下的一个窗口,若是能找到则根据 Explore 下的child 继续找
		child = FindWindowEx(NULL, child, NULL, NULL);
		int ret = GetWindowText(child, buf, MAX_PATH);
		buf[ret] = 0;
		tid = GetWindowThreadProcessId(child, &pid);
		printf("%s ,  pid:%d, tid:%d\n", buf, pid, tid);
		if (memcmp(winNameBuf, buf, sizeof(winNameBuf)) == 0)
		{
    
			hWnd = child;
			return hWnd;
		}
		//遍历子窗口们
		if (child)
			hWnd = findChildWindowHandleByName(child, 1, winNameBuf);
		if (hWnd != NULL)
		{
    
			return hWnd;
		}
	} while (child);
	return NULL;
}

int main(void)
{
    
	HWND hWnd = NULL;
	HWND hWnd2 = NULL;
	TCHAR desktopNameBuf[] = {
     L"FolderView" };		// 桌面句柄名

	// 遍历桌面句柄
	hWnd = findWindowHandleByName(desktopNameBuf);
	if (hWnd != NULL)
	{
    
		// 切换显示与隐藏桌面
		if (IsWindowVisible(hWnd))
		{
    
			ShowWindow(hWnd, SW_HIDE);
		}
		else
		{
    
			ShowWindow(hWnd, SW_SHOW);
		}

		// 模拟按键 Win+D
		//Sleep(100);
		//keybd_event(VK_LWIN, 0, 0, 0);
		//keybd_event('D', 0, 0, 0);
		//Sleep(100);
		//keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
		//keybd_event('D', 0, KEYEVENTF_KEYUP, 0);
	}

	// 根据任务栏类名寻找句柄
	hWnd = FindWindowEx(NULL, NULL, L"Shell_TrayWnd", NULL);
	if (hWnd != NULL)
	{
    
		// 寻找是否有第二个屏幕的任务栏
		hWnd2 = FindWindowEx(NULL, NULL, L"Shell_SecondaryTrayWnd", NULL);
		if (hWnd2 != NULL)
		{
    
			// 切换显示与隐藏任务栏
			if (IsWindowVisible(hWnd))
			{
    
				ShowWindow(hWnd, SW_HIDE);
				ShowWindow(hWnd2, SW_HIDE);		// 第二屏幕任务栏需单独隐藏
			}
			else
			{
    
				ShowWindow(hWnd, SW_SHOW);		// 显示第一屏幕任务栏后,第二屏幕任务栏会自动显示
			}
		}
	}

	return 0;
}

遍历部分参考了该文章:https://blog.csdn.net/SUKHOI27SMK/article/details/115314255


不想自己编译的,我提供了打包好的exe文件:
点击下载(百度网盘)


本程序未在其他PC测试,打包的exe不知道好不好使(反正也不一定有人用,懒得测试了),如果无法运行,欢迎留言,我再改进一下。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiao_jun__/article/details/102954349

智能推荐

调Q技术的基本原理-程序员宅基地

文章浏览阅读1.7w次,点赞19次,收藏68次。几分钟复习一下调Q技术~ 基本原理及常见方法详解。复习面试必备!_调q

维护网络服务器安全的七个小技巧-服务器安全资源网-程序员宅基地

文章浏览阅读127次。技巧一:从基本做起***开始对你的网络发起***的时候,他们首先会检查是否存在一般的安全漏洞。因此,当你服务器上的数据都存在一个FAT的磁盘分区的时候,即使安装上世界上所有的安全软件也不会对你有多大帮助的。因此,你需要从基本做起。将服务器上所有包含了敏感数据的磁盘分区都转换成NTFS格式的。同时,可以为Exchange Server安装反病毒软件,将被感染的邮件在到达用户以前..._简述你利用互联网进行资源检索时遇到的问题或是小技巧,列举并上传至活动心得

(太长太全面了)CNN超详细介绍-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏214次。原文链接:https://blog.csdn.net/jiaoyangwm/article/details/80011656 文章目录1、卷积神经网络的概念2、 _cnn

【自动化】全球最大手机ODM电子工厂探秘!解密自动化“智造”秘诀_odm厂-程序员宅基地

文章浏览阅读3.6k次。“嘉兴制造”,全球最大手机ODM工厂探秘  在短短的几年时间,闻泰通讯公司从只有三十几个人的设计团队,“蝶变”成为小米、华为、联想等全球知名手机厂商合作伙伴,企业总产值超80亿元。如今,闻泰通讯不仅是南湖区信息产业的龙头企业,更是成为全球最大的手机ODM企业之一,为全球知名手机厂商提供产品定义、方案设计、生产制造、软件开发等服务。……以下是闻泰通讯宣传视频……▼▼闻泰通讯有别于其他设计公司与_odm厂

常规MOS管与超结MOS管的区别及超结MOS管应用领域介绍_超结mos和coolmos区别-程序员宅基地

文章浏览阅读1.4w次,点赞2次,收藏17次。刚刚有看到一篇文章写的是COOLMOS管与常规MOS管的区别,这是一篇名为《初学者必备知识——功率场效应晶体管MOS管》里面有介绍很多MOS管知识,在这我就不说别的,我们来说说COOLMOS管,因为本公司-深圳市凯泰电子有限公司也有这样的MOS管,但是不叫COOLMOS管,我们的叫超结MOS管(Super Junction MOSFET Series)。下面我先介绍下COOLMOS管与常规MO_超结mos和coolmos区别

centos7安装rabbitmq_erlang-20.2.2-1.el7.centos.arch64.rpm-程序员宅基地

文章浏览阅读837次。一、下载 erlang-20.2.2-1.el7.centos.x86_64.rpm 并安装二、下载rabbit安装:rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc; yum install rabbitmq-server-3.7.2-1.el7.noarch.rpm三、设置开机启动:chkcon_erlang-20.2.2-1.el7.centos.arch64.rpm

随便推点

android程序移植到ios,苹果推出免费Android移植应用Move to iOS-程序员宅基地

文章浏览阅读1.4k次。【天极网IT新闻频道】【Yesky新闻频道消息】 今日凌晨,苹果不仅正式发布了新一代操作系统iOS 9,还发布了一款应用移植工具Move to iOS。据悉,这款应用可以帮助用户将应用由Android迁移到iOS,同时这也是苹果开发的首款Android应用。据了解,Move to iOS是一款免费应用,只支持Android 4.0及更高的Android版本。苹果推出免费安卓应用移植工具Move t..._安卓开发的应用转换为苹果

如何校准Linux服务器时间_linux时间校准-程序员宅基地

文章浏览阅读1.8w次,点赞4次,收藏24次。介绍如何校准Linux服务器时间_linux时间校准

Maven高级-程序员宅基地

文章浏览阅读145次。Maven高级1.基础知识回顾:1.1Maven的核心依赖管理和一键构建(基础知识)1.2Maven仓库类型和仓库关系1.3Maven常见命令:1.4.maven生命周期2.Maven工程导入jar包坐标,必须考虑解决jar包冲突解决jar包冲突的方式一:解决jar包冲突的方式二:解决jar包冲突的方式三【推荐使用】:SSM框架不冲突的依赖包:3.Maven的拆分和聚合思想1.背景:2.工程、模块、项目的关系4.父子工程3种启动方式1.基础知识回顾:1.1Maven的核心依赖管理和一键构建(基础知识)

Unity3d:代码控制shader的自发光的开关_unity shader enablekeyword-程序员宅基地

文章浏览阅读1.2k次。代码控制shader的自发光的开关mat.EnableKeyword("_EMISSION");//开 mat.DisableKeyword("_EMISSION");//关_unity shader enablekeyword

Underscore js是一个JavaScript实用库_unders js-程序员宅基地

文章浏览阅读385次。Underscore.js是一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分Underscore提供了100多个函数,包括常用的: map, filter, invoke — 当然还有更多专业的辅助函数,如:函数绑定, JavaScript模板功能,创建快速索引, 强类型相等测试Underscore是DocumentCloud的一个开源组件。.._unders js

R笔记|R包下载命令及自带数据集_下载r语言中的数据集-程序员宅基地

文章浏览阅读4.8k次,点赞2次,收藏13次。R包【安装包】#指令下载R安装包install.packages("packge-name")#通过以下步骤安装点击右下方页面窗口中的“packages”--“install”进行安装,输入所要安装的R包名,默认从官网上下载#对于版本不合适的使用bioconductor安装if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")BiocManager::install_下载r语言中的数据集

推荐文章

热门文章

相关标签