有没有人知道是否有一个API来获取Windows(XP/Vista/2000/2003)中的当前监视器状态(打开或关闭)?
我的所有搜索似乎都表明没有真正的方法可以做到这一点.
此线程尝试使用GetDevicePowerState,根据Microsoft的文档,它不适用于显示设备.
在Vista中,我可以收听GUID_MONITOR_POWER_ON,但是当手动关闭显示器时,我似乎没有得到事件.
在XP中我可以挂钩WM_SYSCOMMAND SC_MONITORPOWER,查找状态2.这仅适用于系统触发电源的情况.
WMI Win32_DesktopMonitor类似乎也没有帮助.
编辑:这是关于comp.os.ms-windows.programmer.win32 的讨论,表明没有可靠的方法来做到这一点.
其他人还有其他想法吗?
嗨,我一直在寻找,但我找不到答案.我怎么知道屏幕何时关闭或打开.不是SystemEvents.PowerModeChanged.我不知道如何检索显示/屏幕事件
private const int WM_POWERBROADCAST = 0x0218;
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_SCREENSAVE = 0xF140;
private const int SC_CLOSE = 0xF060; // dont know
private const int SC_MONITORPOWER = 0xF170;
private const int SC_MAXIMIZE = 0xF030; // dont know
private const int MONITORON = -1;
private const int MONITOROFF = 2;
private const int MONITORSTANBY = 1;
[DllImport("user32.dll")]
//static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private static extern int SendMessage(IntPtr hWnd, int …Run Code Online (Sandbox Code Playgroud) 背景:
我需要在另一台显示器上创建调光效果.我想我通过使用WPF窗口解决了这个问题,该窗口占用了整个屏幕尺寸Topmost和AllowsTransparency=.它具有内部黑色发光效果,并且具有WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW应用于其中的样式(以及其他内容),以允许用户点击其后面的应用程序.
我监视EVENT_OBJECT_REORDERWindows 中的事件并调用SetWindowPos强制Topmost状态高于其他Topmost窗口.到目前为止,我的概念测试证明似乎运作良好.
我发现的问题是这个调光(窗口)会覆盖任务栏,但是如果我单击开始菜单则不会.我目前正在使用Windows 10进行测试.如果单击"开始"菜单,则会导致"开始"菜单和任务栏显示在调光(窗口)上方.我希望一切都保持黯淡.
我通过uiAccess在应用程序清单中设置= true 来解决此问题,生成自签名证书,并将exe复制到"c:\ program files*".这允许我强制窗口的最顶级状态,甚至在开始菜单上方.
我的问题:
有没有办法在没有开始菜单的情况下定位窗口uiAccess?或者甚至是另一种在不使用窗口的情况下强制屏幕昏暗(但不依赖于显示器驱动程序或硬件功能)的方法?
如果没有,在分发WPF应用程序(通过WiX安装项目或类似的东西)时,我需要注意什么,以绕过UIPI限制uiAccess= True?我可以在安装过程中简单地安装自签名证书吗?用户是否会遇到任何其他障碍?作为一名开发人员,在构建此问题时,我是否会遇到任何其他障碍(除了我已经提到过的内容)?
谢谢!