![]() |
![]() ![]() ![]() ![]() |
|
Получение списка окон, с возможностью указания типа окнаDelphi , Программа и Интерфейс , Процессы и Сервисы
Автор: VID
{ **** 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; Перевод контента на русский язык: Процедура Delphi, называемая
Процедура пополняет список имен окон и соответствующих handle окон. Она использует несколько функций Windows API, таких как Вот некоторые предложения по улучшению:
Вот пример модификации процедуры для принятия одиночной строки-параметра: В этом примере параметр Процедура GetWindowsList получает список окон в ОС, с возможностью указания типа окна (свое, невидимое, дочернее, без заголовка или родительское). Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Процессы и Сервисы ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||