diff --git a/mRemoteV1/Connection/Protocol/PuttyBase.cs b/mRemoteV1/Connection/Protocol/PuttyBase.cs index 00469872..d879dd80 100644 --- a/mRemoteV1/Connection/Protocol/PuttyBase.cs +++ b/mRemoteV1/Connection/Protocol/PuttyBase.cs @@ -13,7 +13,7 @@ using mRemoteNG.Tools.Cmdline; namespace mRemoteNG.Connection.Protocol { public class PuttyBase : ProtocolBase - { + { private const int IDM_RECONF = 0x50; // PuTTY Settings Menu ID private bool _isPuttyNg; @@ -42,7 +42,7 @@ namespace mRemoteNG.Connection.Protocol Event_Closed(this); } #endregion - + #region Public Methods public override bool Connect() { @@ -62,11 +62,11 @@ namespace mRemoteNG.Connection.Protocol var arguments = new CommandLineArguments {EscapeForShell = false}; arguments.Add("-load", InterfaceControl.Info.PuttySession); - + if (!(InterfaceControl.Info is PuttySessionInfo)) { arguments.Add("-" + PuttyProtocol); - + if (PuttyProtocol == Putty_Protocol.ssh) { var username = ""; @@ -89,7 +89,7 @@ namespace mRemoteNG.Connection.Protocol break; } } - + if (!string.IsNullOrEmpty(InterfaceControl.Info?.Password)) { password = InterfaceControl.Info.Password; @@ -102,9 +102,9 @@ namespace mRemoteNG.Connection.Protocol password = cryptographyProvider.Decrypt(Settings.Default.DefaultPassword, Runtime.EncryptionKey); } } - + arguments.Add("-" + (int)PuttySSHVersion); - + if (((int)Force & (int)ConnectionInfo.Force.NoCredentials) != (int)ConnectionInfo.Force.NoCredentials) { if (!string.IsNullOrEmpty(username)) @@ -117,24 +117,24 @@ namespace mRemoteNG.Connection.Protocol } } } - + arguments.Add("-P", InterfaceControl.Info.Port.ToString()); arguments.Add(InterfaceControl.Info.Hostname); } - + if (_isPuttyNg) { arguments.Add("-hwndparent", InterfaceControl.Handle.ToString()); } - + PuttyProcess.StartInfo.Arguments = arguments.ToString(); - + PuttyProcess.EnableRaisingEvents = true; PuttyProcess.Exited += ProcessExited; - + PuttyProcess.Start(); PuttyProcess.WaitForInputIdle(Settings.Default.MaxPuttyWaitTime * 1000); - + var startTicks = Environment.TickCount; while (PuttyHandle.ToInt32() == 0 & Environment.TickCount < startTicks + Settings.Default.MaxPuttyWaitTime * 1000) { @@ -153,17 +153,17 @@ namespace mRemoteNG.Connection.Protocol Thread.Sleep(0); } } - + if (!_isPuttyNg) { NativeMethods.SetParent(PuttyHandle, InterfaceControl.Handle); } - + Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, Language.strPuttyStuff, true); Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.strPuttyHandle, PuttyHandle), true); Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.strPuttyTitle, PuttyProcess.MainWindowTitle), true); Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, string.Format(Language.strPuttyParentHandle, InterfaceControl.Parent.Handle), true); - + Resize(this, new EventArgs()); base.Connect(); return true; @@ -174,7 +174,7 @@ namespace mRemoteNG.Connection.Protocol return false; } } - + public override void Focus() { try @@ -190,7 +190,7 @@ namespace mRemoteNG.Connection.Protocol Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strPuttyFocusFailed + Environment.NewLine + ex.Message, true); } } - + public override void Resize(object sender, EventArgs e) { try @@ -200,20 +200,28 @@ namespace mRemoteNG.Connection.Protocol return; } - var left = -(SystemInformation.FrameBorderSize.Width + SystemInformation.HorizontalResizeBorderThickness); - var top = -(SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height + SystemInformation.VerticalResizeBorderThickness); - var width = InterfaceControl.Width + (SystemInformation.FrameBorderSize.Width + SystemInformation.HorizontalResizeBorderThickness) * 2; - var height = InterfaceControl.Height + SystemInformation.CaptionHeight + - (SystemInformation.FrameBorderSize.Height + SystemInformation.VerticalResizeBorderThickness) * 2; + if (_isPuttyNg) + { + // PuTTYNG 0.70.0.1 and later doesn't have any window borders + NativeMethods.MoveWindow(PuttyHandle, 0, 0, InterfaceControl.Width, InterfaceControl.Height, true); + } + else + { + var left = -(SystemInformation.FrameBorderSize.Width + SystemInformation.HorizontalResizeBorderThickness); + var top = -(SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height + SystemInformation.VerticalResizeBorderThickness); + var width = InterfaceControl.Width + (SystemInformation.FrameBorderSize.Width + SystemInformation.HorizontalResizeBorderThickness) * 2; + var height = InterfaceControl.Height + SystemInformation.CaptionHeight + (SystemInformation.FrameBorderSize.Height + + SystemInformation.VerticalResizeBorderThickness) * 2; - NativeMethods.MoveWindow(PuttyHandle, left, top, width, height, true); - } + NativeMethods.MoveWindow(PuttyHandle, left, top, width, height, true); + } + } catch (Exception ex) { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strPuttyResizeFailed + Environment.NewLine + ex.Message, true); } } - + public override void Close() { try @@ -227,7 +235,7 @@ namespace mRemoteNG.Connection.Protocol { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strPuttyKillFailed + Environment.NewLine + ex.Message, true); } - + try { PuttyProcess.Dispose(); @@ -236,10 +244,10 @@ namespace mRemoteNG.Connection.Protocol { Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strPuttyDisposeFailed + Environment.NewLine + ex.Message, true); } - + base.Close(); } - + public void ShowSettingsDialog() { try @@ -253,7 +261,7 @@ namespace mRemoteNG.Connection.Protocol } } #endregion - + #region Enums protected enum Putty_Protocol