显示器开/关和桌面/内容可见之间有区别吗?

问题描述 投票:0回答:1

我在不同的地方找到了代码,允许我的 C# 程序打开和关闭 PC 显示器(2),并且它们工作正常(我在下面的 MS 学习网站上使用的示例)。 我使用代码的目的是以编程方式唤醒我的电脑屏幕以响应外部事件(我有一个工作处理程序 - 但我从测试代码中删除了它)。

在我的控制面板 (Windows 10) 的“电源和睡眠”部分中,我将睡眠设置为“从不”,并在 15 分钟不活动后关闭显示器 - 确实如此。

硬件是华硕P8Z77-V-LX主板上的Intel处理器,16GB内存和500GB HDD作为系统盘。

using System;  
using System.Runtime.InteropServices;  
  
namespace ConsoleApp  
{  
    internal class Program  
    {  
        static void Main(string[] args)  
        {  
            const uint WM_SYSCOMMAND = 0x0112;  
  
            const uint SC_MONITORPOWER = 0xF170;  
  
            IntPtr HWND_BROADCAST = new IntPtr(0xffff);  
  
            // Power off   
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);  
  
            // Power On
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);  
        }  
  
        [DllImport("user32.dll")]  
        public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, int lParam);  
    }  
}

如果我只是使用下面的 C# 测试代码,它会按照广告中的说明关闭和打开我的 (2) 个显示器电源,但如果显示器之前已被 Windows 关闭(即 15 分钟后没有任何活动),我的桌面就不会重新出现- 所以这就好像显示器已打开但 PC 未打开。 当我按下键盘上的任意键时,一切都会在几秒钟内恢复。此外,当 PC 显示器处于空白状态时,我仍然可以 ping PC 并通过 VNC 远程访问它 - 所以我知道它没有关闭或休眠。

显然,控制面板使用的电源控制与此 C# 代码切换的电源控制之间存在一些差异 - 但我如何以编程方式访问正确的电源控制来重新唤醒桌面和显示器?

c# desktop monitor
1个回答
0
投票

我的解决方案: 根据我的帖子,我使用控制面板中的电源设置小程序在 n 分钟后关闭屏幕电源,并且(重要的是)当您走这条路线时,最短时间为 2 分钟。

我正在尝试屏幕保护程序设置,看看将其设置为“空白”是否解决了我的问题,但事实并非如此。 然而,在使用过程中,我注意到屏幕保护程序小程序的底部有一个“电源设置”链接。 当我点击这个时,我看到了一个不同的电源设置屏幕 - 这个屏幕的最短时间为 1 分钟 - 显然有些不同。 我取消了原来的“电源设置”屏幕并使用了这个新发现的选项,它的工作原理就像我想要的那样 - 我的 C# 代码可以唤醒显示屏。 我不确定为什么会有所不同,但显然确实如此 - 但似乎仅限于我的华硕主板。

© www.soinside.com 2019 - 2024. All rights reserved.