Попробуй использовать Wide-аналог этой функции - swscanf_s. В проекте используй набор символов Юникода (Unicode Character Set). Отпиши, помогло или нет.как заставить sscanf работать с русскими символами?
Странно, ведь у меня работает GetDC и при простом подключении Windows.h. Не забывай отрисовочный контекст (DC) чистить, когда ты им воспользовался, и он тебе не нужен. Т.к используется ф-я GetDC, то чистим при помощи ReleaseDC. Рекомендую ознакомиться с этой страницей - http://www.vsokovikov.narod.ru/New_MSDN_API/D_context/fn_releasedc.htm. В частности, нам интересен текст под заголовком "Замечания". Если ты скинул код неполностью и ты используешь эту функцию где-то у себя дальше, то прошу прощения за наезд.Ошибка LNK2019 ссылка на неразрешенный внешний символ "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "void __clrcall `dynamic initializer for 'hdc''(void)" (???__Ehdc@@YMXXZ@?A0xa98138a8@@$$FYMXXZ)
Юникод на многобайтовую кодировку менял, не помогло. На странице ошибки слишком размыто и инфы конкретной я не нашел
Memory.h:#include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <memory.h> #include <memory> DWORD GetProcId(const char* procName) { DWORD procId = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof(procEntry); if (Process32First(hSnap, &procEntry)) { do { if (!strcmp(procEntry.szExeFile, procName)) { procId = procEntry.th32ProcessID; break; } } while (Process32Next(hSnap, &procEntry)); } } CloseHandle(hSnap); return procId; } uintptr_t GetModuleBaseAddress(DWORD procId, const char* modName) { uintptr_t modBaseAddr = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32 modEntry; modEntry.dwSize = sizeof(modEntry); if (Module32First(hSnap, &modEntry)) { do { if (!strcmp(modEntry.szModule, modName)) { modBaseAddr = (uintptr_t)modEntry.modBaseAddr; break; } } while (Module32Next(hSnap, &modEntry)); } } CloseHandle(hSnap); return modBaseAddr; } uintptr_t moduleBase = GetModuleBaseAddress(GetProcId("gta_sa.exe"), "samp.dll"); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetProcId("gta_sa.exe")); HDC hdc = GetDC(FindWindowA(NULL, "GTA:SA:MP")); template<typename T> T RPM(SIZE_T address) { T buffer; ReadProcessMemory(hProcess, (LPCVOID)address, &buffer, sizeof(T), NULL); return buffer; }
написано же. попытка чтения защищенного участка памяти. снимай virtual protectСпасибо большое, но уже
#pragma comment(lib, "User32.lib") #include <Dbghelp>
всё решило. Теперь у меня проблема с чтением памяти, или что-то вроде, не могу решить уже второй день. Выше мой вопрос.Посмотреть вложение 55507
Нужно снять защиту с памяти, записать туда необходимое значение и вернуть защиту.Спасибо большое, но уже
#pragma comment(lib, "User32.lib") #include <Dbghelp>
всё решило. Теперь у меня проблема с чтением памяти, или что-то вроде, не могу решить уже второй день. Выше мой вопрос.Посмотреть вложение 55507
Чет там все для шарпа, я не понимаю. Понял, что память не может читаться, но почему?
вот это вообще непонятно куда и зачем
Посмотреть вложение 55331
так ты тоже самое делаешь
удали 615-620 строкиНичего не понимаю, разве я таким образом не читаю память gta_sa.exe? Как тогда адрес игры читать? Раньше только так делал и все нормально было.
C++:#pragma once #include <Windows.h> #include <TlHelp32.h> #include <iostream> #include <dbgHelp.h> #pragma comment(lib, "User32.lib") DWORD GetProcId(const char* procName) { DWORD procId = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 procEntry; procEntry.dwSize = sizeof(procEntry); if (Process32First(hSnap, &procEntry)) { do { if (!strcmp(procEntry.szExeFile, procName)) { procId = procEntry.th32ProcessID; break; } } while (Process32Next(hSnap, &procEntry)); } } CloseHandle(hSnap); return procId; } uintptr_t GetModuleBaseAddress(DWORD procId, const char* modName) { uintptr_t modBaseAddr = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32 modEntry; modEntry.dwSize = sizeof(modEntry); if (Module32First(hSnap, &modEntry)) { do { if (!strcmp(modEntry.szModule, modName)) { modBaseAddr = (uintptr_t)modEntry.modBaseAddr; break; } } while (Module32Next(hSnap, &modEntry)); } } CloseHandle(hSnap); return modBaseAddr; } uintptr_t moduleBase = GetModuleBaseAddress(GetProcId("gta_sa.exe"), "samp.dll"); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetProcId("gta_sa.exe")); HDC hdc = GetDC(FindWindowA(NULL, "GTA:SA:MP")); template <typename T> T RPM(SIZE_T address) { //The buffer for data that is going to be read from memory T buffer; //The actual RPM ReadProcessMemory(hProcess, (LPCVOID)address, &buffer, sizeof(T), NULL); //Return our buffer return buffer; }
WORD wID;
DWORD pActor, pPed, pMtrx1, pMtrx2;
float fPlayerHP;
ReadProcessMemory(hProcess, (LPVOID) 0xBAA410, &wID, sizeof(wID));
ReadProcessMemory(hProcess, (LPVOID) 0xBAA410, &pActor, sizeof(pActor));
ReadProcessMemory(hProcess, (LPVOID) (pActor + 0x79C), &pPed, sizeof(pPed));
ReadProcessMemory(hProcess, (LPVOID) (pPed + 0x14), &pMtrx2, sizeof(pMtrx2));
ReadProcessMemory(hProcess, (LPVOID) (pPed + 0x540), &fPlayerHP, sizeof(fPlayerHP));
ReadProcessMemory(hProcess, (LPVOID) (pActor + 0x14), &pMtrx1, sizeof(pMtrx1));
тебе стоит проделать такую же работу на 630-639 строкахЭто то, о чем сейчас Алфёров написал? Ошибка пропала, но работать не хочет.
видимо, ты совсем ничего не понялНу вот, как-то так, но с 37 по 43 нельзя преобразовать float в LPVOID
C++:private: System::Void TEST_Click(System::Object^ sender, System::EventArgs^ e) { WORD wID; DWORD pActor, pPed, pMtrx1, pMtrx2; float fPlayerHP; ReadProcessMemory(hProcess, (LPVOID)0xBAA410, &wID, sizeof(wID),0); ReadProcessMemory(hProcess, (LPVOID)0xBAA410, &pActor, sizeof(pActor),0); ReadProcessMemory(hProcess, (LPVOID)(pActor + 0x79C), &pPed, sizeof(pPed),0); ReadProcessMemory(hProcess, (LPVOID)(pPed + 0x14), &pMtrx2, sizeof(pMtrx2),0); ReadProcessMemory(hProcess, (LPVOID)(pPed + 0x540), &fPlayerHP, sizeof(fPlayerHP),0); if (&pPed > 0) { float* x = (float*)((&pMtrx1) + 0x30);//X position Ped float* y = (float*)((&pMtrx1) + 0x34);//Y position Ped float* z = (float*)((&pMtrx1) + 0x38);//Z position Ped float* x1 = (float*)((&pMtrx2) + 0x30);//X position Target float* y1 = (float*)((&pMtrx2) + 0x34);//Y position Target float* z1 = (float*)((&pMtrx2) + 0x38);//Z position Target float* RotAngle = (float*)((&pActor) + 0x558);//health of target player float Xwiping = (float)*x + 2 * (float)cos(*RotAngle + 1.48353F); float Ywiping = (float)*y + 2 * (float)sin(*RotAngle + 1.48353F); float Zwiping = (float)*z + 0.5F; *x1 = (float)Xwiping; *y1 = (float)Ywiping; *z1 = (float)Zwiping; ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x30), &pMtrx1, sizeof(pMtrx1), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x34), &pMtrx1, sizeof(pMtrx1), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x38), &pMtrx1, sizeof(pMtrx1), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x30), &pMtrx2, sizeof(pMtrx2), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x34), &pMtrx2, sizeof(pMtrx2), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x38), &pMtrx2, sizeof(pMtrx2), 0); ReadProcessMemory(hProcess, (LPVOID)(float*)((&pActor) + 0x558), &pActor, sizeof(pActor), 0); ReadProcessMemory(hProcess, (LPVOID)(float)*x + 2 * (float)cos(*RotAngle + 1.48353F), &RotAngle, sizeof(RotAngle), 0); ReadProcessMemory(hProcess, (LPVOID)(float)*y + 2 * (float)sin(*RotAngle + 1.48353F), &RotAngle, sizeof(RotAngle), 0); ReadProcessMemory(hProcess, (LPVOID)(float)*z + 0.5F, &RotAngle, sizeof(RotAngle), 0); WriteProcessMemory(hProcess, (LPVOID)(float)Xwiping, &Xwiping, sizeof(Xwiping), 0); WriteProcessMemory(hProcess, (LPVOID)(float)Ywiping, &Ywiping, sizeof(Ywiping), 0); WriteProcessMemory(hProcess, (LPVOID)(float)Zwiping, &Zwiping, sizeof(Zwiping), 0); } }
float x, y, z, xt, yt, zt, angle, xw, yw, zw;
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x30), &x, sizeof(x), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x34), &y, sizeof(y), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x38), &z, sizeof(z), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x30), &xt, sizeof(xt), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x34), &yt, sizeof(yt), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x38), &zt, sizeof(zt), 0);
ReadProcessMemory(hProcess, (LPVOID)(pActor + 0x558), &angle, sizeof(angle), 0);
xw = (float)x + 2 * (float)cos(angle + 1.48353F);
yw = (float)y + 2 * (float)sin(angle + 1.48353F);
zw = (float)z + 0.5F;
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x30), &xw, sizeof(xw), 0);
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x34), &yw, sizeof(yw), 0);
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x38), &zw, sizeof(zw), 0);