Другое С/С++ Вопрос - Ответ

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
есть пример подключения imgui к d3d9 игре?
 
  • Нравится
Реакции: Ren_Boyko

Cake_

Известный
Проверенный
263
313
есть пример подключения imgui к d3d9 игре?
C++:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <Mmsystem.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <sstream>
#include "CDetour/CDetour.h"
#include "ImGui/imgui.h"
#include "ImGui/imgui_impl_dx9.h"
#include "ImGui/imgui_internal.h"
#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
CDetour d3dcreateDetour;
CDetour d3d9endsceneDetour;
CDetour d3d9resetDetour;
ID3DXFont *Fonte;
IDirect3DDevice9 *pInterface;
bool CriarComponentes = true;
bool b2 = false;
int __stdcall DllMain( HMODULE, DWORD, LPVOID );
void ApplyHooks( int );
void __stdcall myCreateDevice( IDirect3D9*, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS* , IDirect3DDevice9 ** );
void __stdcall myEndScene( IDirect3DDevice9* );
HRESULT __stdcall myReset( IDirect3DDevice9*, D3DPRESENT_PARAMETERS* );
WNDPROC oriWndProc = NULL;
extern LRESULT ImGui_ImplDX9_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
bool isImGUiOK = false, testbool;
float testslider;
bool bShowMenu;
D3DDEVICE_CREATION_PARAMETERS d3dcp;
LRESULT CALLBACK hWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if (ImGui_ImplDX9_WndProcHandler(hwnd, uMsg, wParam, lParam) && GetKeyState(VK_INSERT) == 1)
    {
        return 1l;
    }
    return CallWindowProc(oriWndProc, hwnd, uMsg, wParam, lParam);
}
void MenuRender()
{
    if (!bShowMenu)
        return;
    std::cout << "atleast we reach a point" << std::endl;
    ImGui_ImplDX9_NewFrame();
    if (ImGui::Begin("Test Menu", 0, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_ShowBorders))
    {
        ImGui::Text("Example");
        if (ImGui::Button("Start", ImVec2(50, 25)))
        {
        }
        ImGui::SameLine();
        ImGui::SliderFloat("Slider", &testslider, 0, 360);
        ImGui::Checkbox("CheckBox Function", &testbool);
        ImGui::End();
    }
    ImGui::Render();
    std::cout << "WE GOOD" << std::endl;
}
void WriteTextOnScreen( int X, int Y, D3DCOLOR Cor, const char *Texto, ...)
{
    RECT Rect; Rect.bottom = Y + 1000; Rect.left = X; Rect.right = X + 1000; Rect.top = Y;
    char sTexto[256];
    va_list vArgumentList;
    va_start( vArgumentList, Texto);
    _vsnprintf_s( sTexto, sizeof( sTexto), sizeof( sTexto), Texto, vArgumentList );
    va_end( vArgumentList );
 
    //BORDER BLACK
    RECT Rect2 = { X + 1, Y + 1, X + 1, Y + 1 };
    Fonte->DrawTextA( NULL, sTexto, -1, &Rect2, DT_NOCLIP, 0xFF000000 );
 
    Fonte->DrawTextA( NULL, sTexto, -1, &Rect, 0, Cor );
}
void __stdcall myEndScene(LPDIRECT3DDEVICE9 UnidadeD3D9 )
{
    if( CriarComponentes )
    {
        D3DXCreateFontA( UnidadeD3D9, 16, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, 6, DEFAULT_PITCH | FF_DONTCARE, "Arial", &Fonte );
        CriarComponentes = false;
    }
    if( Fonte )
        WriteTextOnScreen( 10, 10, D3DCOLOR_ARGB( 255, 0, 255, 0 ), "Testing D3D9 SRO Hooking !" );
    if (!isImGUiOK)
    {
        ImGuiIO& io = ImGui::GetIO();
        io.DeltaTime = 1.0f / 60.0f;
        UnidadeD3D9->GetCreationParameters(&d3dcp);
        io.Fonts->AddFontDefault();
        if (!ImGui_ImplDX9_Init(&d3dcp, UnidadeD3D9))
            std::cout << "here a ba4a" << std::endl;
        isImGUiOK = true;
    }
    if (GetAsyncKeyState(VK_INSERT) & 1)
    {
        bShowMenu = !bShowMenu;
    }
    DWORD dwOld_D3DRS_COLORWRITEENABLE;
    UnidadeD3D9->GetRenderState(D3DRS_COLORWRITEENABLE, &dwOld_D3DRS_COLORWRITEENABLE); // Lets us draw without Net_Graph
    UnidadeD3D9->SetRenderState(D3DRS_COLORWRITEENABLE, 0xffffffff);
    MenuRender();
    UnidadeD3D9->SetRenderState(D3DRS_COLORWRITEENABLE, dwOld_D3DRS_COLORWRITEENABLE);
    ImGui::GetIO().MouseDrawCursor = bShowMenu;
}
HRESULT __stdcall myReset( IDirect3DDevice9 *UnidadeD3D9, D3DPRESENT_PARAMETERS* PresentationParameters )
{
    __asm pushad
    if( Fonte ){
        Fonte->OnLostDevice();
    }
    HRESULT hRetn = (HRESULT)d3d9resetDetour.Org( UnidadeD3D9, PresentationParameters );
    if( SUCCEEDED( hRetn ) ){
        if(Fonte)
            Fonte->OnResetDevice();
    }
    __asm popad
    return hRetn;
}
void __stdcall myCreateDevice( IDirect3D9* d3d, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9 **ppReturnedDeviceInterface )
{
    d3dcreateDetour.Org( d3d, Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface );
    pInterface = *ppReturnedDeviceInterface;
    if( !b2 )
        ApplyHooks( 2 );
}
void ApplyHooks( int nType )
{
    if( nType == 1 )
    {
        unsigned long* pD3DVTable;
        IDirect3D9* pD3D = Direct3DCreate9( D3D_SDK_VERSION );
    
        if( !pD3D ) // INVALID OBJECT
            return;
        pD3DVTable = (unsigned long*)*(unsigned long*)pD3D;
        pD3D->Release();
        // pD3DVTable[16] = IDirect3D9::CreateDevice
        d3dcreateDetour.Detour( (unsigned char*)pD3DVTable[16], (unsigned char*)myCreateDevice );
        d3dcreateDetour.Apply();
    }
    else if( nType == 2 )
    {
        unsigned long* pD3D9VTable;
        if( !pInterface )
            return;
        pD3D9VTable = (unsigned long*)*(unsigned long*)pInterface;
        // pD3D9VTable[42] = IDirect3DDevice9::EndScene
        d3d9endsceneDetour.Detour( (unsigned char*)pD3D9VTable[42], (unsigned char*)myEndScene, true );
        d3d9endsceneDetour.Apply();
        // pD3D9VTable[16] = IDirect3DDevice9::Reset
        d3d9resetDetour.Detour( (unsigned char*)pD3D9VTable[16], (unsigned char*)myReset );
        d3d9resetDetour.Apply();
        b2 = true;
    }
}
void User_Initialize()
{
    Sleep(2000);
    oriWndProc = (WNDPROC)SetWindowLongPtr(FindWindow(NULL, "SRO_Client"),
        GWL_WNDPROC, (LONG)(LONG_PTR)hWndProc);
    if (oriWndProc == NULL)
        std::cout << "Failed to hook wndproc " << std::endl;
    else
        std::cout << "nice hook wndproc " << std::endl;
}
int __stdcall DllMain( HMODULE hModule, DWORD dwReason, LPVOID )
{
    DisableThreadLibraryCalls( hModule );
    if( dwReason == DLL_PROCESS_ATTACH )
    {
        AllocConsole();
        freopen("CONIN$", "r", stdin);
        freopen("CONOUT$", "w", stdout);
        std::cout << "--------------------------------" << std::endl;
        std::cout << "Sro Library starting in debug mode" << std::endl;
        std::cout << "Compile time " << __DATE__ << " " << __TIME__ << std::endl;
        std::cout << "--------------------------------" << std::endl;
        std::cout << "New SRO Window TEST Initialized " << std::endl;
        std::cout << "--------------------------------" << std::endl;
        ApplyHooks( 1 );
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)User_Initialize, 0, 0, 0);
    }
    return true;
}

есть пример подключения imgui к d3d9 игре?
https://github.com/ocornut/imgui
 
Последнее редактирование:
  • Нравится
Реакции: atizoff

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
как сделать проверку лицензии
 

astap_

Известный
Всефорумный модератор
626
597
как сделать проверку лицензии
самый хуёвый вариант. обойдёт даже мамин хакер, но тебе будет норм думаю.

Код:
// если тебе для сампа, то засунь в DllMain
char VolumeNameBuffer[255], FileSystemNameBuffer[255];
DWORD VolumeSerialNumber, MaximumComponentLength, FileSystemFlags;
GetVolumeInformation("C:\\", VolumeNameBuffer, 255, &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, 255);

if (VolumeSerialNumber != 3232323221) return FALSE;
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
как сделать настраиваемую(типа можно время указать) задержку перед отжатием клавиши ?
upload_2019-5-4_15-14-59.png
 

rraggerr

проверенный какой-то
1,626
847
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
Последнее редактирование: