diff --git a/Agent.Installer.Win/Services/CommandLineParser.cs b/Agent.Installer.Win/Services/CommandLineParser.cs index 060bb9b0..0ac4e4f9 100644 --- a/Agent.Installer.Win/Services/CommandLineParser.cs +++ b/Agent.Installer.Win/Services/CommandLineParser.cs @@ -38,7 +38,15 @@ namespace Remotely.Agent.Installer.Win.Services var value = args[i + 1]; if (value != null) { - commandLineArgs.Add(key, args[i + 1].Trim()); + if (value.StartsWith("-")) + { + commandLineArgs.Add(key, "true"); + i -= 1; + } + else + { + commandLineArgs.Add(key, args[i + 1].Trim()); + } } } } diff --git a/ScreenCast.Core/Conductor.cs b/ScreenCast.Core/Conductor.cs index 0329871e..8d29607a 100644 --- a/ScreenCast.Core/Conductor.cs +++ b/ScreenCast.Core/Conductor.cs @@ -74,7 +74,15 @@ namespace Remotely.ScreenCast.Core var value = args[i + 1]; if (value != null) { - ArgDict.Add(key, args[i + 1].Trim()); + if (value.StartsWith("-")) + { + ArgDict.Add(key, "true"); + i -= 1; + } + else + { + ArgDict.Add(key, args[i + 1].Trim()); + } } } } diff --git a/ScreenCast.Core/Services/ScreenCaster.cs b/ScreenCast.Core/Services/ScreenCaster.cs index a447ae27..054e28c7 100644 --- a/ScreenCast.Core/Services/ScreenCaster.cs +++ b/ScreenCast.Core/Services/ScreenCaster.cs @@ -76,6 +76,14 @@ namespace Remotely.ScreenCast.Core.Services await viewer.SendScreenSize(bounds.Width, bounds.Height, viewer.ViewerConnectionID); }; + await viewer.SendScreenCapture( + ImageUtils.EncodeBitmap(viewer.Capturer.CurrentFrame, viewer.EncoderParams), + viewer.ViewerConnectionID, + viewer.Capturer.CurrentScreenBounds.Left, + viewer.Capturer.CurrentScreenBounds.Top, + viewer.Capturer.CurrentScreenBounds.Width, + viewer.Capturer.CurrentScreenBounds.Height); + while (!viewer.DisconnectRequested && viewer.IsConnected) { try diff --git a/ScreenCast.Linux/Services/ScreenCapturerLinux.cs b/ScreenCast.Linux/Services/ScreenCapturerLinux.cs index 400f7b43..73603c3d 100644 --- a/ScreenCast.Linux/Services/ScreenCapturerLinux.cs +++ b/ScreenCast.Linux/Services/ScreenCapturerLinux.cs @@ -39,7 +39,7 @@ namespace Remotely.ScreenCast.Linux.Services { try { - PreviousFrame.Dispose(); + PreviousFrame?.Dispose(); PreviousFrame = (Bitmap)CurrentFrame.Clone(); RefreshCurrentFrame(); } @@ -84,6 +84,8 @@ namespace Remotely.ScreenCast.Linux.Services SetSelectedScreen(x11Screens.Keys.First()); CurrentFrame = new Bitmap(CurrentScreenBounds.Width, CurrentScreenBounds.Height, PixelFormat.Format32bppArgb); PreviousFrame = new Bitmap(CurrentScreenBounds.Width, CurrentScreenBounds.Height, PixelFormat.Format32bppArgb); + + GetNextFrame(); } catch (Exception ex) { diff --git a/ScreenCast.Win/Services/ScreenCapturerWin.cs b/ScreenCast.Win/Services/ScreenCapturerWin.cs index abbcf3ae..f181919c 100644 --- a/ScreenCast.Win/Services/ScreenCapturerWin.cs +++ b/ScreenCast.Win/Services/ScreenCapturerWin.cs @@ -85,19 +85,12 @@ namespace Remotely.ScreenCast.Win.Services Win32Interop.SwitchToInputDesktop(); - PreviousFrame.Dispose(); + PreviousFrame?.Dispose(); PreviousFrame = (Bitmap)CurrentFrame.Clone(); if (directxScreens.ContainsKey(SelectedScreen)) { - try - { - GetDirectXFrame(); - } - catch - { - GetBitBltFrame(); - } + GetDirectXFrame(); } else { @@ -126,6 +119,8 @@ namespace Remotely.ScreenCast.Win.Services InitDirectX(); ScreenChanged?.Invoke(this, CurrentScreenBounds); + + GetBitBltFrame(); } public void SetSelectedScreen(string displayName)