TA的每日心情 | 慵懒 半小时前 |
|---|
签到天数: 1 天 [LV.1]初来乍到
助理工程师
- 积分
- 7
|
#include <iostream>
#include <cstdlib>
#include <limits>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <vector>
#include <algorithm>
#include <sstream>
#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#else
#include <sys/ioctl.h>
#include <unistd.h>
#endif
#define MAX_PATH_LENGTH 512
// 颜色控制函数
void setColor(int color) {
#ifdef _WIN32
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, color);
#else
// Linux 颜色代码简化处理
std::cout << "\033[" << color << "m";
#endif
}
void resetColor() {
#ifdef _WIN32
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
#else
std::cout << "\033[0m";
#endif
}
void clearScreen() {
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
}
// 鼠标指示功能 - 高亮当前选项
void highlightOption(const std::string& text, bool isSelected = false) {
if (isSelected) {
setColor(10); // 亮绿色
std::cout << "> " << text;
resetColor();
} else {
std::cout << " " << text;
}
}
// 获取控制台宽度用于排版
int getConsoleWidth() {
#ifdef _WIN32
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
return csbi.srWindow.Right - csbi.srWindow.Left + 1;
#else
struct winsize size;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &size);
return size.ws_col;
#endif
}
// 居中显示文本
void printCentered(const std::string& text) {
int width = getConsoleWidth();
int padding = (width - text.length()) / 2;
if (padding > 0) {
std::cout << std::string(padding, ' ');
}
std::cout << text << std::endl;
}
void displayWelcomeMessage(bool firstTime = false) {
clearScreen();
setColor(10); // 亮绿色
int width = getConsoleWidth();
std::string border(width - 2, '=');
std::cout << "\n╔" << border << "╗\n";
printCentered("欢迎使用 Cmd 辅助使用器");
printCentered("版本 2.0 - 增强版");
printCentered("作者:PM 同志");
std::cout << "╚" << border << "╝\n\n";
resetColor();
std::cout << " 这是一个用于系统管理和文件操作的辅助工具\n\n";
std::cout << " 主要功能模块:\n\n";
// 改进的排版 - 使用表格形式
std::cout << " ┌───────────────────┬───────────────────┬───────────────────┐\n";
std::cout << " │ 系统管理 │ 文件管理 │ 高级选项 │\n";
std::cout << " ├───────────────────┼───────────────────┼───────────────────┤\n";
std::cout << " │ • 查看系统信息 │ • 智能文件删除 │ • 注册表编辑 │\n";
std::cout << " │ • 打开控制面板 │ • 系统清理 │ • 系统优化 │\n";
std::cout << " │ • 系统修复 │ • 磁盘扫描 │ • 进程管理 │\n";
std::cout << " │ • 设备管理 │ • 任务管理 │ • 网络配置 │\n";
std::cout << " └───────────────────┴───────────────────┴───────────────────┘\n\n";
std::cout << " 使用说明:使用方向键选择功能,Enter键确认\n";
std::cout << " ESC键返回上级菜单\n\n";
if (firstTime) {
std::cout << "按 Enter 键继续...";
std::cin.get();
}
}
// 改进的文件删除功能
class FileManager {
private:
std::vector<std::string> selectedFiles;
public:
// 选择多个文件进行删除
void selectFilesForDeletion() {
selectedFiles.clear();
std::cout << "\n=== 多文件删除模式 ===\n";
std::cout << "1. 手动输入文件路径\n";
std::cout << "2. 从剪贴板导入路径\n";
std::cout << "3. 查看已选文件\n";
std::cout << "4. 执行删除\n";
std::cout << "0. 返回\n";
while (true) {
int choice = getUserChoice(0, 4);
switch (choice) {
case 1:
addFileManually();
break;
case 2:
importFromClipboard();
break;
case 3:
showSelectedFiles();
break;
case 4:
deleteSelectedFiles();
return;
case 0:
return;
}
}
}
private:
void addFileManually() {
char filePath[MAX_PATH_LENGTH];
std::cout << "请输入文件路径 (输入 'done' 结束): ";
std::cin.ignore();
std::cin.getline(filePath, sizeof(filePath));
if (strcmp(filePath, "done") == 0) return;
if (access(filePath, F_OK) != -1) {
selectedFiles.push_back(filePath);
std::cout << "文件已添加到删除列表: " << filePath << std::endl;
} else {
std::cout << "文件不存在: " << filePath << std::endl;
}
}
void importFromClipboard() {
#ifdef _WIN32
if (OpenClipboard(nullptr)) {
HANDLE hData = GetClipboardData(CF_TEXT);
if (hData != nullptr) {
char* pszText = static_cast<char*>(GlobalLock(hData));
if (pszText != nullptr) {
std::string clipboardText(pszText);
std::istringstream iss(clipboardText);
std::string line;
int count = 0;
while (std::getline(iss, line)) {
if (!line.empty() && access(line.c_str(), F_OK) != -1) {
selectedFiles.push_back(line);
count++;
}
}
std::cout << "从剪贴板导入 " << count << " 个有效文件路径\n";
GlobalUnlock(hData);
}
}
CloseClipboard();
}
#else
std::cout << "剪贴板功能在Linux下需要额外配置\n";
#endif
}
void showSelectedFiles() {
if (selectedFiles.empty()) {
std::cout << "当前没有选择任何文件\n";
return;
}
std::cout << "\n已选择的文件列表:\n";
for (size_t i = 0; i < selectedFiles.size(); ++i) {
std::cout << i + 1 << ". " << selectedFiles[i] << std::endl;
}
std::cout << "总计: " << selectedFiles.size() << " 个文件\n";
}
void deleteSelectedFiles() {
if (selectedFiles.empty()) {
std::cout << "没有文件需要删除\n";
return;
}
showSelectedFiles();
std::cout << "\n确认删除以上 " << selectedFiles.size() << " 个文件? (y/N): ";
char confirm;
std::cin >> confirm;
if (confirm == 'Y' || confirm == 'y') {
int successCount = 0;
for (const auto& file : selectedFiles) {
if (remove(file.c_str()) == 0) {
successCount++;
std::cout << "✓ 已删除: " << file << std::endl;
} else {
std::cout << "✗ 删除失败: " << file << std::endl;
}
}
std::cout << "删除完成: " << successCount << "/" << selectedFiles.size() << " 成功\n";
selectedFiles.clear();
} else {
std::cout << "删除操作已取消\n";
}
}
};
// 改进的用户输入函数,支持鼠标指示
int getUserChoiceWithHighlight(int min, int max, const std::vector<std::string>& options) {
int currentSelection = 0;
#ifdef _WIN32
while (true) {
// 清空当前选项显示区域
for (size_t i = 0; i < options.size(); ++i) {
std::cout << "\033[1A"; // 上移一行
}
// 重新显示带高亮的选项
for (size_t i = 0; i < options.size(); ++i) {
highlightOption(options[i], i == currentSelection);
std::cout << std::endl;
}
int ch = _getch();
if (ch == 224) { // 方向键
ch = _getch();
if (ch == 72) { // 上箭头
currentSelection = (currentSelection - 1 + options.size()) % options.size();
} else if (ch == 80) { // 下箭头
currentSelection = (currentSelection + 1) % options.size();
}
} else if (ch == 13) { // Enter键
return currentSelection + min;
} else if (ch == 27) { // ESC键
return -1;
}
}
#else
// Linux 简化版本
return getUserChoice(min, max);
#endif
}
int getUserChoice(int min, int max) {
int choice;
while (true) {
std::cout << "请输入你的选择(" << min << "-" << max << "):";
std::cin >> choice;
if (std::cin.fail() || choice < min || choice > max) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "无效的选择,请重新输入。\n";
} else {
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return choice;
}
}
}
// 原有的系统管理功能保持不变,但改进显示
void systemManagement() {
FileManager fm;
while (true) {
clearScreen();
std::cout << "┌───────────────────┐\n";
std::cout << "│ 系统管理 │\n";
std::cout << "└───────────────────┘\n\n";
std::vector<std::string> options = {
"1. 查看系统信息",
"2. 打开控制面板",
"3. 系统修复",
"4. 设备管理器",
"0. 返回"
};
for (const auto& option : options) {
std::cout << option << std::endl;
}
int choice = getUserChoice(0, 4);
switch (choice) {
case 1:
system("msinfo32.exe");
std::cout << "系统信息已查看。\n";
break;
case 2:
system("control");
std::cout << "控制面板已打开。\n";
break;
case 3: {
// 系统修复子菜单
while (true) {
clearScreen();
std::cout << "┌───────────────────┐\n";
std::cout << "│ 系统修复 │\n";
std::cout << "└───────────────────┘\n\n";
std::cout << "1. 系统文件检查\n";
std::cout << "2. 磁盘检查\n";
std::cout << "3. 系统清理\n";
std::cout << "4. 创建系统还原点\n";
std::cout << "0. 返回\n";
int repairChoice = getUserChoice(0, 4);
// ... 原有的修复功能代码
if (repairChoice == 0) break;
}
break;
}
case 4:
system("devmgmt.msc");
std::cout << "设备管理器已打开。\n";
break;
case 0:
return;
}
std::cout << "按Enter键继续...";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
void fileManagement() {
FileManager fm;
while (true) {
clearScreen();
std::cout << "┌───────────────────┐\n";
std::cout << "│ 文件管理 │\n";
std::cout << "└───────────────────┘\n\n";
std::cout << "1. 智能文件删除(多选模式)\n";
std::cout << "2. 系统清理\n";
std::cout << "3. 磁盘扫描\n";
std::cout << "4. 任务管理\n";
std::cout << "5. 磁盘空间分析\n";
std::cout << "0. 返回\n";
int choice = getUserChoice(0, 5);
switch (choice) {
case 1:
fm.selectFilesForDeletion();
break;
case 2: {
std::cout << "┌───────────────────┐\n";
std::cout << "│ 系统清理 │\n";
std::cout << "└───────────────────┘\n\n";
std::cout << "1. 垃圾清理\n";
std::cout << "2. 磁盘清理\n";
std::cout << "0. 返回\n";
int cleanChoice = getUserChoice(0, 2);
if (cleanChoice == 1) {
system("cleanmgr.exe /sagerun:1");
std::cout << "垃圾清理已完成。\n";
} else if (cleanChoice == 2) {
system("dfrgui.exe");
std::cout << "磁盘清理已完成。\n";
}
break;
}
case 3:
system("cmd /c dir C:\\ /s");
std::cout << "C盘扫描已完成。\n";
break;
case 4:
system("taskmgr");
std::cout << "任务管理器已打开。\n";
break;
case 5:
system("cmd /c dir C:\\ /s /-c | find \"文件总数\"");
std::cout << "磁盘空间分析完成。\n";
break;
case 0:
return;
}
std::cout << "按Enter键继续...";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
int main() {
displayWelcomeMessage(true);
while (true) {
displayWelcomeMessage();
std::cout << "请选择功能模块:\n";
std::cout << "1. 系统管理\n";
std::cout << "2. 文件管理\n";
std::cout << "3. 高级选项\n";
std::cout << "4. 退出程序\n\n";
int mainChoice = getUserChoice(1, 4);
switch (mainChoice) {
case 1:
systemManagement();
break;
case 2:
fileManagement();
break;
case 3:
// advancedOptions();
break;
case 4:
std::cout << "感谢使用!程序即将退出...\n";
return 0;
}
}
return 0;
} |
|