1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 |
#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; } |
原文:http://www.cnblogs.com/fuyanwen/p/3569372.html