Вы абсолютно правы в том, что первый пример использует функции WinAPI GetDC и BitBlt, чтобы скопировать экран на TBitmap. Второй пример использует обёртку TCanvas вокруг окна рабочего стола.
Вот некоторые альтернативные решения:
1. Использование метода LoadFromDevice класса TBitmap
varbmp:TBitmap;beginbmp:=TBitmap.Create;bmp.LoadFromDevice(0,0,Screen.Width,Screen.Height);// Сохраните битмап в файл или используйте его по мере необходимостиend;
Метод более компактен и эффективен, чем использование GetDC и BitBlt.
2. Использование метода CopyFromScreen класса TCanvas
varDesktop:TCanvas;BitMap:TBitmap;beginDesktop:=TCanvas.Create;Desktop.Handle:=GetDC(0);BitMap:=TBitmap.Create;BitMap.Width:=Screen.Width;BitMap.Height:=Screen.Height;Desktop.CopyFromScreen(BitMap.Canvas,0,0);// Сохраните битмап в файл или используйте его по мере необходимостиend;
Метод похож на второй пример, который вы предоставили, но использует CopyFromScreen вместо ручного управления канвасом.
3. Использование третьей-сторонней библиотеки
Если вы ищете более полное решение, можно рассмотреть использование библиотеки,such as SynEdit's SynCommons unit, которая предоставляет функции для захвата снимков экрана и манипуляции битмапами.
Например:
usesSynCommons;varbmp:TBitmap;beginbmp:=TBitmap.Create;CaptureScreen(bmp.Canvas,0,0,Screen.Width,Screen.Height);// Сохраните битмап в файл или используйте его по мере необходимостиend;
Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас есть какие-либо дальнейшие вопросы.
В статье описаны два способа скопировать экран (или его часть) в TBitmap: с помощью WinAPI и с помощью обертки TCanvas.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS