![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 12.03.2011
Сообщений: 96
|
![]()
Код:
Width := Screen.Width; Height := Screen.Height; BitBlt(Canvas.Handle, 0, 0, Width, Height, GetDC(GetDesktopWindow), 0, 0, SRCCOPY); SaveToFile(PathToSave); Free; Уходит корнями аж к 2000 годам, и несмотря на это, он вполне рабочий и пригоден для снятия скриншотов с экрана. НО! Заметил особенность, что в играх он иногда не работает, т.е. получаем в файл чёрный экран. Проследил особенность, на всех XP машинах всё отлично, а на некоторых машинах под 7 получается чёрный экран. Сам являюсь этим счастливчиком, в вин 7, если сфотать в игре, то картинки чёрные будут. Хотя у знакомого на вин7 получается нормальный результат. Господа, а теперь вопрос - какими средствами в Delphi ещё можно попробовать снять скриншот, чтобы он нормально получился, даже если фотать в играх? Или может кто-то сталкивался с этим и знает где в вин7 галочку убрать "Фотать чёрный экран"? ![]() |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 12.03.2011
Сообщений: 96
|
![]()
Кстати, если на вин7 стоит сп1, то совсем не фотает ... Как быть? Чем можно скриншот снять в игре?
|
![]() |
![]() |
![]() |
#3 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
![]()
через getasynckeystate ловить 9A(вирт код ПртСкр), извлекать из буфера обмена картинку.
Ненавижу быть как все, но люблю, чтобы все были как я.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 12.03.2011
Сообщений: 96
|
![]()
а можете кусочек кода показать?
|
![]() |
![]() |
![]() |
#5 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
![]()
Ну вот вам кусочек
Код:
Ненавижу быть как все, но люблю, чтобы все были как я.
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 12.03.2011
Сообщений: 96
|
![]()
Т.е. этой функцией отловить нажатие клавиши прин-скрин? Да нет, мне не клавиша, нужна, я экран сфотать хочу, в джпег пережать и сохранить. Проблема только с тем, как сфотать? Под вин7 код из первого поста неработает ...
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 06.12.2010
Сообщений: 300
|
![]()
У меня код из первого сообщения работает.
|
![]() |
![]() |
![]() |
#8 |
Очень суровый
Участник клуба
Регистрация: 17.12.2009
Сообщений: 1,988
|
![]()
_KUL, все дело в том как ты скринишь. Я понял так: зашел в игру нажал PrtScr и картинка сохраняется на раб. стол например.
Или ты фоткаешь со свернутой игрой, нажимая например на кнопку в своем приложении?
Ненавижу быть как все, но люблю, чтобы все были как я.
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 12.03.2011
Сообщений: 96
|
![]()
Вот код, как он работает:
procedure TForm1.Button1Click(Sender: TObject); var DC : HDC; bmp : TBitmap; jpgImg: TJPEGImage; today : TDateTime; IDFTP: TIDFTP; i, i_y, rand:integer; hiser:string; begin today := now; nowdate := datetostr(today); nowtime := timetostr(today); namephoto := nowdate[7]+nowdate[8]+nowdate[9]+nowdate[10]+'.'+nowdate[4]+nowdate[5]+'.'+nowdate[1]+nowdate[2]; if nowtime[2]=':' then begin nowtime[8] := nowtime[7]; nowtime[7] := nowtime[6]; nowtime[6] := nowtime[5]; nowtime[5] := nowtime[4]; nowtime[4] := nowtime[3]; nowtime[3] := nowtime[2]; nowtime[2] := nowtime[1]; nowtime[1] := '0'; end; rand := random(99); namephoto := namephoto+'-'+nowtime[1]+nowtime[2]+'.'+nowtime[4]+nowtime[5]+'.'+nowtime[7]+nowtime[8]+'-'+inttostr(rand)+'.jpg'; bmp := TBitmap.Create; jpgImg := TJPEGImage.Create; bmp.Height := Screen.Height; bmp.Width := Screen.Width; DC := GetDC(0); //bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY); BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SRCCopy); ReleaseDC(0, DC); with bmp.Canvas do begin font.Size := 16; font.Color := clBlue; end; bmp.Canvas.TextOut(5,5,memo2.Lines. Text); bmp.Canvas.TextOut(5,30,label1.Capt ion); jpgImg.Assign(bmp); jpgImg.CompressionQuality:=40; jpgImg.SaveToFile('cache\main\'+nam ephoto); jpgImg.Free; bmp.Free; idftp:=TIDFtp.create(IDFTP); idftp.host:='***'; idftp.Port:=21; idftp.Username:='***'; idftp.password:='***'; try IdFTP.Connect; //Соединяемся If IdFTP.Connected then Begin idftp.Put('cache\main\'+namephoto,n amephoto,true); IdFTP.Disconnect; //Завершаем соединение idUDPclient1.Send(T+' - Загружено фото '+namephoto); end; except idUDPclient1.Send(T+' - Ошибка передачи фото по FTP'); end; IdFTP.Free; DeleteFile('cache\main\'+namephoto) ; end; Это всё продолжение программы http://programmersforum.ru/showthread.php?t=142029 и http://programmersforum.ru/showthread.php?t=147062 Этот античит работает уже 3й день, логи отлично отлавливают на предмет запущенных читов, а вот скрины только с ХР приходят нормальные, а на вин7 чёрные полностью. Программа работает по таймеру. Последний раз редактировалось _KUL; 30.04.2011 в 11:03. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 06.12.2010
Сообщений: 300
|
![]()
А на компьютере с которого отправляли, скрины сохраняются тоже черные?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать сеть в простенькой игре??? | Руслантус | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 16 | 21.05.2010 20:44 |
НУЖЕН...Автоматический Print Screen! | DatonHhod | Общие вопросы .NET | 5 | 12.05.2010 18:01 |
Print Screen на КПК? | Snoopy | Свободное общение | 6 | 08.04.2010 14:35 |
Print Screen | Maxs | Общие вопросы C/C++ | 5 | 12.04.2009 13:57 |
Помогите сделать сохранения в игре!!! | Teen4jump | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 12 | 20.06.2007 17:29 |