我使用以下代码打开和关闭显示器:
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170;
private const int MonitorTurnOn = -1;
private const int MonitorShutoff = 2;
//Turn them off
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);
//Turn them on
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorTurnOn);
这曾经按预期工作,但在安装Windows 8(I assume this is the reason, since I see others have the same issue)之后,打开屏幕仍然无法正常工作。我仍然可以将其关闭,但无论我使用MonitorTurnOn运行SendMessage()多少次,我仍然需要移动鼠标或按键才能重新启动显示器。
有关如何在Windows 8上运行的任何建议吗?
答案 0 :(得分:13)
我遇到了同样的问题,我找到的解决办法是移动鼠标:
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, NULL);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, NULL);
它会唤醒显示器。 Earlypearl
答案 1 :(得分:7)
这是Earlypearl对所需内容的回答,包括:
[DllImport("user32.dll")]
static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);
private const int MOUSEEVENTF_MOVE = 0x0001;
private void Wake(){
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, UIntPtr.Zero);
}
答案 2 :(得分:1)
对于这个问题,我有同样的想法只是改变了亲爱的早期解决方案,并在Windows XP,7,8,Server 2008上进行了测试,所有这些都完美无缺。
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
它不需要被调用两次。
答案 3 :(得分:0)
我发现这个技巧适用于Windows 8.1
关闭它们
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);
打开它们
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)1);
根据MSN,“1”是将显示器切换到“低功率”,但它可以解决问题。屏幕不会再关闭。