|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Скринсшот рабочего стола
Привет всем.
У меня появилась вот такая запинка: Как можно получить картинку текущего состояния рабочего стола виндовс (ну все что видет юзверь). Желательно код показать, но и советам буду рад. Зарание благодарю за ответы. |
#2
|
||||
|
||||
Вот пример сохранения скриншота рабочего стола в файл:
Код:
procedure GetWindowsScreen( PathToSave: string ); begin with TBitmap.Create do begin Width := Screen.Width; Height := Screen.Height; BitBlt( Canvas.Handle, 0, 0, Width, Height, GetDC( GetDesktopWindow ), 0, 0, SRCCOPY ); SaveToFile( PathToSave ); Free; end; end; Использование: Код:
GetWindowsScreen( 'C:\Screen.bmp' ); |
#3
|
|||
|
|||
Спасибо, попробую.
|
#4
|
|||
|
|||
А ещё можно сделать так :
procedure TForm1.Button1Click(Sender: TObject); var BMP1: Graphics.TBitmap; begin Screen1.Visible:=false; sleep(15); BMP1:=Graphics.TBitmap.Create; BMP1.Height:=Screen.Height; BMP1.Width:=Screen.Width; DC1:=GetDC(0); BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY); Screen1.Visible:=true; Image1:= TImage.Create(nil); BMP1.IgnorePalette:=true; Image1.Picture.Assign(BMP1); BMP1.SaveToFile('FileName.bmp'); end; |
#5
|
||||
|
||||
Последний раз редактировалось Casper-Hacker, 22.03.2014 в 16:00. |
#6
|
|||
|
|||
А кто знает, как сделать скриншот неактивного рабочего стола?
Пытался сделать следующим образом: 1. Создаю поток. 2. В этом потоке открываю рабочий стол (dsk = OpenDesktop(..)) 3. Назначаю потоку этот рабочий стол (SetThreadDesktop(dsk)) 4. Далее, в этом потоке действую как было описано выше (..BitBlt...) Результат: Если я открываю активный рабочий стол, то скриншот получается. Если же открываю другой рабочий стол, то получается сплошная чернота. При этом BitBlt возвращает false и GetLastError = 6 (Неверный дескриптор). Вот. Кто-нибудь знает, как можно это исправить и возможно ли вообще у неактивного рабочего стола снять скриншот? Последний раз редактировалось cool_rus_killer, 04.01.2009 в 12:44. |
#7
|
||||
|
||||
Decoding, RUS_Hacker, вас вообще учили учил контексты освобождать?!!!!!
По поводу неактивного рабочего стола. Можно получить например картинку обоев, и положения иконок которые благополучно отобразить. Возможно все эти менеджеры рабочих столов делаю именно так при загрузке windows (все рабочие столы ведь пустые) а потом перед переключением просто делаю снимок с пока еще активного рабочего стола. ...сказал, и загрустил от бесспорной своей правоты Последний раз редактировалось 0nni, 04.01.2009 в 13:48. |