Управление подсветкой ЖК-дисплея

0

Я бы хотел контролировать подсветку ЖК-дисплея. Во-первых, я использую код, как показано ниже:

// Turn off monitor
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);
// Turn on monitor
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);
// Low power monitor
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 1);

Но программа будет зависать на SendMessage(). Я нашел тему disscuss для решения проблемы зависания (Use: SendMessageTimeout)

// Turn on monitor
SendMessageTimeout(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1, SMTO_ABORTIFHUNG, 100, NULL);
// Turn off monitor
SendMessageTimeout(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2, SMTO_ABORTIFHUNG, 100, NULL);
// Low power monitor
SendMessageTimeout(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 1, SMTO_ABORTIFHUNG, 100, NULL);

Моя проблема заключается в том, что программа не может включить монитор.

Мой процесс: выключить монитор → подождать 10 секунд → включить монитор.

Монитор можно отключить, не удается включить монитор через 10 секунд, но я вижу, что монитор работает очень короткое время через 10 секунд.

Может ли кто-нибудь сказать мне, что случилось? Благодарю!

Теги:

1 ответ

0
Лучший ответ

Я нашел на платформе Windows 8, могу отправить ключ в систему, чтобы включить ЖК-дисплей после выключения ЖК-дисплея через

SendMessageTimeout(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2, SMTO_ABORTIFHUNG, 100, NULL);

Я не знаю почему, но на самом деле это хорошо работает...

INPUT in[1];
KEYBDINPUT kb;
kb.wVk = VK_CONTROL;
in[0].type = INPUT_KEYBOARD;
in[0].ki = kb;
SendInput(1, in, sizeof(in));
  • 0
    Я думаю, причина в том, что -1 - недокументированный параметр. Я думаю, что они удалили его, так что теперь он больше не работает на Windows 10.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню