Гость mefasm Опубликовано 26 июня, 2013 Поделиться Опубликовано 26 июня, 2013 Написал код по этому уроку, количество патронов выводит не правильно.Убился нафик, сто раз уже проверил ((Подскажите что не так!#include <TlHelp32.h>#include <gdiplus.h>#pragma comment (lib, "gdiplus.lib")using namespace Gdiplus;#define width 640#define height 480WCHAR buffer[32];VOID OnPaint(HDC hdc){ Graphics graphics(hdc); SolidBrush brush(Color::Red); FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 24, FontStyleRegular, UnitPixel); PointF pointF(10.0f, 20.0f); graphics.DrawString(buffer, -1, &font, pointF, &brush);}DWORD GetProceesByName(char* pName){DWORD pID = 0;HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 pInfo;pInfo.dwSize = sizeof(PROCESSENTRY32);if (Process32First(snapShot, &pInfo)){ while(Process32Next(snapShot, &pInfo)) { if (_stricmp(pName, pInfo.szExeFile) == 0) { pID = pInfo.th32ParentProcessID; CloseHandle(snapShot); return pID; } }}CloseHandle(snapShot);return 0;}byte* ReadMemory(DWORD address, DWORD size, DWORD pID){static byte* bytes = new byte[size];HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID);ReadProcessMemory(hProcess, (void*)address, bytes, size, NULL);CloseHandle(hProcess);return bytes;}LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){WNDCLASSEX windowClass;HWND hWnd;MSG uMsg;GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;memset(&windowClass, 0, sizeof(WNDCLASSEX));windowClass.cbSize = sizeof(WNDCLASSEX);windowClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);windowClass.hInstance = hInstance;windowClass.lpfnWndProc = WindowProc;windowClass.lpszClassName = "Simple Window";RegisterClassEx(&windowClass);GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);hWnd = CreateWindow(windowClass.lpszClassName, "My First C++ Trainer", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - width) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2, width, height, NULL, NULL, NULL, NULL);ShowWindow(hWnd, nCmdShow);while (GetMessage(&uMsg, hWnd, NULL, NULL)){ TranslateMessage(&uMsg); DispatchMessage(&uMsg);}GdiplusShutdown(gdiplusToken);return uMsg.wParam;}LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){HDC hDC;PAINTSTRUCT ps;switch (uMsg){case WM_CREATE: CreateWindow("BUTTON", "Click me!", WS_CHILD | WS_VISIBLE, 40, 200, 100, 40, hWnd, (HMENU)1, NULL, NULL); break;case WM_COMMAND: switch (wParam) { case 1: { DWORD pID = GetProceesByName("farcry.exe"); DWORD ammo = 0; byte* ammoBytes = ReadMemory(0x1A719184, sizeof(DWORD), pID); memcpy(&ammo, ammoBytes, sizeof(DWORD)); wsprintfW(buffer, L"Procees ID = 0x%X\nAmmo: %d", pID, ammo); InvalidateRect(hWnd, NULL, true); } break; } break;case WM_CLOSE: ExitProcess(0); break;case WM_PAINT: hDC = BeginPaint(hWnd, &ps); OnPaint(hDC); EndPaint(hWnd, &ps); break;default: return DefWindowProc(hWnd, uMsg, wParam, lParam);}}#include <Windows.h> Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 июня, 2013 Поделиться Опубликовано 27 июня, 2013 Адрес в функции ReadMemory ты тоже взял из готового кода, или подставил свой? Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 27 июня, 2013 Поделиться Опубликовано 27 июня, 2013 mefasm 1A719184 статичний адрес патронов? По ходу нет, из за этого такие значение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость mefasm Опубликовано 27 июня, 2013 Поделиться Опубликовано 27 июня, 2013 Адрес не статический, по уроку в Cheat Engine находишь число патронов и подставляешь для демонстрации.Этот код не готовый, я писал его по уроку. Где-то "очепятка", не могу найти, в уроке то все нормально Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость mefasm Опубликовано 30 июня, 2013 Поделиться Опубликовано 30 июня, 2013 Нашел ошибку, вот правильный код:#include <TlHelp32.h>#include <gdiplus.h>#pragma comment (lib, "gdiplus.lib")using namespace Gdiplus;#define width 640#define height 480WCHAR buffer[32];VOID OnPaint(HDC hdc){ Graphics graphics(hdc); SolidBrush brush(Color::Red); FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 24, FontStyleRegular, UnitPixel); PointF pointF(10.0f, 20.0f); graphics.DrawString(buffer, -1, &font, pointF, &brush);}DWORD GetProceesByName(char* pName){DWORD pID = 0;HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 pInfo;pInfo.dwSize = sizeof(PROCESSENTRY32);if (Process32First(snapShot, &pInfo)){ while(Process32Next(snapShot, &pInfo)) { if (_stricmp(pName, pInfo.szExeFile) == 0) { pID = pInfo.th32ProcessID; CloseHandle(snapShot); return pID; } }}CloseHandle(snapShot);return 0;}byte* ReadMemory(DWORD address, DWORD size, DWORD pID){static byte* bytes = new byte[size];HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID);ReadProcessMemory(hProcess, (void*)address, bytes, size, NULL);CloseHandle(hProcess);return bytes;}LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){WNDCLASSEX windowClass;HWND hWnd;MSG uMsg;GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;memset(&windowClass, 0, sizeof(WNDCLASSEX));windowClass.cbSize = sizeof(WNDCLASSEX);windowClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);windowClass.hInstance = hInstance;windowClass.lpfnWndProc = WindowProc;windowClass.lpszClassName = "Simple Window";RegisterClassEx(&windowClass);GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);hWnd = CreateWindow(windowClass.lpszClassName, "My First C++ Trainer", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - width) / 2, (GetSystemMetrics(SM_CYSCREEN) - height) / 2, width, height, NULL, NULL, NULL, NULL);ShowWindow(hWnd, nCmdShow);while (GetMessage(&uMsg, hWnd, NULL, NULL)){ TranslateMessage(&uMsg); DispatchMessage(&uMsg);}GdiplusShutdown(gdiplusToken);return uMsg.wParam;}LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){HDC hDC;PAINTSTRUCT ps;switch (uMsg){case WM_CREATE: CreateWindow("BUTTON", "Click me!", WS_CHILD | WS_VISIBLE, 40, 200, 100, 40, hWnd, (HMENU)1, NULL, NULL); break;case WM_COMMAND: switch (wParam) { case 1: { DWORD pID = GetProceesByName("farcry.exe"); DWORD ammo = 0; byte* ammoBytes = ReadMemory(0x1B2DF184, sizeof(DWORD), pID); memcpy(&ammo, ammoBytes, sizeof(DWORD)); wsprintfW(buffer, L"Procees ID = 0x%X\nAmmo: %d", pID, ammo); InvalidateRect(hWnd, NULL, true); } break; } break;case WM_CLOSE: ExitProcess(0); break;case WM_PAINT: hDC = BeginPaint(hWnd, &ps); OnPaint(hDC); EndPaint(hWnd, &ps); break;default: return DefWindowProc(hWnd, uMsg, wParam, lParam);}}#include <Windows.h> Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения