Как получить список всех окон

Данная программа находит все окна, созданные в системе Windows и отображает их на форме в виде дерева. Окна отображаются в виде узлов, а дочерние окна отображаются в виде дочерних узлов дерева.

На форму нужно поместить компонент дерева TTreeView (tv1) и кнопку TButton (btnEnum). В обработчике события нажатия на кнопку запишите:


procedure TForm1.btnEnum(Sender: TObject);
begin
  Screen.Cursor:= crHourGlass;
  try
    tv1.Items.Clear;
    EnumWindows(@EnumWindowsProc,0);
  finally
    Screen.Cursor:= crDefault;
  end;
end;
Здесь сначала мы очищаем TTreeView (tv1) и вызываем функцию EnumWindows, передавая ей функцию обратного вызова EnumWindowsProc, которая и будет делать основную работу по поиску окон и заполнение дерева.

Для начала функцию обратного вызова EnumWindowsProc нужно объявить:

{ ... }
var
  Form1: TForm1;

{ ... }

function EnumWindowsProc(Wnd: HWND; ParentNode: TTreeNode): Bool; stdcall;
Функция обратного вызова EnumWindowsProc:

function EnumWindowsProc(Wnd: HWND; ParentNode: TTreeNode): Bool; stdcall;
const
  ClassNameLen = 512;    // т.к. мы не знаем длину имени класса заранее, выделим достаточно места
var
  Text: string;                    // Заголовок окна
  TextLen: integer;           // Длина заголовка
  ClassName: array[0..ClassNameLen-1] of Char;    // буфер для имени класса
  Node: TTreeNode;
  NodeName: string;
begin
  Result:= true;
  // Будем искать только прямых потомков, остальные игнорируем
  if Assigned(ParentNode) and (GetParent(Wnd) <> HWND(ParentNode.Data)) then
    Exit;
  // Получаем длину заголовка окна
  TextLen:= SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
  // Устанавливаем длину строковой переменной
  SetLength(Text, TextLen);
  if TextLen > 0 then
    SendMessage(Wnd, WM_GETTEXT, TextLen+1, LParam(Text));
  // Слишком длинные строки обрезаем
  if TextLen > 100 then
    Text:= Copy(Text, 1, 100) + '  ' ;
  GetClassName(Wnd, ClassName, ClassNameLen);
  ClassName[ClassNameLen-1]:= #0;
  if Text = '' then
    NodeName:= 'Без названия (' + ClassName + ')'
  else
    NodeName:= Text + ' (' + ClassName + ') ';
  Node:= Form1.tv1.Items.AddChild(ParentNode, NodeName);
  Node.Data:= Pointer(Wnd);
  EnumChildWindows(Wnd, @EnumWindowsProc, LParam(Node));
end;

Вот и всё, Удачи!


Добавил(а): Tino Дата: 2016-11-05


  1. Wdus
    Wdus 20 days ago
    <a href="https://european-yachts.com/rent-yacht-montenegro">снять яхту черногория</a> | https://european-yachts.com/
  2. MvlTU
    MvlTU 9 days ago
    Drugs information leaflet. Long-Term Effects. <a href="https://viagra4u.top">cost of generic viagra without insurance</a> in US. All trends of pills. Get here.
    [url=https://amp.en.vaskar.co.in/translate/1?to=ru&amp;from=en&amp;source=Drug%20prescribing%20information.%20Effects%20of%20Drug%20Abuse.%20%3Ca%20href%3D%22https%3A%2F%2Fprednisone4u.top%22%3Ecan%20i%20get%20cheap%20prednisone%20prices%3C%2Fa%3E%20in%20Canada.%20Best%20information%20about%20drugs.%20Get%20here.%20%0D%0A%3Ca%20href%3Dhttps%3A%2F%2Fgoprint.pk%2Fproducts%2F1924%2Fbest-wife-ever%3EBest%20information%20about%20medicine.%3C%2Fa%3E%20%3Ca%20href%3Dhttp%3A%2F%2Fgamelove7.net%2Farchives%2F6813517%23comment-936202%3EBest%20trends%20of%20medicament.%3C%2Fa%3E%20%3Ca%20href%3Dhttps%3A%2F%2Fhappilyeverblog.com%2F5-things-i-do-before-noon%2F%23comment-2750%3ESome%20about%20medicine.%3C%2Fa%3E%20%204f703ca%20&amp;result=%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BE%20%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B8%20%D0%BB%D0%B5%D0%BA%D0%B0%D1%80%D1%81%D1%82%D0%B2.%20%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B8%D1%8F%20%D0%B7%D0%BB%D0%BE%D1%83%D0%BF%D0%BE%D1%82%D1%80%D0%B5%D0%B1%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BD%D0%B0%D1%80%D0%BA%D0%BE%D1%82%D0%B8%D0%BA%D0%B0%D0%BC%D0%B8.%20%3Ca%20href%3D%22https%3A%2F%2Fprednisone4u.top%22%20%3E%20%D0%BC%D0%BE%D0%B3%D1%83%20%D0%BB%D0%B8%20%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%B5%D1%88%D0%B5%D0%B2%D1%8B%D0%B5%20%D1%86%D0%B5%D0%BD%D1%8B%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BD%D0%B8%D0%B7%D0%BE%D0%BD%3C%2Fa%3E%20%D0%B2%20%D0%9A%D0%B0%D0%BD%D0%B0%D0%B4%D0%B5.%20%D0%9B%D1%83%D1%87%D1%88%D0%B0%D1%8F%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BE%20%D0%BD%D0%B0%D1%80%D0%BA%D0%BE%D1%82%D0%B8%D0%BA%D0%B0%D1%85.%20%D0%98%D0%B4%D0%B8%20%D1%81%D1%8E%D0%B4%D0%B0.%20%3Ca%20href%3Dhttps%3A%2F%2Fgoprint.pk%2Fproducts%20%2F%201924%20%2F%20best-wife-ever%3E%D0%BB%D1%83%D1%87%D1%88%D0%B0%D1%8F%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BE%20%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D0%B5.%3C%20%2F%20a%3E%20%3Ca%20href%3Dhttp%3A%2F%2Fgamelove7.net%2Farchives%2F6813517%23comment-936202%3E%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%B5%20%D1%82%D0%B5%D0%BD%D0%B4%D0%B5%D0%BD%D1%86%D0%B8%D0%B8%20%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D1%8B.%3C%2Fa%3E%20%3Ca%20href%3Dhttps%3A%2F%2Fhappilyeverblog.com%20%2F%205-things-i-do-before-noon%20%2F%20%23comment-2750%3E%D0%BD%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%BE%20%D0%BC%D0%B5%D0%B4%D0%B8%D1%86%D0%B8%D0%BD%D0%B5.%3C%20%2F%20a%3E%204f703ca]Some news about medicament.[/url] [url=http://eidsvoll-dk.no/edk-forum/topic/raul-fixed-matches/page/2/#post-346246]Actual information about medication.[/url] [url=http://en.nextool.cn/index.php?g=&amp;m=article&amp;a=index&amp;id=76&amp;cid=3]Best news about drugs.[/url] 97305aa
  3. animenimeru
    animenimeru 4 days ago
    Я думаю, что Вы не правы. Я уверен. Пишите мне в PM, обсудим.

    ---------

    <a href="https://animenime.ru/naruto-muzyka-openingi-endingi-ost">https://animenime.ru/naruto-muzyka-openingi-endingi-ost</a>| https://animenime.ru/
Отменить.