|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Получить цвет пикселя (есть проблема) Приветствую граждане    Пишу программку для распознавания скринов с игры. Игра - онлайн шутер. Скрины то я получаю а вот с распознаванием возникла сложность. Игра вроде работает через DirectDraw и имеет свою защиту. GetPixel при запущенной игре не работает и возвращает один цвет(видимо что то блочит). Может кто подскажет альтернативу GetPixel или еще какой способ обойти эту проблему т.к. в графике я ни как не шарю. Зарание спасибо. | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Bmp. Мне главное что бы делался скрин(любым способом) и я мог распознавать на нем пиксели. Остальное не важно, дальше уже разберусь. Может как то по другому нужно выдергивать скрины? __________________________________ Bmp := Tbitmap.Create; Bmp.Height := HeightCF; Bmp.Width := WidthCF; DC := GetDC(Wnd); Bitblt(Bmp.Canvas.Handle, 0, 0, WidthCF, HeightCF, DC, 0, 0, SRCCOPY); _____________________________________ Если игруху закрыть то все норм, но смысл как раз в том что бы ее не закрывать. Последний раз редактировалось VoFF4eG, 31.10.2012 в 13:10. | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Код: var bmp: TBitmap; Color: TColor; begin Color := bmp.Canvas.Pixels[X, Y]; end; | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Нет, то же самое что и при GetPixel | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   Я так думаю что система защиты игры (античит) что то мутит(блокирует). | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Цитата: 
 | 
| 
			 
			#8  
			
			
			
			
		 | |||
| 
 | |||
|   Дело в том, что скрины отлично сохраняются. Просто перед сохранением мне их обрабатывать нужно ) | 
| 
			 
			#9  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Код: procedure TForm1.Timer1Timer(Sender: TObject);
var
  bmp: TBitmap;
  hw: HWND;
  Can: TCanvas;
  Color: TColor;
  R: TRect;
begin
  Timer1.Enabled := False;
  bmp := TBitmap.Create;
  try
    Can := TCanvas.Create;
    hw := GetDesktopWindow;
    Can.Handle := GetDC(hw);
    if not GetWindowRect(hw, R) then
    begin
      ShowMessage(SysErrorMessage(GetLastError));
      Exit;
    end;
    bmp.Width := R.Right - R.Left;
    bmp.Height := R.Bottom - R.Top;
    bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Can, R);
    Caption := 'Цвет пикселя: ' + IntToHex(bmp.Canvas.Pixels[100, 100], 8);
  finally
    bmp.Free;
  end;
  Beep;
end;Естественно интервал в таймере нужно поставить достаточный для запуска игры. | 
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
|  
VoFF4eG (01.11.2012)
 | ||
| 
			 
			#10  
			
			
			
			
		 | |||
| 
 | |||
|   Благодарю за код. Буду пробовать.   о результате отпишу. | 
| 
			 
			#11  
			
			
			
			
		 | |||
| 
 | |||
|   00000000 - вот и все что я получаю...  При чем как только игруху закрываю... сразу все работает ))) Ну и что это за фигня? Мысли будут? | 
| 
			 
			#12  
			
			
			
			
		 | |||
| 
 | |||
|   Есть ли возможность как то защитить свою программу от внешних воздействий на нее? | 
| 
			 
			#13  
			
			
			
			
		 | |||
| 
 | |||
|   Удалил сообщение. (мой метод уже предлагали) Последний раз редактировалось Anklav, 05.11.2012 в 17:14. | 
| 
			 
			#14  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 | 
| 
			 
			#15  
			
			
			
			
		 | |||
| 
 | |||
|   Если на программу нет внешнего воздействия то почему происходит эта фигня??? Тупо не могу узнать цвет пикселя. возвращает нули и все. Хотя бы узнать в чем причина. |