![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прошу помощи мастера [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