pavedaf

Xigncode GetKeyState

Oct 22nd, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. # pragma once
  2.  
  3.  
  4. # include <Windows.h>
  5. # pragma comment( lib, "user32.lib" )
  6.  
  7. # include <d3d9.h>
  8. # pragma comment( lib, "d3d9.lib" )
  9.  
  10. # include <detours.h>
  11. # pragma comment( lib, "detours.lib" )
  12.  
  13. typedef HRESULT( __stdcall* tEndScene )( IDirect3DDevice9* );
  14.  
  15.  
  16. WNDPROC                         lpPrevWndFunc   =   NULL;
  17. tEndScene                       oEndScene       =   NULL;
  18. D3DDEVICE_CREATION_PARAMETERS   d3dcp           =   { 0 };
  19.  
  20.  
  21. LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
  22. {
  23.  
  24.     if ( GetAsyncKeyState( VK_END ) )
  25.     {
  26.         MessageBoxA( hWnd, "TEST", "", MB_ICONINFORMATION | MB_OK );
  27.     }
  28.  
  29.     return CallWindowProc( lpPrevWndFunc, hWnd, Msg, wParam, lParam );
  30. }
  31.  
  32. HRESULT WINAPI hkEndScene( IDirect3DDevice9* pDevice )
  33. {
  34.     pDevice->GetCreationParameters( &d3dcp );
  35.  
  36.  
  37.     if ( !lpPrevWndFunc )
  38.         lpPrevWndFunc = ( WNDPROC )SetWindowLongPtr( d3dcp.hFocusWindow, GWLP_WNDPROC, ( LONG_PTR )WndProc );
  39.  
  40.  
  41.     return oEndScene( pDevice );
  42. }
  43.  
  44. LRESULT CALLBACK MsgProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  45. {
  46.     return DefWindowProc( hwnd, uMsg, wParam, lParam );
  47. }
  48.  
  49. VOID WINAPI GetVTable( PDWORD* vtable )
  50. {
  51.     WNDCLASSEX wc = { sizeof( WNDCLASSEX ), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle( NULL ), NULL, NULL, NULL, NULL, "DX", NULL };
  52.     RegisterClassEx( &wc );
  53.     HWND hWnd = CreateWindow( "DX", NULL, WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, GetDesktopWindow(), NULL, wc.hInstance, NULL );
  54.     LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION );
  55.     D3DPRESENT_PARAMETERS d3dpp;
  56.     ZeroMemory( &d3dpp, sizeof( d3dpp ) );
  57.     d3dpp.Windowed = TRUE;
  58.     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  59.     d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
  60.     LPDIRECT3DDEVICE9 pd3dDevice;
  61.     pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pd3dDevice );
  62.     DWORD* pVTable = ( DWORD* )pd3dDevice;
  63.     pVTable = ( DWORD* )pVTable[0];
  64.     *vtable = pVTable;
  65.     DestroyWindow( hWnd );
  66.     return;
  67. }
  68.  
  69. DWORD WINAPI MyThread( LPVOID lpParam )
  70. {
  71.  
  72.     PDWORD VTable = { 0 };
  73.     while ( GetModuleHandle( "d3d9.dll" ) == NULL )
  74.         Sleep( 350 );
  75.    
  76.  
  77.     GetVTable( &VTable );
  78.  
  79.  
  80.     oEndScene = ( tEndScene )DetourFunction( ( PBYTE )VTable[42], ( PBYTE )hkEndScene );
  81.  
  82.     return 0;
  83. }
  84.  
  85. BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
  86. {
  87.     switch ( dwReason )
  88.     {
  89.         case DLL_PROCESS_ATTACH:
  90.            
  91.             CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE )MyThread, NULL, 0x0, NULL );
  92.            
  93.             return true;
  94.  
  95.         break;
  96.     }
  97.     return false;
  98. }
Add Comment
Please, Sign In to add comment