WriteProcessMmory를 쓰는데 메모리값이 안써져용
어디서잘못된거죠?
procedure TMainForm.AddMenuClick(Sender: TObject);
var
Form : TAddCheatForm;
Cheat : PCheat;
i : Integer;
hProc : THandle;
iWritten : Cardinal;
xByte : Byte;
xWord : Word;
xDword : DWORD;
begin
Form := TAddCheatForm.Create(Self);
Form.Address.Text := Results.Selected.Caption;
Form.Value.Text := Results.Selected.SubItems[0];
Case Mode of
smByte:
Form.Size.ItemIndex := 0;
smWord:
Form.Size.ItemIndex := 1;
smDword:
Form.Size.ItemIndex := 2;
End;
Form.ActiveControl := Form.Description;
try
if Form.ShowModal = mrOK then
begin
FreezeTimer.Enabled := False;
CheatsTimer.Enabled := False;
New(Cheat);
Cheat^.Address := HexToInt(Form.Address.Text);
Cheat^.Value := StrToInt(Form.Value.Text);
Cheat^.Freeze := Form.Freeze.Checked;
if Form.Description.Text = '' then
Cheat^.Description := 'Description'
else
Cheat^.Description := Form.Description.Text;
Case Form.Size.ItemIndex of
0:
Cheat^.Size := 1;
1:
Cheat^.Size := 2;
2:
Cheat^.Size := 4;
End;
Cheats.Add(Cheat);
hProc := OpenProcess(PROCESS_VM_WRITE, False, Process.th32ProcessID);
if hProc = 0 then
begin
exit;
end;
Case PCheat(Cheats.Items[Cheats.Count-1])^.Size of
1:
begin
xByte := PCheat(Cheats.Items[Cheats.Count-1])^.Value;
WriteProcessMemory(hProc, Pointer(PCheat(Cheats.Items[Cheats.Count-1])^.Address), @xByte, 1, iWritten);
end;
2:
begin
xWord := PCheat(Cheats.Items[Cheats.Count-1])^.Value;
WriteProcessMemory(hProc, Pointer(PCheat(Cheats.Items[Cheats.Count-1])^.Address), @xWord, 2, iWritten);
end;
4:
begin
xDword := PCheat(Cheats.Items[Cheats.Count-1])^.Value;
WriteProcessMemory(hProc, Pointer(PCheat(Cheats.Items[Cheats.Count-1])^.Address), @xDword, 4, iWritten);
end;
end;
bIsDirty := True;
end;
CloseHandle(hProc);
RefreshCheats;
SaveMenu.Enabled := True;
SaveButton.Enabled := True;
FreezeTimer.Enabled := True;
CheatsTimer.Enabled := True;
finally
end;
end;
|