由于显示器的睡眠设置,我试图检测Windows关闭/打开显示器的时间。 (设置 - >系统 - >电源和睡眠 - >屏幕)
我发现这样做的唯一方法是收听SC_MONITORPOWER消息,但我在WPF项目中遇到此消息的问题。 我在主视图中为WndProc创建了一个钩子,我正在收听SC_MONITORPOWER消息。我遇到的问题是lParam总是" 2"这意味着根据监控关闭的规格。监视器启动时获得的lParam值相同。知道我可能做错了什么
以下是代码:
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var handle = new WindowInteropHelper(this).Handle;
HwndSource.FromHwnd(handle)?.AddHook(WndProc);
}
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
// WM_SYSCOMMAND
if (msg != 0x0112)
{
return IntPtr.Zero;
}
var subCode = wParam.ToInt32() & 0xFFF0;
// SC_MONITORPOWER
if (subCode != 0xF170)
{
return IntPtr.Zero;
}
var param = lParam.ToInt32();
switch (param)
{
case -1:
// Display is powering on
return IntPtr.Zero;
case 1:
// Display is going to low power
return IntPtr.Zero;
case 2:
// I always get this case
// Display is being shut off
return IntPtr.Zero;
}
return IntPtr.Zero;
}
也许在WPF中有另一个解决方案可以通过Windows显示睡眠设置检测显示器何时关闭/打开?