如何用C++实现检测chrome.exe运行时自动关闭自身程序的功能
C++ 检测Chrome运行并自动退出程序实现方案
核心思路
通过Windows原生API枚举系统所有运行进程,匹配进程名是否为chrome.exe,匹配成功后直接终止当前程序自身。
依赖说明
需要引入Windows API头文件,编译时链接psapi.lib库。
完整可运行代码
#include <windows.h> #include <psapi.h> #include <string.h> #include <cstdio> #include <cctype> // 字符串大小写不敏感比较 BOOL IsEqualIgnoreCase(const char* str1, const char* str2) { while (*str1 && *str2) { if (tolower(*str1) != tolower(*str2)) { return FALSE; } str1++; str2++; } return *str1 == *str2; } BOOL IsChromeRunning() { DWORD processes[1024], cbNeeded, processCount; // 枚举所有进程ID if (!EnumProcesses(processes, sizeof(processes), &cbNeeded)) { return FALSE; } processCount = cbNeeded / sizeof(DWORD); for (DWORD i = 0; i < processCount; i++) { if (processes[i] == 0) continue; // 打开进程获取查询权限 HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes[i]); if (hProcess != NULL) { HMODULE hMod; DWORD cbModNeeded; if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbModNeeded)) { char processName[MAX_PATH] = {0}; GetModuleBaseNameA(hProcess, hMod, processName, sizeof(processName)/sizeof(char)); if (IsEqualIgnoreCase(processName, "chrome.exe")) { CloseHandle(hProcess); return TRUE; } } CloseHandle(hProcess); } } return FALSE; } int main() { // 支持程序启动时检测一次,也可以放入定时器循环检测 if (IsChromeRunning()) { printf("检测到Chrome正在运行,程序即将退出\n"); // 退出当前程序,退出码可自定义 ExitProcess(0); } // 你的正常业务逻辑 printf("未检测到Chrome,程序正常运行\n"); system("pause"); return 0; }
编译说明
如果你使用MSVC编译,可直接在代码中添加编译指令自动链接库,无需手动修改编译参数:
#pragma comment(lib, "psapi.lib")
注意事项
- 仅适用于Windows平台,依赖Win32 API实现
- 如需定时检测,可在业务逻辑中添加定时器,每隔指定时长调用一次
IsChromeRunning()判断即可 - 进程名做了大小写不敏感匹配,避免Chrome进程名大小写差异导致漏判
内容的提问来源于stack exchange,提问作者SharpFarter
相关产品推荐
相关产品推荐

