internal static void MemoryOptimize() { if (Settings.IsMemoryOptimize) { MemoryOptimizeTimer.Restart(); } new System.Threading.Thread(() => { SendMsg(true, "워크래프트 3 메모리 최적화를 시도합니다."); if (CProcess.TrimProcessMemory(TargetProcess, true)) { if (CProcess.MemoryValue[2] < 0) { SendMsg(true, "최적화할 메모리를 찾을 수 없었습니다."); } else { SendMsg(true, $"결과: {ConvertSize(CProcess.MemoryValue[0])} - {ConvertSize(CProcess.MemoryValue[2])} = {ConvertSize(CProcess.MemoryValue[1])}"); } } else { SendMsg(true, "Error - 최적화 중에 예외가 발생했습니다."); } }).Start(); }
internal static async void ReplayWatcher_Function(object sender, FileSystemEventArgs e) { if (Settings.IsOptimizeAfterEndGame && await CProcess.TrimProcessMemory() && Settings.IsMemoryOptimize) { MemoryOptimizeChecker.Restart(); } if (!Settings.IsAutoReplay) { IsTime = IsSaved = false; name = string.Empty; return; } try { await Task.Delay(1000); MainWorker.ReplayWatcher.EnableRaisingEvents = false; string LastReplay = $"{Path.GetDirectoryName(e.FullPath)}\\LastReplay.w3g"; if (File.Exists(LastReplay) && new FileInfo(LastReplay).Length >= 1024) { string FileName; if (IsSaved) { IsSaved = false; string CurrentCategory = $"{DocumentPath}\\Replay\\{Category[0]}\\{Category[1]}"; if (!Directory.Exists(CurrentCategory)) { Directory.CreateDirectory(CurrentCategory); } FileName = $"{CurrentCategory}\\{(IsTime ? string.Empty : "_")}{name}.w3g"; name = string.Empty; IsTime = false; if (File.Exists(FileName)) { File.Delete(FileName); } File.Move(LastReplay, FileName); } else if (Settings.NoSavedReplaySave) { if (!Directory.Exists(DocumentPath + @"\Replay\NoSavedReplay")) { Directory.CreateDirectory(DocumentPath + @"\Replay\NoSavedReplay"); } FileName = $"{DocumentPath}\\Replay\\NoSavedReplay\\{GetFileTime(LastReplay)}.w3g"; if (File.Exists(FileName)) { File.Delete(FileName); } File.Move(LastReplay, FileName); } } } catch { } MainWorker.ReplayWatcher.EnableRaisingEvents = true; }
internal static async void MemoryOptimize(string[] args) { if (Settings.IsMemoryOptimize) { MemoryOptimizeChecker.Restart(); } int ResultDelay; if (!(args?.Length > 1) || string.IsNullOrEmpty(args[1])) { ResultDelay = 5; SendMsg(true, "워크래프트 3 메모리 최적화를 시도합니다."); } else { try { ResultDelay = int.Parse(args[1]); if (ResultDelay < 0) { ResultDelay = 0; } if (ResultDelay > 10) { ResultDelay = 10; } } catch { ResultDelay = 5; } if (ResultDelay > 0) { SendMsg(true, $"워크래프트 3 메모리 최적화를 시도합니다. ({ResultDelay}초 후 결과 계산)"); } } if (await CProcess.TrimProcessMemory(ResultDelay)) { long ChangedMemory = CProcess.MemoryValue[0] - CProcess.MemoryValue[2]; if (ChangedMemory < 0) { SendMsg(true, $"결과: {ConvertSize(CProcess.MemoryValue[0])} + {ConvertSize(-ChangedMemory)} = {ConvertSize(CProcess.MemoryValue[2])}"); } else { SendMsg(true, $"결과: {ConvertSize(CProcess.MemoryValue[0])} - {ConvertSize(ChangedMemory)} = {ConvertSize(CProcess.MemoryValue[2])}"); } return; } Error: SendMsg(true, "Error - 최적화 중에 예외가 발생했습니다."); }
public static void Init() { InitHotkey(); InitCommand(); //AntiZombieProcessChecker = new HangWatchdog(0, 0, 5); //AntiZombieProcessChecker.Condition = () => (Warcraft3Info.Process?.MainWindowHandle == IntPtr.Zero) ?? false; //AntiZombieProcessChecker.Actions += () => Warcraft3Info.Close(); MemoryOptimizeChecker = new HangWatchdog(() => new TimeSpan(0, Settings.MemoryOptimizeCoolDown, 0)); MemoryOptimizeChecker.Condition = () => Settings.IsMemoryOptimize; MemoryOptimizeChecker.Actions += async() => await CProcess.TrimProcessMemory(true); }
internal static bool ProcessCheck() { if (GameModule.WarcraftDetect() != WarcraftState.OK || !GameModule.WarcraftCheck()) { InitializedWarcraft = ignoreDetect = false; // 프로그램을 찾지 못할 경우 검색 간격 증가 Thread.Sleep(800); return(true); } if (!InitializedWarcraft) { InitializedWarcraft = true; Delay(2000); GameDll.GetOffset(); GameDelay = 50; RefreshCooldown = 0.01f; name = string.Empty; StartDelay = Settings.StartSpeed > 0 ? Settings.StartSpeed : 0.01f; CameraDistance = Settings.CameraDistance; CameraAngleX = Settings.CameraAngleX; CameraAngleY = Settings.CameraAngleY; } if (Settings.IsAutoHp && !HPView) { HPView = true; } if (Settings.IsAntiZombieProcess) { if (ignoreDetect && ++ZombieCount > 9000) { ignoreDetect = false; ZombieCount = 0; } else if (CurrentMusicState == MusicState.None) { if (++ZombieCount > 22) { try { PerformanceCounter CPUCounter = new PerformanceCounter("Process", "% Processor Time", TargetProcess); CPUCounter.NextValue(); for (int i = 0; i < 5; i++) { Delay(1100); if (CPUCounter.NextValue() >= 0.01f) { ZombieCount = 0; break; } if (i != 4) { continue; } if (MetroDialog.YesNo("워크래프트가 정상적으로 종료되지 않은 것 같습니다.\n강제로 종료하시겠습니까?", "강제 종료 알림")) { try { Warcraft3Info.Process.Kill(); } catch { MetroDialog.OK("워크래프트를 강제로 종료할 수 없었습니다.\n이미 종료되었거나, 백신에 의해 차단된 것 같습니다.", "강제 종료 실패"); } } else { ignoreDetect = true; } } } catch { ZombieCount = 0; } } return(true); } else { ZombieCount = 0; } } if (Settings.IsMemoryOptimize) { if (MemoryOptimizeTimer.IsRunning) { if (MemoryOptimizeTimer.Elapsed >= new TimeSpan(0, Settings.MemoryOptimizeCoolDown, 0)) { CProcess.TrimProcessMemory(TargetProcess, true); MemoryOptimizeTimer.Restart(); } else { MemoryOptimizeTimer.Start(); } } } else if (MemoryOptimizeTimer.IsRunning) { MemoryOptimizeTimer.Stop(); } StatusCheck(); return(false); }