以下实际使用的步骤供参考:1. 做一个定时器void CMainFrame::OnTimer(UINT nIDEvent),每秒运行一次。
设置定时器用SetTimer()函数。2. 在定时器里开一个线程pfnThreadProc:
#ifdef _DEBUG
AfxBeginThread(pfnThreadProc, lpPara, THREAD_PRIORITY_NORMAL);
#else
AfxBeginThread(pfnThreadProc, lpPara, THREAD_PRIORITY_BELOW_NORMAL);   // 用THREAD_PRIORITY_BELOW_NORMAL以减轻对其他应用程序的影响,似乎用THREAD_PRIORITY_NORMAL也没事。
#endif
之后,定时器可接着运行其余代码(如果有),或者返回。用线程是为了不影响(阻碍)主程序的(继续)运行。
注:繁重任务都可以开线程来处理,任务处理完毕后可发送自定义消息给主程序。这样不影响主程序的运行。3. 在pfnThreadProc线程里枚举顶层窗口:
::EnumWindows(ListRefWnds, (LPARAM) pParam); 4. 在枚举窗口程序里,通过窗口类或标题来查找指定的顶层窗口。
枚举窗口程序:BOOL CALLBACK ListRefWnds(HWND hWnd, LPARAM lParam)TCHAR szConfig[1024];
获得窗口类:::GetClassName(hWnd, szConfig, 1024);  
获得窗口标题:::GetWindowText(hWnd, szConfig, 1024);
注:也可以写一个通用函数,根据窗口句柄获得窗口类、标题等,方便调用。5. 找到顶层窗口后,再根据具体需要作进一步处理:
枚举其子窗口:::EnumChildWindows()
关闭顶层窗口:::PostMessage(hWnd, WM_CLOSE, 0, 0)
等等。-----------------------------
以上方法在普通双核CPU上运行,感觉不到对系统和主程序的影响。