Чтобы рисовать прямо на рабочем столе, вам не нужно получать данные растрового изображения на рабочем столе, но контекст рабочего стола устройства (DC).
Вместо использования FindWindow('SysListView32', nil);
(имя класса может быть изменено в будущем), вы должны использовать GetDesktopWindow () , чтобы получить дескриптор окна рабочего стола, а затем использовать GetDC () для извлечения контекста устройства (DC) окна рабочего стола.
Вы можете рисовать текст, используя TextOut () , DrawText () или DrawTextEx () .
Наконец, вызовите ReleaseDC () , чтобы освободить настольный контроллер домена, освободив его для использования другими приложениями.
Например:
deskhwnd := GetDesktopWindow();
deskhdc := GetDC(deskhwnd);
// Here code where you draw text to the desktop
ReleaseDC(deskhwnd, deskhdc);
Однако, если вам действительно нужно получить данные рабочего стола (обои) для других целей, прочитайте значение Wallpaper
в HKCU\Control Panel\Desktop
. Значение Wallpaper указывает имя файла, в котором хранится растровое изображение для фона экрана. В Windows Vista и более поздних версиях обои могут быть файлом BMP
или JPG
, поэтому не используйте функцию API LoadImage()
для загрузки обоев, вместо этого следует использовать CImage
или GDI+
, предполагая, что вы используете VC ++.
Примечание
@ Реми Лебо поймал ошибку в моем объяснении получения обоев (см. Его комментарий ниже). Да, я согласен с тем, что нам не следует полагаться на значение реестра, если для этой цели существует функция API.