![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клавиатура Windows в Delphi [D7, XP]
Mozgan © (2006-03-31 11:19:00)Здравствуйте, Мастера! Скажите, пожалуйста, как можно перехватить нажатие кнопки PrintScreen (PrtScr). Мне нужно программно снять изображение экрана.
Mozgan (2006-03-31 21:18:00) [1]В принципе, да.
Факт, что вне настройки в реестре копать нужно - это ясно.
Но вот где гарантия, что смена возможна файлов с расширением jpeg (jpg)?
Все работает коректно только с файлами bmp 8(
Turbid (2006-03-31 21:15:00) [2]Забыл сказать, все это взял с Delphi Russian Knowledge Base: http://www.drkb.ru/
Не поленись и скачай
Turbid (2006-03-31 21:10:00) [3]В принципе, все настройки на фоновый рисунок хранятся в реестре. Поэтому надо сначала скопировать картинку в какое-нибудь место (лучше в каталог Виндов) на случай удаления или переноса исходного файла. Информация по обоям хранится в разделе HKEY_CURRENT_USER\Control Panel\Desktop в параметрах TileWallpaper (если 1 - рисунок размножен, 0 - в центре), Wallpaper - путь к файлу обоев (gif, bmp, jpg), WallpaperStyle - если 2, то обои будут растянуты (отсутствует в 95 винде).
ПОсле установки всех занчений обновляешь рабочий стои и наслаждаешься эффектом.
Автор ответа: Garik
Взято с Vingrad.ru http://forum.vingrad.ru
--------------------------------------------------------------------------------
Смена обоев только на время текущего сеанса, после перезагрузки обои восстановятся:
var Wallpaper : string;
begin
Wallpaper := 'C:\windows\ACD Wallpaper.bmp';
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
end;
Автор: p0s0l
--------------------------------------------------------------------------------
program wallpapr;
uses Registry, WinProcs;
procedure SetWallpaper(sWallpaperBMPPath:String;bTile:boolean);
var
reg : TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
// Control Panel\Desktop
// TileWallpaper (REG_SZ)
// Wallpaper (REG_SZ)
reg := TRegIniFile.Create('Control Panel\Desktop' );
with reg do begin
WriteString( '', 'Wallpaper',
sWallpaperBMPPath );
if( bTile )then
begin
WriteString('', 'TileWallpaper', '1' );
end else begin
WriteString('', 'TileWallpaper', '0' );
end;
end;
reg.Free;
// Оповещаем всех о том, что мы
// изменили системные настройки
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,
{Эта строка - продолжение предыдущей}SPIF_SENDWININICHANGE );
end;
// пример установки WallPaper по центру рабочего стола
SetWallpaper('c:\winnt\winnt.bmp', False );
//Эту строчку надо написать где-то в программе.
Взято из http://forum.sources.ru
--------------------------------------------------------------------------------
var
Reg: TRegIniFile;
begin
Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', 'c:\windows\mybmp.bmp');
Reg.WriteString('desktop', 'TileWallpaper', '1');
Reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end
Взято из http://forum.sources.ru
Mozgan (2006-03-31 14:07:00) [4]Все ребят, догадался! Большое спасибо!!!!
Мастера, только один и последний :) вопрос: Как этот снимок сделать рисунком рабочего стола, т.е. отправить на десктоп?
Mozgan (2006-03-31 14:00:00) [5]Спасибо! У меня только не получилось откомпилить :(
Дельфи ругает, на неопределение ижентификаторов
pic_stream и quarl_screen.
в uses я добавил JPEG. Может что не добавилб а?
Подскажи пожалуйста.
Turbid (2006-03-31 12:23:00) [6]Определись что именно тебе нужно - перехватить или программно нажать
Sysanin (2006-03-31 12:23:00) [7]Если тебе программно надо снять изображение с экрана, то зачем тебе перехватывать нажатие кнопки? Для получения изображения можешь юзать вот этот код
...
var
ScreenDC: HDC;
bmp : TBitmap;
jpg : TJPEGImage;
begin
pic_stream:= TMemoryStream.Create;
bmp := TBitmap.Create;
bmp.PixelFormat := pf24bit;
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC(0), 0, 0, SRCCOPY);
jpg := TJPEGImage.Create;
jpg.Assign(bmp);
jpg.ProgressiveEncoding := true;
jpg.CompressionQuality := quarl_screen;
jpg.Compress;
bmp.Free;
jpg.SaveToFile('temp.jpg');
jpg.Free;
end;
Этот код сохранит тебе слепок экрана в формате jpg, вообщем брал из рабочей программы мот что лишнее будет...
Mozgan (2006-03-31 11:34:00) [8]Не понимаю, куда все подевались :(