INTERNAL hile yapımının ardından sıra d3d hook yapımına geldi bundan sonraki derlerde ise menüyü özelleştirmeyi göstermek istiyorum ama şimdi sadece ImGui projesini kodumuza nasıl dahil edeceğimizi gösterdim yabancı sitelerde gördüğünüz menüleri bizde yapabileceğiz artık.
buradan kodları indirebilirsiniz.
dosya silinse dahi internetten aratıp kolayca bulabilirsiniz.
Oluşturduğunuz projede sırayı takip ederek copy-paste yaparsanız hiç bir sıkıntı çekmezsiniz.
Genel Tanımlamalar
hkEndScene
Bu kısım ekrana çizdirilecek alan yani burası süreklü güncellenir oyundayken.
Create D3D
Burası oyun üzerinde yeni bir D3Dservice oluştur kullanmamız için;
Gui Erişimi
gui üzerindeki butonları vs. kullanmamıza yarayan fonk.
Enjekte etme
burda kodumuz oyuna dahil oluyor;
Bağlantıları görmek için lütfen
Giriş Yap
buradan kodları indirebilirsiniz.
Bağlantıları görmek için lütfen
Giriş Yap
dosya silinse dahi internetten aratıp kolayca bulabilirsiniz.
Oluşturduğunuz projede sırayı takip ederek copy-paste yaparsanız hiç bir sıkıntı çekmezsiniz.
Genel Tanımlamalar
C++:
#include <Windows.h>
#include "detours.h"
#include <d3d9.h>
#include <iostream>
#pragma comment (lib, "d3d9.lib")#include "imgui/imgui.h"
#include "imgui/imgui_impl_dx9.h"
#include "imgui/imgui_impl_win32.h"
#define HOOK(func,addy)
o##func = (t##func)DetourFunction((PBYTE)addy,(PBYTE)hk##func)
#define ES
0typedef HRESULT(WINAPI* tEndScene)(LPDIRECT3DDEVICE9 pDevice);
LRESULT CALLBACK MsgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); }
tEndScene oEndScene;
LPCSTR windowName = "Counter-Strike: Global Offensive";
WNDPROC oWndProc;
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
hkEndScene
Bu kısım ekrana çizdirilecek alan yani burası süreklü güncellenir oyundayken.
C++:
HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
/* Ekranda biþey çizdirmek istediðimiz de bu fonksiyon altýna yazmamýz gerekiyor. :D*/
/*D3DRECT BarRect = { 100, 100, 200, 200 };
pDevice->Clear(1, &BarRect, D3DCLEAR_TARGET, D3DCOLOR_ARGB(1, 1, 1, 1), 0.0f, 0); // was black because its upp to 255 and not 0 to 1 :')*/
static bool init = true;
if (init)
{
init = false;
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
ImGui_ImplWin32_Init(FindWindowA(NULL, windowName));
ImGui_ImplDX9_Init(pDevice);
}
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
//
/*imgui kullanma alaný*/
ImGui::ShowDemoWindow();
//mebu son
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
return oEndScene(pDevice);
}
Create D3D
Burası oyun üzerinde yeni bir D3Dservice oluştur kullanmamız için;
C++:
void DX_Init(DWORD* table)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,"DX",NULL };
RegisterClassEx(&wc);
HWND hWnd = CreateWindow("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[ES] = pVTable[42];
DestroyWindow(hWnd);
}
Gui Erişimi
gui üzerindeki butonları vs. kullanmamıza yarayan fonk.
C++:
LRESULT __stdcall WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (true && ImGui_ImplWin32_WndProcHandler(hWnd, uMsg, wParam, lParam))
return true;
return CallWindowProc(oWndProc, hWnd, uMsg, wParam, lParam);
}
burda kodumuz oyuna dahil oluyor;
C++:
DWORD WINAPI MyThread(LPVOID)
{
HWND window = FindWindowA(NULL, windowName);
oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
DWORD VTable[3] = { 0 };
while (GetModuleHandle("d3d9.dll") == NULL) {
Sleep(250);
}
DX_Init(VTable);
HOOK(EndScene, VTable[ES]);
return 0;
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH) {
CreateThread(0, 0, MyThread, 0, 0, 0);
}
return TRUE;
}