Такой темы еще не было, поэтому пишу полное руководство с подробным описанием.
Мне проще писать на С++, для делфей придется переделывать.
и так, начнем.
создайте таймер, поставьте время обновления около 100мс и в процедуре срабатывания таймера напишите такой код, ниже идет объяснение кода.
Код:
HWND wnd = FindWindow("D3D Window",NULL);
if (wnd)
{
DWORD ProcessId;
GetWindowThreadProcessId(wnd,&ProcessId);
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,ProcessId);
if (hdl)
{
DWORD a=0x00000000;
DWORD b;
ReadProcessMemory(hdl,(LPVOID)a,&b,4,0);
b=b+000;
WriteProcessMemory(hdl, (LPVOID)b, (LPVOID)&Speed, 4, 0);
CloseHandle(hdl);
}
}
HWND wnd = FindWindow("D3D Window",NULL);
В этой строке мы ищем окно, я ищу не по заголовку, а по типу окна, это удобней, если у вас загружено несколько клиентов игры, но если хотите искать по заголовку, то нужно будет написать HWND wnd = FindWindow(NULL,"RF Online");
if (wnd)
Ну тут думаю все понятно, идет проверка на результат, если окно найдено, то выполняем следующий текст, если не найдено, то ничего не выполняем
{
DWORD ProcessId;
GetWindowThreadProcessId(wnd,&ProcessId);
ищем процесс найденного окна
HANDLE hdl = OpenProcess(PROCESS_ALL_ACCESS,0,ProcessId);
открываем процесс со всеми правами (так нехорошо конечно, но так проще)
if (hdl)
и как обычно, проверка, смогли ли мы открыть процесс со всеми правами, если смогли, выполняем код, если нет, то ничего не выполняем.
{
DWORD a=0x00000000; //этой переменной присваеваем адрес указателя,
DWORD b;
ReadProcessMemory(hdl,(LPVOID)a,&b,4,0);
Читаем значение, которое хранится в адсесе "а" в переменную "b"
b=b+000;
прибавляем к прочитанному значению смещение.
WriteProcessMemory(hdl, (LPVOID)b, (LPVOID)&Speed, 4, 0);
записываем в получившийся адрес "b" значение скорости, хранящееся в переменной Speed, не забываем, что переменная Speed вещественное число.
CloseHandle(hdl);
и не забываем закрыть открытый нами процесс.