我正在寻找一个事件或者方法来判断屏幕是否关闭(电源选项-控制面板-关闭显示器设置)。但是这些解决方案都对我无效。所以要么我哪里错了,要么这些解决方案并不适合我。
如何获取当屏幕/显示器开启或关闭时的事件?
我期望能够得到一些线索或解决方案。问题在于我不知道该怎么做,如果你能再帮我一点就太好了。
我尝试了以下代码,但它没有起作用:
我尝试了以下代码,但它没有起作用:
internal static class NativeMethods
{
public static Guid GUID_MONITOR_POWER_ON = new Guid(0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
public const int DEVICE_NOTIFY_WINDOW_HANDLE = 0x00000000;
public const int WM_POWERBROADCAST = 0x0218;
public const int PBT_POWERSETTINGCHANGE = 0x8013;
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct POWERBROADCAST_SETTING
{
public Guid PowerSetting;
public uint DataLength;
public byte Data;
}
[DllImport(@"User32", SetLastError = true, EntryPoint = "RegisterPowerSettingNotification", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr RegisterPowerSettingNotification(IntPtr hRecipient, ref Guid PowerSettingGuid, Int32 Flags);
[DllImport(@"User32", SetLastError = true, EntryPoint = "UnregisterPowerSettingNotification", CallingConvention = CallingConvention.StdCall)]
public static extern bool UnregisterPowerSettingNotification(IntPtr handle);
}
private void WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
Debug.WriteLine("EVENT", "DEBUG");
}
public form1()
{
NativeMethods.RegisterPowerSettingNotification(this.Handle, ref NativeMethods.GUID_MONITOR_POWER_ON, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
}
WndProc
的m.Msg
也是如此,它在其他地方(另一个专门的类)进行处理。因此,在实践中,您的表单将保持不变。如果您经常执行此类操作,则在创建项目时已经有了所有这些管理器类,因此除了一些新消息类型的代码外,没有太多要添加。 - Jimi