示例#1
0
        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();
        }
示例#2
0
        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}");
        }