Получение списка окон, с возможностью указания типа окна

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: VID

WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Получение списка окон, с возможностью указания типа окна

Процедура заполняет список List именами окон, в ОС.

ПАРАМЕТРЫ:

YourApplicationHandle — дескриптор приложения,

вызывающего процедуру (Application.Handle);

ShowOwnWindow — указание на то, что в списке List,

должно быть также имя окна вызвавшего процедуру;

ShowInvisibleWindows — укание на отображение в List имён невидимых окон;

ShowChildWindows — указание на отображение в LIST имён дочерних окон;

ShowNoHeadWindows — отображение списка окон, без заголовков;

ShowMainWindows — отображение родительских окон.

Также для каждой строки списка LIST добавляется объект (Object),

который содержит указатель дескриптор окна.

При обнаружении недостатков, или вопиющей неоптимальности кода — пишите 🙂

Зависимости: sysutils, classes, windows, UBPFD.GetWordListFromText

Автор: VID, vidsnap@mail.ru, ICQ:132234868, Махачкала

Copyright: VID

Дата: 02 мая 2002 г.

***************************************************** }

procedure GetWindowsList(List: TStrings; YourApplicationHandle: HWND;

ShowOwnWindow, ShowInvisibleWindows, ShowChildWindows, ShowNoHeadWindows,

ShowMainWindows: Boolean);

var

Wnd: hWnd;

buff: array[0..127] of Char;

I: integer;

CanShowIt: Boolean;

WindowType, UnAcceptWinTypes: string;

WordList: TStringList;

begin

List.Clear;

Wnd := GetWindow(YourApplicationHandle, gw_HWndFirst);

WordList := TStringList.Create;

while Wnd 0 do

begin

WindowType := »;

if Wnd = YourApplicationHandle then

WindowType := WindowType ‘ own ‘; {собственное окно}

if IsWindowVisible(Wnd) = null then

WindowType := WindowType ‘ invisible ‘; {-Невидимые окна}

if GetWindow(Wnd, gw_child) 0 then

WindowType := WindowType ‘ child ‘; {-Дочерние окна}

if GetWindowText(Wnd, buff, sizeof(buff)) = 0 then

WindowType := WindowType ‘ nohead ‘; {-Окна без заголовков}

if GetWindow(Wnd, gw_Owner) 0 then

WindowType := WindowType ‘ main ‘; {-Главные окна}

UnAcceptWinTypes := »;

if ShowOwnWindow = False then

UnAcceptWinTypes := UnAcceptWinTypes ‘ own ‘;

if ShowInvisibleWindows = False then

UnAcceptWinTypes := UnAcceptWinTypes ‘ invisible ‘;

if ShowChildWindows = False then

UnAcceptWinTypes := UnAcceptWinTypes ‘ child ‘;

if ShowNoHeadWindows = False then

UnAcceptWinTypes := UnAcceptWinTypes ‘ nohead ‘;

if ShowMainWindows = False then

UnAcceptWinTypes := UnAcceptWinTypes ‘ main ‘;

CanShowIt := True;

GetWordListFromText(UnAcceptWinTypes, ‘ ‘, WordList, False, False);

if WordList.Count > 0 then

begin

I := -1;

repeat

I := I 1;

if Pos(WordList.Strings[i], WindowType) > 0 then

CanShowIt := False;

until (I = WordList.Count — 1) or (CanShowIt = False);

end;

if CanShowIt = True then

begin

GetWindowText(Wnd, buff, sizeof(buff));

I := List.Add(StrPas(buff));

List.Objects[I] := Pointer(Wnd);

end;

Wnd := GetWindow(Wnd, gw_hWndNext);

end;

WordList.Free;

end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);

begin

GetWindowsList(memo1.Lines, self.Handle, true, false, false, true, true);

end;

{/codecitation}

Добавить комментарий