From d5f944280e3792f163e8cedb7eadbef617939e0f Mon Sep 17 00:00:00 2001 From: zsyg <3872006562@qq.com> Date: Wed, 2 Jul 2025 11:11:16 +0800 Subject: [PATCH] Add files via upload --- .../System_Information/include/about_dialog.h | 16 +- others/C/System_Information/include/config.h | 20 +- .../C/System_Information/include/disk_info.h | 30 +- others/C/System_Information/include/logging.h | 30 +- .../System_Information/include/main_window.h | 2 + .../System_Information/include/network_info.h | 46 +-- .../include/performance_info.h | 52 ++-- .../C/System_Information/include/resource.h | 22 +- .../System_Information/include/system_info.h | 42 +-- .../System_Information/include/system_tray.h | 26 +- others/C/System_Information/include/utils.h | 36 +-- .../System_Information/include/window_utils.h | 32 +-- .../C/System_Information/src/about_dialog.c | 18 +- others/C/System_Information/src/disk_info.c | 80 +++--- others/C/System_Information/src/logging.c | 82 +++--- others/C/System_Information/src/main.c | 58 ++-- others/C/System_Information/src/main_window.c | 105 ++++++- .../C/System_Information/src/network_info.c | 170 +++++------ .../System_Information/src/performance_info.c | 272 +++++++++--------- others/C/System_Information/src/system_info.c | 52 ++-- others/C/System_Information/src/system_tray.c | 90 +++--- others/C/System_Information/src/utils.c | 76 ++--- .../C/System_Information/src/window_utils.c | 49 +++- 23 files changed, 766 insertions(+), 640 deletions(-) diff --git a/others/C/System_Information/include/about_dialog.h b/others/C/System_Information/include/about_dialog.h index 4e55a25..a711fec 100644 --- a/others/C/System_Information/include/about_dialog.h +++ b/others/C/System_Information/include/about_dialog.h @@ -1,8 +1,8 @@ -#ifndef ABOUT_DIALOG_H -#define ABOUT_DIALOG_H - -#include - -void show_about_dialog(HWND hParent); - -#endif // ABOUT_DIALOG_H +#ifndef ABOUT_DIALOG_H +#define ABOUT_DIALOG_H + +#include + +void show_about_dialog(HWND hParent); + +#endif // ABOUT_DIALOG_H diff --git a/others/C/System_Information/include/config.h b/others/C/System_Information/include/config.h index e3226bb..e2f8eaa 100644 --- a/others/C/System_Information/include/config.h +++ b/others/C/System_Information/include/config.h @@ -1,10 +1,10 @@ -#ifndef CONFIG_H -#define CONFIG_H - -#define APP_NAME "系统信息查看器" -#define APP_VERSION "1.0" -#define MAX_DISKS 26 -#define MAX_ADAPTERS 10 -#define UPDATE_INTERVAL 5000 // 5秒 - -#endif // CONFIG_H +#ifndef CONFIG_H +#define CONFIG_H + +#define APP_NAME "系统信息查看器" +#define APP_VERSION "1.0" +#define MAX_DISKS 26 +#define MAX_ADAPTERS 10 +#define UPDATE_INTERVAL 5000 // 5秒 + +#endif // CONFIG_H diff --git a/others/C/System_Information/include/disk_info.h b/others/C/System_Information/include/disk_info.h index cdc3f85..beccdf9 100644 --- a/others/C/System_Information/include/disk_info.h +++ b/others/C/System_Information/include/disk_info.h @@ -1,15 +1,15 @@ -#ifndef DISK_INFO_H -#define DISK_INFO_H - -#include - -typedef struct { - char driveLetter; - DWORD64 totalBytes; - DWORD64 freeBytes; - char fileSystem[32]; -} DiskInfo; - -void get_disk_info(DiskInfo* disks, int* count); - -#endif // DISK_INFO_H +#ifndef DISK_INFO_H +#define DISK_INFO_H + +#include + +typedef struct { + char driveLetter; + DWORD64 totalBytes; + DWORD64 freeBytes; + char fileSystem[32]; +} DiskInfo; + +void get_disk_info(DiskInfo* disks, int* count); + +#endif // DISK_INFO_H diff --git a/others/C/System_Information/include/logging.h b/others/C/System_Information/include/logging.h index 7da4181..2df5a1c 100644 --- a/others/C/System_Information/include/logging.h +++ b/others/C/System_Information/include/logging.h @@ -1,15 +1,15 @@ -#ifndef LOGGING_H -#define LOGGING_H - -#include - -typedef enum { - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR -} LogLevel; - -void log_message(LogLevel level, const char* format, ...); - -#endif // LOGGING_H +#ifndef LOGGING_H +#define LOGGING_H + +#include + +typedef enum { + LOG_DEBUG, + LOG_INFO, + LOG_WARNING, + LOG_ERROR +} LogLevel; + +void log_message(LogLevel level, const char* format, ...); + +#endif // LOGGING_H diff --git a/others/C/System_Information/include/main_window.h b/others/C/System_Information/include/main_window.h index b3bb7cd..706a3fc 100644 --- a/others/C/System_Information/include/main_window.h +++ b/others/C/System_Information/include/main_window.h @@ -5,5 +5,7 @@ #include "system_info.h" void update_main_window(HWND hWnd, SystemInfo* sysInfo); +void toggle_fullscreen(HWND hWnd); +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); #endif // MAIN_WINDOW_H diff --git a/others/C/System_Information/include/network_info.h b/others/C/System_Information/include/network_info.h index 9543a1f..ce89b4e 100644 --- a/others/C/System_Information/include/network_info.h +++ b/others/C/System_Information/include/network_info.h @@ -1,23 +1,23 @@ -#ifndef NETWORK_INFO_H -#define NETWORK_INFO_H - -#include -#include - -// 确保GetAdaptersInfo函数声明 -#ifndef _IPHLPAPI_ -#define _IPHLPAPI_ -DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen); -#endif - -typedef struct { - char adapterName[MAX_ADAPTER_NAME_LENGTH + 4]; - char description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; - char ipAddress[16]; - char macAddress[18]; - ULONG speed; // in Mbps -} NetworkAdapterInfo; - -void get_network_adapters(NetworkAdapterInfo* adapters, int* count); - -#endif // NETWORK_INFO_H +#ifndef NETWORK_INFO_H +#define NETWORK_INFO_H + +#include +#include + +// 确保GetAdaptersInfo函数声明 +#ifndef _IPHLPAPI_ +#define _IPHLPAPI_ +DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen); +#endif + +typedef struct { + char adapterName[MAX_ADAPTER_NAME_LENGTH + 4]; + char description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; + char ipAddress[16]; + char macAddress[18]; + ULONG speed; // in Mbps +} NetworkAdapterInfo; + +void get_network_adapters(NetworkAdapterInfo* adapters, int* count); + +#endif // NETWORK_INFO_H diff --git a/others/C/System_Information/include/performance_info.h b/others/C/System_Information/include/performance_info.h index 73b3f11..c09827e 100644 --- a/others/C/System_Information/include/performance_info.h +++ b/others/C/System_Information/include/performance_info.h @@ -1,26 +1,26 @@ -#ifndef PERFORMANCE_INFO_H -#define PERFORMANCE_INFO_H - -#include -#include - -// 确保PDH函数声明 -#ifndef _PDH_H_ -#define _PDH_H_ -PDH_STATUS PdhOpenQueryA(LPCSTR szDataSource, DWORD_PTR dwUserData, PDH_HQUERY* phQuery); -PDH_STATUS PdhAddCounterA(PDH_HQUERY hQuery, LPCSTR szFullCounterPath, DWORD_PTR dwUserData, PDH_HCOUNTER* phCounter); -PDH_STATUS PdhCollectQueryData(PDH_HQUERY hQuery); -PDH_STATUS PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter, DWORD dwFormat, LPDWORD lpdwType, PPDH_FMT_COUNTERVALUE pValue); -#endif - -typedef struct { - DWORD cpuUsage; // CPU使用率百分比 - DWORD memoryUsage; // 内存使用率百分比 - DWORD processesCount; // 进程数量 - DWORD threadsCount; // 线程数量 - DWORD handlesCount; // 句柄数量 -} PerformanceInfo; - -void get_performance_info(PerformanceInfo* perfInfo); - -#endif // PERFORMANCE_INFO_H +#ifndef PERFORMANCE_INFO_H +#define PERFORMANCE_INFO_H + +#include +#include + +// 确保PDH函数声明 +#ifndef _PDH_H_ +#define _PDH_H_ +PDH_STATUS PdhOpenQueryA(LPCSTR szDataSource, DWORD_PTR dwUserData, PDH_HQUERY* phQuery); +PDH_STATUS PdhAddCounterA(PDH_HQUERY hQuery, LPCSTR szFullCounterPath, DWORD_PTR dwUserData, PDH_HCOUNTER* phCounter); +PDH_STATUS PdhCollectQueryData(PDH_HQUERY hQuery); +PDH_STATUS PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter, DWORD dwFormat, LPDWORD lpdwType, PPDH_FMT_COUNTERVALUE pValue); +#endif + +typedef struct { + DWORD cpuUsage; // CPU使用率百分比 + DWORD memoryUsage; // 内存使用率百分比 + DWORD processesCount; // 进程数量 + DWORD threadsCount; // 线程数量 + DWORD handlesCount; // 句柄数量 +} PerformanceInfo; + +void get_performance_info(PerformanceInfo* perfInfo); + +#endif // PERFORMANCE_INFO_H diff --git a/others/C/System_Information/include/resource.h b/others/C/System_Information/include/resource.h index de195e1..c9f3442 100644 --- a/others/C/System_Information/include/resource.h +++ b/others/C/System_Information/include/resource.h @@ -1,11 +1,11 @@ -#ifndef RESOURCE_H -#define RESOURCE_H - -#define IDI_MAIN_ICON 101 -#define IDR_MAIN_MENU 102 - -#define IDM_EXIT 1001 -#define IDM_ABOUT 1002 -#define IDM_SHOW_INFO 1003 - -#endif // RESOURCE_H +#ifndef RESOURCE_H +#define RESOURCE_H + +#define IDI_MAIN_ICON 101 +#define IDR_MAIN_MENU 102 + +#define IDM_EXIT 1001 +#define IDM_ABOUT 1002 +#define IDM_SHOW_INFO 1003 + +#endif // RESOURCE_H diff --git a/others/C/System_Information/include/system_info.h b/others/C/System_Information/include/system_info.h index 41bb8a4..f2dd839 100644 --- a/others/C/System_Information/include/system_info.h +++ b/others/C/System_Information/include/system_info.h @@ -1,21 +1,21 @@ -#ifndef SYSTEM_INFO_H -#define SYSTEM_INFO_H - -#include - -typedef struct { - char cpuName[256]; - DWORD cpuCores; - DWORD cpuThreads; - MEMORYSTATUSEX memoryStatus; - SYSTEM_INFO systemInfo; - OSVERSIONINFOEX osVersion; -} SystemInfo; - -// 初始化系统信息 -void init_system_info(SystemInfo* sysInfo); - -// 创建主窗口 -int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage); - -#endif // SYSTEM_INFO_H +#ifndef SYSTEM_INFO_H +#define SYSTEM_INFO_H + +#include + +typedef struct { + char cpuName[256]; + DWORD cpuCores; + DWORD cpuThreads; + MEMORYSTATUSEX memoryStatus; + SYSTEM_INFO systemInfo; + OSVERSIONINFOEX osVersion; +} SystemInfo; + +// 初始化系统信息 +void init_system_info(SystemInfo* sysInfo); + +// 创建主窗口 +int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage); + +#endif // SYSTEM_INFO_H diff --git a/others/C/System_Information/include/system_tray.h b/others/C/System_Information/include/system_tray.h index d22e78a..2706bce 100644 --- a/others/C/System_Information/include/system_tray.h +++ b/others/C/System_Information/include/system_tray.h @@ -1,13 +1,13 @@ -#ifndef SYSTEM_TRAY_H -#define SYSTEM_TRAY_H - -#include - -#define WM_TRAYICON (WM_USER + 1) -#define ID_TRAYICON 100 - -void create_tray_icon(HWND hWnd, HICON hIcon); -void update_tray_icon(HWND hWnd, HICON hIcon, LPCTSTR tooltip); -void remove_tray_icon(HWND hWnd); - -#endif // SYSTEM_TRAY_H +#ifndef SYSTEM_TRAY_H +#define SYSTEM_TRAY_H + +#include + +#define WM_TRAYICON (WM_USER + 1) +#define ID_TRAYICON 100 + +void create_tray_icon(HWND hWnd, HICON hIcon); +void update_tray_icon(HWND hWnd, HICON hIcon, LPCTSTR tooltip); +void remove_tray_icon(HWND hWnd); + +#endif // SYSTEM_TRAY_H diff --git a/others/C/System_Information/include/utils.h b/others/C/System_Information/include/utils.h index ee45713..fc74ed7 100644 --- a/others/C/System_Information/include/utils.h +++ b/others/C/System_Information/include/utils.h @@ -1,18 +1,18 @@ -#ifndef UTILS_H -#define UTILS_H - -#include - -// 安全释放内存 -#define SAFE_FREE(ptr) if (ptr) { free(ptr); ptr = NULL; } - -// 宽字符转多字节字符串 -char* wchar_to_mb(const wchar_t* wstr); - -// 多字节字符串转宽字符 -wchar_t* mb_to_wchar(const char* str); - -// 获取当前时间字符串 -char* get_current_time_string(); - -#endif // UTILS_H +#ifndef UTILS_H +#define UTILS_H + +#include + +// 安全释放内存 +#define SAFE_FREE(ptr) if (ptr) { free(ptr); ptr = NULL; } + +// 宽字符转多字节字符串 +char* wchar_to_mb(const wchar_t* wstr); + +// 多字节字符串转宽字符 +wchar_t* mb_to_wchar(const char* str); + +// 获取当前时间字符串 +char* get_current_time_string(); + +#endif // UTILS_H diff --git a/others/C/System_Information/include/window_utils.h b/others/C/System_Information/include/window_utils.h index 890ae5f..d501065 100644 --- a/others/C/System_Information/include/window_utils.h +++ b/others/C/System_Information/include/window_utils.h @@ -1,16 +1,16 @@ -#ifndef WINDOW_UTILS_H -#define WINDOW_UTILS_H - -#include -#include "system_info.h" - -// 窗口过程函数 -LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); - -// 创建主窗口 -int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage); - -// 注册窗口类 -BOOL register_window_class(HINSTANCE hInstance); - -#endif // WINDOW_UTILS_H +#ifndef WINDOW_UTILS_H +#define WINDOW_UTILS_H + +#include +#include "system_info.h" + +// 窗口过程函数 +LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + +// 创建主窗口 +int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage); + +// 注册窗口类 +BOOL register_window_class(HINSTANCE hInstance); + +#endif // WINDOW_UTILS_H diff --git a/others/C/System_Information/src/about_dialog.c b/others/C/System_Information/src/about_dialog.c index 486f023..0330070 100644 --- a/others/C/System_Information/src/about_dialog.c +++ b/others/C/System_Information/src/about_dialog.c @@ -1,9 +1,9 @@ -#include "about_dialog.h" -#include - -void show_about_dialog(HWND hParent) { - MessageBox(hParent, - _T("系统信息查看器\n版本 1.0\n\n一个简单的Windows系统信息工具"), - _T("关于"), - MB_OK | MB_ICONINFORMATION); -} +#include "about_dialog.h" +#include + +void show_about_dialog(HWND hParent) { + MessageBox(hParent, + _T("系统信息查看器\n版本 1.0\n\n一个简单的Windows系统信息工具"), + _T("关于"), + MB_OK | MB_ICONINFORMATION); +} diff --git a/others/C/System_Information/src/disk_info.c b/others/C/System_Information/src/disk_info.c index 2dd95be..c0ea360 100644 --- a/others/C/System_Information/src/disk_info.c +++ b/others/C/System_Information/src/disk_info.c @@ -1,40 +1,40 @@ -#include "disk_info.h" -#include - -void get_disk_info(DiskInfo* disks, int* count) { - DWORD drives = GetLogicalDrives(); - *count = 0; - - for (char drive = 'A'; drive <= 'Z'; drive++) { - if (drives & (1 << (drive - 'A'))) { - TCHAR rootPath[4] = {drive, ':', '\\', '\0'}; - TCHAR fileSystem[32]; - DWORD serialNumber, maxComponentLength, fileSystemFlags; - - if (GetVolumeInformation( - rootPath, - NULL, 0, - &serialNumber, - &maxComponentLength, - &fileSystemFlags, - fileSystem, sizeof(fileSystem))) { - - DiskInfo* disk = &disks[(*count)++]; - disk->driveLetter = drive; - - ULARGE_INTEGER freeBytes, totalBytes, totalFreeBytes; - if (GetDiskFreeSpaceEx( - rootPath, - &freeBytes, - &totalBytes, - &totalFreeBytes)) { - disk->totalBytes = totalBytes.QuadPart; - disk->freeBytes = freeBytes.QuadPart; - } - - strncpy(disk->fileSystem, fileSystem, sizeof(disk->fileSystem) - 1); - disk->fileSystem[sizeof(disk->fileSystem) - 1] = '\0'; - } - } - } -} +#include "disk_info.h" +#include + +void get_disk_info(DiskInfo* disks, int* count) { + DWORD drives = GetLogicalDrives(); + *count = 0; + + for (char drive = 'A'; drive <= 'Z'; drive++) { + if (drives & (1 << (drive - 'A'))) { + TCHAR rootPath[4] = {drive, ':', '\\', '\0'}; + TCHAR fileSystem[32]; + DWORD serialNumber, maxComponentLength, fileSystemFlags; + + if (GetVolumeInformation( + rootPath, + NULL, 0, + &serialNumber, + &maxComponentLength, + &fileSystemFlags, + fileSystem, sizeof(fileSystem))) { + + DiskInfo* disk = &disks[(*count)++]; + disk->driveLetter = drive; + + ULARGE_INTEGER freeBytes, totalBytes, totalFreeBytes; + if (GetDiskFreeSpaceEx( + rootPath, + &freeBytes, + &totalBytes, + &totalFreeBytes)) { + disk->totalBytes = totalBytes.QuadPart; + disk->freeBytes = freeBytes.QuadPart; + } + + strncpy(disk->fileSystem, fileSystem, sizeof(disk->fileSystem) - 1); + disk->fileSystem[sizeof(disk->fileSystem) - 1] = '\0'; + } + } + } +} diff --git a/others/C/System_Information/src/logging.c b/others/C/System_Information/src/logging.c index c53e857..8cd65e9 100644 --- a/others/C/System_Information/src/logging.c +++ b/others/C/System_Information/src/logging.c @@ -1,41 +1,41 @@ -#include "logging.h" -#include -#include -#include - -static const char* level_strings[] = { - "DEBUG", - "INFO", - "WARNING", - "ERROR" -}; - -void log_message(LogLevel level, const char* format, ...) { - va_list args; - va_start(args, format); - - // 获取当前时间 - time_t now; - time(&now); - struct tm* timeinfo = localtime(&now); - char time_str[20]; - strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", timeinfo); - - // 格式化日志消息 - char message[1024]; - vsnprintf(message, sizeof(message), format, args); - - // 输出到调试控制台 - char output[2048]; - snprintf(output, sizeof(output), "[%s] [%s] %s\n", time_str, level_strings[level], message); - OutputDebugStringA(output); - - // 输出到文件 - FILE* log_file = fopen("system_info.log", "a"); - if (log_file) { - fprintf(log_file, "%s", output); - fclose(log_file); - } - - va_end(args); -} +#include "logging.h" +#include +#include +#include + +static const char* level_strings[] = { + "DEBUG", + "INFO", + "WARNING", + "ERROR" +}; + +void log_message(LogLevel level, const char* format, ...) { + va_list args; + va_start(args, format); + + // 获取当前时间 + time_t now; + time(&now); + struct tm* timeinfo = localtime(&now); + char time_str[20]; + strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", timeinfo); + + // 格式化日志消息 + char message[1024]; + vsnprintf(message, sizeof(message), format, args); + + // 输出到调试控制台 + char output[2048]; + snprintf(output, sizeof(output), "[%s] [%s] %s\n", time_str, level_strings[level], message); + OutputDebugStringA(output); + + // 输出到文件 + FILE* log_file = fopen("system_info.log", "a"); + if (log_file) { + fprintf(log_file, "%s", output); + fclose(log_file); + } + + va_end(args); +} diff --git a/others/C/System_Information/src/main.c b/others/C/System_Information/src/main.c index b0ba813..626acda 100644 --- a/others/C/System_Information/src/main.c +++ b/others/C/System_Information/src/main.c @@ -1,29 +1,29 @@ -#include -#include -#include -#include "system_info.h" -#include "window_utils.h" -#include "logging.h" - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - UNREFERENCED_PARAMETER(nCmdShow); - - // 设置控制台编码为UTF-8 - SetConsoleOutputCP(65001); - setlocale(LC_ALL, "chs"); - - // 初始化日志系统 - log_message(LOG_INFO, "应用程序启动"); - - // 初始化系统信息收集 - SystemInfo sysInfo; - init_system_info(&sysInfo); - - // 创建并显示主窗口,传递UTF-8编码标识 - int result = create_main_window(hInstance, &sysInfo, 65001); - - log_message(LOG_INFO, "应用程序退出"); - return result; -} +#include +#include +#include +#include "system_info.h" +#include "window_utils.h" +#include "logging.h" + +int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + UNREFERENCED_PARAMETER(nCmdShow); + + // 设置控制台编码为UTF-8 + SetConsoleOutputCP(65001); + setlocale(LC_ALL, "chs"); + + // 初始化日志系统 + log_message(LOG_INFO, "应用程序启动"); + + // 初始化系统信息收集 + SystemInfo sysInfo; + init_system_info(&sysInfo); + + // 创建并显示主窗口,传递UTF-8编码标识 + int result = create_main_window(hInstance, &sysInfo, 65001); + + log_message(LOG_INFO, "应用程序退出"); + return result; +} diff --git a/others/C/System_Information/src/main_window.c b/others/C/System_Information/src/main_window.c index bf17805..3654156 100644 --- a/others/C/System_Information/src/main_window.c +++ b/others/C/System_Information/src/main_window.c @@ -1,31 +1,101 @@ #include "main_window.h" +#include "disk_info.h" #include #include #include #include #define IDC_INFO_TEXT 1002 +#define IDM_FULLSCREEN 1003 + +// 全屏状态标志 +static BOOL g_isFullScreen = FALSE; +// 保存原始窗口位置和大小 +static RECT g_windowRect; + +void toggle_fullscreen(HWND hWnd) { + g_isFullScreen = !g_isFullScreen; + + if (g_isFullScreen) { + // 保存当前窗口位置和大小 + GetWindowRect(hWnd, &g_windowRect); + + // 设置全屏样式 + SetWindowLong(hWnd, GWL_STYLE, + WS_OVERLAPPEDWINDOW & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU)); + + // 设置全屏尺寸 + MONITORINFO mi = {0}; + mi.cbSize = sizeof(mi); + GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &mi); + SetWindowPos(hWnd, HWND_TOP, + mi.rcMonitor.left, + mi.rcMonitor.top, + mi.rcMonitor.right - mi.rcMonitor.left, + mi.rcMonitor.bottom - mi.rcMonitor.top, + SWP_FRAMECHANGED); + } else { + // 恢复窗口样式 + SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW); + + // 恢复原始大小和位置 + SetWindowPos(hWnd, NULL, + g_windowRect.left, + g_windowRect.top, + g_windowRect.right - g_windowRect.left, + g_windowRect.bottom - g_windowRect.top, + SWP_FRAMECHANGED); + } +} void update_main_window(HWND hWnd, SystemInfo* sysInfo) { + // 根据全屏状态计算窗口尺寸 + int windowWidth, windowHeight; + if (g_isFullScreen) { + MONITORINFO mi = {0}; + mi.cbSize = sizeof(mi); + GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &mi); + windowWidth = mi.rcMonitor.right - mi.rcMonitor.left; + windowHeight = mi.rcMonitor.bottom - mi.rcMonitor.top; + } else { + // 普通模式下使用70%屏幕尺寸 + windowWidth = (int)(GetSystemMetrics(SM_CXSCREEN) * 0.7); + windowHeight = (int)(GetSystemMetrics(SM_CYSCREEN) * 0.7); + } + HWND hInfoText = GetDlgItem(hWnd, IDC_INFO_TEXT); - if (!hInfoText) { + if (hInfoText) { + // 更新现有控件大小和位置 + SetWindowPos(hInfoText, NULL, + 30, 50, windowWidth - 60, windowHeight - 80, + SWP_NOZORDER); + } else { // 创建信息显示控件 hInfoText = CreateWindow( - _T("EDIT"), + _T("EDIT"), _T(""), - WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_READONLY, - 20, 50, 800, 550, + WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_READONLY | WS_BORDER, + 30, 50, windowWidth - 60, windowHeight - 80, hWnd, (HMENU)IDC_INFO_TEXT, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); - SendMessage(hInfoText, WM_SETFONT, - (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE); + // 计算动态字体大小 + int fontSize = max(16, windowHeight / 30); + + // 创建支持中文的字体 + HFONT hFont = CreateFont( + fontSize, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, + DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, + _T("Microsoft YaHei")); + + SendMessage(hInfoText, WM_SETFONT, (WPARAM)hFont, TRUE); } // 使用宽字符处理所有文本 - wchar_t infoText[2048]; + wchar_t infoText[4096]; // 增大缓冲区以适应磁盘信息 wchar_t cpuNameW[256]; MultiByteToWideChar(CP_UTF8, 0, sysInfo->cpuName, -1, cpuNameW, 256); @@ -51,5 +121,26 @@ void update_main_window(HWND hWnd, SystemInfo* sysInfo) { sysInfo->osVersion.dwMinorVersion, sysInfo->osVersion.dwBuildNumber); + // 添加磁盘信息 + DiskInfo disks[26]; + int diskCount; + get_disk_info(disks, &diskCount); + + wchar_t diskInfoText[2048]; + swprintf(diskInfoText, 2048, + L"\r\n[磁盘信息]\r\n" + L"磁盘数量: %d\r\n", diskCount); + wcscat(infoText, diskInfoText); + + for (int i = 0; i < diskCount; i++) { + swprintf(diskInfoText, 2048, + L"%c: 文件系统: %ls, 总容量: %.2f GB, 剩余容量: %.2f GB\r\n", + disks[i].driveLetter, + disks[i].fileSystem[0] ? L"NTFS" : L"", + (float)disks[i].totalBytes / (1024 * 1024 * 1024), + (float)disks[i].freeBytes / (1024 * 1024 * 1024)); + wcscat(infoText, diskInfoText); + } + SetWindowTextW(hInfoText, infoText); } diff --git a/others/C/System_Information/src/network_info.c b/others/C/System_Information/src/network_info.c index a704750..c30a954 100644 --- a/others/C/System_Information/src/network_info.c +++ b/others/C/System_Information/src/network_info.c @@ -1,85 +1,85 @@ -#include "network_info.h" -#include "config.h" -#include - -// 定义函数指针类型 -typedef DWORD (WINAPI *GetAdaptersInfoFunc)(_Out_ PIP_ADAPTER_INFO, _Inout_ PULONG); - -// 安全的函数指针转换函数 -static FARPROC safe_get_proc_address(HMODULE module, const char* name) { - FARPROC proc = GetProcAddress(module, name); - if (!proc) { - return NULL; - } - return proc; -} - -// 辅助宏用于安全的函数指针转换 -#define GET_PROC_ADDRESS(module, name, type) \ - ((type)(void*)safe_get_proc_address(module, name)) - -void get_network_adapters(NetworkAdapterInfo* adapters, int* count) { - HMODULE hModule = LoadLibrary("iphlpapi.dll"); - if (!hModule) return; - - // 使用类型安全的函数指针转换 - GetAdaptersInfoFunc pGetAdaptersInfo = GET_PROC_ADDRESS(hModule, "GetAdaptersInfo", GetAdaptersInfoFunc); - if (!pGetAdaptersInfo) { - FreeLibrary(hModule); - return; - } - - PIP_ADAPTER_INFO pAdapterInfo = NULL; - PIP_ADAPTER_INFO pAdapter = NULL; - DWORD dwRetVal = 0; - ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); - - *count = 0; - - pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); - if (pAdapterInfo == NULL) { - FreeLibrary(hModule); - return; - } - - // 第一次调用获取缓冲区大小 - if (pGetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { - free(pAdapterInfo); - pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen); - if (pAdapterInfo == NULL) { - FreeLibrary(hModule); - return; - } - } - - if ((dwRetVal = pGetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { - pAdapter = pAdapterInfo; - while (pAdapter && *count < MAX_ADAPTERS) { - NetworkAdapterInfo* adapter = &adapters[(*count)++]; - - // 复制适配器名称和描述 - strncpy(adapter->adapterName, pAdapter->AdapterName, MAX_ADAPTER_NAME_LENGTH); - strncpy(adapter->description, pAdapter->Description, MAX_ADAPTER_DESCRIPTION_LENGTH); - - // 格式化IP地址 - if (pAdapter->IpAddressList.IpAddress.String[0] != '\0') { - strncpy(adapter->ipAddress, pAdapter->IpAddressList.IpAddress.String, 15); - adapter->ipAddress[15] = '\0'; - } else { - strcpy(adapter->ipAddress, "N/A"); - } - - // 格式化MAC地址 - sprintf(adapter->macAddress, "%02X:%02X:%02X:%02X:%02X:%02X", - pAdapter->Address[0], pAdapter->Address[1], - pAdapter->Address[2], pAdapter->Address[3], - pAdapter->Address[4], pAdapter->Address[5]); - - adapter->speed = pAdapter->DhcpEnabled ? 100 : 10; // 简化处理,实际项目中应使用更精确的方法 - - pAdapter = pAdapter->Next; - } - } - - free(pAdapterInfo); -} +#include "network_info.h" +#include "config.h" +#include + +// 定义函数指针类型 +typedef DWORD (WINAPI *GetAdaptersInfoFunc)(_Out_ PIP_ADAPTER_INFO, _Inout_ PULONG); + +// 安全的函数指针转换函数 +static FARPROC safe_get_proc_address(HMODULE module, const char* name) { + FARPROC proc = GetProcAddress(module, name); + if (!proc) { + return NULL; + } + return proc; +} + +// 辅助宏用于安全的函数指针转换 +#define GET_PROC_ADDRESS(module, name, type) \ + ((type)(void*)safe_get_proc_address(module, name)) + +void get_network_adapters(NetworkAdapterInfo* adapters, int* count) { + HMODULE hModule = LoadLibrary("iphlpapi.dll"); + if (!hModule) return; + + // 使用类型安全的函数指针转换 + GetAdaptersInfoFunc pGetAdaptersInfo = GET_PROC_ADDRESS(hModule, "GetAdaptersInfo", GetAdaptersInfoFunc); + if (!pGetAdaptersInfo) { + FreeLibrary(hModule); + return; + } + + PIP_ADAPTER_INFO pAdapterInfo = NULL; + PIP_ADAPTER_INFO pAdapter = NULL; + DWORD dwRetVal = 0; + ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); + + *count = 0; + + pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); + if (pAdapterInfo == NULL) { + FreeLibrary(hModule); + return; + } + + // 第一次调用获取缓冲区大小 + if (pGetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { + free(pAdapterInfo); + pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen); + if (pAdapterInfo == NULL) { + FreeLibrary(hModule); + return; + } + } + + if ((dwRetVal = pGetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) { + pAdapter = pAdapterInfo; + while (pAdapter && *count < MAX_ADAPTERS) { + NetworkAdapterInfo* adapter = &adapters[(*count)++]; + + // 复制适配器名称和描述 + strncpy(adapter->adapterName, pAdapter->AdapterName, MAX_ADAPTER_NAME_LENGTH); + strncpy(adapter->description, pAdapter->Description, MAX_ADAPTER_DESCRIPTION_LENGTH); + + // 格式化IP地址 + if (pAdapter->IpAddressList.IpAddress.String[0] != '\0') { + strncpy(adapter->ipAddress, pAdapter->IpAddressList.IpAddress.String, 15); + adapter->ipAddress[15] = '\0'; + } else { + strcpy(adapter->ipAddress, "N/A"); + } + + // 格式化MAC地址 + sprintf(adapter->macAddress, "%02X:%02X:%02X:%02X:%02X:%02X", + pAdapter->Address[0], pAdapter->Address[1], + pAdapter->Address[2], pAdapter->Address[3], + pAdapter->Address[4], pAdapter->Address[5]); + + adapter->speed = pAdapter->DhcpEnabled ? 100 : 10; // 简化处理,实际项目中应使用更精确的方法 + + pAdapter = pAdapter->Next; + } + } + + free(pAdapterInfo); +} diff --git a/others/C/System_Information/src/performance_info.c b/others/C/System_Information/src/performance_info.c index 5aff53e..55d286b 100644 --- a/others/C/System_Information/src/performance_info.c +++ b/others/C/System_Information/src/performance_info.c @@ -1,137 +1,137 @@ -#include "performance_info.h" -#include -#include - - - -#include "performance_info.h" -#include -#include - -// 定义函数指针类型 -typedef PDH_STATUS (WINAPI *PdhOpenQueryFunc)(_In_opt_ LPCSTR, _In_ DWORD_PTR, _Out_ PDH_HQUERY*); -typedef PDH_STATUS (WINAPI *PdhAddCounterFunc)(_In_ PDH_HQUERY, _In_ LPCSTR, _In_ DWORD_PTR, _Out_ PDH_HCOUNTER*); -typedef PDH_STATUS (WINAPI *PdhCollectQueryDataFunc)(_In_ PDH_HQUERY); -typedef PDH_STATUS (WINAPI *PdhGetFormattedCounterValueFunc)(_In_ PDH_HCOUNTER, _In_ DWORD, _Out_opt_ LPDWORD, _Out_ PPDH_FMT_COUNTERVALUE); - -// 安全的函数指针转换函数 -static FARPROC safe_get_proc_address(HMODULE module, const char* name) { - FARPROC proc = GetProcAddress(module, name); - if (!proc) { - return NULL; - } - return proc; -} - -// 辅助宏用于安全的函数指针转换 -#define GET_PROC_ADDRESS(module, name, type) \ - ((type)(void*)safe_get_proc_address(module, name)) - -static PDH_HQUERY cpuQuery; -static PDH_HCOUNTER cpuTotal; -static HMODULE hPdhModule = NULL; -static PdhOpenQueryFunc pPdhOpenQuery = NULL; -static PdhAddCounterFunc pPdhAddCounter = NULL; -static PdhCollectQueryDataFunc pPdhCollectQueryData = NULL; -static PdhGetFormattedCounterValueFunc pPdhGetFormattedCounterValue = NULL; - -void init_performance_counters() { - hPdhModule = LoadLibrary("pdh.dll"); - if (!hPdhModule) { - return; - } - - pPdhOpenQuery = GET_PROC_ADDRESS(hPdhModule, "PdhOpenQueryA", PdhOpenQueryFunc); - pPdhAddCounter = GET_PROC_ADDRESS(hPdhModule, "PdhAddCounterA", PdhAddCounterFunc); - pPdhCollectQueryData = GET_PROC_ADDRESS(hPdhModule, "PdhCollectQueryData", PdhCollectQueryDataFunc); - pPdhGetFormattedCounterValue = GET_PROC_ADDRESS(hPdhModule, "PdhGetFormattedCounterValue", PdhGetFormattedCounterValueFunc); - - if (pPdhOpenQuery && pPdhAddCounter && pPdhCollectQueryData) { - // 初始化性能计数器 - if (pPdhOpenQuery(NULL, 0, &cpuQuery) != ERROR_SUCCESS) { - return; - } - - // 添加CPU计数器 - if (pPdhAddCounter(cpuQuery, "\\Processor(_Total)\\% Processor Time", 0, &cpuTotal) != ERROR_SUCCESS) { - return; - } - - // 第一次收集数据,用于初始化 - pPdhCollectQueryData(cpuQuery); - Sleep(1000); // 等待1秒获取基准数据 - pPdhCollectQueryData(cpuQuery); - } -} - -void get_performance_info(PerformanceInfo* perfInfo) { - static BOOL initialized = FALSE; - if (!initialized) { - init_performance_counters(); - initialized = TRUE; - } - - // 获取CPU使用率 - if (pPdhCollectQueryData && pPdhGetFormattedCounterValue) { - // 第一次收集数据作为基准 - pPdhCollectQueryData(cpuQuery); - Sleep(1000); // 等待1秒 - pPdhCollectQueryData(cpuQuery); // 第二次收集数据 - - PDH_FMT_COUNTERVALUE counterVal; - if (pPdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal) == ERROR_SUCCESS) { - perfInfo->cpuUsage = (DWORD)counterVal.doubleValue; - } else { - perfInfo->cpuUsage = 0; - } - } else { - // 如果PDH不可用,使用GetSystemTimes作为备用方案 - FILETIME idleTime, kernelTime, userTime; - if (GetSystemTimes(&idleTime, &kernelTime, &userTime)) { - ULONGLONG idle = ((ULONGLONG)idleTime.dwHighDateTime << 32) | idleTime.dwLowDateTime; - ULONGLONG kernel = ((ULONGLONG)kernelTime.dwHighDateTime << 32) | kernelTime.dwLowDateTime; - ULONGLONG user = ((ULONGLONG)userTime.dwHighDateTime << 32) | userTime.dwLowDateTime; - - static ULONGLONG prevIdle = 0, prevKernel = 0, prevUser = 0; - ULONGLONG idleDiff = idle - prevIdle; - ULONGLONG kernelDiff = kernel - prevKernel; - ULONGLONG userDiff = user - prevUser; - - if (prevIdle != 0 && (kernelDiff + userDiff) > 0) { - perfInfo->cpuUsage = (DWORD)(100.0 - (100.0 * idleDiff) / (kernelDiff + userDiff)); - } else { - perfInfo->cpuUsage = 0; - } - - prevIdle = idle; - prevKernel = kernel; - prevUser = user; - } else { - perfInfo->cpuUsage = 0; - } - } - - // 获取内存使用率 - MEMORYSTATUSEX memInfo; - memInfo.dwLength = sizeof(MEMORYSTATUSEX); - GlobalMemoryStatusEx(&memInfo); - // 使用GlobalMemoryStatusEx获取更精确的内存使用率 - MEMORYSTATUSEX memStatus; - memStatus.dwLength = sizeof(memStatus); - GlobalMemoryStatusEx(&memStatus); - perfInfo->memoryUsage = memStatus.dwMemoryLoad; - - // 获取进程和线程数量 - PERFORMANCE_INFORMATION perfInfoStruct; - GetPerformanceInfo(&perfInfoStruct, sizeof(perfInfoStruct)); - perfInfo->processesCount = perfInfoStruct.ProcessCount; - perfInfo->threadsCount = perfInfoStruct.ThreadCount; - perfInfo->handlesCount = perfInfoStruct.HandleCount; -} - -void cleanup_performance_counters() { - if (hPdhModule) { - FreeLibrary(hPdhModule); - hPdhModule = NULL; - } +#include "performance_info.h" +#include +#include + + + +#include "performance_info.h" +#include +#include + +// 定义函数指针类型 +typedef PDH_STATUS (WINAPI *PdhOpenQueryFunc)(_In_opt_ LPCSTR, _In_ DWORD_PTR, _Out_ PDH_HQUERY*); +typedef PDH_STATUS (WINAPI *PdhAddCounterFunc)(_In_ PDH_HQUERY, _In_ LPCSTR, _In_ DWORD_PTR, _Out_ PDH_HCOUNTER*); +typedef PDH_STATUS (WINAPI *PdhCollectQueryDataFunc)(_In_ PDH_HQUERY); +typedef PDH_STATUS (WINAPI *PdhGetFormattedCounterValueFunc)(_In_ PDH_HCOUNTER, _In_ DWORD, _Out_opt_ LPDWORD, _Out_ PPDH_FMT_COUNTERVALUE); + +// 安全的函数指针转换函数 +static FARPROC safe_get_proc_address(HMODULE module, const char* name) { + FARPROC proc = GetProcAddress(module, name); + if (!proc) { + return NULL; + } + return proc; +} + +// 辅助宏用于安全的函数指针转换 +#define GET_PROC_ADDRESS(module, name, type) \ + ((type)(void*)safe_get_proc_address(module, name)) + +static PDH_HQUERY cpuQuery; +static PDH_HCOUNTER cpuTotal; +static HMODULE hPdhModule = NULL; +static PdhOpenQueryFunc pPdhOpenQuery = NULL; +static PdhAddCounterFunc pPdhAddCounter = NULL; +static PdhCollectQueryDataFunc pPdhCollectQueryData = NULL; +static PdhGetFormattedCounterValueFunc pPdhGetFormattedCounterValue = NULL; + +void init_performance_counters() { + hPdhModule = LoadLibrary("pdh.dll"); + if (!hPdhModule) { + return; + } + + pPdhOpenQuery = GET_PROC_ADDRESS(hPdhModule, "PdhOpenQueryA", PdhOpenQueryFunc); + pPdhAddCounter = GET_PROC_ADDRESS(hPdhModule, "PdhAddCounterA", PdhAddCounterFunc); + pPdhCollectQueryData = GET_PROC_ADDRESS(hPdhModule, "PdhCollectQueryData", PdhCollectQueryDataFunc); + pPdhGetFormattedCounterValue = GET_PROC_ADDRESS(hPdhModule, "PdhGetFormattedCounterValue", PdhGetFormattedCounterValueFunc); + + if (pPdhOpenQuery && pPdhAddCounter && pPdhCollectQueryData) { + // 初始化性能计数器 + if (pPdhOpenQuery(NULL, 0, &cpuQuery) != ERROR_SUCCESS) { + return; + } + + // 添加CPU计数器 + if (pPdhAddCounter(cpuQuery, "\\Processor(_Total)\\% Processor Time", 0, &cpuTotal) != ERROR_SUCCESS) { + return; + } + + // 第一次收集数据,用于初始化 + pPdhCollectQueryData(cpuQuery); + Sleep(1000); // 等待1秒获取基准数据 + pPdhCollectQueryData(cpuQuery); + } +} + +void get_performance_info(PerformanceInfo* perfInfo) { + static BOOL initialized = FALSE; + if (!initialized) { + init_performance_counters(); + initialized = TRUE; + } + + // 获取CPU使用率 + if (pPdhCollectQueryData && pPdhGetFormattedCounterValue) { + // 第一次收集数据作为基准 + pPdhCollectQueryData(cpuQuery); + Sleep(1000); // 等待1秒 + pPdhCollectQueryData(cpuQuery); // 第二次收集数据 + + PDH_FMT_COUNTERVALUE counterVal; + if (pPdhGetFormattedCounterValue(cpuTotal, PDH_FMT_DOUBLE, NULL, &counterVal) == ERROR_SUCCESS) { + perfInfo->cpuUsage = (DWORD)counterVal.doubleValue; + } else { + perfInfo->cpuUsage = 0; + } + } else { + // 如果PDH不可用,使用GetSystemTimes作为备用方案 + FILETIME idleTime, kernelTime, userTime; + if (GetSystemTimes(&idleTime, &kernelTime, &userTime)) { + ULONGLONG idle = ((ULONGLONG)idleTime.dwHighDateTime << 32) | idleTime.dwLowDateTime; + ULONGLONG kernel = ((ULONGLONG)kernelTime.dwHighDateTime << 32) | kernelTime.dwLowDateTime; + ULONGLONG user = ((ULONGLONG)userTime.dwHighDateTime << 32) | userTime.dwLowDateTime; + + static ULONGLONG prevIdle = 0, prevKernel = 0, prevUser = 0; + ULONGLONG idleDiff = idle - prevIdle; + ULONGLONG kernelDiff = kernel - prevKernel; + ULONGLONG userDiff = user - prevUser; + + if (prevIdle != 0 && (kernelDiff + userDiff) > 0) { + perfInfo->cpuUsage = (DWORD)(100.0 - (100.0 * idleDiff) / (kernelDiff + userDiff)); + } else { + perfInfo->cpuUsage = 0; + } + + prevIdle = idle; + prevKernel = kernel; + prevUser = user; + } else { + perfInfo->cpuUsage = 0; + } + } + + // 获取内存使用率 + MEMORYSTATUSEX memInfo; + memInfo.dwLength = sizeof(MEMORYSTATUSEX); + GlobalMemoryStatusEx(&memInfo); + // 使用GlobalMemoryStatusEx获取更精确的内存使用率 + MEMORYSTATUSEX memStatus; + memStatus.dwLength = sizeof(memStatus); + GlobalMemoryStatusEx(&memStatus); + perfInfo->memoryUsage = memStatus.dwMemoryLoad; + + // 获取进程和线程数量 + PERFORMANCE_INFORMATION perfInfoStruct; + GetPerformanceInfo(&perfInfoStruct, sizeof(perfInfoStruct)); + perfInfo->processesCount = perfInfoStruct.ProcessCount; + perfInfo->threadsCount = perfInfoStruct.ThreadCount; + perfInfo->handlesCount = perfInfoStruct.HandleCount; +} + +void cleanup_performance_counters() { + if (hPdhModule) { + FreeLibrary(hPdhModule); + hPdhModule = NULL; + } } \ No newline at end of file diff --git a/others/C/System_Information/src/system_info.c b/others/C/System_Information/src/system_info.c index f991660..4ce516f 100644 --- a/others/C/System_Information/src/system_info.c +++ b/others/C/System_Information/src/system_info.c @@ -1,26 +1,26 @@ -#include "system_info.h" -#include - -void init_system_info(SystemInfo* sysInfo) { - // 获取CPU信息 - int cpuInfo[4] = {0}; - __cpuid(cpuInfo, 0x80000002); - memcpy(sysInfo->cpuName, cpuInfo, sizeof(cpuInfo)); - __cpuid(cpuInfo, 0x80000003); - memcpy(sysInfo->cpuName + 16, cpuInfo, sizeof(cpuInfo)); - __cpuid(cpuInfo, 0x80000004); - memcpy(sysInfo->cpuName + 32, cpuInfo, sizeof(cpuInfo)); - - // 获取系统信息 - GetSystemInfo(&sysInfo->systemInfo); - sysInfo->cpuCores = sysInfo->systemInfo.dwNumberOfProcessors; - sysInfo->cpuThreads = sysInfo->cpuCores; // 简化处理 - - // 获取内存信息 - sysInfo->memoryStatus.dwLength = sizeof(sysInfo->memoryStatus); - GlobalMemoryStatusEx(&sysInfo->memoryStatus); - - // 获取操作系统版本 - sysInfo->osVersion.dwOSVersionInfoSize = sizeof(sysInfo->osVersion); - GetVersionEx((LPOSVERSIONINFO)&sysInfo->osVersion); -} +#include "system_info.h" +#include + +void init_system_info(SystemInfo* sysInfo) { + // 获取CPU信息 + int cpuInfo[4] = {0}; + __cpuid(cpuInfo, 0x80000002); + memcpy(sysInfo->cpuName, cpuInfo, sizeof(cpuInfo)); + __cpuid(cpuInfo, 0x80000003); + memcpy(sysInfo->cpuName + 16, cpuInfo, sizeof(cpuInfo)); + __cpuid(cpuInfo, 0x80000004); + memcpy(sysInfo->cpuName + 32, cpuInfo, sizeof(cpuInfo)); + + // 获取系统信息 + GetSystemInfo(&sysInfo->systemInfo); + sysInfo->cpuCores = sysInfo->systemInfo.dwNumberOfProcessors; + sysInfo->cpuThreads = sysInfo->cpuCores; // 简化处理 + + // 获取内存信息 + sysInfo->memoryStatus.dwLength = sizeof(sysInfo->memoryStatus); + GlobalMemoryStatusEx(&sysInfo->memoryStatus); + + // 获取操作系统版本 + sysInfo->osVersion.dwOSVersionInfoSize = sizeof(sysInfo->osVersion); + GetVersionEx((LPOSVERSIONINFO)&sysInfo->osVersion); +} diff --git a/others/C/System_Information/src/system_tray.c b/others/C/System_Information/src/system_tray.c index 47818fc..1dde075 100644 --- a/others/C/System_Information/src/system_tray.c +++ b/others/C/System_Information/src/system_tray.c @@ -1,45 +1,45 @@ -#include "system_tray.h" -#include -#include - -void create_tray_icon(HWND hWnd, HICON hIcon) { - NOTIFYICONDATA nid = {0}; - nid.cbSize = sizeof(NOTIFYICONDATA); - nid.hWnd = hWnd; - nid.uID = ID_TRAYICON; - nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; - nid.uCallbackMessage = WM_TRAYICON; - nid.hIcon = hIcon; - #if defined(UNICODE) || defined(_UNICODE) - StringCbCopyW(nid.szTip, sizeof(nid.szTip), L"系统信息查看器"); - #else - StringCbCopyA(nid.szTip, sizeof(nid.szTip), "系统信息查看器"); - #endif - - Shell_NotifyIcon(NIM_ADD, &nid); -} - -void update_tray_icon(HWND hWnd, HICON hIcon, LPCTSTR tooltip) { - NOTIFYICONDATA nid = {0}; - nid.cbSize = sizeof(NOTIFYICONDATA); - nid.hWnd = hWnd; - nid.uID = ID_TRAYICON; - nid.uFlags = NIF_ICON | NIF_TIP; - nid.hIcon = hIcon; - #if defined(UNICODE) || defined(_UNICODE) - StringCbCopyW(nid.szTip, sizeof(nid.szTip), tooltip); - #else - StringCbCopyA(nid.szTip, sizeof(nid.szTip), tooltip); - #endif - - Shell_NotifyIcon(NIM_MODIFY, &nid); -} - -void remove_tray_icon(HWND hWnd) { - NOTIFYICONDATA nid = {0}; - nid.cbSize = sizeof(NOTIFYICONDATA); - nid.hWnd = hWnd; - nid.uID = ID_TRAYICON; - - Shell_NotifyIcon(NIM_DELETE, &nid); -} +#include "system_tray.h" +#include +#include + +void create_tray_icon(HWND hWnd, HICON hIcon) { + NOTIFYICONDATA nid = {0}; + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = ID_TRAYICON; + nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; + nid.uCallbackMessage = WM_TRAYICON; + nid.hIcon = hIcon; + #if defined(UNICODE) || defined(_UNICODE) + StringCbCopyW(nid.szTip, sizeof(nid.szTip), L"系统信息查看器"); + #else + StringCbCopyA(nid.szTip, sizeof(nid.szTip), "系统信息查看器"); + #endif + + Shell_NotifyIcon(NIM_ADD, &nid); +} + +void update_tray_icon(HWND hWnd, HICON hIcon, LPCTSTR tooltip) { + NOTIFYICONDATA nid = {0}; + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = ID_TRAYICON; + nid.uFlags = NIF_ICON | NIF_TIP; + nid.hIcon = hIcon; + #if defined(UNICODE) || defined(_UNICODE) + StringCbCopyW(nid.szTip, sizeof(nid.szTip), tooltip); + #else + StringCbCopyA(nid.szTip, sizeof(nid.szTip), tooltip); + #endif + + Shell_NotifyIcon(NIM_MODIFY, &nid); +} + +void remove_tray_icon(HWND hWnd) { + NOTIFYICONDATA nid = {0}; + nid.cbSize = sizeof(NOTIFYICONDATA); + nid.hWnd = hWnd; + nid.uID = ID_TRAYICON; + + Shell_NotifyIcon(NIM_DELETE, &nid); +} diff --git a/others/C/System_Information/src/utils.c b/others/C/System_Information/src/utils.c index d229466..8665d27 100644 --- a/others/C/System_Information/src/utils.c +++ b/others/C/System_Information/src/utils.c @@ -1,38 +1,38 @@ -#include "utils.h" -#include -#include -#include - -char* wchar_to_mb(const wchar_t* wstr) { - if (!wstr) return NULL; - - int size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); - char* mbstr = (char*)malloc(size); - if (mbstr) { - WideCharToMultiByte(CP_UTF8, 0, wstr, -1, mbstr, size, NULL, NULL); - } - return mbstr; -} - -wchar_t* mb_to_wchar(const char* str) { - if (!str) return NULL; - - int size = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); - wchar_t* wstr = (wchar_t*)malloc(size * sizeof(wchar_t)); - if (wstr) { - MultiByteToWideChar(CP_UTF8, 0, str, -1, wstr, size); - } - return wstr; -} - -char* get_current_time_string() { - time_t now; - time(&now); - struct tm* timeinfo = localtime(&now); - - char* time_str = (char*)malloc(20); - if (time_str) { - strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", timeinfo); - } - return time_str; -} +#include "utils.h" +#include +#include +#include + +char* wchar_to_mb(const wchar_t* wstr) { + if (!wstr) return NULL; + + int size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); + char* mbstr = (char*)malloc(size); + if (mbstr) { + WideCharToMultiByte(CP_UTF8, 0, wstr, -1, mbstr, size, NULL, NULL); + } + return mbstr; +} + +wchar_t* mb_to_wchar(const char* str) { + if (!str) return NULL; + + int size = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0); + wchar_t* wstr = (wchar_t*)malloc(size * sizeof(wchar_t)); + if (wstr) { + MultiByteToWideChar(CP_UTF8, 0, str, -1, wstr, size); + } + return wstr; +} + +char* get_current_time_string() { + time_t now; + time(&now); + struct tm* timeinfo = localtime(&now); + + char* time_str = (char*)malloc(20); + if (time_str) { + strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", timeinfo); + } + return time_str; +} diff --git a/others/C/System_Information/src/window_utils.c b/others/C/System_Information/src/window_utils.c index ba22110..17869f8 100644 --- a/others/C/System_Information/src/window_utils.c +++ b/others/C/System_Information/src/window_utils.c @@ -21,7 +21,7 @@ BOOL register_window_class(HINSTANCE hInstance) { wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.hbrBackground = CreateSolidBrush(RGB(240, 240, 240)); wcex.lpszMenuName = NULL; wcex.lpszClassName = _T("SystemInfoWindowClass"); wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION); @@ -47,10 +47,10 @@ int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage) HWND hWnd = CreateWindowW( L"SystemInfoWindowClass", windowTitle, - WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_CLIPCHILDREN, + WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, - 450, 300, - NULL, NULL, hInstance, NULL); + 800, 600, + NULL, NULL, hInstance, sysInfo); if (!hWnd) { return 0; @@ -75,14 +75,28 @@ int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage) LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: { + // 安全初始化系统信息指针 + if (lParam) { + g_sysInfo = (SystemInfo*)((CREATESTRUCT*)lParam)->lpCreateParams; + } + if (!g_sysInfo) { + MessageBoxW(hWnd, L"系统信息初始化失败", L"错误", MB_ICONERROR); + return -1; + } + // 创建显示系统信息的按钮 - CreateWindowW(L"BUTTON", L"刷新信息", - WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 10, 10, 150, 30, - hWnd, (HMENU)IDC_MAIN_BUTTON, + CreateWindowW(L"BUTTON", L"刷新信息", + WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, + 10, 10, 150, 30, + hWnd, (HMENU)IDC_MAIN_BUTTON, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); break; } + case WM_SIZE: { + // 窗口大小变化时更新布局 + update_main_window(hWnd, g_sysInfo); + break; + } case WM_COMMAND: { if (LOWORD(wParam) == IDC_MAIN_BUTTON) { // 刷新系统信息 @@ -91,6 +105,25 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar } break; } + case WM_KEYDOWN: { + // F11键切换全屏 + if (wParam == VK_F11) { + toggle_fullscreen(hWnd); + update_main_window(hWnd, g_sysInfo); + } + break; + } + case WM_NCCALCSIZE: + if (wParam) { + return 0; + } + break; + case WM_ERASEBKGND: { + RECT rc; + GetClientRect(hWnd, &rc); + FillRect((HDC)wParam, &rc, (HBRUSH)GetClassLongPtr(hWnd, GCLP_HBRBACKGROUND)); + return 1; + } case WM_DESTROY: { PostQuitMessage(0); break;