

zorinchel
Стажёры-
Постов
9 -
Зарегистрирован
-
Посещение
Репутация
1 Навыки не прокачены-
а таким образом можно вывести не текст, а например окно другой программы?
-
[С++] Вывод окна одной игры поверх другой
zorinchel опубликовал тема в Высокоуровневое программирование
Привет! Может кто-нибудь подскажет как нормально вывести окно одной игры поверх другой, а то у меня получается совсем не то что нужно вот что получилось в итоге -
DWORD WINAPI GtaSA_thread (LPVOID){while(true){INT value = *(DWORD*)(*(DWORD*)(*(DWORD*)(0xBA18FC)+0x384)+0x00);if(value==188){DWORD*var = (DWORD*)(0x6CC3B2);DWORD*var2 = (DWORD*)(0x6C9103);DWORD*var3 = (DWORD*)(0x406AF3);DWORD*var4 = (DWORD*)(0x6c9690);DWORD*var5 = (DWORD*)(0x6C9F1C);DWORD*var6 = (DWORD*)(0x6C8F10);*var -= 0x2c0000;*var2 -= 0x2c0000;*var3 -= 0x2c0000;*var4 -= 0x2c0000;*var5 -= 0x2c0000;*var6 -= 0x2c0000;}Sleep(500);}return 0;}
-
цепочка указателей в таблице #include <iostream>#include <windows.h>#include <string>#include <conio.h>#include <fstream>#include <iomanip>#include <stdio.h>#include <io.h>#include <fcntl.h>#include <mmsystem.h>#pragma comment(lib, "winmm")using namespace std; DWORD WINAPI GtaSA_thread (LPVOID); DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID ipReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread (NULL, NULL, GtaSA_thread, NULL, NULL, NULL); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return true;} void CreateConsole (){int hConHandle = 0;HANDLE lStdHandle = 0;FILE *fp = 0;AllocConsole ();SetConsoleTitle ("ID ");lStdHandle = GetStdHandle (STD_OUTPUT_HANDLE);hConHandle = _open_osfhandle (PtrToUlong (lStdHandle), _O_TEXT);fp = _fdopen (hConHandle, "w");*stdout = *fp;setvbuf (stdout, NULL, _IONBF, 0);}DWORD WINAPI GtaSA_thread (LPVOID){ DWORD base = 0xBA18FC; DWORD p1 = 0; DWORD p2 = 0; DWORD p3 = 0; DWORD p4 = 0; DWORD old_prot = 0; VirtualProtectEx(GtaSA_thread, (LPVOID)base, sizeof(base), PAGE_EXECUTE_READWRITE, &old_prot); ReadProcessMemory(GtaSA_thread, (LPVOID)base, &p1, sizeof(base), NULL);//прочитали, записали в p1 p2 = p1 + 0x384;// прибавили смещение ReadProcessMemory(GtaSA_thread, (LPVOID)p2, &p3, sizeof(p2), NULL);//прочитали адрес p2, записали в p3 p3 = p2 + 0x00; ReadProcessMemory(GtaSA_thread, (LPVOID)p3, &p4, sizeof(p3), NULL); if (p4 == 188) {// если равно, то DWORD*var = (DWORD*)(0x6CC3B2); DWORD*var2 = (DWORD*)(0x6C9103); DWORD*var3 = (DWORD*)(0x406AF3); DWORD*var4 = (DWORD*)(0x6c9690); DWORD*var5 = (DWORD*)(0x6C9F1C); DWORD*var6 = (DWORD*)(0x6C8F10); *var -= 0x2c0000; *var2 -= 0x2c0000; *var3 -= 0x2c0000; *var4 -= 0x2c0000; *var5 -= 0x2c0000; *var6 -= 0x2c0000; WriteProcessMemory(GtaSA_thread, (void*)var, var, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var2, var2, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var3, var3, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var4, var4, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var5, var5, sizeof(4), NULL);WriteProcessMemory(GtaSA_thread, (void*)var6, var6, sizeof(4), NULL); } CreateConsole (); { for (;;Sleep (1000)) printf (" ID = %p", p4); return 0; } }