Вылетает куча ошибок связанных с памятью или Access violation at address 77D4B95D in module 'USER 32.dll', никак не понимаю из за чего Code: unsigned long g; unsigned long*j; HWND H=FindWindow("TForm1","Сапёр"); GetWindowThreadProcessId(H,(LPDWORD)g); HANDLE ProcessHandle=NULL;
Получилось, спаасибо, но терь пытаюсь записать в память , но ни че не происходит, делаю то жэ самое из артмани все нормально Code: AnsiString str; unsigned long g; unsigned long*j; HWND H=FindWindow("TForm1","Сапёр"); GetWindowThreadProcessId(H,&g); HANDLE ProcessHandle=NULL; ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g); WriteProcessMemory(ProcessHandle,(void*)"00D82184", "1", 5, 0); ReadProcessMemory(ProcessHandle, (void*)"00D82184",str.c_str(), 5, 0); ShowMessage(str);
Почитал , пытаюсь сделать терь так , ругается на 0x5C6600 говорит Cannot convert 'const int' to 'const void *' че не пробовал не катит Code: unsigned long g; unsigned long*j; const PokeValue = 4; const NumberOfBytes = 4; const f=0x00D82184; HWND H=FindWindow("TForm1","Сапёр"); GetWindowThreadProcessId(H,&g); HANDLE ProcessHandle=NULL; ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g); Cardinal v; WriteProcessMemory(ProcessHandle,0x5C6600, PokeValue, NumberOfBytes, v);
Указатели - это такая вещь, что её нужно понять. Покури указатели пару неделек - это бесценный опыт, который останется у тебя на всю жизнь. Это поистине великолепная и полезная вещь! По теме - ты передаёшь параметр int вместо указателя на область памяти (void *). P.S. 0x5C6600 - это адрес памяти. Нам он ни о чём не говорит.
Я это понимаю, но я не соображаю каким хером я могу на указатель ссылаться Вот нашел WriteProcessMemory(hProcess, (LPVOID)0x5C6600, &newdata, newdatasize, NULL) У меня так не канает , брал здесь
Зачем тебе на указатель ссылать? Тебе нужно ссылать на область памяти, содержащую int? Тогда это примерно так: Code: int x = 5; void * pIntX; pIntX = &x; printf("%d", *((int *)pIntX)); Всё же советую разобраться с указателями. Всю жизнь будешь пользоваться ими.
Кажет та ж а ошибка, щас в консольном посмотрю с твоим примером С консольным нормально компилит Терь такая ошибка Cannot convert 'int' to 'void *' Code: HWND H; HANDLE ProcessHandle=NULL; const PokeValue = 4; const NumberOfBytes = 4; const f=0x00D82184; Cardinal v; int x = 5; void * pIntX; pIntX = &x; AnsiString str; unsigned long g; unsigned long*j; HWND H=FindWindow("TForm1","Сапёр"); GetWindowThreadProcessId(H,&g); ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS, false, g); WriteProcessMemory(ProcessHandle,*((int *)pIntX), PokeValue, NumberOfBytes, v);
Там, где ты передаешь функции int нужно передавать void* Может в разделе "о работе" создашь тему, чтобы быстрее было?
очевидно ты не понимаешь преобразование типов, что есть указатели, что именно хочет апишка. И void не надо передавать. Ему требуется указатель на воид.
Блин, тебе готовые куски кода нужны или ты хочешь разобраться в языке Си? Указатели изучаются на первом курсе (по-моему в первом семестре даже). Это основы основ. Как ты собираешься кодить на C/C++ без указателей!?