Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прошу помощи мастера [D7]


gen ©   (2007-07-23 15:51:00) 

как получить заголовки всех открытых в системе окон?


WASM   (2007-07-23 17:41:00) [1]


> gen   (23.07.07 15:51)  


Тут исходник состряпал я для тебя 8.94 кб

http://ifolder.ru/2763082


Сергей М.   (2007-07-23 16:57:00) [2]


> gen   (23.07.07 16:55) [14]


Только там перечисляются отнюдь не все окна в системе)


gen   (2007-07-23 16:55:00) [3]


> http://www.delphirus.com/article47.html

пасиба:)


alex810   (2007-07-23 16:53:00) [4]

Может это?



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

Процедура заполняет список List именами окон, в ОС.
ПАРАМЕТРЫ:
YourApplicationHandle - дескриптор приложения,
вызывающего процедуру (Application.Handle);
ShowOwnWindow - указание на то, что в списке List,
должно быть также имя окна вызвавшего процедуру;
ShowInvisibleWindows - укание на отображение в List имён невидимых окон;
ShowChildWindows - указание на отображение в LIST имён дочерних окон;
ShowNoHeadWindows - отображение списка окон, без заголовков;
ShowMainWindows - отображение родительских окон.

Также для каждой строки списка LIST добавляется объект (Object),
который содержит указатель дескриптор окна.

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

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;


StriderMan   (2007-07-23 16:46:00) [5]


> gen   (23.07.07 16:25) [4]
> неа, Enum вернет longBool, а нужно имя окна (String)

в орешник, однозначно :D


Сергей М.   (2007-07-23 16:46:00) [6]


> gen

http://www.delphirus.com/article47.html


gen   (2007-07-23 16:41:00) [7]

класс не нужен


Инс   (2007-07-23 16:31:00) [8]

Кстати, у окна нет имени. Есть window class и window text.


Инс   (2007-07-23 16:28:00) [9]


> а нужно имя окна (String)


Ни одна API не вернет тебе String :)


Сергей М.   (2007-07-23 16:27:00) [10]


> gen   (23.07.07 16:25) [4]


Ты справку-то читал ?


Инс   (2007-07-23 16:27:00) [11]


> Сергей М. ©   (23.07.07 16:22) [3]

Тут еще нужно спросить, нужны только top-level или вообще все окна. Хотя если под словом "заголовок" понимается не "WindowText" в общем, а что-то наподобие Caption формы, то только top-level.


gen   (2007-07-23 16:27:00) [12]

для всех


gen   (2007-07-23 16:25:00) [13]

неа, Enum вернет longBool, а нужно имя окна (String)


Сергей М.   (2007-07-23 16:22:00) [14]


> открытых в системе окон


Только для тек.десктопа или для всех существующих ?


TUser   (2007-07-23 16:17:00) [15]

EnumWindowsEx


Инс   (2007-07-23 15:54:00) [16]

EnumWindows


Наверх

Титульная страница Поиск, карта сайта Написать письмо