![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скриншот Рабочего стола [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;