Мы с Вами в этом шаге каснемся работы с окнами в Windows. У каждого окна есть уникальный идентификатор HWND. Этот идентификатор указывает на окно. Окна в Windows можно представить в виде дерева с корнем в DeskTop. Это легко увидеть запустив SPY (см. "Шаг 47 - Как пользоваться SPY").
Итак, как и у любого дерева, у дерева окон есть корень. Получить указатель на него можно функцией GetDesktopWindow(), которая вернет HWND корня в виде рабочего стола. Ага начало есть. Дальше как у того богатыря на картинке. Налево, направо или куда. От текущего HWND можно получить HWND либо ребенка, вот так GetWindow(hwnd, GW_CHILD), либо соседа вот так GetWindow(hwnd, GW_HWNDNEXT). И так далее. Дерево господа и алгоритм его обхода. Имея HWND можно получить заголовок окна GetWindowText. Ну пора. Вот код получения имен окон первого уровня.
// GetWindow.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "windows.h" #include "iostream.h" void main() { HWND hwnd; char p[100]; hwnd = GetDesktopWindow(); hwnd = GetWindow(hwnd, GW_CHILD); while (hwnd !=0) { hwnd = GetWindow(hwnd, GW_HWNDNEXT); GetWindowText(hwnd,p,100); if (strlen(p)>0) cout << p << endl; } }А вот результат работы у меня
GetWindow // это программа наша !!!! Source File Properties GetWindow - Microsoft Visual C++ - [GetWindow.cpp] // Это я делаю программу :-)))) Step1.htm - -ыюъэюЄ // Это редактируется страница которую вы читаете C:\WINDOWS\-рсюўшщ ёЄюы\Step1\Step1.htm - Microsoft Internet Explorer // Смотрю на то что пишу Step1 // каталог с нашим шагом OLEChannelWnd OLEChannelWnd OLEChannelWnd DDE Server Window OleMainThreadWndName -юъЁрЄ 97 OLEChannelWnd -ряюьшэрэшх +эфшърЄюЁ срЄрЁхщ WIN95 RPC Wmsg Window DDE Server Window OleMainThreadWndName RPCSSWindow OleMainThreadWndName MS_WebcheckMonitor Program Manager Press any key to continue