Показать сообщение отдельно
  #4  
Старый 12.12.2016, 22:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ну, во-первых, можно легко снимать скриншоты обычным принтскрином, если игра запущена в оконном режиме, будь она хоть трижды на DirectX и OpenGL. Так проще, тем более, что многие современные игры это умеют.
Во-вторых, по делу: мы имеем ДЛЛ в другом процессе, т.е. требуется IPC (Interprocess Communication). Тут могут быть разные варианты, большинство из которых строятся на костылях.

Вариант первый, наверно самый простой - создать в игре фейковое пустое невидимое окно и слать сообщения этому окну. В dll сделать обработчик сообщений окна.
Вариант второй, тоже кривой - поднять в dll серверный сокет на localhost и принимать команды.
Вариант третий - использовать пайпы (Pipes).
Вариант четвертый, наркоманский - создать объект для синхронизации каким-нибудь CreateEvent, сбросить его состояние в DLL и сделать WaitForSingleObject. Когда надо сделать скрин из своего приложения менять состояние объекта. В этот момент поток выйдет из ожидания, сделает скриншот и снова сбросит состояние объекта.

Вообще, на MSDN есть список предлагаемых вариантов, но большинство из них трудноприменимы.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием