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


Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 5
Всего онлайн: 5
Зарегистрировано юзеров: 5762
Комментариев на сайте: 623
Новый юзер: Sevnday



Последние комментарии
c
N0E0O7 прокомментировал "Урок 1 - Инициализация OpenGL":
А у меня форма чёрная запускается
dimonsky прокомментировал "Урок 2 - Простые примитивы":
GetDC(handle) вместо canvas.handle, и убрать вызов FormResize. Тогда получается конфетка.



Мы в соцсетях
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
Просмотров: 1599


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



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




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




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