Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скриншот Рабочего стола [D7, XP]


charoey_mag ©   (2009-01-26 08:38:00) 

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


charoey_mag   (2009-01-27 07:43:00) [1]

Вариант [12] не лучше чем [9], так как программа встает в автозагрузку, и в момент между "скрыть все окна" -"показать все окна" могут появиться новый окна


aik   (2009-01-26 15:58:00) [2]


> Как как... так и называется как ты и сказал:>  скриншот
> "читого" рабочего стола в файл


упс не до выделил

>  скриншот "читого" рабочего стола в файл, т.е. без иконок,
>  окон и т.п.


aik   (2009-01-26 15:55:00) [3]

Как как... так и называется как ты и сказал:

>  скриншот "читого" рабочего стола в файл


Вот придумал гуманный метод, может подойдёт

procedure TForm1.Button1Click(Sender: TObject);
var
 Bit: TBitMap;
 Spisok : TList;
 H :THandle;
 i: Integer;
begin
Spisok:=TList.Create;
Bit:=TBitMap.Create;
Bit.Width := Screen.Width;
Bit.Height:= Screen.Height;

H:=GetWindow(GetDesktopWindow,GW_CHILD);
while H<>0 Do
begin
  if IsWindowVisible(H) then
    Spisok.Add(Pointer(H));
  H:=GetWindow(H,GW_HWNDNEXT);
end;

For I:=0 To Spisok.Count-1 do
  ShowWindow(THandle(Spisok[i]), SW_HIDE) ;

BitBlt(Bit.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
GetDC(GetDesktopWindow), 0, 0, SRCCopy);
Bit.SaveToFile('Screen.bmp');  // Указывается путь к файлу
Bit.Free;

For I:=0 To Spisok.Count-1 do
  ShowWindow(THandle(Spisok[i]), SW_NORMAL) ;

Spisok.Free;

end;


charoey_mag   (2009-01-26 14:36:00) [4]


> Alarm ©   (26.01.09 14:17) [10]

А как это называется?


Alarm   (2009-01-26 14:17:00) [5]

> charoey_mag   (26.01.09 08:38)

С какого такого бодуна, то, что собираешься получить, ты называешь "скриншотом рабочего стола юзера"?


charoey_mag   (2009-01-26 13:20:00) [6]

Функция вроде делает то что надо, но несколько своеобразно, она рисует только ту часть рабочего стола над которым находится объект на котором рисуют. Поэтому единственный вариант который придумал, это у окна поставить свойства:
BorderStule = bsNone;
FormStyle = fsStayOnTop;
WindowState = wsMaximize;
При первом OnPaint сохраняю канву в файл, и закрываю приложение.

Вопрос: Нет ли более адекватного способа снять скриншот, ведь не смотря на fsStayOnTop кто-нибудь может залезть поверх и тогда это останется на снимке?


charoey_mag   (2009-01-26 10:31:00) [7]

Если на форме рисовать то все ок, а если
b:=TBitMap.Create;
b.Width:=Screen.Width;
b.Height:=Screen.Height;
Windows.PaintDesktop(b.Canvas.Handle);
b.SaveToFile('C:\1.bmp');
Form1.Canvas.Draw(0,0,b);
b.Free;

То ничего, белая картинка. Что не так?


charoey_mag   (2009-01-26 09:57:00) [8]


> Windows.PaintDesktop()

Спасибо


{RASkov}   (2009-01-26 09:48:00) [9]

Windows.PaintDesktop()


aik   (2009-01-26 09:46:00) [10]

Извеняюсь

>  более удачный вариант


aik   (2009-01-26 09:45:00) [11]

Так яж сказал сто поста 2
>  удачный вариант


charoey_mag   (2009-01-26 09:42:00) [12]


> 'C:\Documents and Settings\имя учетки\             Local
> Settings\Application Data\Microsoft\Wallpaper1.bmp'

Это просто сама картинка, а не то что нарисовано. Мне нужен вид рабочего стола


aik   (2009-01-26 09:39:00) [13]

Придумал ещё более удачный вариант
Задать окну Program Manager = SW_HIDE, затем сделать скриншот и опять вернуть окну Program Manager = SW_NORMAL.


AIK   (2009-01-26 09:30:00) [14]

procedure TForm1.Button1Click(Sender: TObject);
var
Bm: TBitmap;
begin
 Bm:= TBitmap.Create;
 Bm.LoadFromFile('C:\Documents and Settings\ имя учетки\
            Local Settings\Application Data\Microsoft\Wallpaper1.bmp');
 Form1.Canvas.Draw(0,0,bm);
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо