using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using RomCheater.Logging; using System.Diagnostics; namespace RomCheater.Docking.MemorySearch { public partial class SearchRangePatcher : Form { //PCSX2MemoryProvider provider; private int pid = -1; SearchDataTypes DataType; //bool Unsigned = false; private List PatchList; public SearchRangePatcher(int pid,List patchList) { InitializeComponent(); this.pid = pid; PatchList = patchList; int CurrentBitSize = 0; // get the larget datatype foreach (ResultDataType patch in PatchList) { if ((int)patch.ValueType > CurrentBitSize) { CurrentBitSize = (int)patch.ValueType; } } switch (CurrentBitSize) { case (int)SearchDataTypes._8bits: txtValue.CreateTypeSize(); break; case (int)SearchDataTypes._16bits: txtValue.CreateTypeSize(); break; case (int)SearchDataTypes._32bits: txtValue.CreateTypeSize(); break; case (int)SearchDataTypes._64bits: txtValue.CreateTypeSize(); break; } } private void SearchPatcher_Load(object sender, EventArgs e) { txtValue.ReadOnly = false; } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void btnOK_Click(object sender, EventArgs e) { Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader(); reader.ReadProcess = Process.GetProcessById(pid); if (reader.ReadProcess == null) { logger.Error.WriteLine("Could not attach to process: {0}", pid); return; } foreach(ResultDataType patch in PatchList) { switch (patch.ValueType) { case SearchDataTypes._8bits: if (patch.IsUnsigned) { reader.PatchMemory(patch.Address, (byte)txtValue.Value); } else { reader.PatchMemory(patch.Address, (sbyte)txtValue.Value); } break; case SearchDataTypes._16bits: if (patch.IsUnsigned) { reader.PatchMemory(patch.Address, (ushort)txtValue.Value); } else { reader.PatchMemory(patch.Address, (short)txtValue.Value); } break; case SearchDataTypes._32bits: if (patch.IsUnsigned) { reader.PatchMemory(patch.Address, (uint)txtValue.Value); } else { reader.PatchMemory(patch.Address, (int)txtValue.Value); } break; case SearchDataTypes._64bits: if (patch.IsUnsigned) { reader.PatchMemory(patch.Address, (ulong)txtValue.Value); } else { reader.PatchMemory(patch.Address, (long)txtValue.Value); } break; } } this.Close(); } private void CopyToClipboard(string data) { Clipboard.SetData(DataFormats.Text, data); } private void btnCopyvaluetoClipboard_Click(object sender, EventArgs e) { this.CopyToClipboard(txtValue.Text); } private void SearchPatcher_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) btnOK.PerformClick(); } } }