Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 4
Всего онлайн: 4
Зарегистрировано юзеров: 5977
Комментариев на сайте: 630
Новый юзер: deenama2



Последние комментарии
c
Theihpled прокомментировал "Урок 62 - Методы, наследование классов, операции с классами Delphi, (часть 4/6)":
Здравствуйте, Савельев Александр. У меня к вм небольшой вопрос по языку https://cloud.mail.ru/public/KFS1/dYUrFbaTU . Cпасибо за уроки.
Theihpled прокомментировал "Урок 54 - Потоки в Delphi, (часть 2/3)":
Кстати да. С потоками тоже ничего не вышло.



Мы в соцсетях
c
Delphi
Как получить список всех окон

Данная программа находит все окна, созданные в системе 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;

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

ООО "СкифПолимер"
Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 17 Октября 2016
Просмотров: 2024


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): Tino [Новичок] Дата: 2016-11-05




аватар Добавил(а): Rodimax [Новичок] Дата: 2016-11-06
Всем Привет! Приглашаю всех на один хакерский форум: https://lih.bz/?litanochka=1 На форуме много свежего, а также уникального софта, скрипты, статьи, способы, читы, раздачи халявы и очень много всего интересного! Заходи, регистрируйся, общайся, вливайся в дружный коллектив, и, поверь, ты не пожалеешь!




аватар Добавил(а): Rodimax [Новичок] Дата: 2016-11-06
Всем Привет! Приглашаю всех на один хакерский форум: https://lih.bz/?litanochka=1 На форуме много свежего, а также уникального софта, скрипты, статьи, способы, читы, раздачи халявы и очень много всего интересного! Заходи, регистрируйся, общайся, вливайся в дружный коллектив, и, поверь, ты не пожалеешь!