Показать полную графическую версию : Текст на экран в 3D приложении
Есть ли способ вывести текст на экран при запущенном полноэкранном 3D приложении типо как FPSы во FRAPS ну или еще какнибуть?
Belfigor
16-08-2009, 19:22
_WinAPI_DrawText тебе в помощь :)
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
Global $tRECT, $hFont, $hOldFont, $hDC
HotKeySet("{ESC}", "_Exit")
$tRECT = DllStructCreate($tagRect)
DllStructSetData($tRECT, "Left", 5)
DllStructSetData($tRECT, "Top", 5)
DllStructSetData($tRECT, "Right", 250)
DllStructSetData($tRECT, "Bottom", 50)
$hDC = _WinAPI_GetDC(0)
$hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
$hOldFont = _WinAPI_SelectObject($hDC, $hFont)
_WinAPI_SetTextColor($hDC, 0x0000FF)
_WinAPI_SetBkColor($hDC, 0x000000)
; comment next line to get black background instead of transparent one
_WinAPI_SetBkMode($hDC, $TRANSPARENT)
While 1
_WinAPI_DrawText($hDC, "Hello world!", $tRECT, $DT_CENTER)
Sleep(100)
WEnd
Func _Exit()
_WinAPI_SelectObject($hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_InvalidateRect(0, 0)
$tRECT = 0
Exit
EndFunc ;==>_Exit
Спасибо за идею. Но у нее есть большой недостаток, надпись моргает при обновлении экрана, а в игре постояно.
Belfigor
17-08-2009, 15:59
Ну тогда создай гуи, присвой ему статус allways on top, убери фон и сделай видимым лейбл в котором будет отражаться нужный тебе текст.
создай гуи, присвой ему статус allways on top »
Вы сами проверили то что предлагаете? - Окно игры, в любом случае перекроет окно созданного Gui.
ven00m, Рискну предположить что для корректного решения этой задачи, необходимо перехватывать обращения игры к DirectX (d3d9.dll) и затем производить отрисовку текста в функции обратного вызова(Callback). Как это сделать, я к сожалению не знаю.
Belfigor
17-08-2009, 23:47
Смотря что за игра, думаю не трудно догодаться что ето онлайн игра, а большинство нынешних онлайн игр имею опцию запуска в режиме окна на весь монитор. Тоесть можно хоть фильм параллельно при развернутой на весь экран игре смотреть если задать окну проигрывателя атрибут allways on top.
На самом деле если игра основана на DirectX, то легче провести инъекцию библиотеки, т.е. на приплюснутом си.
Хотя можете на форуме посмотреть инъекцию dll в автоите, попробуйте
Смотря что за игра, думаю не трудно догодаться что ето онлайн игра, а большинство нынешних онлайн игр имею опцию запуска в режиме окна на весь монитор. Тоесть можно хоть фильм параллельно при развернутой на весь экран игре смотреть если задать окну проигрывателя атрибут allways on top. »
Неа, режим окна мне не подходит тк может случайно сбится фокус.
На самом деле если игра основана на DirectX, то легче провести инъекцию библиотеки, т.е. на приплюснутом си.
Хотя можете на форуме посмотреть инъекцию dll в автоите, попробуйте »
Нашел на офф форуме пример хука на messagebox там подменяются входящие данные, но в данном случае придется отрисовывать текст уже после того как функция отработает. Это вообще возможно? Можт я что то не понимаю.
Кхм, а если просчитать все переменные, которые надо, а затем перехватывать ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC