Ответ 1
У меня была та же проблема, решение, которое я нашел, - это перемещение мыши:
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, NULL);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, NULL);
Он запустит монитор. Earlypearl
Я включаю и выключаю свои мониторы, используя следующий код:
[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 (Я предполагаю, что это причина, так как я вижу, что другие имеют ту же проблему) включение экрана не будет работать. Я все еще могу отключить его, но независимо от того, сколько раз я запускаю SendMessage() с помощью MonitorTurnOn, мне все равно нужно переместить мышь или нажать клавишу, чтобы снова включить мониторы.
Любые предложения о том, как сделать эту работу в Windows 8?
У меня была та же проблема, решение, которое я нашел, - это перемещение мыши:
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, NULL);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, NULL);
Он запустит монитор. Earlypearl
Здесь ответ 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);
}
У меня была такая же идея для этой проблемы. Просто изменил дорогостоящее решение earlypearl, и он протестировал его на Windows XP, 7, 8, Server 2008 и все отлично работало.
mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
его не нужно вызывать дважды.
Я нашел этот трюк для работы над окнами 8.1
Отключите их
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);
Включите их
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)1);
В соответствии с MSN, "1" означает переключить монитор на "Низкая мощность", но это делает трюк. Экран больше не будет отключен.