返回

C++轻松搞定一键关闭桌面,实现清爽极简办公

后端

告别杂乱桌面,一键开启清爽极简办公:C++编程轻松搞定

简介

杂乱的桌面不仅影响美观,更会分散注意力,降低工作效率。如果你厌倦了混乱的办公环境,渴望实现清爽极简的办公空间,那么 C++ 编程可以帮你一键解决这个难题。

准备工作

首先,你需要一个开发环境,Visual Studio 是一个不错的选择。其次,你需要导入必要的库,包括 Windows API、TlHelp32 和资源文件。这些库将帮助你与 Windows 系统交互,获取程序信息,并在任务栏添加托盘图标。

编程实现

  1. 定义程序信息结构体 :这个结构体用来存储程序的名称和进程句柄。

  2. 获取指定程序的进程句柄 :使用 Windows API 函数 GetProcessHandle() 获取指定程序的进程句柄。

  3. 创建资源文件 :在资源文件中定义托盘图标和菜单。

  4. 编写消息处理函数 :处理来自任务栏托盘图标的事件,包括左键单击和右键单击。

一键关闭桌面

通过调用 CloseDesktop() 函数即可实现一键关闭桌面。该函数关闭名为 "explorer.exe" 的进程,这个进程负责管理桌面环境。

代码示例

以下是 C++ 代码示例:

#include <Windows.h>
#include <TlHelp32.h>
#include "resource.h"

// 程序信息结构体
typedef struct _PROGRAM_INFO
{
    wchar_t *pro_name;
    HANDLE hProcess;
} PROGRAM_INFO;

// 获取指定程序的进程句柄
HANDLE GetProcessHandle(wchar_t *pro_name)
{
    HANDLE hProcess = NULL;
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnapshot == INVALID_HANDLE_VALUE)
    {
        return NULL;
    }

    BOOL bRet = Process32First(hSnapshot, &pe32);
    while (bRet)
    {
        if (wcscmp(pe32.szExeFile, pro_name) == 0)
        {
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
            break;
        }

        bRet = Process32Next(hSnapshot, &pe32);
    }

    CloseHandle(hSnapshot);

    return hProcess;
}

// 一键关闭桌面
void CloseDesktop()
{
    PROGRAM_INFO pi = { L"explorer.exe", NULL };
    pi.hProcess = GetProcessHandle(pi.pro_name);
    if (pi.hProcess != NULL)
    {
        CloseHandle(pi.hProcess);
    }
}

// 窗口消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
    {
        // 创建托盘图标
        NOTIFYICONDATA nid;
        nid.cbSize = sizeof(NOTIFYICONDATA);
        nid.hWnd = hwnd;
        nid.uID = 1;
        nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
        nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON));
        nid.uCallbackMessage = WM_USER + 1;
        wcscpy_s(nid.szTip, L"一键关闭桌面");
        Shell_NotifyIcon(NIM_ADD, &nid);

        // 创建菜单
        HMENU hMenu = CreatePopupMenu();
        AppendMenu(hMenu, MF_STRING, IDM_CLOSE_DESKTOP, L"关闭桌面");
        AppendMenu(hMenu, MF_STRING, IDM_EXIT, L"退出");

        // 设置托盘图标的菜单
        nid.uFlags |= NIF_MENU;
        nid.hMenu = hMenu;
        Shell_NotifyIcon(NIM_MODIFY, &nid);

        break;
    }
    case WM_USER + 1:
    {
        switch (lParam)
        {
        case WM_LBUTTONUP:
        {
            // 左键单击托盘图标
            POINT pt;
            GetCursorPos(&pt);
            TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);
            break;
        }
        case WM_RBUTTONUP:
        {
            // 右键单击托盘图标
            POINT pt;
            GetCursorPos(&pt);
            TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);
            break;
        }
        }

        break;
    }
    case WM_COMMAND:
    {
        switch (LOWORD(wParam))
        {
        case IDM_CLOSE_DESKTOP:
        {
            // 关闭桌面
            CloseDesktop();
            break;
        }
        case IDM_EXIT:
        {
            // 退出程序
            PostMessage(hwnd, WM_CLOSE, 0, 0);
            break;
        }
        }

        break;
    }
    case WM_CLOSE:
    {
        // 销毁托盘图标
        NOTIFYICONDATA nid;
        nid.cbSize = sizeof(NOTIFYICONDATA);
        nid.hWnd = hwnd;
        nid.uID = 1;
        Shell_NotifyIcon(NIM_DELETE, &nid);

        // 销毁菜单
        DestroyMenu(hMenu);

        // 销毁窗口
        DestroyWindow(hwnd);

        break;
    }
    case WM_DESTROY:
    {
        // 退出应用程序
        PostQuitMessage(0);

        break;
    }
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

// 应用程序入口函数
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 注册窗口类
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = L"一键关闭桌面";
    wc.hIconSm = LoadIcon(wc.hInstance, MAKEINTRESOURCE(IDI_ICON));

    if (!RegisterClassEx(&wc))
    {
        return 0;
    }

    // 创建窗口
    HWND hwnd = CreateWindowEx(WS_EX_TOOLWINDOW, wc.lpszClassName, L"一键关闭桌面", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    if (hwnd == NULL)
    {
        return 0;
    }

    // 显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}

运行程序

编译并运行 C++ 程序,会在任务栏托盘区域显示一个图标。右键单击该图标,从菜单中选择 "关闭桌面" 选项,即可一键关闭桌面。

常见问题解答

  1. 一键关闭桌面会丢失文件和程序吗?

不,一键关闭桌面只会关闭桌面进程,不会影响已打开的文件和正在运行的程序。

  1. 为什么无法关闭桌面?

可能是你的用户权限不足,请确保以管理员身份运行该程序。

  1. 一键关闭桌面后,如何重新打开桌面?

按键盘上的 "Windows 键 + D" 组合键即可重新打开桌面。

  1. 有没有其他方法可以关闭桌面?

除了使用 C++ 编程外,还可以使用任务管理器或命令提示符来关闭桌面进程。

  1. 一键关闭桌面兼容哪些 Windows 系统?

该程序