static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions) { ViewModel.Settings.IncludeCursor = StartOptions.Cursor; ViewModel.Settings.Clicks.Display = StartOptions.Clicks; ViewModel.Settings.Keystrokes.Display = StartOptions.Keys; if (File.Exists(StartOptions.FileName)) { WriteLine("Output File Already Exists"); return; } HandleVideoSource(ViewModel, StartOptions); HandleVideoEncoder(ViewModel, StartOptions); HandleAudioSource(ViewModel, StartOptions); HandleWebcam(StartOptions); ViewModel.Settings.Video.FrameRate = StartOptions.FrameRate; ViewModel.Settings.Audio.Quality = StartOptions.AudioQuality; ViewModel.Settings.Video.Quality = StartOptions.VideoQuality; if (!ViewModel.RecordCommand.CanExecute(null)) { WriteLine("Nothing to Record"); return; } if (StartOptions.Delay > 0) { Thread.Sleep(StartOptions.Delay); } if (!ViewModel.StartRecording(StartOptions.FileName)) { return; } Task.Factory.StartNew(() => { Loop(ViewModel, StartOptions); ViewModel.StopRecording().Wait(); Application.Exit(); }); // MouseKeyHook requires a Window Handle to register Application.Run(new ApplicationContext()); }
static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions) { if (StartOptions.Cursor) ViewModel.Settings.IncludeCursor = true; if (StartOptions.Clicks) ViewModel.Settings.Clicks.Display = true; if (StartOptions.Keys) ViewModel.Settings.Keystrokes.Display = true; if (File.Exists(StartOptions.FileName)) { WriteLine("Output File Already Exists"); return; } HandleVideoSource(ViewModel, StartOptions); HandleVideoEncoder(ViewModel, StartOptions); HandleAudioSource(ViewModel, StartOptions); ViewModel.Settings.Video.FrameRate = StartOptions.FrameRate; ViewModel.Settings.Audio.Quality = StartOptions.AudioQuality; ViewModel.Settings.Video.Quality = StartOptions.VideoQuality; if (!ViewModel.RecordCommand.CanExecute(null)) { WriteLine("Nothing to Record"); return; } if (StartOptions.Delay > 0) Thread.Sleep(StartOptions.Delay); if (!ViewModel.StartRecording(StartOptions.FileName)) return; if (StartOptions.Length > 0) { var elapsed = 0; Write(TimeSpan.Zero); while (elapsed++ < StartOptions.Length) { Thread.Sleep(1000); Write(new string('\b', 8) + TimeSpan.FromSeconds(elapsed)); } Write(new string('\b', 8)); } else { const string recordingText = "Press p to pause or resume, q to quit"; WriteLine(recordingText); char ReadChar() { if (IsInputRedirected) { var line = ReadLine(); if (line != null && line.Length == 1) return line[0]; return char.MinValue; } return char.ToLower(ReadKey(true).KeyChar); } char c; do { c = ReadChar(); if (c != 'p') continue; ViewModel.PauseCommand.ExecuteIfCan(); if (ViewModel.RecorderState != RecorderState.Paused) { WriteLine("Resumed"); } } while (c != 'q'); } Task.Run(async () => await ViewModel.StopRecording()).Wait(); }