如何阻止EnumWindows无限运行win32

s58*_*804 3 c++ windows winapi

代码一直在运作.不知怎的,我设法让Visual C++ Express没有达到最终return语句的断点,它似乎永远运行.

在下面的示例代码中,EnumWindows无限枚举.如何在枚举所有窗口后使其停止.

#include <Windows.h>

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
    TCHAR buff[255];

    if (IsWindowVisible(hWnd)) {
        GetWindowText(hWnd, (LPWSTR) buff, 254);
        printf("%S\n", buff);
    }
    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[]) {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 8

一旦我删除了宽字符并添加#include <stdio.h>了printf()声明,你的代码就适合我.它在您的系统上产生了什么输出?

适合我的代码是:

#include <windows.h>
#include <stdio.h>

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) {
    char buff[255];

    if (IsWindowVisible(hWnd)) {
        GetWindowText(hWnd, (LPSTR) buff, 254);
        printf("%s\n", buff);
    }
    return TRUE;
}

int main() {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用IsWindowVisible进行检查是有效的,因为一些不可见的窗口可以挂起对GetWindowText的调用. (5认同)