private static void SpawnConhostProcess(bool mute) { Process cmdProcess = new Process(); cmdProcess.StartInfo.FileName = "cmd.exe"; cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmdProcess.StartInfo.Arguments = "/k timeout 1 && \x07"; if (cmdProcess.Start() == false) { Logger.Instance.Debug($"Can't start {cmdProcess.StartInfo.FileName} {cmdProcess.StartInfo.Arguments}"); return; } int conhostProcessId = 0; while (conhostProcessId == 0 && !cmdProcess.HasExited) { foreach (Process conhost in Process.GetProcessesByName("conhost")) { try { Process parent = ProcessUtils.ResolveParent(conhost.Id); if (parent != null && cmdProcess.Id == parent.Id) { conhostProcessId = conhost.Id; break; } } catch (Win32Exception e) { Logger.Instance.Debug($"Exception with message \"{e.Message}\" on " + $"getting process parent id for conhost process {conhost.Id}"); } } } if (conhostProcessId == 0) { Logger.Instance.Debug($"Can't find child conhost process"); return; } bool?isMuted = null; while (isMuted == null && !cmdProcess.HasExited) { isMuted = MuteProcess(conhostProcessId, true, true); } cmdProcess.WaitForExit(2000); MuteProcess(conhostProcessId, mute); cmdProcess.Kill(); }
private static void SpawnConhostProcess(bool mute) { Logger.Instance.Debug($"SpawnConhostProcess starts mute={mute}"); Process cmdProcess = new Process(); cmdProcess.StartInfo.FileName = "cmd.exe"; cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmdProcess.StartInfo.Arguments = "/k timeout 1 && \x07"; if (cmdProcess.Start() == false) { Logger.Instance.Debug($"Can't start {cmdProcess.StartInfo.FileName} {cmdProcess.StartInfo.Arguments}"); return; } const int sTimeout = 3; int conhostProcessId = 0; Calculate(() => { if (!cmdProcess.HasExited) { foreach (Process conhost in Process.GetProcessesByName("conhost")) { try { Process parent = ProcessUtils.ResolveParent(conhost.Id); if (parent != null && cmdProcess.Id == parent.Id) { conhostProcessId = conhost.Id; return(true); } } catch (Win32Exception e) { Logger.Instance.Debug($"Exception with message \"{e.Message}\" on " + $"getting process parent id for conhost process {conhost.Id}"); } } } return(false); }, new TimeSpan(0, 0, sTimeout)); if (conhostProcessId == 0) { Logger.Instance.Debug($"Can't find child conhost process"); return; } Logger.Instance.Debug($"Spawned conhost process id={conhostProcessId}. Starting muting of generated bell sound."); Calculate(() => { return(MuteProcess(conhostProcessId, true, true) != null); }, new TimeSpan(0, 0, sTimeout)); cmdProcess.WaitForExit(2000); Logger.Instance.Debug($"Set conhost process mute state to {mute}."); MuteProcess(conhostProcessId, mute); cmdProcess.Kill(); Logger.Instance.Debug($"SpawnConhostProcess finishes mute={mute}"); }