Управление яркостью подсветки Windows CE 6.0 - PullRequest
1 голос
/ 02 марта 2011

Я искал в интернете и нашел решение, как изменить яркость устройства с кода C #. Похоже:

[DllImport("coredll.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool EventModify(IntPtr hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent);

    [DllImport("coredll.Dll")]
    private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);

    [DllImport("coredll.Dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool CloseHandle(IntPtr hObject);

    private static bool SetEvent(IntPtr hEvent)
    {
        return EventModify(hEvent, (int)EventFlags.SET);
    }

    private void SetBacklightValue(string name, int v)
    {
        RegistryKey key = Registry.CurrentUser.OpenSubKey(@"ControlPanel\Backlight", true);
        if (key != null)
        {
            key.SetValue(name, v);
            key.Close();
        }
    }

    enum EventFlags
    {
        PULSE = 1,
        RESET = 2,
        SET = 3
    }

    private static void RaiseBackLightChangeEvent()
    {
        IntPtr hBackLightEvent = CreateEvent(IntPtr.Zero, false, false, "BackLightChangeEvent");
        if (hBackLightEvent != IntPtr.Zero)
        {
            bool result = SetEvent(hBackLightEvent);
            CloseHandle(hBackLightEvent);
        }

    }

Значение яркости в реестре успешно изменено. И после того, как я отключаю устройство от ПК (или подключаюсь), яркость тоже меняется. Но не в тот момент, когда установлено фактическое значение. Я мог что-то упустить (RaiseBackLightChangeEvent работает отлично, ошибок нет). Мб мне нужно поднять какое-то другое событие? Или, если нет, как я могу смоделировать изменение состояния устройства без его фактического изменения? Или как я могу принудительно установить значения обновления системы из реестра? Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 09 марта 2011

Управление подсветкой не стандартизировано, оно варьируется от одного устройства к другому. На некоторых устройствах изменение реестра достаточно, на других устройствах вам нужно запустить «именованное событие» (вы можете использовать OpenNetcf для этого), и даже для тех, кому все еще нужно знать имя события. Для других устройств нет способа сделать это. Я думаю, что ваш лучший выбор будет связаться с производителем вашего целевого устройства и спросить его о деталях, как они решают эту проблему.

...