public VideoHtml5Handler(WebBrowser browser) { Browser = browser; //忌々しいアクティブコンテンツ云々を無効にする WebBrowserの初期化時にこの値がリセットされるので //新しくWebBrowserのインスタンスを生成する度に呼ばないとだめっぽいね CoInternetSetFeatureEnabled(FEATURE_LOCALMACHINE_LOCKDOWN, SET_FEATURE_ON_PROCESS, false); Browser.ObjectForScripting = new ObjectForScripting(this); // Browser.LoadCompleted += async(obj, e) => { var autoPlay = Settings.Instance.AutoPlay; //プレイリストなら強制的にtrue if (Owner.IsPlayList()) { autoPlay = true; } if (Owner.ApiData.Video.DmcInfo != null && !Owner.ApiData.Video.Title.Contains("ドットバイドット")) { var dmc = new NicoNicoDmcSession(Owner.ApiData.Video.DmcInfo); var session = await dmc.CreateAsync(); if (DmcHeartBeatTimer != null) { DmcHeartBeatTimer.Elapsed += async(state, ev) => { await dmc.HeartbeatAsync(session.Id); }; DmcHeartBeatTimer.Enabled = true; } Browser?.InvokeScript("VideoViewModel$initialize", new object[] { session.ContentUri, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay }); } else { if (string.IsNullOrEmpty(Owner.ApiData.Video.SmileInfo.Url)) { App.ViewModelRoot.Messenger.Raise(new TransitionMessage(typeof(Views.PaidVideoView), new PaidVideoViewModel(Owner), TransitionMode.NewOrActive)); return; } if (VideoType == NicoNicoVideoType.RTMP) { Browser.InvokeScript("VideoViewModel$initialize", new object[] { Owner.ApiData.Video.SmileInfo.Url + "^" + Owner.ApiData.FmsToken, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay }); } else { Browser.InvokeScript("VideoViewModel$initialize", new object[] { Owner.ApiData.Video.SmileInfo.Url, Owner.ApiData.Context.InitialPlaybackPosition ?? 0, autoPlay }); } } if (VideoType != NicoNicoVideoType.MP4 && VideoType != NicoNicoVideoType.New) { Owner.ChangePlayRateAvalilable = PlayBackRateAvalilableReason.NotSupportVideo; } else { Owner.ChangePlayRateAvalilable = PlayBackRateAvalilableReason.Available; } Owner.Volume = Owner.Volume; }; //ブラウザにキーボードイベントが走らないようにする //走られると+とか押された時に動画の再生速度とかが変わっちゃうんだよね //それはちょっと困る Browser.PreviewKeyDown += (obj, e) => { e.Handled = true; }; }