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

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 3
Всего онлайн: 3
Зарегистрировано юзеров: 6362
Комментариев на сайте: 645
Новый юзер: Pseulairrerve



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...
Pingitrus прокомментировал "Урок 71 - Работа с сжатыми файлами":
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция



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


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



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




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




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