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

Как получить screen shot экран вместе с указателем мыши?

Delphi , Рабочий стол , Рабочий стол

Как получить screen shot экран вместе с указателем мыши?

Делаем скриншот и дорисовываем указатель мыши

Code:

procedure GetScreenImage(bmp: TBitmap);
var
CI: TCursorInfo;
Icon: TIcon;
II: TIconInfo;
r: TRect;
begin
bmp.Width:= Screen.Width;
bmp.Height:= Screen.Height;
BitBlt(bmp.Canvas.Handle,0,0,Screen.Width,Screen.Height,
GetDC(GetDesktopWindow),0,0,SRCCopy);
//дорисуем курсор
Icon:=TIcon.Create;
r:=Rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
CI.cbSize:=SizeOf(CI);
if (GetCursorInfo(CI)) and (CI.flags=CURSOR_SHOWING) then
begin
Icon.Handle:=CopyIcon(CI.hCursor);
if GetIconInfo(Icon.Handle,II) then
bmp.Canvas.Draw(ci.ptScreenPos.x - Integer(II.xHotspot) - r.Left, ci.ptScreenPos.y - Integer(II.yHotspot) - r.Top, Icon);
end;
end;

Автор P.O.D        

Взято из http://forum.sources.ru

Привет! Я переведу текст на русский язык:

Код, написанный на Delphi, является процедурой, которая захватывает изображение экрана и также рисует курсор мыши на его поверхности. Работает она следующим образом:

  1. Процедура GetScreenImage принимает в качестве параметра объект TBitmap, который будет хранить захваченное изображение экрана.
  2. Она устанавливает ширину и высоту битмапа в соответствии с размером экрана.
  3. Использует функцию BitBlt для копирования содержимого окна рабочего стола (полученного с помощью GetDC) на канвас битмапа.
  4. Для рисования курсора она создает объект TIcon и получает его.handle с помощью CopyIcon. Это возвращает иконку, ассоциированную с текущим курсором.
  5. Затем она использует функцию GetIconInfo, чтобы получить дополнительную информацию о иконке (например, ее hotspots).
  6. Наконец, она рисует иконку на канвас битмапа в позиции курсора мыши (полученной с помощью GetCursorInfo). Координаты x и y корректируются, вычитывая hotspots из координат экрана.

Вот альтернативное решение на Delphi:

procedure GetScreenImage(bmp: TBitmap);
var
  CI: TCursorInfo;
begin
  bmp.Width := Screen.Width;
  bmp.Height := Screen.Height;

  BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    GetDC(GetDesktopWindow), 0, 0, SRCCopy);

  // Создаем графический путь для курсора
  var
    G: TGraphic;
    C: TCanvas;
  begin
    G := TBitmap.Create;
    try
      C := TCanvas.Create;
      try
        C.Handle := bmp.Canvas.Handle;
        C.MoveTo(CI.ptScreenPos.x - CI.hCursorInfo.hotSpot.x,
          CI.ptScreenPos.y - CI.hCursorInfo.hotSpot.y);
        C.Draw(1, 0, G);
      finally
        FreeAndNil(C);
      end;
    finally
      FreeAndNil(G);
    end;
  end;
end;

В этом коде используется объект TGraphic для рисования курсора на поверхности изображения экрана. Курсор рисуется с помощью объекта TCanvas, который позволяет указать координаты x и y, где должен быть нарисован курсор.

Обратите внимание, что это альтернативное решение может не работать корректно, если курсор имеет несколько изображений (например, анимированный курсор).

Для получения скриншота экрана вместе с указателем мыши можно использовать функцию BitBlt для создания изображения экрана и функцию GetCursorInfo для определения положения курсора, после чего необходимо дорисовать курсор на полученное изображение.


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

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




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


:: Главная :: Рабочий стол ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:30:06/0.0061321258544922/1