| 
			
            
			
			 Новичок 
			
			
		
			
			
			
				 
				Регистрация: 25.08.2016 
				
				
				
					Сообщений: 21
				 
				 
	Сказал Спасибо: 0 
	
		
			
				Имеет 0 спасибок в 0 сообщенях
			
		
	 
				
				
				
				     
			 					
		
	 | 
	
	
	
		
		
			
			
				 
				
			 
			 
			
		
		
		
		
	Цитата: 
	
	
		
			
				
					Сообщение от  ScythLab
					 
				 
				Перехватывай эту функцию и смотри, что в нее передается. 
Либо используй перехват функций DirectX (Direct3DCreate9), в интернете есть примеры, как с помощью DirectX рисовать что-либо в окне La2 
			
		 | 
	 
	 
 finally i do it   
http://prntscr.com/ok1yqe
	Код: 
	void DrawTextX(int x, int y, const char *text,LPDIRECT3DDEVICE9 pDevice) {
    RECT rct = {x,y,0,0};
    LPD3DXFONT pFont = NULL;
 
    D3DXCreateFont(pDevice, 32, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &pFont);
    if (pFont) {
        pFont->DrawText( NULL, text, -1, &rct, DT_CALCRECT, 0 );
        pFont->DrawText( NULL, text, -1, &rct, DT_LEFT, D3DCOLOR_XRGB(0,255,0) );
        pFont->Release();
    }
 
}
HRESULT APIENTRY myEndScene( LPDIRECT3DDEVICE9 pDevice )
{
    while(!pDevice) {pDevice = pDevice;}   
    
    DrawTextX(100,100,"coderx.ru",pDevice);
    
    return pEndScene( pDevice );
}
PBYTE HookVTable( PDWORD* dwVTable, PBYTE dwHook, INT Index )
{
    DWORD dwOld = 0;
    VirtualProtect((void*)((*dwVTable) + (Index*4) ), 4, PAGE_EXECUTE_READWRITE, &dwOld);
    PBYTE pOrig = ((PBYTE)(*dwVTable)[Index]);
    (*dwVTable)[Index] = (DWORD)dwHook;
    VirtualProtect((void*)((*dwVTable) + (Index*4)), 4, dwOld, &dwOld);
 
    return pOrig;
}
LRESULT CALLBACK MsgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM  lParam){return DefWindowProc(hwnd, uMsg, wParam, lParam);}
void DX_Init(DWORD* table)
{
    WNDCLASSEXA wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandleA(NULL),NULL,NULL,NULL,NULL,"DX",NULL};
    RegisterClassExA(&wc);
    HWND hWnd = CreateWindowA("DX",NULL,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),NULL,wc.hInstance,NULL);
    LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    LPDIRECT3DDEVICE9 pd3dDevice;
    pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&pd3dDevice);
    DWORD* pVTable = (DWORD*)pd3dDevice;
    pVTable = (DWORD*)pVTable[0];
 
    table[0]   = pVTable[42];                    
    
 
    DestroyWindow(hWnd);
}
DWORD WINAPI VMT_Patching( LPVOID  Param )
{
    while(1)
    {
    Sleep(100);
    HookVTable((PDWORD*)nm_pD3Ddev, (PBYTE)myEndScene,42);         
    }
    return 1;
}
void D3D9_Interface_Hook()
{
    if(hooked==false) 
    {
        DWORD VTable[3] = {0};
        while(GetModuleHandleA("d3d9.dll")==NULL) 
        {
            Sleep(250);
        }
        DX_Init(VTable);
        pEndScene = (oEndScene)DetourFunction((PBYTE)VTable[0],(PBYTE)myEndScene);     
        while(!nm_pD3Ddev) 
        {
            Sleep(50); 
        }
        pEndScene = (oEndScene)DetourFunction((PBYTE)VTable[0],(PBYTE)pEndScene);    
        *(PDWORD)&pEndScene = VTable[0];
        CreateThread(NULL,0,&VMT_Patching,NULL,0,NULL); 
        hooked = true;
    }        
}
 Добавлено через 13 часов 10 минут
L2 Create new dx device when window resize? because when i resize window me draws stop working. how to fix it?  
		
	
		
		
		
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось wongerlt, 26.07.2019 в 12:23.
				Причина: Добавлено сообщение
				
			
		
		
	
	 |