Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как получить список заголовков активных окон в операционной системе?

Delphi , ОС и Железо , Windows

Когда мы работаем с программами на языке Object Pascal, например, в среде Delphi, часто возникает необходимость получать информацию о текущих окнах системы. Одной из таких задач является получение списка заголовков активных окон. Заголовок окна – это текст, который отображается в верхней части окна, например, "Блокнот", "Total Commander".

Для решения этой задачи можно использовать функцию перечисления окон EnumWindows, которая позволяет перебрать все окна системы. Однако, стандартное использование этой функции может приводить к получению списка окон, включая всплывающие подсказки, элементы управления и другие элементы пользовательского интерфейса, которые не являются основными окнами, которые можно активировать с помощью сочетания клавиш Alt+Tab или которые имеют иконки в панели задач.

Чтобы получить список только основных окон, необходимо установить определенные критерии для фильтрации. Согласно документации MSDN, основные окна должны быть видимыми, не владеть другими окнами и иметь стиль WS_EX_APPWINDOW. Программа, приведенная ниже, демонстрирует, как можно перечислить такие окна:

program EnumTaskbarWindows;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
  s: string;
  len: Integer;
  IsVisible, IsOwned, IsAppWindow: Boolean;
begin
  Result := True; // Продолжаем перечисление

  IsVisible := IsWindowVisible(hwnd);
  if not IsVisible then
    exit;

  IsOwned := GetWindow(hwnd, GW_OWNER) <> 0;
  if IsOwned then
    exit;

  IsAppWindow := GetWindowLongPtr(hwnd, GWL_EXSTYLE) and WS_EX_APPWINDOW <> 0;
  if not IsAppWindow then
    exit;

  len := GetWindowTextLength(hwnd);
  if len = 0 then
    exit;
  SetLength(s, len);
  GetWindowText(hwnd, PChar(s), len+1);
  Writeln(s);
end;

begin
  EnumWindows(@EnumWindowsProc, 0);
end.

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

При использовании данного кода важно помнить о безопасности и избегать вызова функций, которые могут вызвать доступ к неинициализированной памяти, например, GetWindowText. Всегда следует проверять, что строка не пуста перед попыткой её прочитать.

Создано по материалам из источника по ссылке.

Получение списка заголовков активных окон в операционной системе с использованием функций перечисления окон и фильтрации по определённым критериям.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:18:07/0.0035138130187988/0