/// <summary> /// Opens a client with dynamic multi-clienting support /// </summary> public static Client OpenMC(string path, string arguments) { Util.WinApi.PROCESS_INFORMATION pi = new Tibia.Util.WinApi.PROCESS_INFORMATION(); Util.WinApi.STARTUPINFO si = new Tibia.Util.WinApi.STARTUPINFO(); if (arguments == null) { arguments = ""; } Util.WinApi.CreateProcess(path, " " + arguments, IntPtr.Zero, IntPtr.Zero, false, Util.WinApi.CREATE_SUSPENDED, IntPtr.Zero, System.IO.Path.GetDirectoryName(path), ref si, out pi); IntPtr handle = Util.WinApi.OpenProcess(Util.WinApi.PROCESS_ALL_ACCESS, 0, pi.dwProcessId); Process p = Process.GetProcessById(Convert.ToInt32(pi.dwProcessId)); Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJMP); Util.WinApi.ResumeThread(pi.hThread); p.WaitForInputIdle(); Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJNZ); Util.WinApi.CloseHandle(handle); Util.WinApi.CloseHandle(pi.hProcess); Util.WinApi.CloseHandle(pi.hThread); return(new Client(p)); }
/// <summary> /// Opens a client with dynamic multi-clienting support /// </summary> public static Client OpenMC(string path, string arguments) { Util.WinApi.PROCESS_INFORMATION pi = new Tibia.Util.WinApi.PROCESS_INFORMATION(); Util.WinApi.STARTUPINFO si = new Tibia.Util.WinApi.STARTUPINFO(); if (arguments == null) arguments = ""; Util.WinApi.CreateProcess(path, " " + arguments, IntPtr.Zero, IntPtr.Zero, false, Util.WinApi.CREATE_SUSPENDED, IntPtr.Zero, System.IO.Path.GetDirectoryName(path), ref si, out pi); IntPtr handle = Util.WinApi.OpenProcess(Util.WinApi.PROCESS_ALL_ACCESS, 0, pi.dwProcessId); Process p = Process.GetProcessById(Convert.ToInt32(pi.dwProcessId)); Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJMP); Util.WinApi.ResumeThread(pi.hThread); p.WaitForInputIdle(); Util.Memory.WriteByte(handle, (long)Tibia.Addresses.Client.MultiClient, Tibia.Addresses.Client.MultiClientJNZ); Util.WinApi.CloseHandle(handle); Util.WinApi.CloseHandle(pi.hProcess); Util.WinApi.CloseHandle(pi.hThread); return new Client(p); }