控制LCD背光

时间:2014-08-13 09:37:55

标签: c++ windows

我想控制LCD背光。 首先,我使用如下代码:

// 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 topic解决了悬挂问题(使用: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 :(得分:0)

我在Windows 8平台上发现,通过

关闭LCD后可以向系统发送一个键来打开LCD
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));