Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Как получить кусок картинки из чужого приложения?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.069 c
2-1271922885
kudatsky
2010-04-22 11:54
2010.08.27
Попадает ли точка в замкнутый многоугольник


2-1268194263
Б
2010-03-10 07:11
2010.08.27
Forward объявление класса.


15-1268248494
кот
2010-03-10 22:14
2010.08.27
как прочитать ПЗУ через параллельный порт


3-1239500260
andirock2112
2009-04-12 05:37
2010.08.27
Связь многие ко многим


2-1274517351
Delphist2
2010-05-22 12:35
2010.08.27
excel.application





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский