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
Привет! Я переведу текст на русский язык:
Код, написанный на Delphi, является процедурой, которая захватывает изображение экрана и также рисует курсор мыши на его поверхности. Работает она следующим образом:
Процедура GetScreenImage принимает в качестве параметра объект TBitmap, который будет хранить захваченное изображение экрана.
Она устанавливает ширину и высоту битмапа в соответствии с размером экрана.
Использует функцию BitBlt для копирования содержимого окна рабочего стола (полученного с помощью GetDC) на канвас битмапа.
Для рисования курсора она создает объект TIcon и получает его.handle с помощью CopyIcon. Это возвращает иконку, ассоциированную с текущим курсором.
Затем она использует функцию GetIconInfo, чтобы получить дополнительную информацию о иконке (например, ее hotspots).
Наконец, она рисует иконку на канвас битмапа в позиции курсора мыши (полученной с помощью GetCursorInfo). Координаты x и y корректируются, вычитывая hotspots из координат экрана.
Вот альтернативное решение на Delphi:
procedureGetScreenImage(bmp:TBitmap);varCI:TCursorInfo;beginbmp.Width:=Screen.Width;bmp.Height:=Screen.Height;BitBlt(bmp.Canvas.Handle,0,0,Screen.Width,Screen.Height,GetDC(GetDesktopWindow),0,0,SRCCopy);// Создаем графический путь для курсораvarG:TGraphic;C:TCanvas;beginG:=TBitmap.Create;tryC:=TCanvas.Create;tryC.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);finallyFreeAndNil(C);end;finallyFreeAndNil(G);end;end;end;
В этом коде используется объект TGraphic для рисования курсора на поверхности изображения экрана. Курсор рисуется с помощью объекта TCanvas, который позволяет указать координаты x и y, где должен быть нарисован курсор.
Обратите внимание, что это альтернативное решение может не работать корректно, если курсор имеет несколько изображений (например, анимированный курсор).
Для получения скриншота экрана вместе с указателем мыши можно использовать функцию BitBlt для создания изображения экрана и функцию GetCursorInfo для определения положения курсора, после чего необходимо дорисовать курсор на полученное изображение.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS