abdul subhan mohammed Ответов: 1

Как получить peekatdesktop включен/отключен в C#


Дорогие Все,

Я пытаюсь обнаружить, что PeekAtDeskTop включен/отключен.

Что я уже пробовал:

public enum WindowsPeekAtDesktop
{
        Enabled = 1,
        Disabled = 0,
}

[DllImport("dwmapi.dll", PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DwmIsCompositionEnabled();

public static WindowsPeekAtDesktop IsPeekAtDesktop()
{
            // Tried using RegistryKey
            //RegistryKey AeroPeek = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\DWM", true);
            //var abc = AeroPeek.GetValue("EnableAeroPeek");
            //var aa = DwmWindowAttribute.DWMWA_EXCLUDED_FROM_PEEK;


            if (Environment.OSVersion.Version.Major >= 6 && DwmIsCompositionEnabled())
                return WindowsPeekAtDesktop.Enabled;
            
            return WindowsPeekAtDesktop.Disabled;
}


Если я включил/отключил peekatdesktop, то DwmIsCompositionEnabled() и RegistryKey всегда возвращают true.

Кто-нибудь может пожалуйста помочь мне. Как обнаружить, что PeekAtDesktop включен/отключен.

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

0x01AA

Проверить это можно с правильной подписью: pinvoke.net: dwmiscompositionenabled (dwmapi)[^]

1 Ответов

Рейтинг:
2

Richard MacCutchan

Ваш код неверен, функция требует параметра out (см. pinvoke.net: dwmiscompositionenabled (dwmapi)[^] ) вот и получается настройка. Если функция работает успешно, независимо от того, какое значение установлено, она всегда будет возвращать true. Видеть Функция DwmIsCompositionEnabled (dwmapi.ч) - Win32-приложений, Майкрософт документы[^] для получения полной информации.

[редактировать]
Добавлена подпись P/Invoke благодаря 0X01AA
[/редактировать]


0x01AA

Это могло бы помочь для подписи: https://www.pinvoke.net/default.aspx/dwmapi.dwmiscompositionenabled

Richard MacCutchan

Спасибо, добавил к решению с признанием.

abdul subhan mohammed

//Peek at desktop
        [DllImport("dwmapi.dll")]
        public static extern int DwmIsCompositionEnabled(out bool enabled);

        public static bool AeroEnabled()
        {
            if (Environment.OSVersion.Version.Major < 6)
                return false;

            bool result;
            DwmIsCompositionEnabled(out result);

            return result;
        }

        public static WindowsPeekAtDesktop IsPeekAtDesktop()
        {            
            return AeroEnabled() ? WindowsPeekAtDesktop.Enable : WindowsPeekAtDesktop.Disable;
        }

Я попробовал приведенный выше код, но все равно всегда возвращал его true eventhough The PeekAtDesktop отключен.

Пожалуйста, помогите мне.

Richard MacCutchan

Как указано в документации:
Цитата: Примечание. начиная с Windows 8, композиция DWM всегда включена.

abdul subhan mohammed

Я тоже пытался выиграть 10, но все равно результат всегда возвращался верным.

Richard MacCutchan

Именно так, как было сказано в моем предыдущем комментарии. Все версии Windows теперь показывают DWM как true.