/// <summary> /// Инициализирует новый экземпляр класса <see cref="Yanitta.WowMemory"/>. /// </summary> /// <param name="process">Процесс WoW.</param> public WowMemory(Process process) { if (process == null) { throw new ArgumentNullException(nameof(process)); } var section = $"{process.ProcessName}_{process.MainModule.FileVersionInfo.FilePrivatePart}"; Offsets = new Offsets(section); if (Offsets == null) { throw new NullReferenceException($"Current game version ({section}) not supported!"); } Memory = new ProcessMemory(process); // Мы должны сохранить ссылку на делегат, чтобы его не трогал сборщик мусора KeyBoardProck = new KeyBoardProc(HookCallback); keyboardHook = SetWindowsHookEx(13, KeyBoardProck, Process.GetCurrentProcess().MainModule.BaseAddress, 0); mTimer.Tick += (o, e) => { if (CheckProcess()) { var ingame = Memory.Read <byte>(Memory.Rebase(Offsets.IsInGame)); IsInGame = ingame != 0; } }; mTimer.Start(); }
public KeyboardHook() { dCallback = KeyboardCallback; using (Process process = Process.GetCurrentProcess()) using (ProcessModule module = process.MainModule) hHook = SetWindowsHookEx(WH_KEYBOARD_LL, dCallback, GetModuleHandle(module.ModuleName), 0); }
void Dispose(bool disposing) { if (IsDisposed) { return; } mTimer?.Stop(); if (keyboardHook != IntPtr.Zero) { UnhookWindowsHookEx(keyboardHook); } KeyBoardProck = null; if (IsInGame && Memory?.Process?.HasExited != true) { LuaExecute(StopCode); } keyboardHook = IntPtr.Zero; Memory = null; IsDisposed = true; }
static extern IntPtr SetWindowsHookEx(int idHook, KeyBoardProc lpfn, IntPtr hMod, uint dwThreadId);
/// <summary> /// Closes an open wow memory. /// </summary> public void Dispose() { if (IsDisposed) return; mTimer?.Stop(); if (keyboardHook != IntPtr.Zero) UnhookWindowsHookEx(keyboardHook); KeyBoardProck = null; if (IsInGame && Memory?.Process?.HasExited != true) LuaExecute(StopCode); keyboardHook = IntPtr.Zero; Memory = null; IsDisposed = true; GC.SuppressFinalize(this); }
/// <summary> /// Create new instance of the <see cref="WowMemory"/>. /// </summary> /// <param name="process">Wow process.</param> public WowMemory(Process process) { if (process == null) throw new ArgumentNullException(nameof(process)); Memory = new ProcessMemory(process); Settings.Load(Build); if (Settings.PlayerName == 0U) throw new NullReferenceException($"Current game version ({Build}) not supported!"); KeyBoardProck = new KeyBoardProc(HookCallback); keyboardHook = SetWindowsHookEx(13, KeyBoardProck, Process.GetCurrentProcess().MainModule.BaseAddress, 0); mTimer.Tick += (o, e) => { if (CheckProcess()) { Settings.Load(Build);// reload offsets IsInGame = Memory.Read<bool>(Memory.Rebase(Settings.IsInGame)); if (IsInGame && Settings.FishEnbl != 0L) { var isBotEnable = Memory.Read<float>(Memory.Rebase(Settings.FishEnbl)); if (Math.Abs(isBotEnable - 12.01f) < float.Epsilon) TestBoober(); } } }; mTimer.Start(); }
void Dispose(bool disposing) { if (IsDisposed) return; mTimer?.Stop(); if (keyboardHook != IntPtr.Zero) UnhookWindowsHookEx(keyboardHook); KeyBoardProck = null; if (IsInGame && Memory?.Process?.HasExited != true) LuaExecute(StopCode); keyboardHook = IntPtr.Zero; Memory = null; IsDisposed = true; }
/// <summary> /// Инициализирует новый экземпляр класса <see cref="Yanitta.WowMemory"/>. /// </summary> /// <param name="process">Процесс WoW.</param> public WowMemory(Process process) { if (process == null) throw new ArgumentNullException(nameof(process)); var section = $"{process.ProcessName}_{process.MainModule.FileVersionInfo.FilePrivatePart}"; Offsets = new Offsets(section); if (Offsets == null) throw new NullReferenceException($"Current game version ({section}) not supported!"); Memory = new ProcessMemory(process); // Мы должны сохранить ссылку на делегат, чтобы его не трогал сборщик мусора KeyBoardProck = new KeyBoardProc(HookCallback); keyboardHook = SetWindowsHookEx(13, KeyBoardProck, Process.GetCurrentProcess().MainModule.BaseAddress, 0); mTimer.Tick += (o, e) => { if (CheckProcess()) { var ingame = Memory.Read<byte>(Memory.Rebase(Offsets.IsInGame)); IsInGame = ingame != 0; } }; mTimer.Start(); }