返回
C++轻松搞定一键关闭桌面,实现清爽极简办公
后端
2023-09-12 01:18:25
告别杂乱桌面,一键开启清爽极简办公:C++编程轻松搞定
简介
杂乱的桌面不仅影响美观,更会分散注意力,降低工作效率。如果你厌倦了混乱的办公环境,渴望实现清爽极简的办公空间,那么 C++ 编程可以帮你一键解决这个难题。
准备工作
首先,你需要一个开发环境,Visual Studio 是一个不错的选择。其次,你需要导入必要的库,包括 Windows API、TlHelp32 和资源文件。这些库将帮助你与 Windows 系统交互,获取程序信息,并在任务栏添加托盘图标。
编程实现
-
定义程序信息结构体 :这个结构体用来存储程序的名称和进程句柄。
-
获取指定程序的进程句柄 :使用 Windows API 函数 GetProcessHandle() 获取指定程序的进程句柄。
-
创建资源文件 :在资源文件中定义托盘图标和菜单。
-
编写消息处理函数 :处理来自任务栏托盘图标的事件,包括左键单击和右键单击。
一键关闭桌面
通过调用 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++ 程序,会在任务栏托盘区域显示一个图标。右键单击该图标,从菜单中选择 "关闭桌面" 选项,即可一键关闭桌面。
常见问题解答
- 一键关闭桌面会丢失文件和程序吗?
不,一键关闭桌面只会关闭桌面进程,不会影响已打开的文件和正在运行的程序。
- 为什么无法关闭桌面?
可能是你的用户权限不足,请确保以管理员身份运行该程序。
- 一键关闭桌面后,如何重新打开桌面?
按键盘上的 "Windows 键 + D" 组合键即可重新打开桌面。
- 有没有其他方法可以关闭桌面?
除了使用 C++ 编程外,还可以使用任务管理器或命令提示符来关闭桌面进程。
- 一键关闭桌面兼容哪些 Windows 系统?
该程序