在测试程序运行过程中,经常会出现一些异常窗口:如错误窗口、文件下载窗口、警告窗口、以及一些其它的错误窗口。出现这种窗口应该在记录log 之后, 将其关闭。
部分代码段如下:
// 数据结构定义 typedef struct { HWND hWnd; char cWinBuf[256]; }WINLIST; WINLIST gWinList[256]; int giCountWin,j; typedef struct { char cCloseList[100]; }CLOSELIST; CLOSELIST gCloseList[30]; int giCountClose; …… // EnumWindows函数的回调函数。列举所有的窗口标题 BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam ) { char buffer[256]; GetWindowText(hWnd, buffer, 256); if ( strlen(buffer) ) { if (giCountWin < 256) { gWinList[ giCountWin].hWnd = hWnd; strcpy(gWinList[ giCountWin].cWinBuf,buffer); giCountWin ++; } } return TRUE; } // 关闭错误窗口 BOOL CloseErrorWindow() { short i=0,j=0; if ( giCountClose > 0 )// giCountClose表示要关闭的错误窗口总数 { giCountWin = 0; // giCountWind表示windows列举窗口的总数 EnumWindows( (WNDENUMPROC)EnumWindowsProc,0); for( i = 0; i < giCountClose; i++) { for ( j = 0; j < giCountWin; j++) // 判断是否为错误窗口。 if ( strcmp(gWinList[j].cWinBuf,gCloseList[i].cCloseList) == 0 ) { PostMessage( gWinList[j].hWnd, WM_CLOSE,0,0); PostMessage( gWinList[j].hWnd, WM_QUIT,0,0); } } } return TRUE; }一些说明:
结构CLOSELIST数组 gCloseList[30] 存储了所有错误窗口的名称(最多30个)。这些数据存储在一个文本文件中,每行存储一个错误窗口的名称。程序启动时读入此变量。giCountClose表示所有错误窗口的总数。
例如gCloseList可能的值如下:
giCountClose : 6 gCloseList[0].cCloseList : 错误 gCloseList[1].cCloseList : 警告 gCloseList[2].cCloseList : 安全 gCloseList[3].cCloseList : 程序遇到了一个致命错误CloseErrorWindow()函数可放在计时器事件中,每隔五秒钟左右的时间执行一次。
void CloseMyWindow() { short j=0, sFirst = 0; giCloseIETime = 0; gMAX_CLOSEIE_TIME = RAND( sCloseMin, sCloseMax ); giCountWin = 0; EnumWindows( (WNDENUMPROC)EnumWindowsProc,0); // 列举所有窗口 for ( j = 0; jsFirst = 1; } } }
说明: