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

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

Delphi , Программа и Интерфейс , Процессы и Сервисы



Автор: Xavier Pacheco

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ComCtrls;

type

  { Define a record/class to hold the window name and class name for
    each window. Instances of this class will get added to ListBox1 }
  TWindowInfo = class
    WindowName, // The window name
    WindowClass: string; // The window's class name
  end;

  TMainForm = class(TForm)
    lbWinInfo: TListBox;
    btnGetWinInfo: TButton;
    hdWinInfo: THeaderControl;
    procedure btnGetWinInfoClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure lbWinInfoDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure hdWinInfoSectionResize(HeaderControl: THeaderControl;
      Section: THeaderSection);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

function EnumWindowsProc(Hw: HWnd; AMainForm: TMainForm): Boolean; stdcall;
{ This procedure is called by the User32.DLL library as it enumerates
  through windows active in the system. }
var
  WinName, CName: array[0..144] of char;
  WindowInfo: TWindowInfo;
begin
  { Return true by default which indicates not to stop enumerating
    through the windows }
  Result := True;
  GetWindowText(Hw, WinName, 144); // Obtain the current window text
  GetClassName(Hw, CName, 144); // Obtain the class name of the window
  { Create a TWindowInfo instance and set its fields with the values of
    the window name and window class name. Then add this object to
    ListBox1's Objects array. These values will be displayed later by
    the listbox }
  WindowInfo := TWindowInfo.Create;
  with WindowInfo do
  begin
    SetLength(WindowName, strlen(WinName));
    SetLength(WindowClass, StrLen(CName));
    WindowName := StrPas(WinName);
    WindowClass := StrPas(CName);
  end;
  MainForm.lbWinInfo.Items.AddObject('', WindowInfo); // Add to Objects array
end;

procedure TMainForm.btnGetWinInfoClick(Sender: TObject);
begin
  { Enumerate through all top-level windows being displayed. Pass in the
    call back function EnumWindowsProc which will be called for each
    window }
  EnumWindows(@EnumWindowsProc, 0);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
var
  i: integer;
begin
  { Free all instances of TWindowInfo }
  for i := 0 to lbWinInfo.Items.Count - 1 do
    TWindowInfo(lbWinInfo.Items.Objects[i]).Free
end;

procedure TMainForm.lbWinInfoDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  { First, clear the rectangle to which drawing will be performed }
  lbWinInfo.Canvas.FillRect(Rect);
  { Now draw the strings of the TWindowInfo record stored at the
    Index'th position of the listbox. The sections of HeaderControl1
    will give positions to which to draw each string }
  with TWindowInfo(lbWinInfo.Items.Objects[Index]) do
  begin
    DrawText(lbWinInfo.Canvas.Handle, PChar(WindowName),
      Length(WindowName), Rect, dt_Left or dt_VCenter);
    { Shift the drawing rectangle over by using the size
      HeaderControl1's sections to determine where to draw the next
      string }
    Rect.Left := Rect.Left + hdWinInfo.Sections[0].Width;
    DrawText(lbWinInfo.Canvas.Handle, PChar(WindowClass),
      Length(WindowClass), Rect, dt_Left or dt_VCenter);
  end;
end;

procedure TMainForm.hdWinInfoSectionResize(HeaderControl:
  THeaderControl; Section: THeaderSection);
begin
  lbWinInfo.Invalidate; // Force ListBox1 to redraw itself.
end;

end.

Программа на Delphi, которая перечисляет все верхние окна, отображаемые в данный момент, и отображает их имена и классы в списке.

Главная форма имеет список (lbWinInfo), кнопку (btnGetWinInfo) и заголовок (hdWinInfo). Когда кнопка нажата, она вызывает функцию EnumWindowsProc, которая перечисляет все верхние окна. Для каждого окна создается объект TWindowInfo и добавляется в массив объектов списка.

Событие отображения списка (lbWinInfoDrawItem) отвечает за отображение строк объектов TWindowInfo, хранящихся в списке. Оно использует разделы заголовка для определения, где отобразить каждую строку.

Основные классы и процедуры:

  1. TMainForm: Класс главной формы.
  2. TWindowInfo: Запись/класс, хранящий имя окна и имя класса для каждого окна.
  3. EnumWindowsProc: Функция-обработчик вызываемая Windows API при перечислении окон. Она создает объект TWindowInfo и добавляет его в массив объектов списка.

Основные процедуры:

  1. btnGetWinInfoClick: Перечисляет все верхние окна, когда кнопка нажата.
  2. FormDestroy: Освобождает все экземпляры TWindowInfo, когда форма уничтожается.
  3. lbWinInfoDrawItem: Отображает строки объектов TWindowInfo, хранящихся в списке.
  4. hdWinInfoSectionResize: Форсирует список отобразить себя, когда разделы заголовка изменяются.

Чтобы получить имена заголовков и классов активных процессов, можно использовать следующий код:

var
  hProcess: THandle;
begin
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, pid); // замените pid на идентификатор процесса
  try
    if hProcess <> 0 then
      begin
        GetProcessImageFileName(hProcess, buffer, MAX_PATH);
         // сделайте что-то с буфером (например, отобразите его в списке)
      end;
  finally
    CloseHandle(hProcess);
  end;
end;

Код открывает handle процесса с помощью OpenProcess и затем использует GetProcessImageFileName, чтобы получить имя файла исполняемого файла, соответствующего процессу. Буфер заполнен именем файла, которое можно отобразить в списке или использовать для других целей.

Заметьте: вам нужно заменить pid на реальный идентификатор процесса, который вы хотите получить информацию о.

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


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

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




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


:: Главная :: Процессы и Сервисы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:14:23/0.0035488605499268/0