Я искал в интернете и нашел решение, как изменить яркость устройства с кода 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 работает отлично, ошибок нет). Мб мне нужно поднять какое-то другое событие? Или, если нет, как я могу смоделировать изменение состояния устройства без его фактического изменения? Или как я могу принудительно установить значения обновления системы из реестра?
Спасибо за вашу помощь.