예제 #1
0
        public PowerNotificationService()
        {
            SystemEvents.PowerModeChanged += OnPowerModeChanged;
            RegisterClass(nameof(PowerNotificationService));
            var msgWinHandel = WindowMessageApiImports.CreateWindowEx(0, nameof(PowerNotificationService), "", 0, 0, 0, 0, 0, HwinConstants.HWND_MESSAGE, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            DeviceNotificationHelper.RegisterPowerSettingNotification(msgWinHandel);
        }
예제 #2
0
        public DeviceChangedNotificationService()
        {
            SystemEvents.DisplaySettingsChanged += (_, _) => Debug.WriteLine("@@@@@@@@@@@@@@@@ Settings Changed");

            RegisterClass(nameof(DeviceChangedNotificationService));
            var msgWinHandel = WindowMessageApiImports.CreateWindowEx(0, nameof(DeviceChangedNotificationService), "", 0, 0, 0, 0, 0, HwinConstants.HWND_MESSAGE, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);

            DeviceNotificationHelper.RegisterMonitorDeviceNotification(msgWinHandel);
        }
예제 #3
0
        protected void RegisterClass(string className)
        {
            _wndClass               = WndClassEx.Build();
            _wndClass.lpfnWndProc   = WindowProc;
            _wndClass.lpszClassName = className;

            if (WindowMessageApiImports.RegisterClassEx(ref _wndClass) == 0)
            {
                Debug.WriteLine($"Failed to {nameof(RegisterClass)} '{className}': {Marshal.GetLastWin32Error()}");
            }
        }
예제 #4
0
        protected override IntPtr WindowProc(IntPtr hWnd, uint message, IntPtr wParam, IntPtr lParam)
        {
            Debug.Print($"Window Message: {(WindowMessages)message} params: 0x{wParam:X}");

            switch ((WindowMessages)message)
            {
            case WindowMessages.POWERBROADCAST:
                HandlePowerBroadcastMsg(Marshal.PtrToStructure <PowerbroadcastSetting>(lParam));
                return(new IntPtr(1));

            default:
                return(WindowMessageApiImports.DefWindowProc(hWnd, message, wParam, lParam));
            }
        }
예제 #5
0
        protected override IntPtr WindowProc(IntPtr hWnd, uint message, IntPtr wParam, IntPtr lParam)
        {
            Debug.Print($"Window Message: {(WindowMessages)message} params: 0x{wParam:X}");

            switch ((WindowMessages)message)
            {
            case WindowMessages.DEVICECHANGE:
                Debug.Print($"\t\tDeviceChange");
                DeviceChangedMessage?.Invoke(this, EventArgs.Empty);
                return(new IntPtr(1));

            default:
                return(WindowMessageApiImports.DefWindowProc(hWnd, message, wParam, lParam));
            }
        }