void qtPlayer_QTEvent(object sender, AxQTOControlLib._IQTControlEvents_QTEventEvent e)
        {
            // Code to handle various QuickTime Events

            // When running your code in debug mode you will
            // see the following messages displayed in the
            // Immediate Window

            switch ((QTEventIDsEnum)e.eventID)
            {
                // status strings
                case QTEventIDsEnum.qtEventShowStatusStringRequest:
                    {
                        string msg = e.eventObject.GetParam(QTEventObjectParametersEnum.qtEventParamStatusString).ToString();
                        Logger.Info("qtEventShowStatusStringRequest: " + msg);
                    }
                    break;

                // rate changes
                case QTEventIDsEnum.qtEventRateWillChange:
                    {
                        var rate = (e.eventObject.GetParam(QTEventObjectParametersEnum.qtEventParamMovieRate));
                        int therate = Convert.ToInt16(rate);
                        if (therate > 0)
                        {
                            PlayState = GenericPlayerControl.PlayStates.Playing;
                        }
                        else
                        {
                            PlayState = GenericPlayerControl.PlayStates.Paused;
                        }

                        if (PlayStateChanged != null)
                            PlayStateChanged(sender, new PlayStateChangedEventArgs() { PlayState = PlayState });

                        Logger.Debug("RateWillChange to: " + rate);
                    }
                    break;

                // time changes
                case QTEventIDsEnum.qtEventTimeWillChange:
                    {
                        var time = (int)e.eventObject.GetParam(QTEventObjectParametersEnum.qtEventParamMovieTime);
                        Logger.Debug("TimeWillChange to: " + (double)(time) / qtPlayer.Movie.TimeScale );
                    }
                    break;

                // audio volume changes
                case QTEventIDsEnum.qtEventAudioVolumeDidChange:
                    {
                        string vol = e.eventObject.GetParam(QTEventObjectParametersEnum.qtEventParamAudioVolume).ToString();
                        Logger.Debug("AudioVolumeDidChange to: " + vol);
                    }
                    break;

                case QTEventIDsEnum.qtEventMovieDidEnd:
                    {
                        Logger.Debug("MovieDidEnd");
                        if (PlayStateChanged != null)
                            PlayStateChanged(sender, new PlayStateChangedEventArgs() { PlayState = GenericPlayerControl.PlayStates.Stopped });
                    }
                    break;

                default:
                    {
                        Logger.Debug("Other QT_Event: " + e.eventID);
                        break;
                    }
            }
        }
        private void wmPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
        {
            Logger.Debug("PlayStateChanged to " + GetFriendlyPlayState((WMPLib.WMPPlayState)e.newState));

            switch ((WMPLib.WMPPlayState)e.newState)
            {
                case WMPLib.WMPPlayState.wmppsPlaying:
                    PlayState = GenericPlayerControl.PlayStates.Playing;
                    break;
                case WMPLib.WMPPlayState.wmppsPaused:
                    PlayState = GenericPlayerControl.PlayStates.Paused;
                    break;
                case WMPLib.WMPPlayState.wmppsStopped:
                    PlayState = GenericPlayerControl.PlayStates.Stopped;
                    break;
                case WMPLib.WMPPlayState.wmppsReady:
                    PlayState = GenericPlayerControl.PlayStates.Ready;
                    break;
                case WMPLib.WMPPlayState.wmppsTransitioning:
                    PlayState = GenericPlayerControl.PlayStates.Transitioning;
                    break;
                case WMPLib.WMPPlayState.wmppsMediaEnded:
                    PlayState = GenericPlayerControl.PlayStates.Ended;
                    break;
            }

            if (PlayStateChanged != null)
                PlayStateChanged(sender, new PlayStateChangedEventArgs() { PlayState = PlayState } );
        }