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


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


本程序使用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不知道好不好使(反正也不一定有人用,懒得测试了),如果无法运行,欢迎留言,我再改进一下。

C语言,快速隐藏/显示桌面图标和任务栏相关推荐

  1. win10/win11快速隐藏/显示桌面图标快捷方式

      使用windows系统的时候,桌面有时会变得比较杂乱,想要随时随地很方便的隐藏和显示桌面图标还不是不是一件容易的事情,这里介绍了一个代码,可以很方便地设置快捷方式.   快捷键alt+q隐藏/显示 ...

  2. Windows 10上用AutoHotkey实现快速隐藏/显示桌面图标与切换虚拟桌面

    当你想用多个桌面的时候需要按ctrl+Windows+左右键 觉得很麻烦怎么办? 下载 AutoHotkey 编辑脚本 添加以下内容 ~LControl & WheelUp:: Send {L ...

  3. win7计算机左边列表桌面,如何让Win7显示桌面图标在任务栏左边显示

    Win7较WinXP在整体上风格做了较大优化,其中"显示桌面"图标也是让用户最头疼的,XP中任务栏左边那个"显示桌面"图标呢?细心的用户应该会发现Win7任务栏 ...

  4. centos7点击桌面图标无反应_【问题帖】电脑不显示桌面图标和任务栏,只显示鼠标光标咋办?...

    本帖首发于:360官网.360安全卫士服务号.原作者:Yimoo1314 "电脑不显示桌面图标和任务栏,只显示鼠标光标"问题解决方案-安全资讯-360官网​www.360.cnht ...

  5. 计算机打开后任务栏有但桌面不显示不出来,电脑开机后不显示桌面图标和任务栏,鼠标可以动但是右键没反应,任务管理器能启动,该怎么解决啊?...

    电脑开机后不显示桌面图标和任务栏,鼠标可以动但是右键没反应,任务管理器能启动,该怎么解决啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

  6. 用 C++ 在Windows中清空回收站内文件/隐藏和显示桌面图标 / Windows任务栏 / 任务栏时钟 / 更改桌面壁纸

    如果感觉这篇文章帮助到你的话,欢迎捐助我! bitcoin : bc1qvvkqmwcd7s9fas063htffm76k63rx7f3r9dp4r 清空回收站内文件 #include<wind ...

  7. [AHK] Windows 10上用热键 隐藏/显示桌面图标

    简单点,再简单点,alt+q 隐藏.显示桌面图标! !q:: HideOrShowDesktopIcons() returnHideOrShowDesktopIcons() {ControlGet, ...

  8. 显示桌面图标放到任务栏

    偶然间不小心把[显示桌面]拖出了任务栏,想恢复遇到了一些问题. 1.如果彻底删除了任务栏,可以在[记事本]中输入 [Shell] Command=2 IconFile=explorer.exe,3 [ ...

  9. 计算机启动进入不了桌面图标,电脑开机不显示桌面图标,按哪个键都没有反应是...

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:电脑开机不显示桌面图标,按哪个键都没有反应是怎么回事,请教高手回答:1.首先右击桌面选排列图标/勾选显示桌面图标.2.如果故障依旧, ...

  10. Windows 10如何找回显示桌面图标,一键快速回到桌面

    Windows 10如何找回显示桌面图标,一键快速回到桌面 目录:C:\Windows 就存在:showdesktop,如果根据本文章内容创建图标后发现运行速度慢,可以右键 [固定到任务栏]的「显示桌 ...

最新文章

  1. LeetCode-166- Fraction to Recurring Decimal
  2. Activity生命周期 onCreate onResume onStop onPause
  3. java内存优化详解_jvm堆内存优化详解
  4. 转:C#数据结构和算法学习系列十三----链表
  5. Vue Webpack常见问题(持续更新)
  6. vue组件transition的使用(demo演示) - 教程篇
  7. java visualvm_Java性能调优:利用VisualVM进行性能分析
  8. maven中常遇到的一些错误
  9. python网络爬虫实践_第18,Python网络爬虫实践(1)
  10. 1041 Be Unique (20 分) 水题
  11. JAVA集合框架--详解
  12. 校验身份证号码是否正确
  13. preparedstatement mysql 数据_使用PreparedStatement对象操作数据库
  14. pycharm下载思维导图插件 idea mind map
  15. 腾讯QQ体验版 for Macv8.4.10.73官方
  16. Jenkins系列之——第一章 Jenkins下载及安装
  17. 苹果官方付费升级内存_趁双十一大促销,赶紧升级苹果一体机升级SSD固态和液态内存吧...
  18. 负数在计算机中的储存方式
  19. Python 怎么利用Python绘制二元高次隐函数的函数图像及其极值点——以某双核论文模型方程为例
  20. linux docker升级,Docker 升级到最新版本

热门文章

  1. snapchat为什么_什么是Snapchat?
  2. Java Logging之JUL系列——Logger Hierarchy
  3. 还原魔方的软件(十月三十日更新)
  4. 关于大学生如何进行编码规范的火拼
  5. 2021-5-1电脑配置及组装教程
  6. “十三五”公共安全规划涉及哪些安防概念?
  7. html设置导航随滚动条滚动条,导航栏横向滚动条的两种实现方法
  8. spark+dataframe+小汽车摇号倍率与中签率分析
  9. 扩容内存卡用mydisktest失效,教你怎么用USBoot恢复出真实容量
  10. 如何远程连接POSTGRESQL数据库