Текущий архив: 2010.08.27;
Скачать: CL | DM;
ВнизКак получить кусок картинки из чужого приложения? Найти похожие ветки
← →
duMka © (2010-01-31 12:49) [0]Имеется 3D игрушка, например PerfectWorld. Хочется небольшую программку, чтобы персонаж пил зелья, если его здоровье\мана меньше определенного уровня. Собственно для этого требуется получить полоску состояния здоровья в Canvas, для анализа. Как это правильно сделать?
← →
@!!ex © (2010-01-31 13:00) [1]GetDC(0)
BitBlt
ReleaseDC
← →
Вася (2010-01-31 16:15) [2]на DX так не сработает...там надо в прогу влезать и ставить хуки на вызовы каких-то DX функций...
сам не умею, просто читал что только так получится...попробуйте поискать по словам "оверлеи DirectX".
← →
@!!ex © (2010-01-31 16:19) [3]> [2] Вася (31.01.10 16:15)
С каких пор 3D игрушки стали через overlay работать?
← →
Вася (2010-01-31 16:24) [4]ну у меня они никогда не скриншотятся.ни программно,ни принтскрином.
поэтому вероятно через overlay...
← →
Eraser © (2010-01-31 16:31) [5]плохо скриншотил )
← →
Вася (2010-01-31 16:39) [6]наверное от игры зависит.про PerfectWorld не знаю, для него может и сойдёт...
а зачем же тогда эти overlay вообще,если не для игр?и через что тогда игры рисуют?=\\
← →
antonn © (2010-01-31 16:49) [7]автор делает бота? :)
PW - это мморпг
← →
Anatoly Podgoretsky © (2010-01-31 17:16) [8]> antonn (31.01.2010 16:49:07) [7]
Полиморфа
← →
@!!ex © (2010-01-31 19:16) [9]> [6] Вася (31.01.10 16:39)
> а зачем же тогда эти overlay вообще,если не для игр?и через
> что тогда игры рисуют?=\\
Для видео. и только.
← →
duMka © (2010-01-31 19:50) [10]
> автор делает бота? :)
Что я хочу - описано в первом посте, бот для меня слишком круто, я в программировании практически 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; - то же самое.
Что еще не хватает? (кроме мозга:)
← →
Вася (2010-01-31 20:44) [11]вот только не "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 21:58) [12]
> вот только не "Image1.Canvas.Refresh;",а "Image1.Repaint;
> ".
Да, спасибо за советы, так получается. (как многа я не знаю :().
Что по поводу Image, то взято лишь только для теста, посмотреть визуально как оно работает.
Работает здорово. Думаю, а не выводит ли туда увеличенное изображение вблизи игрока.... Полезно ИМХО. Как многа идей появляется по ходу, может я так и до бота созрею :)
← →
Вася (2010-01-31 23:02) [13]тогда почитайте про функцию StretchBlt.=))
← →
@!!ex © (2010-02-04 20:32) [14]Так вот.... Приведенный здесь способ... не работает для 3D приложения на ОС с включенным Aero...
Все что на кэнвасе отображается отображается без проблем, а вот 3D получать нивкакую не хочет...
Может кто нибудь подсказать что делать??
← →
duMka © (2010-02-10 20:12) [15]StretchBlt супер :).
Истчо пару вопросов:
1. Хочу нарисовать что-то поверх окна игрушки. BitBlt в обратную сторону как я понимаю не прокатит? Т.е. скопировтаь-то получится, но игрушка это тут же закрасит. Нужно поверх окна игры расположить прозрачную форму и рисовать на ней, я правильно мыслю?
2. А как узнать размеры рабочей области окна, с которой я копирую скриншот?
← →
Вася (2010-02-10 22:56) [16]в обратную сторону прокатит,так в основном и выводится всё...просто DX и OGL оч быстро обновляют картинку.я ж уже писал в [2]...
можно и формой попытаться, но как её двигать вместе с чужим окном?а полноэкранный режим как?
может GetClientRect?
← →
@!!ex © (2010-02-10 23:57) [17]> [15] duMka © (10.02.10 20:12)
Самый верный способ рендера в окно игры - внедрение и перехват контекста. Как делать не скажу, ибо раздолье для читера который гуглит в поисках этого метода.
Использовал тут:
http://sol-online.org/index.php?content=info&project=tactics
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.059 c