![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить кусок картинки из чужого приложения?
duMka © (2010-01-31 12:49:00)Имеется 3D игрушка, например PerfectWorld. Хочется небольшую программку, чтобы персонаж пил зелья, если его здоровье\мана меньше определенного уровня. Собственно для этого требуется получить полоску состояния здоровья в Canvas, для анализа. Как это правильно сделать?
@!!ex (2010-02-10 23:57:00) [1]> [15] duMka © (10.02.10 20:12)
Самый верный способ рендера в окно игры - внедрение и перехват контекста. Как делать не скажу, ибо раздолье для читера который гуглит в поисках этого метода.
Использовал тут:
http://sol-online.org/index.php?content=info&project=tactics
Вася (2010-02-10 22:56:00) [2]в обратную сторону прокатит,так в основном и выводится всё...просто DX и OGL оч быстро обновляют картинку.я ж уже писал в [2]...
можно и формой попытаться, но как её двигать вместе с чужим окном?а полноэкранный режим как?
может GetClientRect?
duMka (2010-02-10 20:12:00) [3]StretchBlt супер :).
Истчо пару вопросов:
1. Хочу нарисовать что-то поверх окна игрушки. BitBlt в обратную сторону как я понимаю не прокатит? Т.е. скопировтаь-то получится, но игрушка это тут же закрасит. Нужно поверх окна игры расположить прозрачную форму и рисовать на ней, я правильно мыслю?
2. А как узнать размеры рабочей области окна, с которой я копирую скриншот?
@!!ex (2010-02-04 20:32:00) [4]Так вот.... Приведенный здесь способ... не работает для 3D приложения на ОС с включенным Aero...
Все что на кэнвасе отображается отображается без проблем, а вот 3D получать нивкакую не хочет...
Может кто нибудь подсказать что делать??
Вася (2010-01-31 23:02:00) [5]тогда почитайте про функцию StretchBlt.=))
duMka (2010-01-31 21:58:00) [6]
> вот только не "Image1.Canvas.Refresh;",а "Image1.Repaint;
> ".
Да, спасибо за советы, так получается. (как многа я не знаю :().
Что по поводу Image, то взято лишь только для теста, посмотреть визуально как оно работает.
Работает здорово. Думаю, а не выводит ли туда увеличенное изображение вблизи игрока.... Полезно ИМХО. Как многа идей появляется по ходу, может я так и до бота созрею :)
Вася (2010-01-31 20:44:00) [7]вот только не "Image1.Canvas.Refresh;",а "Image1.Repaint;".
и я бы посоветовал не юзать TImage - а оно нам надо?)
копируй в битмап:
var HDC_Game: hDC; Handle_Game: HWND; ScreenShot_Game: TBitmap;
...
//при включении программы
ScreenShot_Game:=TBitmap.Create;
ScreenShot_Game.PixelFormat:=pf24bit;
ScreenShot_Game.Height:=250;
ScreenShot_Game.Width:=250;
HDC_Game:=GetDC(Handle_Game);//если не меняется - то зачем постоянно создавать/уничтожать?
...
BitBlt(ScreenShot_Game.Canvas.Handle, 0, 0, 250, 250, HDC_Game, 300, 300, SRCCOPY);
...
//при закрытии программы
ReleaseDC(Handle_Game, HDC_Game);
ScreenShot_Game.Free;
duMka (2010-01-31 19:50:00) [8]
> автор делает бота? :)
Что я хочу - описано в первом посте, бот для меня слишком круто, я в программировании практически 0. Я практчески ничего не понял, из того что посоветовали, тем не менее мне удалось написать такой кусок кода:
procedure TForm1.Button2Click(Sender: TObject);
var
HandleDC_Game: hDC;
begin
HandleDC_Game:=GetDC(Handle_Game);
BitBlt(Image1.Canvas.Handle,0,0,250,250,HandleDC_Game,300,300,SRCCOPY);
ReleaseDC(Handle_Game,HandleDC_Game);
end;
По нажатию Button2 я действительно получаю кусок картинки из игры на Image1. Все последующие нажатия ничего не дают.
Вставил Image1.Canvas.Refresh; - то же самое.
Что еще не хватает? (кроме мозга:)
@!!ex (2010-01-31 19:16:00) [9]> [6] Вася (31.01.10 16:39)
> а зачем же тогда эти overlay вообще,если не для игр?и через
> что тогда игры рисуют?=\\
Для видео. и только.
Anatoly Podgoretsky (2010-01-31 17:16:00) [10]> antonn (31.01.2010 16:49:07) [7]
Полиморфа
antonn (2010-01-31 16:49:00) [11]автор делает бота? :)
PW - это мморпг
Вася (2010-01-31 16:39:00) [12]наверное от игры зависит.про PerfectWorld не знаю, для него может и сойдёт...
а зачем же тогда эти overlay вообще,если не для игр?и через что тогда игры рисуют?=\\
Eraser (2010-01-31 16:31:00) [13]плохо скриншотил )
Вася (2010-01-31 16:24:00) [14]ну у меня они никогда не скриншотятся.ни программно,ни принтскрином.
поэтому вероятно через overlay...
@!!ex (2010-01-31 16:19:00) [15]> [2] Вася (31.01.10 16:15)
С каких пор 3D игрушки стали через overlay работать?
Вася (2010-01-31 16:15:00) [16]на DX так не сработает...там надо в прогу влезать и ставить хуки на вызовы каких-то DX функций...
сам не умею, просто читал что только так получится...попробуйте поискать по словам "оверлеи DirectX".
@!!ex (2010-01-31 13:00:00) [17]GetDC(0)
BitBlt
ReleaseDC