在vc++里面, 我想写一个程序, 这个程序启动后, 监控另外一个进程, 如果另外一个进程退出, 那么, 这个程序也自动结束, 这样的代码逻辑该如何写
时间: 2024-09-18 10:02:57 浏览: 25
在VC++中,实现一个程序监控其他进程并在目标进程退出时自动结束,通常需要使用Windows API函数`WaitForSingleObject`配合`CreateToolhelp32Snapshot`和`FindProcessModule`等技术。以下是一个基本的示例:
```cpp
#include <windows.h>
#include <processthreadsapi.h>
HANDLE hProcessToMonitor; // 想要监控的进程句柄
bool bIsRunning = true; // 标记进程是否还在运行
void MonitorAndExit(HANDLE hProcess)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 创建进程快照
PROCESSENTRY32 peEntry;
peEntry.dwSize = sizeof(PROCESSENTRY32);
while (bIsRunning && Process32First(hSnapShot, &peEntry)) // 当待监控进程未退出时循环
{
if (peEntry.th32ProcessID == GetCurrentProcessId()) // 自身排除
continue;
if (peEntry.th32ProcessID == hProcess) // 找到目标进程
{
if (!WaitForSingleObject(hProcess, INFINITE)) // 等待进程结束
{
CloseHandle(hProcess); // 关闭进程句柄
bIsRunning = false; // 设置标志,表示进程已退出
ExitProcess(0); // 自动退出监控进程
}
}
}
Process32Close(hSnapShot); // 关闭进程快照
}
int main()
{
hProcessToMonitor = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE, FALSE, /*进程ID*/); // 替换为你要监控的进程ID
if (hProcessToMonitor == nullptr)
return -1;
MonitorAndExit(hProcessToMonitor); // 开始监控
return 0;
}
```
在这个示例中,你需要替换`/*进程ID*/`为实际要监控的进程ID,并确保有足够的权限进行操作。当监控的目标进程终止时,`MonitorAndExit`函数将结束自身。
阅读全文