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

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

Клавиатура 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]

Не понимаю, куда все подевались :(


Наверх

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