EnumWindowsProc
никогда не должно работать бесконечно.
Он должен работать до:
- Ваш обратный вызов возвращает ЛОЖЬ
- Больше нет окон верхнего уровня для перечисления
Так что я подозреваю, что он работает для вас бесконечно из-за повреждения памяти или нарушения доступа к памяти.
Ваш printf должен использовать% s, а не% S.
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
TCHAR buff[255];
if (IsWindowVisible(hWnd)) {
GetWindowText(hWnd, (LPWSTR) buff, 254);
printf("%s\n", buff);//<--- %s means use TCHAR* which is WCHAR* in your case
}
return TRUE;
}
Также вам не нужно использовать ваш бафф как LPWSTR. Если ваш бафф каким-то образом является буфером CHAR, то вам нужно скомпилировать с набором символов Unicode.