C# 无法禁用或启用 Aero(如果进程是否在进程列表中)

本文关键字:进程 是否 如果 列表 Aero 启用 | 更新日期: 2023-09-27 18:24:54

嗨,我正在尝试解决此问题,当我打开一个特定的程序时,应该禁用 aero,当特殊程序关闭时,我希望再次启用 aero。

我的代码:

    {
    const uint DWM_EC_DISABLECOMPOSITION = 0;
    const uint DWM_EC_ENABLECOMPOSITION = 1;
    [DllImport("dwmapi.dll", EntryPoint = "DwmEnableComposition")]
    extern static uint DwmEnableComposition(uint compositionAction);
    public Form1()
    {
        InitializeComponent();
    }
    int count = 1;
    public static bool EnableComposition(bool enable)
    {
        try
        {
            if (enable)
            {
                DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
            }
            else
            {
                DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
            }
            return true;
        }
        catch
        {
            return false;
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        Process[] procs = Process.GetProcesses();
        foreach (Process proc in procs)
        {
            string chrome = "chrome";
            string list;
            list = proc.ProcessName;
            if (list.Contains(chrome))
            {
                EnableComposition(false);
            }
            else if(!list.Contains(chrome))
            {
                EnableComposition(true);
            }
        }

    }
}

问题:如果程序处于打开状态,则它在 if 语句中同时运行 true 和 false。

我做错了什么?

提前谢谢。

C# 无法禁用或启用 Aero(如果进程是否在进程列表中)

您的for循环不正确。 您正在逐个检查每个进程名称。 所以这取决于哪个过程碰巧排在最后。 如果"chrome"位于进程列表的中间,您将调用EnableComposition(false)并在下一次迭代通过for循环时调用EnableComposition(true)

像这样的东西应该可以代替:

    bool processFound = false;
    foreach (Process proc in procs)
    {
        if (proc.ProcessName.Contains("chrome"))
        {
            processFound = true;
        }
    }
    if (processFound)
    {
        EnableComposition(false);
    }
    else
    {
        EnableComposition(true);
    }