Держи  Unicode версия.
| Код | // Вывод строки на экран void __log(TCHAR *_str, HWND _hWnd){ int i = SendMessage(g_StatusList, LB_ADDSTRING, 0, LPARAM(_str)); if (i != LB_ERR) SendMessage(g_StatusList, LB_SETITEMDATA, i, LPARAM(_hWnd)); }
TCHAR WindowName[MAX_PATH], ClassName[MAX_PATH], FullName[MAX_PATH*2+1];
// ф-ия обратного вызова. // hWnd - найденное окно // _lParam - используется для передачи уровня иерархии bool CALLBACK EnumWindowsProc(HWND hWnd, LPARAM _lParam) { ZeroMemory(FullName, sizeof(FullName)); ZeroMemory(WindowName, sizeof(WindowName)); ZeroMemory(FullName, sizeof(FullName));
// Получаем класс и имя окна GetWindowText(hWnd, WindowName, sizeof(WindowName)); GetClassName(hWnd, ClassName, sizeof(ClassName));
// форматируем текст для вывода // в зависимости от уровня иерархии сдвигаем надпись вправо for (int i=0; i<_lParam; i++) wcscat_s(FullName, ARRAYSIZE(FullName), L" "); // если это не 0 уровень, добавим > if (_lParam) wcscat_s(FullName, ARRAYSIZE(FullName), L"> ");
// добавляем имя класса wcscat_s(FullName, ARRAYSIZE(FullName), ClassName); // если окно имеет имя, выводим его чере точку. if (wcslen(WindowName) > 0){ wcscat_s(FullName, ARRAYSIZE(FullName), L"."); wcscat_s(FullName, ARRAYSIZE(FullName), WindowName); }
// выводим на экран полученную строку - Класс.ИмяОкна __log(FullName, hWnd);
// начинаем поиск дочерних окно для текущего. увеличиваем уровень иерархии на 1 EnumChildWindows(hWnd, (WNDENUMPROC)EnumWindowsProc, _lParam+1);
return true; }
void _EnumWindows(){ // Родительское окно - начинаем поиск с него HWND TopWnd = FindWindow(NULL, L"new 1 - Notepad++"); EnumChildWindows(TopWnd, (WNDENUMPROC)EnumWindowsProc, 0);
return; }
|
|