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

Создание скриншота активного окна в Delphi: практические решения с использованием Windows API

Delphi , ОС и Железо , Монитор и Экран

Для создания скриншота активного окна в Delphi, необходимо использовать функцию GetForegroundWindow, которая возвращает дескриптор окна, находящегося в фокусе. Ниже приведен пошаговый процесс создания такого скриншота с использованием объектов и функций Windows API.

Шаг 1: Получение дескриптора активного окна

Для начала, необходимо получить дескриптор активного окна:

hWin := GetForegroundWindow;

Шаг 2: Получение размеров активного окна

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

GetWindowRect(hWin, WinRect);
Width := WinRect.Right - WinRect.Left;
Height := WinRect.Bottom - WinRect.Top;

Шаг 3: Создание и заполнение битового изображения

После получения размеров, создаем битмап и заполняем его изображением активного окна:

Bmp := TBitmap.Create;
try
  Bmp.Height := Height;
  Bmp.Width := Width;
  DC := GetWindowDC(hWin);
  BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
finally
  ReleaseDC(hWin, DC);
end;

Шаг 4: Сохранение битового изображения на диск

И, наконец, сохраняем полученное изображение на диск:

FileName := 'Screenshot_' + FormatDateTime('mm-dd-yyyy-hhnnss', Now());
Bmp.SaveToFile(Format('C:\Screenshots\%s.bmp', [FileName]));

Не забудьте освободить ресурсы битового изображения:

Bmp.Free;

Полный код процедуры

procedure TForm1.Button1Click(Sender: TObject);
var
  Win: HWND;
  DC: HDC;
  Bmp: TBitmap;
  WinRect: TRect;
  Width, Height: Integer;
  FileName: string;
begin
  Win := GetForegroundWindow;
  GetWindowRect(Win, WinRect);
  Width := WinRect.Right - WinRect.Left;
  Height := WinRect.Bottom - WinRect.Top;
  Bmp := TBitmap.Create;
  try
    Bmp.Height := Height;
    Bmp.Width := Width;
    DC := GetWindowDC(Win);
    try
      BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
      FileName := 'Screenshot_' + FormatDateTime('mm-dd-yyyy-hhnnss', Now());
      Bmp.SaveToFile(Format('C:\Screenshots\%s.bmp', [FileName]));
    finally
      ReleaseDC(Win, DC);
    end;
  finally
    Bmp.Free;
  end;
end;

Важные моменты

  • Используйте Application.ProcessMessages вместо Sleep(500), чтобы дать системе время на завершение текущих операций перед созданием скриншота.
  • Убедитесь, что окно, для которого создается скриншот, полностью отображается на экране.
  • Проверьте, не утекают ли ресурсы, особенно дескрипторы устройств (GDI handles), при многократном выполнении процедуры.

Следуя этим шагам, вы сможете создать скриншот активного окна в Delphi, используя стандартные функции Windows API.

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

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


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

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




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


:: Главная :: Монитор и Экран ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 23:16:14/0.0037190914154053/0