diff --git a/ShareX.HelpersLib/CLI/ExternalCLIManager.cs b/ShareX.HelpersLib/CLI/ExternalCLIManager.cs index ed4db764e..8f08991f3 100644 --- a/ShareX.HelpersLib/CLI/ExternalCLIManager.cs +++ b/ShareX.HelpersLib/CLI/ExternalCLIManager.cs @@ -35,7 +35,7 @@ public abstract class ExternalCLIManager : IDisposable public event DataReceivedEventHandler OutputDataReceived; public event DataReceivedEventHandler ErrorDataReceived; - private Process process; + protected Process process; public virtual int Open(string path, string args = null) { diff --git a/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs b/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs index 42a9665ba..34ad6d5d6 100644 --- a/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs +++ b/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs @@ -180,9 +180,9 @@ public DirectShowDevices GetDirectShowDevices() public override void Close() { - if (closeTryCount >= 3) + if (closeTryCount >= 2) { - base.Close(); + process.Kill(); } else { diff --git a/ShareX/Enums.cs b/ShareX/Enums.cs index b9c72b551..f856c4513 100644 --- a/ShareX/Enums.cs +++ b/ShareX/Enums.cs @@ -241,6 +241,6 @@ public enum ImagePreviewVisibility public enum ScreenRecordState { - Waiting, BeforeStart, AfterStart, AfterStop + Waiting, BeforeStart, AfterStart, AfterRecordingStart, AfterStop } } \ No newline at end of file diff --git a/ShareX/Forms/ScreenRecordForm.cs b/ShareX/Forms/ScreenRecordForm.cs index 780f5685a..4306bfac1 100644 --- a/ShareX/Forms/ScreenRecordForm.cs +++ b/ShareX/Forms/ScreenRecordForm.cs @@ -158,14 +158,12 @@ public void StartRecordingTimer() lblTimer.ForeColor = Color.White; borderColor = Color.FromArgb(0, 255, 0); - btnStart.Text = Resources.AutoCaptureForm_Execute_Stop; Refresh(); Timer.Reset(); Timer.Start(); timerRefresh.Start(); UpdateTimer(); - IsRecording = true; } private void UpdateTimer() @@ -263,6 +261,10 @@ public void ChangeState(ScreenRecordState state) niTray.Text = trayTextAfterStart.Truncate(63); niTray.Icon = Resources.control_record.ToIcon(); tsmiStart.Text = Resources.AutoCaptureForm_Execute_Stop; + btnStart.Text = Resources.AutoCaptureForm_Execute_Stop; + IsRecording = true; + break; + case ScreenRecordState.AfterRecordingStart: StartRecordingTimer(); break; case ScreenRecordState.AfterStop: diff --git a/ShareX/ScreenRecordManager.cs b/ShareX/ScreenRecordManager.cs index 042030bfc..5e681012a 100644 --- a/ShareX/ScreenRecordManager.cs +++ b/ShareX/ScreenRecordManager.cs @@ -216,7 +216,8 @@ private static void StartRecording(ScreenRecordOutput outputType, TaskSettings t if (!abortRequested) { screenRecorder = new ScreenRecorder(outputType, options, captureRectangle); - screenRecorder.RecordingStarted += () => recordForm.ChangeState(ScreenRecordState.AfterStart); + screenRecorder.RecordingStarted += () => recordForm.ChangeState(ScreenRecordState.AfterRecordingStart); + recordForm.ChangeState(ScreenRecordState.AfterStart); screenRecorder.StartRecording(); if (recordForm.AbortRequested)