Цитата:
Сообщение от qwertyrus
Осталось теперь прикрутить хук директ икса(буду рад если поможешь), а затем отрисовать линии.
|
Сам недавно разбирался, вот тема:
AmazingRP / d3d9 hook
Хочу рисовать поверх окна Амазинг РП (КРМП). Проблема в том, что оверлей Стима / Дискорда почему-то там не работает (монопольный режим мб какой-то, я хз) Я хочу сделать .dll-ку, чтобы хукнуть d3d9 EndScene Это мне вообще чё надо делать? Искать адреса что хукать? Или какой метод... Если да, то...
www.blast.hk
А вот нужный тебе код:
C++:
Код:
#include "MinHook.h"
std
::
uintptr_t
find_device
(
std
::
uint32_t
Len
)
{
static
std
::
uintptr_t base
=
[
]
(
std
::
size_t Len
)
{
std
::
string
path_to
(
MAX_PATH
,
'\0'
)
;
if
(
auto
size
=
GetSystemDirectoryA
(
(
LPSTR
)
path_to
.
data
(
)
,
MAX_PATH
)
)
{
path_to
.
resize
(
size
)
;
path_to
+=
"\\d3d9.dll"
;
std
::
uintptr_t dwObjBase
=
reinterpret_cast
(
LoadLibraryA
(
path_to
.
c_str
(
)
)
)
;
while
(
dwObjBase
++
(
dwObjBase
+
0x00
)
==
0x06C7
&&
*
reinterpret_cast
(
dwObjBase
+
0x06
)
==
0x8689
&&
*
reinterpret_cast
(
dwObjBase
+
0x0C
)
==
0x8689
)
{
dwObjBase
+=
2
;
break
;
}
}
return
dwObjBase
;
}
return
std
::
uintptr_t
(
0
)
;
}
(
Len
)
;
return
base
;
}
void
*
get_function_address
(
int
VTableIndex
)
{
return
(
*
reinterpret_cast
(
find_device
(
0x128000
)
)
)
[
VTableIndex
]
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Present
)
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
;
HRESULT __stdcall
IDirect3DDevice9__Present_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
CONST RECT
*
pSrcRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindow
,
CONST RGNDATA
*
pDirtyRegion
)
{
// do something...
return
IDirect3DDevice9__Present
(
pDevice
,
pSrcRect
,
pDestRect
,
hDestWindow
,
pDirtyRegion
)
;
}
HRESULT
(
__stdcall
*
IDirect3DDevice9__Reset
)
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
;
HRESULT __stdcall
IDirect3DDevice9__Reset_Hook
(
LPDIRECT3DDEVICE9 pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
{
// do something...
return
IDirect3DDevice9__Reset
(
pDevice
,
pPresentationParameters
)
;
}
DWORD WINAPI
InitializeAndLoad
(
LPVOID hModule
)
{
MH_CreateHook
(
get_function_address
(
17
)
,
&
IDirect3DDevice9__Present_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Present
)
)
;
MH_EnableHook
(
get_function_address
(
17
)
)
;
MH_CreateHook
(
get_function_address
(
16
)
,
&
IDirect3DDevice9__Reset_Hook
,
reinterpret_cast
(
&
IDirect3DDevice9__Reset
)
)
;
MH_EnableHook
(
get_function_address
(
16
)
)
;
return
0
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
MH_Initialize
(
)
;
CreateThread
(
0
,
0
,
&
InitializeAndLoad
,
hModule
,
0
,
0
)
;
break
;
}
case
DLL_PROCESS_DETACH
:
{
MH_DisableHook
(
get_function_address
(
17
)
)
;
MH_DisableHook
(
get_function_address
(
16
)
)
;
MH_RemoveHook
(
get_function_address
(
17
)
)
;
MH_RemoveHook
(
get_function_address
(
16
)
)
;
break
;
}
}
return
1
;
}
Цитата:
Сообщение от qwertyrus
но как я не искал, функции получения координаты кости(на голом C++) нет.
|
Я думаю, что это может быть тут, но не уверен.
|