C语言,快速隐藏/显示桌面图标和任务栏 您所在的位置:网站首页 nova4隐藏桌面图标 C语言,快速隐藏/显示桌面图标和任务栏

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

2023-09-04 04:14| 来源: 网络整理| 查看: 265

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

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

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

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

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

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有