#include<windows.h> //定义出错类型,列举所有出错提示框的信息 const TCHAR *szErrorInfo[] = { _T("致命的应用程序错误"), _T("应用程序错误"), _T("Fatal Application Error"), _T("Application Error"), NULL, }; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { HANDLE hMutex = CreateMutex(NULL,FALSE,_T("SAVIOR")); if (hMutex) { if(ERROR_ALREADY_EXISTS == GetLastError()) { return FALSE; } } TCHAR szPath[256]; while (1) { HWND hWnd = NULL; for (int i = 0;szErrorInfo[i];i++) { if (szErrorInfo[i]) { hWnd = FindWindow(NULL,szErrorInfo[i]); if (hWnd) { //查找到出错提示对话框 DWORD dwProcessID; //获取出错进程ID GetWindowThreadProcessId(hWnd,&dwProcessID); //获取出错进程句柄 HMODULE hProc = (HMODULE)OpenProcess(0,FALSE,dwProcessID); if (hProc) { //获取出错进程对应的EXE GetModuleFileName(hProc,szPath,255); } //关闭出错提示对话框 SendMessage(hWnd,WM_CLOSE, 0, 0); Sleep(3000); //重新启动出错应用程序 PROCESS_INFORMATION pi; if (CreateProcess(szPath,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&pi)) { CloseHandle(pi.hProcess); } } } Sleep(100); } Sleep(1500); } return TRUE; }