Esempio n. 1
0
        public bool WndProc(ref Message msg)
        {
            if (msg.Msg == WM_POWERBROADCAST)
            {
                switch (msg.WParam.ToInt32())
                {
                case PBT_APMSUSPEND:

                    if (!_sleep)
                    {
                        _sleep = true;

                        Log.Info("CecRemote: PowerControl: System going to sleep, stopping CEC-client...");

                        if (_client != null)
                        {
                            _client.OnSleep();
                        }
                    }
                    else
                    {
                        Log.Warn("CecRemote: PowerControl: Received PBT_APMSUSPEND when remote state already suspended");
                    }

                    break;

                case PBT_APMRESUMESUSPEND:

                    Log.Info("CecRemote: PowerControl: User input detected after sleep (APMRESUMESUSPEND)");
                    HandleResume(false);

                    break;

                case PBT_APMRESUMEAUTOMATIC:

                    Log.Info("CecRemote: PowerControl: System resuming from sleep (APMRESUMEAUTOMATIC)");
                    HandleResume(true);

                    break;

                // Handle awaymode
                case PBT_POWERSETTINGCHANGE:

                    POWERBROADCAST_SETTING ps = (POWERBROADCAST_SETTING)Marshal.PtrToStructure(msg.LParam, typeof(POWERBROADCAST_SETTING));

                    if (ps.PowerSetting == GUID_SYSTEM_AWAYMODE)
                    {
                        if (ps.Data == 0)
                        {
                            if (_away && !_sleep)
                            {
                                _away = false;
                                Log.Info("CecRemote: PowerControl: System exiting away mode");
                                HandleResume(false);
                            }
                            else
                            {
                                Log.Warn("CecRemote: PowerControl: Received GUID_SYSTEM_AWAYMODE 0 and sleepmode is {0} and awaymode is {1}", _sleep.ToString(), _away.ToString());
                            }
                        }
                        else
                        {
                            if (!_away)
                            {
                                _away = true;
                                Log.Info("CecRemote: PowerControl: System entering away mode");

                                if (_client != null)
                                {
                                    _client.OnAwayMode();
                                }
                            }
                            else
                            {
                                Log.Warn("CecRemote: PowerControl: Received GUID_SYSTEM_AWAYMODE 1 and awaymode is {0}", _away.ToString());
                            }
                        }
                    }

                    break;


                default:
                    break;
                }
            }

            return(false); // false = allow other plugins to handle the message
        }