C # нельзя отключить или включить Aero, если процесс в списке процессов или нет - PullRequest
0 голосов
/ 17 февраля 2012

Привет! Я пытаюсь исправить то, что при открытии определенной программы аэро должно быть отключено, а когда закрывается конкретная программа, я хочу, чтобы аэро снова включили.

Мой код:

    {
    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.

Что я сделал не так?

Заранее спасибо.

1 Ответ

1 голос
/ 17 февраля 2012

Ваш 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);
    }
...