Merge pull request #117 from mRemoteNG/develop

merge develop into release
This commit is contained in:
Sean Kaim
2016-06-16 12:17:15 -04:00
committed by GitHub
109 changed files with 1804 additions and 1432 deletions

View File

@@ -1,8 +1,68 @@
1.73 Beta 2 ():
1.74 (2016-06-1X):
Supported Platforms/Components:
-------------------------------
Windows 7 SP1 (with RDP Client v8: KB2592687/KB2923545) or later
.NET Framework 4 or later
XULRunner is no longer required for Gecko support (see below)
General Changes:
----------------
Converted source from Visual Basic to C Sharp
Lots of code refactoring/clean up/general stability changes
MR-714: Removed Keyboard shortcut functionality
- Introduced in 1.73 beta that was never officially released
- This caused stability issues
- May be re-added in a future release
- Removal does *NOT* impact the ability to send keyboard shortcuts to RDP sessions (when redirect key combinations is set to "yes")
MR-559: Removed RDP Sessions panel functionality. This required a library for which no trusted origin/source could be located
Removed a bunch of old code/libraries and replaced them accordingly
Security Updates:
-----------------
MR-775, MR-745: Updated PuTTY to 0.67
Features/Enhancements:
----------------------
Updated to latest DockPanelSuite and enabled a slick new theme!
MR-145: Installer is now MSI based
MR-255: Updated RDP Client to version 8
MR-389: Updates to IE rendering engine
- Support for latest version of IE (9-11)
- Dropped support for IE 7 & IE 8
MR-850: Replaced XULRunner with GeckoFx
- No need to manually configure to have the Gecko rendering engine available now
- Install image is now significantly larger due to the inclusion of the Gecko Engine
Port Scan is now Asynchronous (and is significantly faster)
Initial Japanese translation included
Fixes:
------
MR-854: crashes when right clicking on connection tab
MR-852: Option "Allow only a single instance of the application" non-functional
MR-836: Trying to delete a folder of connections only deletes 2 connections at a time
MR-824, MR-706: Suppress Script Errors when using the IE rendering engine
MR-640: Fixed Inheritance not working
MR-639: RDP: Connect to console session
MR-610, MR-582, MR-451: RDP: Protocol Error 3334 or exceptions with large number of connections open
- This problem appears largely resolved by most reports and testing
- Further workarounds/problem avoidance: Disable Bitmap Caching on all RDP session configuration
MR-429: Display issue on the Options -> Advanced panel
MR-385: Inheritance settings lost when moving item to the root of the tree
1.73 Beta 2 (NEVER RELEASED):
Fixed issue MR-619 - Keyboard shortcuts stop working after locking the screen with Win+L
Added support for importing files from PuTTY Connection Manager.
Improved the import and export functionality.
1.73 Beta 1 (2013-11-19):
Added feature MR-16 - Add keyboard shortcuts to switch between tabs
Added feature MR-141 - Add a default protocol option
@@ -19,7 +79,7 @@
Fixed issue MR-556 - Export fails when overwriting an existing file
Fixed issue MR-594 - Crash on startup if write access is denied to the IE browser emulation registry key
Fixed issue MR-603 - Some configuration options are still shown even when inheritance is enabled
Added "Reset" to config panel context menu to allow resetting some config settings to their default value.
MR-590: Added "Reset" to config panel context menu to allow resetting some config settings to their default value.
Added and improved menu icons.
Removed misleading log messages about RD Gateway support.
Removed invalid "Site" configuration option from PuTTY Saved Sessions.
@@ -27,10 +87,14 @@
Fixed config panel showing settings from previously loaded connection file after loading a new one.
Improved handling of variables in external tool arguments.
1.72 (2013-11-13):
Fixed issue MR-592 - Unable to run VBS script as an external tool
Fixed issue MR-596 - Incorrect escaping of quotation marks in external tool arguments
1.71 (2013-10-29):
Fixed issue MR-574 - Crash when retrieving RDP session list if eolwtscom.dll is not registered
Fixed issue MR-578 - Connections file is reset
@@ -40,12 +104,16 @@
Improved error reporting when loading connections files.
Removed warning message when mRemoteNG is started for the first time about new connections file being created.
1.71 Release Candidate 2 (2013-10-16):
Fixed issue MR-560 - Cannot Auto-Update With Open Connections: Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32'
Fixed issue MR-565 - Double Folder keep heritage on the initial Folder
Fixed issue MR-566 - Typo in German UI Automatic Update Settings
Fixed duplicated folders possibly being named "New Connection" instead of the original folder's name.
1.71 Release Candidate 1 (2013-10-01):
Fixed issue MR-495 - Having a negative range in port scan creates memory exhaustion.
Fixed issue MR-514 - Window Proxy test failed without close button
@@ -62,11 +130,15 @@
Added Chinese (Traditional) translation.
Added partial Greek and Hungarian translations.
1.71 Beta 5 (2013-06-09):
Fixed issue MR-491 - Could not start RDP Connection
Fixed issue MR-499 - TS Gateway is not working in latest release 1.71
Fixed typo in SQL queries.
1.71 Beta 4 (2013-05-28):
Added feature MR-435 - Add digital signature check to updater
Fixed issue MR-255 - The version of the RDP AX client should be updated to 7
@@ -98,6 +170,8 @@
Lowered required version of RDC from 6.1 to 6.0.
Updated VncSharpNG to 1.3.4896.25007.
1.71 Beta 3 (2013-03-20):
Fixed issue MR-397 - Putty disappears from the screen
Fixed issue MR-398 - Full Screen mode doesn't correctly make use of available space
@@ -109,6 +183,8 @@
Fixed the category names in the themes tab of the options dialog on Windows XP not showing correctly.
Fixed PuTTY saved sessions with spaces or special characters not being listed.
1.71 Beta 2 (2013-03-19):
Added feature MR-336 - Customizable background color for the windows/panels
Added feature MR-345 - Two separate options for confirming closure of Tabs and Connection Panels
@@ -124,6 +200,8 @@
Changed "Automatically get session information" to be disabled by default.
RDP connections can now be switched to full screen mode when redirect key combinations is enabled.
1.71 Beta 1 (2013-03-04):
Added feature MR-329 - Create Option to disable the "Quick: " prefix
Fixed issue MR-67 - Sort does not recursively sort
@@ -142,6 +220,8 @@
If RDC 7.0 or higher is installed, the connection bar is no longer briefly shown when connecting to an RDP connection with redirect key combinations enabled.
If RDC 8.0 or higher is installed, RDP connections automatically adjust their size when the window is resized or when toggling full screen mode.
1.70 (2013-03-07):
Fixed issue MR-339 - Connection group collapses with just one click
Fixed issue MR-340 - Object reference not set to an instance of an object.
@@ -150,11 +230,15 @@
Fixed issue MR-355 - Moving sub folders to top level causes property loss
Fixed tabs not closing on double-click when the active tab is a PuTTY connection.
1.70 Release Candidate 2 (2013-02-25):
Fixed issue MR-332 - Can't select different tab with one click after disconnecting existing tab
Fixed issue MR-338 - PuTTYNG crashing on fresh install of mRemoteNG
Re-enabled PuTTYNG integration enhancements on Windows 8
1.70 Release Candidate 1 (2013-02-22):
Fixed issue MR-183 - Error trying to save connections when using SQL - Invalid column name _parentConstantId
Fixed issue MR-225 - Tabs do not open in a panel until multiple panels are displayed.
@@ -168,6 +252,8 @@
Fixed "Decryption failed. Padding is invalid and cannot be removed." notification.
Fixed KiTTY opening in a separate window when using a saved session.
1.70 Beta 2 (2013-02-18):
Fixed issue MR-47 - Silent Installation Prompts for Language
Fixed issue MR-54 - Error When disconnecting from SSL channel RDP
@@ -210,6 +296,7 @@
Improved the use of Tab and Shift-Tab to cycle through entries in the Config grid.
Improved loading of XML files from older versions of mRemote/mRemoteNG.
1.70 Beta 1 (2012-02-27):
Fixed issue MR-77 - VerifyDatabaseVersion (Config.Connections.Save) failed. Version string portion was too short or too long.
Fixed issue MR-78 - Renaming Connections
@@ -234,6 +321,8 @@
Updated VncSharpNG to version 1.2.4440.36644.
Added debugging symbols for VncSharpNG.
1.69 (2011-12-09):
Fixed issue #66 - Fresh Install Fails to Create Config
Fixed issue #69 - Connection file gets erased
@@ -245,11 +334,15 @@
Binaries are now digitally signed
Added Credits, License, and Version History items to the Start Menu and made Start Menu item names localizable.
1.68 (2011-07-07):
Fixed issue #48 - VerifyDatabaseVersion fails with new (empty) database tables.
Fixed issue #60 - Can't save connections file
Fixed issue #62 - Connection file error upon launch.
1.67 (2011-06-05):
Fixed migration of external tools configuration and panel layout from Local to Roaming folder.
Disable ICA Hotkeys for Citrix connections. Fixes issue with international users.
@@ -281,9 +374,13 @@
Fixed tab order of controls in Options dialog.
Fixed bug 45 - Changing some settings in the config file may not save.
1.66 (2011-05-02):
Fixed connections not working
1.65 (2011-05-02):
Fixed Ctrl-Tab and Ctrl-Shift-Tab not working in any other applications while mRemoteNG is running
Ctrl-Tab and Ctrl-Shift-Tab no longer work to switch tabs within mRemoteNG
@@ -291,6 +388,8 @@
Fixed bug 38 - Application uses the wrong Application Data settings folder (in Local Settings)
Added code to the installer to check that the user is in the 'Power Users' or 'Administrators' group
1.64 (2011-04-27):
Fixed bug 6 - VNC CTRL+key & keyboard combo mappings are broken
Fixed bug 12 - Tab switch is not working in config panel
@@ -310,6 +409,8 @@
Updated DockPanel Suite to version 2.5 RC1
Updated VNCSharpNG to correct Ctrl and Alt key pass-through behavior
1.63 (2010-02-02):
New icon and logo
Fixed problems moving or resizing the main window while PuTTY (SSH/telnet/rlogin/raw) connections are open
@@ -325,6 +426,8 @@
Popups can now be allowed in Internet Explorer by holding Ctrl+Alt when clicking a link
Added PuTTY Settings item to tab context menu
1.62 (2010-01-19):
Switched to VncSharp, an open source VNC component
VNC is supported again except for the following features:
@@ -341,10 +444,14 @@
Added RDP, VNC and ICA version numbers to Components Check page
Fixed a bug with the inheritance buttons on the Config panel disappearing after awhile
1.61 (2010-01-14):
Removed unlicensed SmartCode Solutions ViewerX VNC Viewer ActiveX
This version of mRemoteNG does not support VNC
1.60 (2010-01-09):
Changed name to mRemoteNG
Fixed menu bar not staying docked to left side
@@ -357,6 +464,8 @@
Moved Check for Updates to the Help menu
Changed website links in Help menu and About page to load within mRemoteNG instead of launching an external browser
-----
1.50:
Added the following formats to the "Save Connections As" function:
mRemote CSV (standard CSV file with all properties)

View File

@@ -34,15 +34,18 @@ Copyright
MIT License
http://www.codeproject.com/KB/recipes/command_line.aspx
DotNetVer
Copyright <20> 2010 David Grinberg
Copyright <20> 2010-2011 Brandon Hansen
http://nsis.sourceforge.net/DotNetVer
FilteredPropertyGrid
Copyright <20> 2006 Azuria
http://www.codeproject.com/KB/cs/FilteredPropertyGrid.aspx
Hotkey Selection Control for .NET
Copyright <20> 2006 Thomas Backman
http://www.codeproject.com/Articles/15085/A-simple-hotkey-selection-control-for-NET
InputBox
Copyright <20> 2016 Jan Slama
http://www.csharp-examples.net/inputbox/
IP TextBox
Copyright <20> 2005 mawnkay
http://www.codeproject.com/Articles/11576/IP-TextBox
@@ -61,19 +64,15 @@ Copyright
Modified New BSD License
http://www.mentalis.org/
DockPanel Suite 2.3.1
Copyright <20> 2007 Weifen Luo
DockPanel Suite 2.10.0.beta2
Copyright <20> 2015 @roken and @lextm (formerly Weifen Luo)
MIT License
http://sourceforge.net/projects/dockpanelsuite/
https://github.com/dockpanelsuite/dockpanelsuite
FilteredPropertyGrid 1.0.0.0
Copyright <20> 2006 Azuria
http://www.codeproject.com/KB/cs/FilteredPropertyGrid.aspx
GeckoFX 1.8.1.4
Copyright <20> 2008 Skybound Software
Mozilla Public License 1.1
http://www.geckofx.org/
GeckoFX 45
Copyright <20> 2016 Tom Hindle
Mozilla Public License
https://bitbucket.org/geckofx/
log4net 1.2.15.0
Copyright <20> 2001-2015 The Apache Software Foundation
@@ -90,10 +89,6 @@ Copyright
Modified New BSD License
http://www.mentalis.org/
MiniGeckoBrowser 1.0
Copyright <20> 2008 Felix Deimel
http://www.appjuice.org/
PuTTY 0.67
Copyright <20> 1997-2016 Simon Tatham
MIT License

9
Jenkinsfile vendored
View File

@@ -1,5 +1,6 @@
node('windows') {
def jobDir = pwd()
def solutionFilePath = "\"${jobDir}\\mRemoteV1.sln\""
def vsToolsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools"
def vsExtensionsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow"
@@ -9,11 +10,15 @@ node('windows') {
echo "BranchName: ${branchName}"
git([url: gitUrl, branch: branchName])
stage 'Restore NuGet Packages'
def nugetPath = "C:\\nuget.exe"
bat "${nugetPath} restore ${solutionFilePath}"
stage 'Build mRemoteNG (Normal)'
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo \"${jobDir}\\mRemoteV1.sln\""
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
stage 'Build mRemoteNG (Portable)'
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Configuration=\"Debug Portable\" \"${jobDir}\\mRemoteV1.sln\""
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Configuration=\"Debug Portable\";Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
stage 'Run Unit Tests'
def nunitTestAdapterPath = "C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\VisualStudio\\14.0\\Extensions"

View File

@@ -11,4 +11,16 @@ Currently these protocols are supported:
* Telnet (TELecommunication NETwork)
* HTTP/S (Hypertext Transfer Protocol)
* Rlogin (Rlogin)
* RAW
* RAW
mRemoteNG can be installed on Windows 7 or later.
Windows 7 systems require RDP version 8:
https://support.microsoft.com/en-us/kb/2592687
OR
https://support.microsoft.com/en-us/kb/2923545
Windows 8+ support RDP version 8+ out of the box.
RDP versions are backwards compatible, so an mRemoteNG client running on Windows 10 can
connection successfully to a Windows 2003 host (for example).

53
build-relport.cmd Normal file
View File

@@ -0,0 +1,53 @@
@echo off
setlocal enabledelayedexpansion
rem Windows Sysinternals Sigcheck from http://technet.microsoft.com/en-us/sysinternals/bb897441
set SIGCHECK="%ProgramFiles(x86)%\Sigcheck\sigcheck.exe"
set SEVENZIP="%ProgramFiles%\7-Zip\7z.exe"
set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
call %VCVARSALL% x86
echo Building...
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" "%~dp0\mRemoteV1.sln" /Rebuild "Release Portable"
set SIGCHECK=!SIGCHECK:"=^"!
set SIGCHECK=!SIGCHECK: =^^ !
set SIGCHECK=!SIGCHECK:(=^^(!
set SIGCHECK=!SIGCHECK:)=^^)!
for /F "usebackq delims=. tokens=1-4" %%i in (`!SIGCHECK! /accepteula -q -n "%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe"`) do (
set PRODUCT_VERSION_SHORT=%%i.%%j
set PRODUCT_VERSION=%%i.%%j.%%k.%%l
)
echo Version is %PRODUCT_VERSION%
set PORTABLEZIP="%~dp0\Release\mRemoteNG-Portable-%PRODUCT_VERSION%.zip"
rmdir /S /Q %~dp0\mRemoteV1\bin\package
mkdir %~dp0\mRemoteV1\bin\package
copy %~dp0\*.txt %~dp0\mRemoteV1\bin\package
copy "%~dp0\Installer Projects\Installer\Dependencies\PuTTYNG.exe" %~dp0\mRemoteV1\bin\package
xcopy /S /Y "%~dp0\mRemoteV1\bin\Release Portable" %~dp0\mRemoteV1\bin\package
rem Move the help files to the proper location
move %~dp0\mRemoteV1\bin\package\Resources\Help %~dp0\mRemoteV1\bin\package\
rem These del's can error out, that's OK. We don't want these files in the release.
del /s /q "%~dp0\mRemoteV1\bin\package\app.publish"
rmdir "%~dp0\mRemoteV1\bin\package\app.publish"
del /s /q "%~dp0\mRemoteV1\bin\package\Resources"
rmdir "%~dp0\mRemoteV1\bin\package\Resources"
del "%~dp0\mRemoteV1\bin\package\confCons*"
del "%~dp0\mRemoteV1\bin\package\mRemoteNG.log"
del "%~dp0\mRemoteV1\bin\package\pnlLayout.xml"
del "%~dp0\mRemoteV1\bin\package\extApps.xml"
del "%~dp0\mRemoteV1\bin\package\*.pdb"
del "%~dp0\mRemoteV1\bin\package\*vshost*"
echo Creating portable ZIP file...
echo %PORTABLEZIP%
del /f /q %PORTABLEZIP% > nul 2>&1
%SEVENZIP% a -bt -mx=9 -mm=LZMA -tzip -y -r %PORTABLEZIP% "%~dp0\mRemoteV1\bin\package\*.*"
%SEVENZIP% a -bt -mx=9 -mm=LZMA -tzip -y %PORTABLEZIP% "%~dp0\*.TXT"

View File

@@ -0,0 +1,67 @@
using NUnit.Framework;
using System.IO;
namespace mRemoteNGTests
{
[TestFixture]
public class BinaryFileTests
{
[Test]
public void LargeAddressAwareFlagIsSet()
{
var exePath = GetTargetPath();
Assert.That(IsLargeAware(exePath), Is.True);
}
static string GetTargetPath()
{
string debugOrRelease = "";
string normalOrPortable = "";
#if DEBUG
debugOrRelease = "Debug";
#else
debugOrRelease = "Release";
#endif
#if PORTABLE
normalOrPortable = " Portable";
#else
normalOrPortable = "";
#endif
string path = string.Format(".\\mRemoteV1\\bin\\{0}{1}\\mRemoteNG.exe", debugOrRelease, normalOrPortable);
return path;
}
static bool IsLargeAware(string file)
{
using (var fs = File.OpenRead(file))
{
return IsLargeAware(fs);
}
}
/// <summary>
/// Checks if the stream is a MZ header and if it is large address aware
/// </summary>
/// <param name="stream">Stream to check, make sure its at the start of the MZ header</param>
/// <exception cref=""></exception>
/// <returns></returns>
static bool IsLargeAware(Stream stream)
{
const int IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x20;
var br = new BinaryReader(stream);
if (br.ReadInt16() != 0x5A4D) //No MZ Header
return false;
br.BaseStream.Position = 0x3C;
var peloc = br.ReadInt32(); //Get the PE header location.
br.BaseStream.Position = peloc;
if (br.ReadInt32() != 0x4550) //No PE header
return false;
br.BaseStream.Position += 0x12;
return (br.ReadInt16() & IMAGE_FILE_LARGE_ADDRESS_AWARE) == IMAGE_FILE_LARGE_ADDRESS_AWARE;
}
}
}

View File

@@ -17,24 +17,41 @@
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug Portable|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug Portable\</OutputPath>
<DefineConstants>TRACE;DEBUG;PORTABLE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release Portable|x86'">
<OutputPath>bin\x86\Release Portable\</OutputPath>
<DefineConstants>TRACE;PORTABLE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
@@ -76,6 +93,7 @@
</Choose>
<ItemGroup>
<Compile Include="App\LoggerTests.cs" />
<Compile Include="BinaryFileTests.cs" />
<Compile Include="Connection\ConnectionInfoInheritanceTests.cs" />
<Compile Include="ListViewTester.cs" />
<Compile Include="Config\Connections\SqlConnectionUpdateCheckerTests.cs" />

View File

@@ -28,63 +28,51 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|Any CPU.ActiveCfg = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|Any CPU.Build.0 = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.ActiveCfg = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.Build.0 = Debug Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.ActiveCfg = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.Build.0 = Debug|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|Any CPU.ActiveCfg = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|Any CPU.Build.0 = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.ActiveCfg = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.Build.0 = Release Portable|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|Any CPU.Build.0 = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.ActiveCfg = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.ActiveCfg = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.Build.0 = Debug|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|Any CPU.Build.0 = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.ActiveCfg = Release|Any CPU
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.Build.0 = Release|Any CPU
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|Any CPU.ActiveCfg = Debug Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.ActiveCfg = Debug Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x86.Build.0 = Debug Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|Any CPU.ActiveCfg = Debug|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.ActiveCfg = Debug|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x86.Build.0 = Debug|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|Any CPU.ActiveCfg = Release Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.ActiveCfg = Release Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x86.Build.0 = Release Portable|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|Any CPU.ActiveCfg = Release|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.ActiveCfg = Release|x86
{4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x86.Build.0 = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.ActiveCfg = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|Any CPU.Build.0 = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.ActiveCfg = Debug Portable|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x86.Build.0 = Debug Portable|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|Any CPU.ActiveCfg = Debug|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.ActiveCfg = Debug|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x86.Build.0 = Debug|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.ActiveCfg = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|Any CPU.Build.0 = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.ActiveCfg = Release Portable|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x86.Build.0 = Release Portable|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|Any CPU.ActiveCfg = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.ActiveCfg = Release|x86
{1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x86.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|Any CPU.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|Any CPU.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x86.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|Any CPU.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|Any CPU.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.ActiveCfg = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x86.Build.0 = Debug|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|Any CPU.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|Any CPU.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x86.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|Any CPU.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|Any CPU.Build.0 = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.ActiveCfg = Release|x86
{5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x86.Build.0 = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|Any CPU.ActiveCfg = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x86.ActiveCfg = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x86.Build.0 = Debug Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|Any CPU.ActiveCfg = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x86.ActiveCfg = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x86.Build.0 = Debug|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|Any CPU.ActiveCfg = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x86.ActiveCfg = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x86.Build.0 = Release Portable|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|Any CPU.ActiveCfg = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|Any CPU.Build.0 = Release|x86
{F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x86.ActiveCfg = Release|x86

View File

@@ -1,82 +0,0 @@
////using System;
////using System.Diagnostics;
////using Microsoft.VisualBasic.CompilerServices;
//using System;
//using System.Diagnostics;
//using Microsoft.VisualBasic.CompilerServices;
//namespace mRemoteNG.App
//{
// // The following events are available for MyApplication:
// //
// // Startup: Raised when the application starts, before the startup form is created.
// // Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
// // UnhandledException: Raised if the application encounters an unhandled exception.
// // StartupNextInstance: Raised when launching a single-instance application and the application is already active.
// // NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
// partial class MyApplication : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
//{
// public System.Threading.Mutex mutex;
// private void MyApplication_Startup(object sender, Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
// {
// if (mRemoteNG.Settings.Default.SingleInstance)
// {
// string mutexID = "mRemoteNG_SingleInstanceMutex";
// mutex = new System.Threading.Mutex(false, mutexID);
// if (!mutex.WaitOne(0, false))
// {
// try
// {
// SwitchToCurrentInstance();
// }
// catch (Exception)
// {
// }
// ProjectData.EndApp();
// }
// GC.KeepAlive(mutex);
// }
// }
// private IntPtr GetCurrentInstanceWindowHandle()
// {
// IntPtr hWnd = IntPtr.Zero;
// Process curProc = Process.GetCurrentProcess();
// foreach (Process proc in Process.GetProcessesByName(curProc.ProcessName))
// {
// if (proc.Id != curProc.Id && proc.MainModule.FileName == curProc.MainModule.FileName && proc.MainWindowHandle != IntPtr.Zero)
// {
// hWnd = proc.MainWindowHandle;
// break;
// }
// }
// return hWnd;
// }
// private void SwitchToCurrentInstance()
// {
// IntPtr hWnd = GetCurrentInstanceWindowHandle();
// if (hWnd != IntPtr.Zero)
// {
// //Restore window if minimized. Do not restore if already in
// //normal or maximised window state, since we don't want to
// //change the current state of the window.
// if (App.NativeMethods.IsIconic(hWnd) != 0)
// {
// App.NativeMethods.ShowWindow(hWnd, App.NativeMethods.SW_RESTORE);
// }
// App.NativeMethods.SetForegroundWindow(hWnd);
// }
// }
// private void MyApplication_Shutdown(object sender, System.EventArgs e)
// {
// mutex?.Close();
// }
//}
//}

View File

@@ -0,0 +1,76 @@
using Microsoft.Win32;
using mRemoteNG.App.Info;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.TaskDialog;
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace mRemoteNG.App
{
public class CompatibilityChecker
{
public CompatibilityChecker()
{
}
public void CheckCompatibility()
{
CheckFipsPolicy();
CheckLenovoAutoScrollUtility();
}
private void CheckFipsPolicy()
{
if (FipsPolicyEnabledForServer2003() || FipsPolicyEnabledForServer2008AndNewer())
{
MessageBox.Show(frmMain.Default, string.Format(Language.strErrorFipsPolicyIncompatible, GeneralAppInfo.ProdName, GeneralAppInfo.ProdName, MessageBoxButtons.OK, MessageBoxIcon.Error));
Environment.Exit(1);
}
}
private bool FipsPolicyEnabledForServer2003()
{
var regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa");
var fipsPolicy = regKey?.GetValue("FIPSAlgorithmPolicy");
if (fipsPolicy != null && (int)fipsPolicy != 0)
return true;
else
return false;
}
private bool FipsPolicyEnabledForServer2008AndNewer()
{
var regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy");
var fipsPolicy = regKey?.GetValue("Enabled");
if (fipsPolicy != null && (int)fipsPolicy != 0)
return true;
else
return false;
}
private void CheckLenovoAutoScrollUtility()
{
if (!Settings.Default.CompatibilityWarnLenovoAutoScrollUtility)
return;
Process[] proccesses = new Process[] { };
try
{
proccesses = Process.GetProcessesByName("virtscrl");
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("Error in CheckLenovoAutoScrollUtility", ex);
}
if (proccesses?.Length > 0)
{
CTaskDialog.MessageBox(Application.ProductName, Language.strCompatibilityProblemDetected, string.Format(Language.strCompatibilityLenovoAutoScrollUtilityDetected, Application.ProductName), "", "", Language.strCheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.Ok, ESysIcons.Warning, ESysIcons.Warning);
if (CTaskDialog.VerificationChecked)
Settings.Default.CompatibilityWarnLenovoAutoScrollUtility = false;
}
}
}
}

View File

@@ -32,11 +32,17 @@ namespace mRemoteNG.App
internal static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
internal static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int SendMessage(IntPtr hWnd, int msg, int wparam, int lparam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, System.Text.StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
@@ -57,8 +63,20 @@ namespace mRemoteNG.App
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern IntPtr WindowFromPoint(Point point);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern void GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetDlgCtrlID(int hwndCtl);
[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
#endregion
#region Structures
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPOS
@@ -71,8 +89,32 @@ namespace mRemoteNG.App
public int cy;
public int flags;
}
public struct WINDOWPLACEMENT
{
public uint length;
public uint flags;
public uint showCmd;
public POINT ptMinPosition;
public POINT ptMaxPosition;
public RECT rcNormalPosition;
}
public struct POINT
{
public long x;
public long y;
}
public struct RECT
{
public long left;
public long top;
public long right;
public long bottom;
}
#endregion
#region Helpers
public static int MAKELONG(int wLow, int wHigh)
{
@@ -106,6 +148,8 @@ namespace mRemoteNG.App
#endregion
#region Constants
public const int TRUE = 1;
#region GetWindowLong
public const int GWL_STYLE = (-16);
#endregion
@@ -123,8 +167,17 @@ namespace mRemoteNG.App
#endregion
#region ShowWindow
public const int SW_SHOWMAXIMIZED = 3;
public const int SW_RESTORE = 9;
public const uint SW_HIDE = 0;
public const uint SW_SHOWNORMAL = 1;
public const uint SW_SHOWMINIMIZED = 2;
public const uint SW_SHOWMAXIMIZED = 3;
public const uint SW_MAXIMIZE = 3;
public const uint SW_SHOWNOACTIVATE = 4;
public const uint SW_SHOW = 5;
public const uint SW_MINIMIZE = 6;
public const uint SW_SHOWMINNOACTIVE = 7;
public const uint SW_SHOWNA = 8;
public const uint SW_RESTORE = 9;
#endregion
#region SetWindowPos / WM_WINDOWPOSCHANGING / WM_WINDOWPOSCHANGED
@@ -214,6 +267,12 @@ namespace mRemoteNG.App
public const int SWP_STATECHANGED = 0x8000;
#endregion
#region Window Placement Flags (WPF)
public const uint WPF_SETMINPOSITION = 0x1;
public const uint WPF_RESTORETOMAXIMIZED = 0x2;
public const uint WPF_ASYNCWINDOWPLACEMENT = 0x4;
#endregion
#region WM_ACTIVATE
/// <summary>
///
@@ -247,6 +306,11 @@ namespace mRemoteNG.App
/// </summary>
public const int WM_ACTIVATE = 0x6;
/// <summary>
///
/// </summary>
public const int WM_SETTEXT = 0xC;
/// <summary>
/// Copies the text that corresponds to a window into a buffer provided by the caller.
/// </summary>
@@ -292,6 +356,11 @@ namespace mRemoteNG.App
/// </summary>
public const int WM_KEYUP = 0x101;
/// <summary>
///
/// </summary>
public const int WM_COMMAND = 0x111;
/// <summary>
/// A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.
/// </summary>
@@ -379,6 +448,12 @@ namespace mRemoteNG.App
public const int VK_CONTROL = 0x11;
public const int VK_C = 0x67;
#endregion
#region LB
public const int LB_ERR = -1;
public const int LB_SELECTSTRING = 0x18C;
#endregion
#endregion
}
}

View File

@@ -24,7 +24,7 @@ namespace mRemoteNG.App
private static void StartApplication()
{
Startup.InitializeProgram();
Startup.Instance.InitializeProgram();
Application.Run(frmMain.Default);
}
@@ -54,7 +54,7 @@ namespace mRemoteNG.App
if (singletonInstanceWindowHandle != IntPtr.Zero)
{
if (NativeMethods.IsIconic(singletonInstanceWindowHandle) != 0)
NativeMethods.ShowWindow(singletonInstanceWindowHandle, NativeMethods.SW_RESTORE);
NativeMethods.ShowWindow(singletonInstanceWindowHandle, (int)NativeMethods.SW_RESTORE);
}
}

View File

@@ -1,4 +1,3 @@
using Microsoft.VisualBasic;
using mRemoteNG.App.Info;
using mRemoteNG.Config.Connections;
using mRemoteNG.Connection;
@@ -6,7 +5,6 @@ using mRemoteNG.Connection.Protocol;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Container;
using mRemoteNG.Credential;
using mRemoteNG.Images;
using mRemoteNG.Messages;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
@@ -20,6 +18,7 @@ using System.Threading;
using System.Windows.Forms;
using System.Xml;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Forms.Input;
using mRemoteNG.UI.TaskDialog;
using WeifenLuo.WinFormsUI.Docking;
using TabPage = Crownwood.Magic.Controls.TabPage;
@@ -285,9 +284,10 @@ namespace mRemoteNG.App
try
{
ConnectionWindow conW = default(ConnectionWindow);
conW = (ConnectionWindow)((Control)sender).Tag;
conW = (ConnectionWindow)((ToolStripMenuItem)sender).Tag;
string nTitle = Interaction.InputBox(Prompt: Language.strNewTitle + ":", DefaultResponse: Convert.ToString(((Control)((Control)sender).Tag).Text.Replace("&&", "&")));
string nTitle = "";
input.InputBox(Language.strNewTitle, Language.strNewTitle + ":", ref nTitle);
if (!string.IsNullOrEmpty(nTitle))
{
@@ -1095,19 +1095,12 @@ namespace mRemoteNG.App
ProtocolBase Prot = (ProtocolBase)sender;
if (Prot.InterfaceControl.Info.Protocol == ProtocolType.RDP)
{
string[] Reason = DisconnectedMessage.Split("\r\n".ToCharArray());
string ReasonCode = Reason[0];
string ReasonDescription = Reason[1];
string ReasonCode = DisconnectedMessage.Split("\r\n".ToCharArray())[0];
string desc = DisconnectedMessage.Replace("\r\n", " ");
if (Convert.ToInt32(ReasonCode) > 3)
{
if (!string.IsNullOrEmpty(ReasonDescription))
{
MessageCollector.AddMessage(MessageClass.WarningMsg, Language.strRdpDisconnected + Environment.NewLine + ReasonDescription + Environment.NewLine + string.Format(Language.strErrorCode, ReasonCode));
}
else
{
MessageCollector.AddMessage(MessageClass.WarningMsg, Language.strRdpDisconnected + Environment.NewLine + string.Format(Language.strErrorCode, ReasonCode));
}
MessageCollector.AddMessage(MessageClass.WarningMsg, Language.strRdpDisconnected + Environment.NewLine + desc);
}
}
}

View File

@@ -1,33 +1,38 @@
using Microsoft.Win32;
using mRemoteNG.App.Info;
using mRemoteNG.App.Update;
using mRemoteNG.Config.Connections;
using mRemoteNG.Connection;
using mRemoteNG.Messages;
using mRemoteNG.Tools;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Window;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Management;
using System.Threading;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using mRemoteNG.Config.Connections;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.TaskDialog;
using System.Globalization;
using mRemoteNG.App.Info;
namespace mRemoteNG.App
{
public class Startup
{
private static readonly Startup _singletonInstance = new Startup();
private CompatibilityChecker _compatibilityChecker;
private AppUpdater _appUpdate;
public static Startup Instance
{
get { return _singletonInstance; }
}
private Startup()
{
_compatibilityChecker = new CompatibilityChecker();
_appUpdate = new AppUpdater();
}
@@ -35,84 +40,18 @@ namespace mRemoteNG.App
{
}
public static void InitializeProgram()
public void InitializeProgram()
{
Debug.Print("---------------------------" + Environment.NewLine + "[START] - " + Convert.ToString(DateTime.Now, CultureInfo.InvariantCulture));
_singletonInstance.LogStartupData();
//CheckCompatibility();
_singletonInstance.ParseCommandLineArgs();
LogStartupData();
_compatibilityChecker.CheckCompatibility();
ParseCommandLineArgs();
IeBrowserEmulation.Register();
_singletonInstance.GetConnectionIcons();
GetConnectionIcons();
}
private void CheckCompatibility()
{
CheckFipsPolicy();
CheckLenovoAutoScrollUtility();
}
private void CheckFipsPolicy()
{
RegistryKey regKey = default(RegistryKey);
bool isFipsPolicyEnabled = false;
// Windows XP/Windows Server 2003
regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa");
if (regKey != null)
{
if ((int)regKey.GetValue("FIPSAlgorithmPolicy") != 0)
{
isFipsPolicyEnabled = true;
}
}
// Windows Vista/Windows Server 2008 and newer
regKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy");
if (regKey != null)
{
if ((int)regKey.GetValue("Enabled") != 0)
{
isFipsPolicyEnabled = true;
}
}
if (isFipsPolicyEnabled)
{
MessageBox.Show(frmMain.Default, string.Format(Language.strErrorFipsPolicyIncompatible, GeneralAppInfo.ProdName, GeneralAppInfo.ProdName, MessageBoxButtons.OK, MessageBoxIcon.Error));
Environment.Exit(1);
}
}
private void CheckLenovoAutoScrollUtility()
{
if (!Settings.Default.CompatibilityWarnLenovoAutoScrollUtility)
{
return;
}
Process[] proccesses = new Process[] { };
try
{
proccesses = Process.GetProcessesByName("virtscrl");
}
catch(Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("Error in CheckLenovoAutoScrollUtility", ex);
}
if (proccesses.Length == 0)
{
return;
}
CTaskDialog.MessageBox(Application.ProductName, Language.strCompatibilityProblemDetected, string.Format(Language.strCompatibilityLenovoAutoScrollUtilityDetected, Application.ProductName), "", "", Language.strCheckboxDoNotShowThisMessageAgain, ETaskDialogButtons.Ok, ESysIcons.Warning, ESysIcons.Warning);
if (CTaskDialog.VerificationChecked)
{
Settings.Default.CompatibilityWarnLenovoAutoScrollUtility = false;
}
}
public static void SetDefaultLayout()
public void SetDefaultLayout()
{
frmMain.Default.pnlDock.Visible = false;
@@ -129,6 +68,7 @@ namespace mRemoteNG.App
frmMain.Default.pnlDock.Visible = true;
}
private void GetConnectionIcons()
{
string iPath = GeneralAppInfo.HomePath + "\\Icons\\";
@@ -157,12 +97,14 @@ namespace mRemoteNG.App
LogCultureData();
}
}
private void LogSystemData()
{
string osData = GetOperatingSystemData();
string architecture = GetArchitectureData();
Logger.Instance.InfoFormat(string.Join(" ", Array.FindAll(new string[] { osData, architecture }, s => !string.IsNullOrEmpty(Convert.ToString(s)))));
}
private string GetOperatingSystemData()
{
string osVersion = string.Empty;
@@ -183,11 +125,13 @@ namespace mRemoteNG.App
string osData = string.Join(" ", new string[] { osVersion, servicePack });
return osData;
}
private string GetOSVersion(string osVersion, ManagementObject managementObject)
{
osVersion = Convert.ToString(managementObject.GetPropertyValue("Caption")).Trim();
return osVersion;
}
private string GetOSServicePack(string servicePack, ManagementObject managementObject)
{
int servicePackNumber = Convert.ToInt32(managementObject.GetPropertyValue("ServicePackMajorVersion"));
@@ -197,6 +141,7 @@ namespace mRemoteNG.App
}
return servicePack;
}
private string GetArchitectureData()
{
string architecture = string.Empty;
@@ -214,29 +159,33 @@ namespace mRemoteNG.App
}
return architecture;
}
private void LogApplicationData()
{
#if !PORTABLE
Logger.Instance.InfoFormat("{0} {1} starting.", System.Windows.Forms.Application.ProductName, System.Windows.Forms.Application.ProductVersion);
Logger.Instance.InfoFormat("{0} {1} starting.", Application.ProductName, Application.ProductVersion);
#else
Logger.Instance.InfoFormat("{0} {1} {2} starting.", Application.ProductName, Application.ProductVersion, Language.strLabelPortableEdition);
#endif
}
private void LogCmdLineArgs()
{
Logger.Instance.InfoFormat("Command Line: {0}", Environment.GetCommandLineArgs());
}
private void LogCLRData()
{
Logger.Instance.InfoFormat("Microsoft .NET CLR {0}", Environment.Version);
}
private void LogCultureData()
{
Logger.Instance.InfoFormat("System Culture: {0}/{1}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.NativeName);
}
public static void CreateConnectionsProvider()
public void CreateConnectionsProvider()
{
if (Settings.Default.UseSQLServer)
{
@@ -264,6 +213,7 @@ namespace mRemoteNG.App
_appUpdate.GetUpdateInfoCompletedEvent += GetUpdateInfoCompleted;
_appUpdate.GetUpdateInfoAsync();
}
private void GetUpdateInfoCompleted(object sender, AsyncCompletedEventArgs e)
{
if (frmMain.Default.InvokeRequired)
@@ -307,6 +257,7 @@ namespace mRemoteNG.App
_appUpdate.GetAnnouncementInfoCompletedEvent += GetAnnouncementInfoCompleted;
_appUpdate.GetAnnouncementInfoAsync();
}
private void GetAnnouncementInfoCompleted(object sender, AsyncCompletedEventArgs e)
{
if (frmMain.Default.InvokeRequired)

View File

@@ -15,7 +15,6 @@ using mRemoteNG.Tree;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Images;
using mRemoteNG.UI.Forms;
using mRemoteNG.Tree.Root;
using mRemoteNG.UI.TaskDialog;

View File

@@ -4,15 +4,16 @@ using mRemoteNG.App;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Container;
using mRemoteNG.Tools;
namespace mRemoteNG.Config.Import
{
public class PortScan
public static class PortScan
{
public static void Import(IEnumerable hosts, ProtocolType protocol, TreeNode parentTreeNode)
{
foreach (Tools.PortScan.ScanHost host in hosts)
foreach (ScanHost host in hosts)
{
var finalProtocol = default(ProtocolType);
var protocolValid = false;

View File

@@ -4,7 +4,6 @@ using System.Xml;
using System.IO;
using mRemoteNG.App;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.Images;
using mRemoteNG.Connection;
using mRemoteNG.Tree;
using mRemoteNG.Container;

View File

@@ -3,10 +3,9 @@ using System.Windows.Forms;
using System.IO;
using mRemoteNG.App;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Images;
using mRemoteNG.Container;
using mRemoteNG.Connection;
using mRemoteNG.Tree;
namespace mRemoteNG.Config.Import
{

View File

@@ -5,7 +5,6 @@ using System.IO;
using System.Runtime.InteropServices;
using mRemoteNG.App;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Images;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Tree;

View File

@@ -1,7 +1,6 @@
using System.Windows.Forms;
using System.IO;
using mRemoteNG.App;
using mRemoteNG.Images;
using mRemoteNG.Config.Connections;
using mRemoteNG.Container;
using mRemoteNG.Connection;

View File

@@ -1,22 +1,13 @@
using System.Collections.Generic;
using System;
using AxWFICALib;
using System.Drawing;
using System.Diagnostics;
using System.Data;
using AxMSTSCLib;
using Microsoft.VisualBasic;
using System.Collections;
using System.Windows.Forms;
using mRemoteNG.My;
using mRemoteNG.Tree;
using mRemoteNG.Images;
using mRemoteNG.Connection;
namespace mRemoteNG.Config.Putty
{
public abstract class Provider
public abstract class Provider
{
#region Public Methods
private TreeNode _rootTreeNode;

View File

@@ -1,5 +1,4 @@
using mRemoteNG.Connection;
using mRemoteNG.Images;
using mRemoteNG.Tools;
using mRemoteNG.Tree;
using System.Collections.Generic;

View File

@@ -49,7 +49,7 @@ namespace mRemoteNG.Config.Settings
}
else
{
Startup.SetDefaultLayout();
Startup.Instance.SetDefaultLayout();
}
}
catch (Exception ex)

View File

@@ -1,5 +1,4 @@
using System;
using Microsoft.VisualBasic;
using System.ComponentModel;
using mRemoteNG.App;
using mRemoteNG.App.Info;

View File

@@ -1,5 +1,6 @@
using System;
using System.Windows.Forms;
using Gecko;
using mRemoteNG.Tools;
using mRemoteNG.App;
using TabPage = Crownwood.Magic.Controls.TabPage;
@@ -24,8 +25,10 @@ namespace mRemoteNG.Connection.Protocol.Http
{
if (RenderingEngine == RenderingEngine.Gecko)
{
Control = new MiniGeckoBrowser.MiniGeckoBrowser();
((MiniGeckoBrowser.MiniGeckoBrowser)Control).XULrunnerPath = Convert.ToString(Settings.Default.XULRunnerPath);
if(!Xpcom.IsInitialized)
Xpcom.Initialize("Firefox");
Control = new GeckoWebBrowser();
}
else
{
@@ -64,14 +67,14 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
MiniGeckoBrowser.MiniGeckoBrowser objMiniGeckoBrowser = wBrowser as MiniGeckoBrowser.MiniGeckoBrowser;
if (objMiniGeckoBrowser != null)
{
objMiniGeckoBrowser.TitleChanged += geckoBrowser_DocumentTitleChanged;
objMiniGeckoBrowser.LastTabRemoved += wBrowser_LastTabRemoved;
}
}
else
GeckoWebBrowser GeckoBrowser = (GeckoWebBrowser) wBrowser;
if (GeckoBrowser != null)
{
GeckoBrowser.DocumentTitleChanged += geckoBrowser_DocumentTitleChanged;
//GeckoBrowser.Tab.LastTabRemoved += wBrowser_LastTabRemoved;
}
}
else
{
WebBrowser objWebBrowser = (WebBrowser)wBrowser;
//SHDocVw.WebBrowserClass objAxWebBrowser = (SHDocVw.WebBrowserClass)objWebBrowser.ActiveXInstance;
@@ -121,7 +124,7 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
((MiniGeckoBrowser.MiniGeckoBrowser)wBrowser).Navigate(strHost + ":" + InterfaceControl.Info.Port);
((GeckoWebBrowser)wBrowser).Navigate(strHost + ":" + InterfaceControl.Info.Port);
}
else
{
@@ -137,7 +140,7 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
((MiniGeckoBrowser.MiniGeckoBrowser)wBrowser).Navigate(strHost);
((GeckoWebBrowser)wBrowser).Navigate(strHost);
}
else
{
@@ -203,13 +206,13 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
if (((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Length >= 30)
if (((GeckoWebBrowser) wBrowser).DocumentTitle.Length >= 30)
{
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Substring(0, 29) + " ...";
shortTitle = ((GeckoWebBrowser) wBrowser).DocumentTitle.Substring(0, 29) + " ...";
}
else
{
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title;
shortTitle = ((GeckoWebBrowser) wBrowser).DocumentTitle;
}
}
else
@@ -226,7 +229,7 @@ namespace mRemoteNG.Connection.Protocol.Http
if (!string.IsNullOrEmpty(tabTitle))
{
tabP.Title = tabTitle + " - " + shortTitle;
tabP.Title = tabTitle + @" - " + shortTitle;
}
else
{
@@ -241,7 +244,7 @@ namespace mRemoteNG.Connection.Protocol.Http
}
private void geckoBrowser_DocumentTitleChanged(object sender, string e)
private void geckoBrowser_DocumentTitleChanged(object sender, EventArgs e)
{
try
{
@@ -253,13 +256,13 @@ namespace mRemoteNG.Connection.Protocol.Http
if (InterfaceControl.Info.RenderingEngine == RenderingEngine.Gecko)
{
if (((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Length >= 30)
if (((GeckoWebBrowser)wBrowser).DocumentTitle.Length >= 30)
{
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title.Substring(0, 29) + " ...";
shortTitle = ((GeckoWebBrowser) wBrowser).DocumentTitle.Substring(0, 29) + " ...";
}
else
{
shortTitle = ((MiniGeckoBrowser.MiniGeckoBrowser) wBrowser).Title;
shortTitle = ((GeckoWebBrowser) wBrowser).DocumentTitle;
}
}
else
@@ -276,7 +279,7 @@ namespace mRemoteNG.Connection.Protocol.Http
if (!string.IsNullOrEmpty(tabTitle))
{
tabP.Title = tabTitle + " - " + shortTitle;
tabP.Title = tabTitle + @" - " + shortTitle;
}
else
{

View File

@@ -1,13 +1,11 @@
using System;
using AxWFICALib;
using System.Drawing;
using Microsoft.VisualBasic;
using System.Windows.Forms;
using mRemoteNG.App;
using System.Threading;
using mRemoteNG.Tools;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.My;
using mRemoteNG.UI.Forms;
@@ -340,7 +338,7 @@ namespace mRemoteNG.Connection.Protocol.ICA
#region Reconnect Stuff
public void tmrReconnect_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
bool srvReady = Tools.PortScan.Scanner.IsPortOpen(_Info.Hostname, Convert.ToString(_Info.Port));
bool srvReady = Scanner.IsPortOpen(_Info.Hostname, Convert.ToString(_Info.Port));
ReconnectGroup.ServerReady = srvReady;

View File

@@ -868,7 +868,7 @@ namespace mRemoteNG.Connection.Protocol.RDP
#region Reconnect Stuff
public void tmrReconnect_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
bool srvReady = Tools.PortScan.Scanner.IsPortOpen(_connectionInfo.Hostname, Convert.ToString(_connectionInfo.Port));
bool srvReady = Scanner.IsPortOpen(_connectionInfo.Hostname, Convert.ToString(_connectionInfo.Port));
ReconnectGroup.ServerReady = srvReady;

View File

@@ -1,8 +1,6 @@
using System;
using Microsoft.VisualBasic;
using mRemoteNG.App;
using System.ComponentModel;
using mRemoteNG.My;
using mRemoteNG.Tools;
using mRemoteNG.UI.Forms;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mRemoteV1/Firefox/nss3.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mRemoteV1/Firefox/omni.ja Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
mRemoteV1/Firefox/xul.dll Normal file

Binary file not shown.

View File

@@ -1,9 +0,0 @@
namespace mRemoteNG.Images
{
public enum ErrorImageType
{
_Information = 0,
_Warning = 1,
_Error = 2
}
}

View File

@@ -608,7 +608,7 @@ namespace mRemoteNG {
}
/// <summary>
/// Looks up a localized string similar to XULrunner was found and seems to be installed properly..
/// Looks up a localized string similar to GeckoFx was found and seems to be installed properly..
/// </summary>
internal static string strCcGeckoOK {
get {
@@ -5704,7 +5704,7 @@ namespace mRemoteNG {
}
/// <summary>
/// Looks up a localized string similar to Single click on opened connection switches to it.
/// Looks up a localized string similar to Single click on opened connection in Connection Tree switches to opened Connection Tab.
/// </summary>
internal static string strSingleClickOnOpenConnectionSwitchesToIt {
get {

View File

@@ -299,7 +299,7 @@ Wenn der Download abgeschlossen ist, entpacken Sie das Paket (Der Speicherort is
Wenn Sie noch immer Probleme mit der Gecko Engine in mRemote haben, konsultieren Sie bitte das mRemoteNG-Forum: http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner wurde gefunden und scheint korrekt installiert zu sein.</value>
<value>GeckoFx wurde gefunden und scheint korrekt installiert zu sein.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA benötigt eine funktionierende XenDesktop-Online-Plugin-Installation und dass die Datei wfica.ocx korrekt registriert ist. Hier können Sie das Plugin herunterladen: http://www.citrix.com/download/

View File

@@ -290,7 +290,7 @@
<value>Για να χρησιμοποιήσετε το μηχανισμό απόδοσης Gecko πρέπει να έχετε XULrunner 1.8.1.x και ο δρόμος για την εγκατάσταση ορίστε στις επιλογές σας. Μπορείτε να κατεβάσετε XULrunner 1.8.1.3 εδώ: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ όταν ολοκληρώσετε τη λήψη κάντε εξαγωγή του πακέτου για την πορεία της επιλογής σας. Στη συνέχεια, στο mRemoteNG πηγαίνετε στο εργαλεία - επιλογές - προηγμένες και πληκτρολογήσει τη σωστή διαδρομή στο πεδίο διαδρομή XULrunner. Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή χρησιμοποιούν την μηχανή Gecko στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>Το XULrunner βρέθηκε και φαίνεται να έχει εγκατασταθεί σωστά.</value>
<value>Το GeckoFx βρέθηκε και φαίνεται να έχει εγκατασταθεί σωστά.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA απαιτεί ότι είναι εγκατεστημένο το XenDesktop Online Plugin και ότι καταχωρείται η βιβλιοθήκη wfica.ocx. Μπορείτε να κατεβάσετε τον πελάτη εδώ: http://www.citrix.com/download/ αν έχετε το XenDesktop Online Plugin εγκατασταθεί και ο έλεγχος συνεχίσει να αποτυγχάνει, προσπαθήστε να εγγραφείτε wfica.ocx με μη αυτόματο τρόπο. Να κάνει αυτό ανοίγω πάνω στο τρέχω διάλογος (έναρξη - Run) και πληκτρολογήστε τα παρακάτω: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (όπου c:\Program Files\Citrix\ICA Client\ είναι η διαδρομή στην εγκατάσταση XenDesktop Online Plugin). Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή να χρησιμοποιήσετε ICA στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/"</value>

View File

@@ -299,7 +299,7 @@ Cuando haya concluido la descarga, extraiga el paquete en un directorio de su el
Si continúa sin funcionar la comprobación ó no puede utilizar el motor Gecko en mRemoteNG, consulte el Foro de mRemoteNG en http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner ha sido localizado y parece estar instalado correctamente.</value>
<value>GeckoFx ha sido localizado y parece estar instalado correctamente.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA necesita que esté instalado XenDesktop Online Plugin y que la librería wfica.ocx esté registrada. Puede descargar el cliente aquí: http://www.citrix.com/download/

View File

@@ -293,7 +293,7 @@ Veuillez utiliser le menu Fichier - Ouvrir un fichier de connexion pour les fich
<value>Pour utiliser le moteur de rendu Gecko, vous devez avoir XULrunner 1.8.1.x et le chemin d'accès correctement renseigné dans vos Options. Vous pouvez télécharger XULrunner 1.8.1.3 ici : ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ Lorsque vous avez terminé le téléchargement, extraire le package vers le chemin de votre choix. Puis dans mRemoteNG, allez dans Outils - Options - Avancées et entrez le chemin d'accès correct dans "chemin de XULrunner". Si vous n'êtes toujours pas en mesure de passer cette vérification ou d'utiliser le moteur Gecko dans mRemoteNG, veuillez consulter le Forum de mRemoteNG sur http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULRunner a été trouvé et semble être installé correctement.</value>
<value>GeckoFx a été trouvé et semble être installé correctement.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requiert l'installation du Plugin XenDesktop Online, ainsi que l'enregistrement de la librairie wfica.ocx. Vous pouvez télécharger le client ici : http://www.citrix.com/download/

View File

@@ -297,7 +297,7 @@ Quando il download è terminato, è sufficiente estrarre il pacchetto in una car
Se il controllo fallisce o risulta impossibile utilizzare il motore di rendering Gecko con mRemoteNG, per favore consultare il forum di mRemoteNG all'indirizzo http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner è stato rilevato e sembra installato correttamente.</value>
<value>GeckoFx è stato rilevato e sembra installato correttamente.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA richiede che il plugin XenDesktop Online sia installato e che la libreria wfica.ocx sia registrata. Il client è scaricabile all'indirizzo http://www.citrix.com/download/

View File

@@ -142,7 +142,8 @@
<value>AddNodesFromSQL failed!</value>
</data>
<data name="strAllowOnlySingleInstance" xml:space="preserve">
<value>Allow only a single instance of the application (mRemoteNG restart required)</value>
<value>アプリケーションの単一インスタンスのみを許可するmRemoteNGを再起動する必要があります</value>
<comment>Allow only a single instance of the application (mRemoteNG restart required)</comment>
</data>
<data name="strAlways" xml:space="preserve">
<value>常時</value>
@@ -157,7 +158,7 @@
<value>常にパネルのタブを表示</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Always show notification area icon</value>
<value>常に通知領域アイコンを表示</value>
</data>
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
<value>もう一度後で聞く</value>
@@ -166,7 +167,7 @@
<value>Customize the settings now</value>
</data>
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
<value>Use the recommended settings</value>
<value>推奨設定を使用</value>
</data>
<data name="strAskUpdatesContent" xml:space="preserve">
<value>{0} can automatically check for updates that may provide new features and bug fixes. It is recommended that you allow {0} to check for updates weekly.</value>
@@ -306,7 +307,7 @@ When you are finished downloading extract the package to a path of your choice.
If you are still not able to pass this check or use the Gecko Engine in mRemoteNG please consult the mRemoteNG Forum at http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner was found and seems to be installed properly.</value>
<value>GeckoFx was found and seems to be installed properly.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requires that the XenDesktop Online Plugin is installed and that the wfica.ocx library is registered. You can download the client here: http://www.citrix.com/download/
@@ -319,7 +320,7 @@ If you are still not able to pass this check or use ICA in mRemoteNG please cons
Citrix ICA Client Control Version {0}</value>
</data>
<data name="strCcNotInstalledProperly" xml:space="preserve">
<value>not installed properly</value>
<value>正しくインストールされていません</value>
</data>
<data name="strCcPuttyFailed" xml:space="preserve">
<value>The SSH, Telnet, Rlogin and RAW protocols need PuTTY to work. PuTTY comes with every mRemoteNG package and is located in the installation path.
@@ -390,19 +391,21 @@ VncSharpNG Control Version {0}</value>
<value>点検する</value>
</data>
<data name="strCheckProperInstallationOfComponentsAtStartup" xml:space="preserve">
<value>Check proper installation of components at startup</value>
<value>起動時に必要なコンポネントがインストールされているかを確認する</value>
<comment>Check proper installation of components at startup</comment>
</data>
<data name="strChoosePanelBeforeConnecting" xml:space="preserve">
<value>Choose panel before connecting</value>
<value>接続時にパネルを選択する</value>
<comment>Choose panel before connecting</comment>
</data>
<data name="strClosedPorts" xml:space="preserve">
<value>Closed Ports</value>
<value>閉じているポート</value>
</data>
<data name="strCollapseAllFolders" xml:space="preserve">
<value>Collapse all folders</value>
<value>すべてのフォルダを折りたたむ</value>
</data>
<data name="strColumnArguments" xml:space="preserve">
<value>Arguments</value>
<value>パラメータ</value>
</data>
<data name="strColumnDisplayName" xml:space="preserve">
<value>ディスプレイ名</value>
@@ -427,7 +430,7 @@ VncSharpNG Control Version {0}</value>
<comment>E&amp;xit {0}</comment>
</data>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Couldn't parse command line args!</value>
<value>コマンドのパラメータが正しくありません</value>
</data>
<data name="strCommandOpenConnectionFile" xml:space="preserve">
<value>接続ファイルを開く(&amp;O)</value>
@@ -439,13 +442,13 @@ VncSharpNG Control Version {0}</value>
<value>{0} has detected the Lenovo Auto Scroll Utility running on this system. This utility is known to cause problems with {0}. It is recommended that you disable or uninstall it.</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Compatibility problem detected</value>
<value>互換性の問題が検出されました</value>
</data>
<data name="strComponentsCheck" xml:space="preserve">
<value>Components Check</value>
<value>コンポーネントの確認</value>
</data>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>btnIcon_Click failed!</value>
<value>btnIcon_Clickがエラーを発生しました</value>
</data>
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
<value>ShowHideGridItems failed!</value>
@@ -466,7 +469,8 @@ VncSharpNG Control Version {0}</value>
<value>Config UI load failed!</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Do you want to close the connection, "{0}"?</value>
<value>接続「{0}」を切断しますか?</value>
<comment>Do you want to close the connection, "{0}"?</comment>
</data>
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
<value>Are you sure you want to close the panel, "{0}"? Any connections that it contains will also be closed.</value>
@@ -481,7 +485,7 @@ VncSharpNG Control Version {0}</value>
<value>Are you sure you want to delete the connection, "{0}"?</value>
</data>
<data name="strConfirmDeleteNodeFolder" xml:space="preserve">
<value>Are you sure you want to delete the empty folder, "{0}"?</value>
<value>空のフォルダ「{0}」削除してもよろしいですか?</value>
</data>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Are you sure you want to delete the folder, "{0}"? Any folders or connections that it contains will also be deleted.</value>
@@ -490,7 +494,7 @@ VncSharpNG Control Version {0}</value>
<value>すべてのセッションを切断しますか?</value>
</data>
<data name="strConfirmResetLayout" xml:space="preserve">
<value>Are you sure you want to reset the panels to their default layout?</value>
<value>パネル配置を初期化しますか?</value>
</data>
<data name="strConnect" xml:space="preserve">
<value>接続</value>
@@ -517,7 +521,7 @@ VncSharpNG Control Version {0}</value>
<value>接続の開始に失敗しました</value>
</data>
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
<value>Cannot open connection: No hostname specified!</value>
<value>ホスト名が入力されていないので接続出来ません</value>
</data>
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
<value>RDP error!
@@ -550,22 +554,23 @@ Starting with new connections file.</value>
<value>Couldn't save connections file as "{0}"!</value>
</data>
<data name="strConnectNoCredentials" xml:space="preserve">
<value>Connect without credentials</value>
<value>資格情報なしで接続</value>
</data>
<data name="strConnectToConsoleSession" xml:space="preserve">
<value>Connect to console session</value>
<value>コンソールセッションに接続</value>
</data>
<data name="strConnectWithOptions" xml:space="preserve">
<value>Connect (with options)</value>
<value>オプションを使用して接続</value>
</data>
<data name="strConnenctionClosedByUser" xml:space="preserve">
<value>Connection to {0} via {1} closed by user {2}.</value>
<value>ユーザー{1}によって接続「{0}」は切断されました</value>
<comment>Connection to {0} via {1} closed by user {2}.</comment>
</data>
<data name="strConnenctionClosedByUserDetail" xml:space="preserve">
<value>Connection to {0} via {1} closed by user {2}. (Description: "{3}"; User Field: "{4}")</value>
</data>
<data name="strConnenctionCloseEvent" xml:space="preserve">
<value>Connection Event Closed</value>
<value>接続イベントに失敗しました</value>
</data>
<data name="strConnenctionCloseEventFailed" xml:space="preserve">
<value>Connection Event Closed failed!</value>
@@ -577,13 +582,13 @@ Starting with new connections file.</value>
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Installed version</value>
<value>バージョン</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Default Theme</value>
<value>デフォルトのテーマ</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detect</value>
<value>検出する</value>
</data>
<data name="strDontConnectToConsoleSessionMenuItem" xml:space="preserve">
<value>Don't connect to console session</value>
@@ -592,37 +597,37 @@ Starting with new connections file.</value>
<value>Don't connect if authentication fails</value>
</data>
<data name="strDoubleClickTabClosesIt" xml:space="preserve">
<value>Double click on tab closes it</value>
<value>ダブルクリックでタブを閉じる</value>
</data>
<data name="strDownloadAndInstall" xml:space="preserve">
<value>Download and Install</value>
<value>ダウンロードとインストール</value>
</data>
<data name="strDuplicate" xml:space="preserve">
<value>Duplicate</value>
<value>複製</value>
</data>
<data name="strEmptyPasswordContinue" xml:space="preserve">
<value>Do you want to continue with no password?</value>
<value>パスワード無しでよろしいですか?</value>
</data>
<data name="strEmptyUsernamePasswordDomainFields" xml:space="preserve">
<value>For empty Username, Password or Domain fields use:</value>
</data>
<data name="strEnc128Bit" xml:space="preserve">
<value>128-bit</value>
<value>128ビット</value>
</data>
<data name="strEnc128BitLogonOnly" xml:space="preserve">
<value>128-bit (logon only)</value>
</data>
<data name="strEnc40Bit" xml:space="preserve">
<value>40-bit</value>
<value>40ビット</value>
</data>
<data name="strEnc56Bit" xml:space="preserve">
<value>56-bit</value>
<value>56ビット</value>
</data>
<data name="strEncBasic" xml:space="preserve">
<value>Basic</value>
</data>
<data name="strEncryptCompleteConnectionFile" xml:space="preserve">
<value>Completely encrypt connection file</value>
<value>接続設定ファイルをすべて暗号化する</value>
</data>
<data name="strEndIP" xml:space="preserve">
<value>End IP</value>
@@ -674,10 +679,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>VerifyDatabaseVersion (Config.Connections.Save) failed. {0}</value>
</data>
<data name="strExpandAllFolders" xml:space="preserve">
<value>Expand all folders</value>
<value>すべてのフォルダを展開</value>
</data>
<data name="strExperimental" xml:space="preserve">
<value>Experimental</value>
<value>試験的機能</value>
</data>
<data name="strExport" xml:space="preserve">
<value>エクスポート</value>
@@ -686,10 +691,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>すべてエクスポート</value>
</data>
<data name="strExportFile" xml:space="preserve">
<value>Export File</value>
<value>ファイルをエクスポート</value>
</data>
<data name="strExportItems" xml:space="preserve">
<value>Export Items</value>
<value>アイテムをエクスポート</value>
</data>
<data name="strExportmRemoteXML" xml:space="preserve">
<value>Export mRemote/mRemoteNG XML</value>
@@ -704,13 +709,13 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>Export the currently selected folder</value>
</data>
<data name="strExportToFileMenuItem" xml:space="preserve">
<value>&amp;Export to File...</value>
<value>ファイルへの書き出し...(&amp;E)</value>
</data>
<data name="strExtApp" xml:space="preserve">
<value>Ext. App</value>
</data>
<data name="strExternalToolDefaultName" xml:space="preserve">
<value>New External Tool</value>
<value>新規外部ツール</value>
</data>
<data name="strFAMFAMFAMAttribution" xml:space="preserve">
<value>Includes icons by [FAMFAMFAM]</value>
@@ -731,10 +736,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>実行ファイル(*.exe)</value>
</data>
<data name="strFiltermRemoteCSV" xml:space="preserve">
<value>mRemote CSV Files (*.csv)</value>
<value>mRemote CSVファイル(*.csv)</value>
</data>
<data name="strFiltermRemoteXML" xml:space="preserve">
<value>mRemote XML Files (*.xml)</value>
<value>mRemote XMLファイル(*.xml)</value>
</data>
<data name="strFilterPuttyConnectionManager" xml:space="preserve">
<value>PuTTY Connection Manager files</value>
@@ -761,10 +766,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>全画面</value>
</data>
<data name="strGeneral" xml:space="preserve">
<value>General</value>
<value>一般</value>
</data>
<data name="strGetConnectionInfoFromSqlFailed" xml:space="preserve">
<value>Get Connection Info From SQL failed</value>
<value>SQLサーバーからの接続情報の取得に失敗しました</value>
</data>
<data name="strGetConnectionInfoFromXmlFailed" xml:space="preserve">
<value>An error occured while loading the connection entry for "{0}" from "{1}". {2}</value>
@@ -788,10 +793,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>HTTP</value>
</data>
<data name="strHttpConnectFailed" xml:space="preserve">
<value>HTTP Connect Failed!</value>
<value>HTTP接続に失敗しました</value>
</data>
<data name="strHttpConnectionFailed" xml:space="preserve">
<value>Couldn't create new HTTP Connection!</value>
<value>新規のHTTP接続に失敗しました</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Changing HTTP Document Tile Failed!</value>
@@ -833,19 +838,19 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>Identify quick connect tabs by adding the prefix "Quick:"</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Import from Active Directory</value>
<value>アクティブディレクトリからインポート</value>
</data>
<data name="strImportExport" xml:space="preserve">
<value>Import/Export</value>
<value>インポート/エクスポート</value>
</data>
<data name="strImportFileFailedContent" xml:space="preserve">
<value>An error occurred while importing the file, "{0}".</value>
<value>ファイル「{0}」のインポート中にエラーが発生しました</value>
</data>
<data name="strImportFileFailedMainInstruction" xml:space="preserve">
<value>Import failed</value>
<value>インポートに失敗しました</value>
</data>
<data name="strImportFromFileMenuItem" xml:space="preserve">
<value>Import from &amp;File...</value>
<value>ファイルからインポート...(&amp;F)</value>
</data>
<data name="strImportLocationCommandButtons" xml:space="preserve">
<value>Under the root{0}{1}|Under the selected folder{0}{2}</value>
@@ -857,13 +862,13 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>Import location</value>
</data>
<data name="strImportMenuItem" xml:space="preserve">
<value>&amp;Import</value>
<value>インポート(&amp;I)</value>
</data>
<data name="strImportmRemoteXML" xml:space="preserve">
<value>Import mRemote/mRemoteNG XML</value>
</data>
<data name="strImportPortScan" xml:space="preserve">
<value>Import from Port Scan</value>
<value>ポートスキャンからインポート</value>
</data>
<data name="strImportRDPFiles" xml:space="preserve">
<value>Import from .RDP file(s)</value>
@@ -872,13 +877,13 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>Inactive</value>
</data>
<data name="strInformations" xml:space="preserve">
<value>Informations</value>
<value>情報</value>
</data>
<data name="strInheritNewConnection" xml:space="preserve">
<value>mRemoteNG is up to date</value>
<value>mRemoteNGは最新バージョンです</value>
</data>
<data name="strIntAppConnectionFailed" xml:space="preserve">
<value>Connection failed!</value>
<value>接続に失敗しました</value>
</data>
<data name="strIntAppDisposeFailed" xml:space="preserve">
<value>Dispose of Int App process failed!</value>
@@ -911,25 +916,25 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>CTRL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Address:</value>
<value>アドレス:</value>
</data>
<data name="strLabelArguments" xml:space="preserve">
<value>Arguments:</value>
<value>パラメータ:</value>
</data>
<data name="strLabelChangeLog" xml:space="preserve">
<value>Change Log:</value>
<value>履歴:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>When closing connections:</value>
<value>切断時:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Connect:</value>
<value>接続(&amp;C)</value>
</data>
<data name="strLabelDisplayName" xml:space="preserve">
<value>Display Name</value>
<value>ディスプレイ名</value>
</data>
<data name="strLabelDomain" xml:space="preserve">
<value>Domain:</value>
<value>ドメイン:</value>
</data>
<data name="strLabelFilename" xml:space="preserve">
<value>ファイル名:</value>
@@ -965,7 +970,8 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>秒</value>
</data>
<data name="strLabelSelectPanel" xml:space="preserve">
<value>Select a panel from the list below or click New to add a new one. Click OK to continue.</value>
<value>パネルを選択するか新規パネルを追加してください。</value>
<comment>Select a panel from the list below or click New to add a new one. Click OK to continue.</comment>
</data>
<data name="strLabelServerStatus" xml:space="preserve">
<value>サーバーの状態:</value>
@@ -980,34 +986,36 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>ユーザー名:</value>
</data>
<data name="strLabelVerify" xml:space="preserve">
<value>Verify:</value>
<value>確認:</value>
</data>
<data name="strLanguage" xml:space="preserve">
<value>Language</value>
<value>言語</value>
</data>
<data name="strLanguageDefault" xml:space="preserve">
<value>(自動検出)</value>
</data>
<data name="strLanguageRestartRequired" xml:space="preserve">
<value>{0} must be restarted before changes to the language will take effect.</value>
<value>言語設定の変更を有効にするには{0}の再起動が必要です</value>
<comment>{0} must be restarted before changes to the language will take effect.</comment>
</data>
<data name="strLoadFromSqlFailed" xml:space="preserve">
<value>Load from SQL failed</value>
<value>SQLサーバーからの読み込みに失敗しました</value>
</data>
<data name="strLoadFromSqlFailedContent" xml:space="preserve">
<value>The connection information could not be loaded from the SQL server.</value>
<value>接続情報はSQLサーバーから読み込むことが出来ませんでした</value>
<comment>The connection information could not be loaded from the SQL server.</comment>
</data>
<data name="strLoadFromXmlFailed" xml:space="preserve">
<value>Load From XML failed!</value>
<value>XMLファイルからの読み込みに失敗しました</value>
</data>
<data name="strLocalFile" xml:space="preserve">
<value>Local file</value>
<value>ローカルファイル</value>
</data>
<data name="strLocalFileDoesNotExist" xml:space="preserve">
<value>Local file does not exist!</value>
<value>ファイルが存在しません</value>
</data>
<data name="strLogOff" xml:space="preserve">
<value>Logoff</value>
<value>ログオフ</value>
</data>
<data name="strLogWriteToFileFailed" xml:space="preserve">
<value>Writing to report file failed!</value>
@@ -1148,7 +1156,7 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>ポートをスキャンする</value>
</data>
<data name="strMenuQuickConnectToolbar" xml:space="preserve">
<value>Quick Connect Toolbar</value>
<value>クイック接続ツールバー</value>
</data>
<data name="strMenuReconnect" xml:space="preserve">
<value>再接続</value>
@@ -1178,7 +1186,7 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>接続ファイルの保存</value>
</data>
<data name="strMenuSaveConnectionFileAs" xml:space="preserve">
<value>Save Connection File As...</value>
<value>接続ファイルを別名で保存...</value>
</data>
<data name="strMenuScreenshot" xml:space="preserve">
<value>スクリーンキャプチャ</value>
@@ -1199,7 +1207,8 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>セッションとスクリーンキャプチャ</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Show Help Text</value>
<value>ヘルプ文字を表示(&amp;S)</value>
<comment>&amp;Show Help Text</comment>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>文字の表示</value>
@@ -1298,7 +1307,8 @@ If you run into such an error, please create a new connection file!</value>
If you run into such an error, please create a new connection file!</comment>
</data>
<data name="strOpenNewTabRight" xml:space="preserve">
<value>Open new tab to the right of the currently selected tab</value>
<value>選択されているタブの右側に新規タブを作成</value>
<comment>Open new tab to the right of the currently selected tab</comment>
</data>
<data name="strOpenPorts" xml:space="preserve">
<value>Open Ports</value>
@@ -1356,7 +1366,7 @@ If you run into such an error, please create a new connection file!</comment>
<value>同じパスワードを入力してください</value>
</data>
<data name="strPasswordStatusTooShort" xml:space="preserve">
<value>The password must be at least 3 characters long.</value>
<value>パスワードは最低3文字必要です</value>
</data>
<data name="strPleaseFillAllFields" xml:space="preserve">
<value>全て入力してください</value>
@@ -1371,7 +1381,7 @@ If you run into such an error, please create a new connection file!</comment>
<value>(These properties will only be saved if you select mRemote/mRemoteNG XML as output file format!)</value>
</data>
<data name="strPropertyDescriptionAddress" xml:space="preserve">
<value>Enter the hostname or ip you want to connect to.</value>
<value>ホスト名かIPアドレスを入力してください</value>
</data>
<data name="strPropertyDescriptionAll" xml:space="preserve">
<value>Toggle all inheritance options.</value>
@@ -1440,13 +1450,15 @@ If you run into such an error, please create a new connection file!</comment>
<value>This is the name that will be displayed in the connections tree.</value>
</data>
<data name="strPropertyDescriptionPanel" xml:space="preserve">
<value>Sets the panel in which the connection will open.</value>
<value>接続をするパネルを指定</value>
<comment>Sets the panel in which the connection will open.</comment>
</data>
<data name="strPropertyDescriptionPassword" xml:space="preserve">
<value>パスワードを入力してください</value>
<value>パスワードを入力</value>
</data>
<data name="strPropertyDescriptionPort" xml:space="preserve">
<value>Enter the port the selected protocol is listening on.</value>
<value>プロトコルのポートを入力</value>
<comment>Enter the port the selected protocol is listening on.</comment>
</data>
<data name="strPropertyDescriptionProtocol" xml:space="preserve">
<value>Choose the protocol mRemoteNG should use to connect to the host.</value>
@@ -1527,55 +1539,55 @@ If you run into such an error, please create a new connection file!</comment>
<value>Enter your username for authenticating against the proxy.</value>
</data>
<data name="strPropertyNameAddress" xml:space="preserve">
<value>Hostname/IP</value>
<value>ホスト名またはIPアドレス</value>
</data>
<data name="strPropertyNameAll" xml:space="preserve">
<value>全て</value>
</data>
<data name="strPropertyNameAuthenticationLevel" xml:space="preserve">
<value>Server Authentication</value>
<value>サーバー認証</value>
</data>
<data name="strPropertyNameAuthenticationMode" xml:space="preserve">
<value>Authentication Mode</value>
<value>認証モード</value>
</data>
<data name="strPropertyNameAutomaticResize" xml:space="preserve">
<value>Automatic Resize</value>
<value>自動サイズ変更</value>
</data>
<data name="strPropertyNameCacheBitmaps" xml:space="preserve">
<value>Cache Bitmaps</value>
<value>ビットマップをキャッシュ</value>
</data>
<data name="strPropertyNameColors" xml:space="preserve">
<value>色</value>
</data>
<data name="strPropertyNameCompression" xml:space="preserve">
<value>Compression</value>
<value>圧縮</value>
</data>
<data name="strPropertyNameDescription" xml:space="preserve">
<value>Description</value>
<value>説明</value>
</data>
<data name="strPropertyNameDisplayThemes" xml:space="preserve">
<value>Display Themes</value>
<value>テーマの表示</value>
</data>
<data name="strPropertyNameDisplayWallpaper" xml:space="preserve">
<value>Display Wallpaper</value>
<value>ウォールペーパーを表示</value>
</data>
<data name="strPropertyNameDomain" xml:space="preserve">
<value>Domain</value>
<value>ドメイン</value>
</data>
<data name="strPropertyNameEnableDesktopComposition" xml:space="preserve">
<value>Desktop Composition</value>
</data>
<data name="strPropertyNameEnableFontSmoothing" xml:space="preserve">
<value>Font Smoothing</value>
<value>フォントの滑らかさ</value>
</data>
<data name="strPropertyNameEncoding" xml:space="preserve">
<value>Encoding</value>
<value>エンコード</value>
</data>
<data name="strPropertyNameEncryptionStrength" xml:space="preserve">
<value>Encryption Strength</value>
</data>
<data name="strPropertyNameExternalTool" xml:space="preserve">
<value>External Tool</value>
<value>外部ツール</value>
</data>
<data name="strPropertyNameExternalToolAfter" xml:space="preserve">
<value>External Tool After</value>
@@ -1611,28 +1623,28 @@ If you run into such an error, please create a new connection file!</comment>
<value>PuTTYのセッション</value>
</data>
<data name="strPropertyNameRDGatewayDomain" xml:space="preserve">
<value>Gateway Domain</value>
<value>ゲートウェイのドメイン</value>
</data>
<data name="strPropertyNameRDGatewayHostname" xml:space="preserve">
<value>Gateway Hostname</value>
<value>ゲートウェイのホスト名</value>
</data>
<data name="strPropertyNameRDGatewayPassword" xml:space="preserve">
<value>Remote Desktop Gateway Password</value>
</data>
<data name="strPropertyNameRDGatewayUsageMethod" xml:space="preserve">
<value>Use Gateway</value>
<value>ゲートウェイを使用</value>
</data>
<data name="strPropertyNameRDGatewayUseConnectionCredentials" xml:space="preserve">
<value>Gateway Credentials</value>
<value>ゲートウェイの資格情報</value>
</data>
<data name="strPropertyNameRDGatewayUsername" xml:space="preserve">
<value>Gateway Username</value>
<value>ゲートウェイのユーザー名</value>
</data>
<data name="strPropertyNameRedirectDrives" xml:space="preserve">
<value>Disk Drives</value>
<value>ディスク・ドライブ</value>
</data>
<data name="strPropertyNameRedirectKeys" xml:space="preserve">
<value>Key Combinations</value>
<value>キーの組み合わせ</value>
</data>
<data name="strPropertyNameRedirectPorts" xml:space="preserve">
<value>ポート</value>
@@ -1647,16 +1659,16 @@ If you run into such an error, please create a new connection file!</comment>
<value>サウンド</value>
</data>
<data name="strPropertyNameRenderingEngine" xml:space="preserve">
<value>Rendering Engine</value>
<value>レンダリングエンジン</value>
</data>
<data name="strPropertyNameResolution" xml:space="preserve">
<value>Resolution</value>
<value>解像度</value>
</data>
<data name="strPropertyNameSmartSizeMode" xml:space="preserve">
<value>SmartSize Mode</value>
<value>スマートサイズモード</value>
</data>
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Use Console Session</value>
<value>コンソールセッションを使用</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Use CredSSP</value>
@@ -1665,25 +1677,27 @@ If you run into such an error, please create a new connection file!</comment>
<value>User Field</value>
</data>
<data name="strPropertyNameUsername" xml:space="preserve">
<value>Username</value>
<value>ユーザー名</value>
</data>
<data name="strPropertyNameViewOnly" xml:space="preserve">
<value>View Only</value>
<value>表示のみ</value>
</data>
<data name="strPropertyNameVNCProxyAddress" xml:space="preserve">
<value>Proxy Address</value>
<value>プロキシーのアドレス</value>
<comment>Proxy Address</comment>
</data>
<data name="strPropertyNameVNCProxyPassword" xml:space="preserve">
<value>Proxy Password</value>
<value>プロキシーのパスワード</value>
<comment>Proxy Password</comment>
</data>
<data name="strPropertyNameVNCProxyPort" xml:space="preserve">
<value>Proxy Port</value>
<value>プロキシーのポート</value>
</data>
<data name="strPropertyNameVNCProxyType" xml:space="preserve">
<value>Proxy Type</value>
<value>プロキシーの種類</value>
</data>
<data name="strPropertyNameVNCProxyUsername" xml:space="preserve">
<value>Proxy Username</value>
<value>プロキシーのユーザー名</value>
</data>
<data name="strProtocolEventDisconnected" xml:space="preserve">
<value>Protocol Event Disconnected.
@@ -1704,7 +1718,7 @@ Message:
<value>Proxy test succeeded!</value>
</data>
<data name="strPuttyConnectionFailed" xml:space="preserve">
<value>Connection failed!</value>
<value>接続に失敗しました</value>
</data>
<data name="strPuttyDisposeFailed" xml:space="preserve">
<value>Dispose of Putty process failed!</value>
@@ -1752,7 +1766,7 @@ Message:
<value>Quick: {0}</value>
</data>
<data name="strQuickConnect" xml:space="preserve">
<value>Quick Connect</value>
<value>クイック接続</value>
</data>
<data name="strQuickConnectAddFailed" xml:space="preserve">
<value>Quick Connect Add Failed!</value>
@@ -1821,16 +1835,16 @@ Message:
<value>Disable Full Window drag</value>
</data>
<data name="strRDPDisableMenuAnimations" xml:space="preserve">
<value>Disable Menu Animations</value>
<value>メニューのアニメーションを無効にする</value>
</data>
<data name="strRDPDisableThemes" xml:space="preserve">
<value>Disable Themes</value>
<value>テーマを無効にする</value>
</data>
<data name="strRDPDisableWallpaper" xml:space="preserve">
<value>Disable Wallpaper</value>
</data>
<data name="strRdpDisconnected" xml:space="preserve">
<value>RDP disconnected!</value>
<value>リモートデスクトップが切断されました</value>
</data>
<data name="strRdpDisconnectFailed" xml:space="preserve">
<value>RDP Disconnect failed, trying to close!</value>
@@ -1869,7 +1883,7 @@ Message:
<value>Winsock initialization error.</value>
</data>
<data name="strRdpFileCouldNotBeImported" xml:space="preserve">
<value>Couldn't import rdp file!</value>
<value>RDPファイルのインポートに失敗しました</value>
</data>
<data name="strRDPFitToPanel" xml:space="preserve">
<value>Fit To Panel</value>
@@ -1932,13 +1946,13 @@ Message:
<value>Smart Size</value>
</data>
<data name="strRDPSoundBringToThisComputer" xml:space="preserve">
<value>Bring to this computer</value>
<value>このコンピューターで再生</value>
</data>
<data name="strRDPSoundDoNotPlay" xml:space="preserve">
<value>Do not play</value>
<value>再生しない</value>
</data>
<data name="strRDPSoundLeaveAtRemoteComputer" xml:space="preserve">
<value>Leave at remote computer</value>
<value>遠隔コンピューターで再生</value>
</data>
<data name="strRdpToggleFullscreenFailed" xml:space="preserve">
<value>RDP ToggleFullscreen failed!</value>
@@ -1947,10 +1961,11 @@ Message:
<value>RDP ToggleSmartSize failed!</value>
</data>
<data name="strReconnectAtStartup" xml:space="preserve">
<value>Reconnect to previously opened sessions on startup</value>
<value>起動時に前セッション時の接続を開始する</value>
<comment>Reconnect to previously opened sessions on startup</comment>
</data>
<data name="strRefresh" xml:space="preserve">
<value>Refresh</value>
<value>更新</value>
</data>
<data name="strRemoteFile" xml:space="preserve">
<value>遠隔ファイル</value>
@@ -1974,25 +1989,25 @@ Message:
<value>Do you want to save the current connections file before loading another?</value>
</data>
<data name="strSaveConsOnExit" xml:space="preserve">
<value>Save connections on exit</value>
<value>終了時に保存する</value>
</data>
<data name="strSaveImageFilter" xml:space="preserve">
<value>Graphics Interchange Format File (.gif)|*.gif|Joint Photographic Experts Group File (.jpeg)|*.jpeg|Joint Photographic Experts Group File (.jpg)|*.jpg|Portable Network Graphics File (.png)|*.png</value>
</data>
<data name="strScreen" xml:space="preserve">
<value>Screen</value>
<value>スクリーン</value>
</data>
<data name="strScreenshot" xml:space="preserve">
<value>スクリーンショット</value>
</data>
<data name="strScreenshots" xml:space="preserve">
<value>スクリーンショット</value>
<value>複数のスクリーンショット</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Search</value>
<value>検索</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Send To...</value>
<value>送信...</value>
</data>
<data name="strSessionGetFailed" xml:space="preserve">
<value>Get Sessions Background failed</value>
@@ -2010,10 +2025,12 @@ Message:
<value>Couldn't save settings or dispose SysTray Icon!</value>
</data>
<data name="strShowDescriptionTooltips" xml:space="preserve">
<value>Show description tooltips in connection tree</value>
<value>接続ツリーに接続の説明をツールチップを表示する</value>
<comment>Show description tooltips in connection tree</comment>
</data>
<data name="strShowFullConsFilePath" xml:space="preserve">
<value>Show full connections file path in window title</value>
<value>ウィンドウのタイトルに接続設定ファイルへのフルパス名を表示する</value>
<comment>Show full connections file path in window title</comment>
</data>
<data name="strShowLogonInfoOnTabs" xml:space="preserve">
<value>Show logon information on tab names</value>
@@ -2085,7 +2102,7 @@ Message:
<value>開始のポート</value>
</data>
<data name="strStartupExit" xml:space="preserve">
<value>Startup/Exit</value>
<value>起動と終了</value>
</data>
<data name="strStatus" xml:space="preserve">
<value>ステータス</value>
@@ -2094,22 +2111,22 @@ Message:
<value>Switch to Notifications panel on:</value>
</data>
<data name="strTabAdvanced" xml:space="preserve">
<value>Advanced</value>
<value>詳細設定</value>
</data>
<data name="strTabAppearance" xml:space="preserve">
<value>外観</value>
</data>
<data name="strTabsAndPanels" xml:space="preserve">
<value>Tabs &amp;&amp; Panels</value>
<value>タブとパネル</value>
</data>
<data name="strTabUpdates" xml:space="preserve">
<value>更新</value>
<value>タブの更新</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<data name="strTheFollowing" xml:space="preserve">
<value>The following:</value>
<value>以下:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>設定パネル</value>
@@ -2121,7 +2138,7 @@ Message:
<value>General</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>The background colour of the config panel.</value>
<value>設定パネルの背景色</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>The colour of the category text in the config panel.</value>

View File

@@ -299,7 +299,7 @@ Når nedlastingen er ferdig, pakk den ut til et passende sted. I mRemoteNG, gå
Hvis du fremdeles ikke passerer denne kontrollen eller brukre Gecko-renderingsmotoren i mRemoteNG, vennligst konsulter mRemoteNG-forumet på http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner ble funnet å ser ut til å være korrekt installert.</value>
<value>GeckoFx ble funnet å ser ut til å være korrekt installert.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA krever at XenDesktop Online Plugin er installert og at wfica.ocx-biblioteket er registrert. Du kan laste ned klienten herfra: http://www.citrix.com/download/

View File

@@ -299,7 +299,7 @@ Wanneer de download van het pakket is voltooid kunt u deze uitpakken naar een wi
Als u nog steeds niet in staat bent om de langs check te komen gebruik dan de Gecko Engine in mRemoteNG of raadpleeg mRemoteNG Forum op http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner werd gevonden en lijkt correct te zijn geïnstalleerd.</value>
<value>GeckoFx werd gevonden en lijkt correct te zijn geïnstalleerd.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA vereist dat de XenDesktop Online Plugin is geïnstalleerd is en dat de wfica.ocx bibliotheek is geregistreerd. U kunt de cliënt van deze locatie downloaden: http://www.citrix.com/download/

View File

@@ -295,7 +295,7 @@ Jeśli nadal nie można sprawdzić lub użyć fukcji Sesji (RDP) skonsultuj to n
<value>Aby użyć Gecko Rendering Engine, musisz mieć XULrunner 1.8.1.x oraz podać ścieżkę instalacji w opcjach. XULrunner 1.8.1.3 możesz pobrać ze ftp: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ Po zakończeniu pobierania wypakuj pakiet do właściwego katalogu. Następnie w mRemoteNG przejdź do menu Narzędzia - Opcje - Zaawansowane i wprowadź poprawną ścieżkę w polu Ścieżka XULrunner. Jeśli to nadal nie pomogło prosimy o kontakt na mRemoteNG Forum na stronie http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner został znaleziony i wydaje się być zainstalowany prawidłowo.</value>
<value>GeckoFx został znaleziony i wydaje się być zainstalowany prawidłowo.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA wymaga zainstalowania wtyczki Online XenDesktop, i aby była zarejestrowana biblioteka wfica.ocx. Możesz pobrać klienta tutaj: http://www.citrix.com/download/ Jeżeli masz zainstalowany Plugin Online XenDesktop a nadal nie działa, spróbuj ręcznie zarejestrować bibliotekę wfica.ocx. Aby to zrobić wybierz polecenie Uruchom (Start - Uruchom) i wprowadź w linii komend: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (gdzie c:\Program Files\Citrix\ICA Client\ jest ścieżką instalacji XenDesktop Online Plugin). Jeśli nadal nie można użyć ICA w mRemoteNG prosimy o kontakt mRemoteNG Forum na http://forum.mremoteng.org/</value>

View File

@@ -296,7 +296,7 @@ Em seguida, emtre no mRemoteNG e vá em ferramentas - opções - avançadas e di
Se ainda não conseguir passar esta verificação ou usar o motor Gecko em mRemoteNG por favor consultar o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner foi encontrado e aparenta estar instalado corretamente.</value>
<value>GeckoFx foi encontrado e aparenta estar instalado corretamente.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requer que o XenDesktop Online Plugin esteja instalado e a biblioteca wfica.ocs registrada. Você pode baixar o cliente aqui: http://www.citrix.com/download/

View File

@@ -292,7 +292,7 @@
<value>Para usar o motor de renderização Gecko, você precisará ter o XULrunner 1.8.1.x e o caminho configurado nas opções. Você pode baixar o XULrunner 1.8.1.3 em: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ quando terminar de descarregar, extraia o pacote para um caminho de sua escolha. Em seguida, em mRemoteNG vá em ferramentas - opções - avançadas e digite o caminho correto no campo caminho XULrunner. Se você ainda não pode executar esta seleção ou usar o motor Gecko em mRemoteNG, por favor, consulte o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner foi encontrado e aparenta estar instalado corretamente.</value>
<value>GeckoFx foi encontrado e aparenta estar instalado corretamente.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requer que o XenDesktop Online Plugin esteja instalado e a biblioteca wfica registrada. Você pode baixar o cliente aqui: http://www.citrix.com/download/ se você tiver o Plugin Online XenDesktop instalado e a verificação ainda falhar, tente registrar manualmente o wfica. Para fazer isso abra a caixa de diálogo Executar (Iniciar - Executar) e digite o seguinte: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (onde c:\Program Files\Citrix\ICA Client\ é o caminho para a instalação do Plugin Online do XenDesktop). Se você ainda não pode passar essa verificação ou usar ICA em mRemoteNG, por favor, consulte o fórum de mRemoteNG no http://forum.mremoteng.org/"</value>

View File

@@ -305,7 +305,7 @@ When you are finished downloading extract the package to a path of your choice.
If you are still not able to pass this check or use the Gecko Engine in mRemoteNG please consult the mRemoteNG Forum at http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner was found and seems to be installed properly.</value>
<value>GeckoFx was found and seems to be installed properly.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requires that the XenDesktop Online Plugin is installed and that the wfica.ocx library is registered. You can download the client here: http://www.citrix.com/download/
@@ -2018,7 +2018,7 @@ Message:
<value>Single click on connection opens it</value>
</data>
<data name="strSingleClickOnOpenConnectionSwitchesToIt" xml:space="preserve">
<value>Single click on opened connection switches to it</value>
<value>Single click on opened connection in Connection Tree switches to opened Connection Tab</value>
</data>
<data name="strSmartSizeModeAspect" xml:space="preserve">
<value>Aspect</value>

View File

@@ -299,7 +299,7 @@
Если у вас ничего не получилось обратитесь на форум mRemoteNG http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULRunner был найден и установлен правильно.</value>
<value>GeckoFx был найден и установлен правильно.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA требуется установленный XenDesktop Online Plugin и зарегистрированная библиотека wfica.ocx. Вы можете скачать клиент здесь: http://www.citrix.com/download/

View File

@@ -296,7 +296,7 @@ mRemoteNG завантажиться з цим компонентом, але н
Якщо у вас нічого не вийшло зверніться на форум mRemoteNG http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULRunner було знайдено і встановлено правильно.</value>
<value>GeckoFx було знайдено і встановлено правильно.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA потрібний встановлений XenDesktop Online Plugin і зареєстрована бібліотека wfica.ocx. Ви можете завантажити клієнт тут: http://www.citrix.com/download/

View File

@@ -295,7 +295,7 @@
如果执行此操作后依然无法通过Gecko渲染引擎的检测请在mRemoteNG论坛中咨询地址是http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>发现XULrunner组件。</value>
<value>发现GeckoFx组件。</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>启用ICA需要提前安装 XenDesktop Online 插件并正确注册wfica.ocx库文件。您可以在此下载此插件http://www.citrix.com/download/

View File

@@ -287,7 +287,7 @@
<value>找到 EOLWTSCOM 並似乎正確註冊。</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>找到 XULrunner 並似乎正確註冊。</value>
<value>找到 GeckoFx 並似乎正確註冊。</value>
</data>
<data name="strCcICAOK" xml:space="preserve">
<value>找到所有 ICA 元件並似乎正確註冊。

View File

@@ -1,10 +1,8 @@
using System.Collections.Generic;
using System;
using System.Drawing;
using Microsoft.VisualBasic;
using System.IO;
using System.Xml;
using System.Reflection;
namespace mRemoteNG.Themes
@@ -119,7 +117,8 @@ namespace mRemoteNG.Themes
private static string EncodeColorName(Color color)
{
return color.IsNamedColor ? color.Name : Conversion.Hex(color.ToArgb()).PadLeft(8, '0');
// best/simplest answer to converting to hex: http://stackoverflow.com/questions/12078942/how-to-convert-from-argb-to-hex-aarrggbb
return color.IsNamedColor ? color.Name : $"{color.A:X2}{color.R:X2}{color.G:X2}{color.B:X2}";
}
private static Color DecodeColorName(string name)

View File

@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Text;
using mRemoteNG.Connection;
namespace mRemoteNG.Tools
@@ -68,7 +67,7 @@ namespace mRemoteNG.Tools
variableNameLength--;
variableName = input.Substring(variableNameStart, variableNameLength);
replacements.Add(new Replacement(tokenStart, tokenLength, string.Format("%{0}%", variableName)));
replacements.Add(new Replacement(tokenStart, tokenLength, $"%{variableName}%"));
index = tokenEnd;
continue;
@@ -89,7 +88,7 @@ namespace mRemoteNG.Tools
break;
}
if (!(escape == EscapeType.All))
if (escape != EscapeType.All)
{
// Remove the escape character from the name
variableNameStart++;
@@ -112,7 +111,7 @@ namespace mRemoteNG.Tools
bool haveReplacement = false;
if (!(replacementValue == token))
if (replacementValue != token)
{
haveReplacement = true;
}
@@ -138,7 +137,7 @@ namespace mRemoteNG.Tools
replacementValue = CommandLineArguments.EscapeBackslashesForTrailingQuote(replacementValue);
}
if (escape == EscapeType.All | escape == EscapeType.ShellMetacharacters)
if (escape == EscapeType.All || escape == EscapeType.ShellMetacharacters)
replacementValue = CommandLineArguments.EscapeShellMetacharacters(replacementValue);
replacements.Add(new Replacement(tokenStart, tokenLength, replacementValue));
@@ -156,7 +155,7 @@ namespace mRemoteNG.Tools
{
foreach (Replacement replacement in replacements)
{
if (!(replacement.Start == index))
if (replacement.Start != index)
{
continue;
}

View File

@@ -1,5 +1,4 @@
using System;
using Microsoft.VisualBasic;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography.X509Certificates;
@@ -172,7 +171,16 @@ namespace mRemoteNG.Tools
case StatusValue.NoThumbprintToMatch:
return "A thumbprint match is required but no thumbprint to match against was specified.";
case StatusValue.ThumbprintNotMatch:
return string.Format("The thumbprint does not match. {0} {1} {2}.", _thumbprint, Strings.ChrW(0x2260), ThumbprintToMatch);
/* (char)0x2260 == the "not equal to" symbol (which I cannot print in here without changing the encoding of the file)
* Fancy...
*
* "<>" is fiarly cryptic for non-programers
* So is "!="
* "=/=" gets the job done, no?
* What about plain old English (or localized value): X is not equal to Y?
* :P
*/
return string.Format("The thumbprint does not match. {0} {1} {2}.", _thumbprint, (char)0x2260, ThumbprintToMatch);
case StatusValue.TrustProviderError:
Win32Exception ex = new Win32Exception(_trustProviderErrorCode);
return string.Format("The trust provider returned an error. {0}", ex.Message);

View File

@@ -1,4 +1,3 @@
using Microsoft.VisualBasic;
using mRemoteNG.App;
using mRemoteNG.Forms;
using mRemoteNG.UI.Window;
@@ -142,8 +141,7 @@ namespace mRemoteNG.Tools
}
public static string PrepareValueForDB(string Text)
{
Text = Strings.Replace(Expression: Text, Find: "\'", Replacement: "\'\'", Compare: CompareMethod.Text);
return Text;
return Text.Replace("\'", "\'\'");
}

View File

@@ -1,9 +1,8 @@
using System.Collections.Generic;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using mRemoteNG.App;
namespace mRemoteNG.Tools
{
@@ -15,14 +14,10 @@ namespace mRemoteNG.Tools
Process.StartInfo.UseShellExecute = false;
Process.StartInfo.FileName = fileName;
if (arguments != null)
{
Process.StartInfo.Arguments = arguments.ToString();
}
if (!Process.Start())
{
return false;
}
GetMainWindowHandle();
return true;
@@ -31,104 +26,66 @@ namespace mRemoteNG.Tools
public bool SetControlVisible(string className, string text, bool visible = true)
{
if (Process == null || Process.HasExited)
{
return false;
}
if (Handle == IntPtr.Zero)
{
return false;
}
IntPtr controlHandle = GetControlHandle(className, text);
if (controlHandle == IntPtr.Zero)
{
return false;
}
int nCmdShow = 0;
uint nCmdShow = 0;
if (visible)
{
nCmdShow = Win32.SW_SHOW;
}
nCmdShow = NativeMethods.SW_SHOW;
else
{
nCmdShow = Win32.SW_HIDE;
}
Win32.ShowWindow(controlHandle, nCmdShow);
nCmdShow = NativeMethods.SW_HIDE;
NativeMethods.ShowWindow(controlHandle, (int)nCmdShow);
return true;
}
public bool SetControlText(string className, string oldText, string newText)
{
if (Process == null || Process.HasExited)
{
if (Process == null || Process.HasExited || Handle == IntPtr.Zero)
return false;
}
if (Handle == IntPtr.Zero)
{
return false;
}
IntPtr controlHandle = GetControlHandle(className, oldText);
if (controlHandle == IntPtr.Zero)
{
return false;
}
IntPtr result = Win32.SendMessage(controlHandle, Win32.WM_SETTEXT, (IntPtr)0, new StringBuilder(newText));
if (!(result.ToInt32() == Win32.TRUE))
{
IntPtr result = NativeMethods.SendMessage(controlHandle, NativeMethods.WM_SETTEXT, (IntPtr)0, new StringBuilder(newText));
if (!(result.ToInt32() == NativeMethods.TRUE))
return false;
}
return true;
}
public bool SelectListBoxItem(string itemText)
{
if (Process == null || Process.HasExited)
{
if (Process == null || Process.HasExited || Handle == IntPtr.Zero)
return false;
}
if (Handle == IntPtr.Zero)
{
return false;
}
IntPtr listBoxHandle = GetControlHandle("ListBox");
if (listBoxHandle == IntPtr.Zero)
{
return false;
}
IntPtr result = Win32.SendMessage(listBoxHandle, Win32.LB_SELECTSTRING, (IntPtr)(-1), new StringBuilder(itemText));
if (result.ToInt32() == Win32.LB_ERR)
{
IntPtr result = NativeMethods.SendMessage(listBoxHandle, NativeMethods.LB_SELECTSTRING, (IntPtr)(-1), new StringBuilder(itemText));
if (result.ToInt32() == NativeMethods.LB_ERR)
return false;
}
return true;
}
public bool ClickButton(string text)
{
if (Process == null || Process.HasExited)
{
if (Process == null || Process.HasExited || Handle == IntPtr.Zero)
return false;
}
if (Handle == IntPtr.Zero)
{
return false;
}
IntPtr buttonHandle = GetControlHandle("Button", text);
if (buttonHandle == IntPtr.Zero)
{
return false;
}
int buttonControlId = Win32.GetDlgCtrlID(buttonHandle.ToInt32());
Win32.SendMessage(Handle, Win32.WM_COMMAND, (IntPtr)buttonControlId, buttonHandle);
int buttonControlId = NativeMethods.GetDlgCtrlID(buttonHandle.ToInt32());
NativeMethods.SendMessage(Handle, NativeMethods.WM_COMMAND, (IntPtr)buttonControlId, buttonHandle);
return true;
}
@@ -136,32 +93,28 @@ namespace mRemoteNG.Tools
public void WaitForExit()
{
if (Process == null || Process.HasExited)
{
return ;
}
Process.WaitForExit();
}
#endregion
#region Protected Fields
#region Protected Fields
protected Process Process = new Process();
protected IntPtr Handle = IntPtr.Zero;
protected List<IntPtr> Controls = new List<IntPtr>();
#endregion
#region Protected Methods
#endregion
#region Protected Methods
protected IntPtr GetMainWindowHandle()
{
if (Process == null || Process.HasExited)
{
return IntPtr.Zero;
}
Process.WaitForInputIdle(mRemoteNG.Settings.Default.MaxPuttyWaitTime * 1000);
Process.WaitForInputIdle(Settings.Default.MaxPuttyWaitTime * 1000);
Handle = IntPtr.Zero;
int startTicks = Environment.TickCount;
while (Handle == IntPtr.Zero && Environment.TickCount < startTicks + (mRemoteNG.Settings.Default.MaxPuttyWaitTime * 1000))
while (Handle == IntPtr.Zero && Environment.TickCount < startTicks + (Settings.Default.MaxPuttyWaitTime * 1000))
{
Process.Refresh();
Handle = Process.MainWindowHandle;
@@ -173,29 +126,23 @@ namespace mRemoteNG.Tools
return Handle;
}
protected IntPtr GetControlHandle(string className, string text = "")
{
if (Process == null || Process.HasExited)
{
if (Process == null || Process.HasExited || Handle == IntPtr.Zero)
return IntPtr.Zero;
}
if (Handle == IntPtr.Zero)
{
return IntPtr.Zero;
}
if (Controls.Count == 0)
{
EnumWindows windowEnumerator = new EnumWindows();
Controls = windowEnumerator.EnumChildWindows(Handle);
}
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
StringBuilder stringBuilder = new StringBuilder();
IntPtr controlHandle = IntPtr.Zero;
foreach (IntPtr control in Controls)
{
Win32.GetClassName(control, stringBuilder, stringBuilder.Capacity);
NativeMethods.GetClassName(control, stringBuilder, stringBuilder.Capacity);
if (stringBuilder.ToString() == className)
{
if (string.IsNullOrEmpty(text))
@@ -205,7 +152,7 @@ namespace mRemoteNG.Tools
}
else
{
Win32.SendMessage(control, Win32.WM_GETTEXT, new IntPtr(stringBuilder.Capacity), stringBuilder);
NativeMethods.SendMessage(control, NativeMethods.WM_GETTEXT, new IntPtr(stringBuilder.Capacity), stringBuilder);
if (stringBuilder.ToString() == text)
{
controlHandle = control;
@@ -217,39 +164,6 @@ namespace mRemoteNG.Tools
return controlHandle;
}
#endregion
#region Win32
// ReSharper disable ClassNeverInstantiated.Local
private class Win32
{
// ReSharper restore ClassNeverInstantiated.Local
// ReSharper disable InconsistentNaming
// ReSharper disable UnusedMethodReturnValue.Local
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern void GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, System.Text.StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern int GetDlgCtrlID(int hwndCtl);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public const int LB_ERR = -1;
public const int LB_SELECTSTRING = 0x18C;
public const int WM_SETTEXT = 0xC;
public const int WM_GETTEXT = 0xD;
public const int WM_COMMAND = 0x111;
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
public const int TRUE = 1;
// ReSharper restore UnusedMethodReturnValue.Local
// ReSharper restore InconsistentNaming
}
#endregion
#endregion
}
}

View File

@@ -1,9 +1,6 @@
using System;
using Microsoft.VisualBasic;
using System.Collections;
using System.Windows.Forms;
using mRemoteNG.App;
using mRemoteNG.My;
using mRemoteNG.UI.Forms;

View File

@@ -1,10 +1,3 @@
using mRemoteNG.App;
using mRemoteNG.Connection.Protocol.Http;
using mRemoteNG.Connection.Protocol.SSH;
using mRemoteNG.Connection.Protocol.VNC;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Connection.Protocol.Telnet;
using mRemoteNG.Connection.Protocol.Rlogin;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -13,84 +6,41 @@ using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
using System.Windows.Forms;
using mRemoteNG.My;
using mRemoteNG.App;
using mRemoteNG.Connection.Protocol.Http;
using mRemoteNG.Connection.Protocol.RDP;
using mRemoteNG.Connection.Protocol.Rlogin;
using mRemoteNG.Connection.Protocol.SSH;
using mRemoteNG.Connection.Protocol.Telnet;
using mRemoteNG.Connection.Protocol.VNC;
using mRemoteNG.Messages;
namespace mRemoteNG.Tools.PortScan
namespace mRemoteNG.Tools
{
public class ScanHost
{
#region Private Variables
private static int _SSHPort = (int)ProtocolSSH1.Defaults.Port;
private static int _TelnetPort = (int)ProtocolTelnet.Defaults.Port;
private static int _HTTPPort = (int)ProtocolHTTP.Defaults.Port;
private static int _HTTPSPort = (int)ProtocolHTTPS.Defaults.Port;
private static int _RloginPort = (int)ProtocolRlogin.Defaults.Port;
private static int _RDPPort = (int)ProtocolRDP.Defaults.Port;
private static int _VNCPort = (int)ProtocolVNC.Defaults.Port;
private string _hostName = "";
private string _hostIp;
private ArrayList _openPorts = new ArrayList();
private ArrayList _closedPorts;
private bool _RDP;
private bool _VNC;
private bool _SSH;
private bool _Telnet;
private bool _Rlogin;
private bool _HTTP;
private bool _HTTPS;
#endregion
#endregion
#region Properties
public static int SSHPort
{
get { return _SSHPort; }
set { _SSHPort = value; }
}
public static int SSHPort { get; set; } = (int)ProtocolSSH1.Defaults.Port;
public static int TelnetPort
{
get { return _TelnetPort; }
set { _TelnetPort = value; }
}
public static int TelnetPort { get; set; } = (int)ProtocolTelnet.Defaults.Port;
public static int HTTPPort
{
get { return _HTTPPort; }
set { _HTTPPort = value; }
}
public static int HTTPPort { get; set; } = (int)ProtocolHTTP.Defaults.Port;
public static int HTTPSPort
{
get { return _HTTPSPort; }
set { _HTTPSPort = value; }
}
public static int HTTPSPort { get; set; } = (int)ProtocolHTTPS.Defaults.Port;
public static int RloginPort
{
get { return _RloginPort; }
set { _RloginPort = value; }
}
public static int RloginPort { get; set; } = (int)ProtocolRlogin.Defaults.Port;
public static int RDPPort
{
get { return _RDPPort; }
set { _RDPPort = value; }
}
public static int RDPPort { get; set; } = (int)ProtocolRDP.Defaults.Port;
public static int VNCPort
{
get { return _VNCPort; }
set { _VNCPort = value; }
}
public static int VNCPort { get; set; } = (int)ProtocolVNC.Defaults.Port;
public string HostName
{
get { return _hostName; }
set { _hostName = value; }
}
public string HostNameWithoutDomain
public string HostName { get; set; } = "";
public string HostNameWithoutDomain
{
get
{
@@ -102,84 +52,45 @@ namespace mRemoteNG.Tools.PortScan
}
}
public string HostIp
{
get { return _hostIp; }
set { _hostIp = value; }
}
public string HostIp { get; set; }
public ArrayList OpenPorts
{
get { return _openPorts; }
set { _openPorts = value; }
}
public ArrayList OpenPorts { get; set; } = new ArrayList();
public ArrayList ClosedPorts
{
get { return _closedPorts; }
set { _closedPorts = value; }
}
public ArrayList ClosedPorts { get; set; }
public bool RDP
{
get { return _RDP; }
set { _RDP = value; }
}
public bool RDP { get; set; }
public bool VNC
{
get { return _VNC; }
set { _VNC = value; }
}
public bool VNC { get; set; }
public bool SSH
{
get { return _SSH; }
set { _SSH = value; }
}
public bool Telnet
{
get { return _Telnet; }
set { _Telnet = value; }
}
public bool SSH { get; set; }
public bool Rlogin
{
get { return _Rlogin; }
set { _Rlogin = value; }
}
public bool Telnet { get; set; }
public bool HTTP
{
get { return _HTTP; }
set { _HTTP = value; }
}
public bool Rlogin { get; set; }
public bool HTTPS
{
get { return _HTTPS; }
set { _HTTPS = value; }
}
#endregion
public bool HTTP { get; set; }
public bool HTTPS { get; set; }
#endregion
#region Methods
public ScanHost(string host)
{
_hostIp = host;
_openPorts = new ArrayList();
_closedPorts = new ArrayList();
HostIp = host;
OpenPorts = new ArrayList();
ClosedPorts = new ArrayList();
}
public override string ToString()
{
try
{
return "SSH: " + Convert.ToString(_SSH) + " Telnet: " + Convert.ToString(_Telnet) + " HTTP: " + Convert.ToString(_HTTP) + " HTTPS: " + Convert.ToString(_HTTPS) + " Rlogin: " + Convert.ToString(_Rlogin) + " RDP: " + Convert.ToString(_RDP) + " VNC: " + Convert.ToString(_VNC);
return "SSH: " + Convert.ToString(SSH) + " Telnet: " + Convert.ToString(Telnet) + " HTTP: " + Convert.ToString(HTTP) + " HTTPS: " + Convert.ToString(HTTPS) + " Rlogin: " + Convert.ToString(Rlogin) + " RDP: " + Convert.ToString(RDP) + " VNC: " + Convert.ToString(VNC);
}
catch (Exception)
{
Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "ToString failed (Tools.PortScan)", true);
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, "ToString failed (Tools.PortScan)", true);
return "";
}
}
@@ -190,36 +101,33 @@ namespace mRemoteNG.Tools.PortScan
{
ListViewItem listViewItem = new ListViewItem();
listViewItem.Tag = this;
if (!string.IsNullOrEmpty(_hostName))
listViewItem.Text = !string.IsNullOrEmpty(HostName) ? HostName : HostIp;
/* flipped the UI around a bit
* Show the open/closed port numbers in import mode in case custom ports are scanned.
* Since (currently) the non-import mode doesn't allow custom ports, just show the standard port columns.
*/
if (!import)
{
listViewItem.Text = _hostName;
}
else
{
listViewItem.Text = _hostIp;
}
if (import)
{
listViewItem.SubItems.Add(BoolToYesNo(_SSH));
listViewItem.SubItems.Add(BoolToYesNo(_Telnet));
listViewItem.SubItems.Add(BoolToYesNo(_HTTP));
listViewItem.SubItems.Add(BoolToYesNo(_HTTPS));
listViewItem.SubItems.Add(BoolToYesNo(_Rlogin));
listViewItem.SubItems.Add(BoolToYesNo(_RDP));
listViewItem.SubItems.Add(BoolToYesNo(_VNC));
listViewItem.SubItems.Add(BoolToYesNo(SSH));
listViewItem.SubItems.Add(BoolToYesNo(Telnet));
listViewItem.SubItems.Add(BoolToYesNo(HTTP));
listViewItem.SubItems.Add(BoolToYesNo(HTTPS));
listViewItem.SubItems.Add(BoolToYesNo(Rlogin));
listViewItem.SubItems.Add(BoolToYesNo(RDP));
listViewItem.SubItems.Add(BoolToYesNo(VNC));
}
else
{
string strOpen = "";
string strClosed = "";
foreach (int p in _openPorts)
foreach (int p in OpenPorts)
{
strOpen += p + ", ";
}
foreach (int p in _closedPorts)
foreach (int p in ClosedPorts)
{
strClosed += p + ", ";
}
@@ -232,32 +140,25 @@ namespace mRemoteNG.Tools.PortScan
}
catch (Exception ex)
{
Runtime.MessageCollector.AddExceptionMessage("Tools.PortScan.ToListViewItem() failed.", ex, Messages.MessageClass.WarningMsg, true);
Runtime.MessageCollector.AddExceptionMessage("Tools.PortScan.ToListViewItem() failed.", ex, MessageClass.WarningMsg, true);
return null;
}
}
private string BoolToYesNo(bool value)
{
if (value)
{
return Language.strYes;
}
else
{
return Language.strNo;
}
return value ? Language.strYes : Language.strNo;
}
public void SetAllProtocols(bool value)
public void SetAllProtocols(bool value)
{
_VNC = value;
_Telnet = value;
_SSH = value;
_Rlogin = value;
_RDP = value;
_HTTPS = value;
_HTTP = value;
VNC = value;
Telnet = value;
SSH = value;
Rlogin = value;
RDP = value;
HTTPS = value;
HTTP = value;
}
#endregion
}
@@ -278,7 +179,7 @@ namespace mRemoteNG.Tools.PortScan
IPAddress ipAddressEnd = IpAddressMax(ipAddress1, ipAddress2);
_ports.Clear();
_ports.AddRange(new int[] { ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, ScanHost.HTTPSPort, ScanHost.RloginPort, ScanHost.RDPPort, ScanHost.VNCPort });
_ports.AddRange(new[] { ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, ScanHost.HTTPSPort, ScanHost.RloginPort, ScanHost.RDPPort, ScanHost.VNCPort });
_ipAddresses.Clear();
_ipAddresses.AddRange(IpAddressArrayFromRange(ipAddressStart, ipAddressEnd));
@@ -301,7 +202,7 @@ namespace mRemoteNG.Tools.PortScan
public void StartScan()
{
_scanThread = new Thread(new System.Threading.ThreadStart(ScanAsync));
_scanThread = new Thread(ScanAsync);
_scanThread.SetApartmentState(ApartmentState.STA);
_scanThread.IsBackground = true;
_scanThread.Start();
@@ -310,13 +211,14 @@ namespace mRemoteNG.Tools.PortScan
public void StopScan()
{
_scanThread.Abort();
}
}
public static bool IsPortOpen(string hostname, string port)
{
try
{
System.Net.Sockets.TcpClient tcpClient = new System.Net.Sockets.TcpClient(hostname, Convert.ToInt32(port));
tcpClient.Close();
return true;
}
catch (Exception)
@@ -325,124 +227,144 @@ namespace mRemoteNG.Tools.PortScan
}
}
#endregion
#region Private Methods
private void ScanAsync()
private int hostCount;
private void ScanAsync()
{
try
{
int hostCount = 0;
foreach (IPAddress ipAddress in _ipAddresses)
hostCount = 0;
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Starting scan of {_ipAddresses.Count} hosts...", true);
foreach (IPAddress ipAddress in _ipAddresses)
{
if (BeginHostScanEvent != null)
BeginHostScanEvent(ipAddress.ToString());
ScanHost scanHost = new ScanHost(ipAddress.ToString());
hostCount++;
if (!IsHostAlive(ipAddress))
{
scanHost.ClosedPorts.AddRange(_ports);
scanHost.SetAllProtocols(false);
}
else
{
foreach (int port in _ports)
{
bool isPortOpen = false;
try
{
System.Net.Sockets.TcpClient tcpClient = new System.Net.Sockets.TcpClient(ipAddress.ToString(), port);
isPortOpen = true;
scanHost.OpenPorts.Add(port);
}
catch (Exception)
{
isPortOpen = false;
scanHost.ClosedPorts.Add(port);
}
if (port == ScanHost.SSHPort)
{
scanHost.SSH = isPortOpen;
}
else if (port == ScanHost.TelnetPort)
{
scanHost.Telnet = isPortOpen;
}
else if (port == ScanHost.HTTPPort)
{
scanHost.HTTP = isPortOpen;
}
else if (port == ScanHost.HTTPSPort)
{
scanHost.HTTPS = isPortOpen;
}
else if (port == ScanHost.RloginPort)
{
scanHost.Rlogin = isPortOpen;
}
else if (port == ScanHost.RDPPort)
{
scanHost.RDP = isPortOpen;
}
else if (port == ScanHost.VNCPort)
{
scanHost.VNC = isPortOpen;
}
}
}
try
{
scanHost.HostName = Dns.GetHostEntry(scanHost.HostIp).HostName;
}
catch (Exception)
{
}
if (string.IsNullOrEmpty(scanHost.HostName))
{
scanHost.HostName = scanHost.HostIp;
}
_scannedHosts.Add(scanHost);
if (HostScannedEvent != null)
HostScannedEvent(scanHost, hostCount, _ipAddresses.Count);
}
if (ScanCompleteEvent != null)
ScanCompleteEvent(_scannedHosts);
}
BeginHostScanEvent?.Invoke(ipAddress.ToString());
Ping pingSender = new Ping();
try
{
pingSender.PingCompleted += PingSender_PingCompleted;
pingSender.SendAsync(ipAddress, ipAddress);
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"Tools.PortScan: Ping failed for {ipAddress} {Environment.NewLine} {ex.Message}", true);
}
}
}
catch (Exception ex)
{
Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "StartScanBG failed (Tools.PortScan)" + Environment.NewLine + ex.Message, true);
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, $"StartScanBG failed (Tools.PortScan) {Environment.NewLine} {ex.Message}", true);
}
}
private static bool IsHostAlive(IPAddress ipAddress)
{
Ping pingSender = new Ping();
PingReply pingReply;
try
{
pingReply = pingSender.Send(ipAddress);
if (pingReply.Status == IPStatus.Success)
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
}
/* Some examples found here:
* http://stackoverflow.com/questions/2114266/convert-ping-application-to-multithreaded-version-to-increase-speed-c-sharp
*/
private void PingSender_PingCompleted(object sender, PingCompletedEventArgs e)
{
// UserState is the IP Address
var ip = e.UserState.ToString();
ScanHost scanHost = new ScanHost(ip);
hostCount++;
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Scanning {hostCount} of {_ipAddresses.Count} hosts: {scanHost.HostIp}", true);
if (e.Error != null)
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Ping failed to {e.UserState} {Environment.NewLine} {e.Error.Message}", true);
scanHost.ClosedPorts.AddRange(_ports);
scanHost.SetAllProtocols(false);
}
else if (e.Reply.Status == IPStatus.Success)
{
/* ping was successful, try to resolve the hostname */
try
{
scanHost.HostName = Dns.GetHostEntry(scanHost.HostIp).HostName;
}
catch (Exception dnsex)
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg,
$"Tools.PortScan: Could not resolve {scanHost.HostIp} {Environment.NewLine} {dnsex.Message}",
true);
}
if (string.IsNullOrEmpty(scanHost.HostName))
{
scanHost.HostName = scanHost.HostIp;
}
foreach (int port in _ports)
{
bool isPortOpen = false;
try
{
System.Net.Sockets.TcpClient tcpClient = new System.Net.Sockets.TcpClient(ip, port);
isPortOpen = true;
scanHost.OpenPorts.Add(port);
tcpClient.Close();
}
catch (Exception)
{
isPortOpen = false;
scanHost.ClosedPorts.Add(port);
}
if (port == ScanHost.SSHPort)
{
scanHost.SSH = isPortOpen;
}
else if (port == ScanHost.TelnetPort)
{
scanHost.Telnet = isPortOpen;
}
else if (port == ScanHost.HTTPPort)
{
scanHost.HTTP = isPortOpen;
}
else if (port == ScanHost.HTTPSPort)
{
scanHost.HTTPS = isPortOpen;
}
else if (port == ScanHost.RloginPort)
{
scanHost.Rlogin = isPortOpen;
}
else if (port == ScanHost.RDPPort)
{
scanHost.RDP = isPortOpen;
}
else if (port == ScanHost.VNCPort)
{
scanHost.VNC = isPortOpen;
}
}
}
else if(e.Reply.Status != IPStatus.Success)
{
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Ping did not complete to {e.UserState} : {e.Reply.Status}", true);
scanHost.ClosedPorts.AddRange(_ports);
scanHost.SetAllProtocols(false);
}
// cleanup
var p = (Ping)sender;
p.PingCompleted -= PingSender_PingCompleted;
p.Dispose();
var h = string.IsNullOrEmpty(scanHost.HostName) ? "HostNameNotFound" : scanHost.HostName;
Runtime.MessageCollector.AddMessage(MessageClass.InformationMsg, $"Tools.PortScan: Scan of {scanHost.HostIp} ({h}) complete.", true);
_scannedHosts.Add(scanHost);
HostScannedEvent?.Invoke(scanHost, hostCount, _ipAddresses.Count);
if (_scannedHosts.Count == _ipAddresses.Count)
ScanCompleteEvent?.Invoke(_scannedHosts);
}
private static IPAddress[] IpAddressArrayFromRange(IPAddress ipAddress1, IPAddress ipAddress2)
{
IPAddress startIpAddress = IpAddressMin(ipAddress1, ipAddress2);
@@ -494,7 +416,7 @@ namespace mRemoteNG.Tools.PortScan
private static int IpAddressToInt32(IPAddress ipAddress)
{
if (!(ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork))
if (ipAddress.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork)
{
throw (new ArgumentException("ipAddress"));
}
@@ -530,11 +452,11 @@ namespace mRemoteNG.Tools.PortScan
{
add
{
BeginHostScanEvent = (BeginHostScanEventHandler) System.Delegate.Combine(BeginHostScanEvent, value);
BeginHostScanEvent = (BeginHostScanEventHandler) Delegate.Combine(BeginHostScanEvent, value);
}
remove
{
BeginHostScanEvent = (BeginHostScanEventHandler) System.Delegate.Remove(BeginHostScanEvent, value);
BeginHostScanEvent = (BeginHostScanEventHandler) Delegate.Remove(BeginHostScanEvent, value);
}
}
@@ -545,11 +467,11 @@ namespace mRemoteNG.Tools.PortScan
{
add
{
HostScannedEvent = (HostScannedEventHandler) System.Delegate.Combine(HostScannedEvent, value);
HostScannedEvent = (HostScannedEventHandler) Delegate.Combine(HostScannedEvent, value);
}
remove
{
HostScannedEvent = (HostScannedEventHandler) System.Delegate.Remove(HostScannedEvent, value);
HostScannedEvent = (HostScannedEventHandler) Delegate.Remove(HostScannedEvent, value);
}
}
@@ -560,11 +482,11 @@ namespace mRemoteNG.Tools.PortScan
{
add
{
ScanCompleteEvent = (ScanCompleteEventHandler) System.Delegate.Combine(ScanCompleteEvent, value);
ScanCompleteEvent = (ScanCompleteEventHandler) Delegate.Combine(ScanCompleteEvent, value);
}
remove
{
ScanCompleteEvent = (ScanCompleteEventHandler) System.Delegate.Remove(ScanCompleteEvent, value);
ScanCompleteEvent = (ScanCompleteEventHandler) Delegate.Remove(ScanCompleteEvent, value);
}
}
#endregion

View File

@@ -1,78 +1,21 @@
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using mRemoteNG.App;
namespace mRemoteNG.Tools
{
public class WindowPlacement
{
#region Windows API
#region Functions
[DllImport("user32", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
private static extern bool GetWindowPlacement(System.IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
[DllImport("user32", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
private static extern bool SetWindowPlacement(System.IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
#endregion
#region Structures
private struct WINDOWPLACEMENT
{
public UInt32 length;
public UInt32 flags;
public UInt32 showCmd;
public POINT ptMinPosition;
public POINT ptMaxPosition;
public RECT rcNormalPosition;
}
private struct POINT
{
public long x;
public long y;
}
private struct RECT
{
public long left;
public long top;
public long right;
public long bottom;
}
#endregion
#region Constants
// WINDOWPLACEMENT.flags values
private const UInt32 WPF_SETMINPOSITION = 0x1;
private const UInt32 WPF_RESTORETOMAXIMIZED = 0x2;
private const UInt32 WPF_ASYNCWINDOWPLACEMENT = 0x4;
// WINDOWPLACEMENT.showCmd values
private const UInt32 SW_HIDE = 0;
private const UInt32 SW_SHOWNORMAL = 1;
private const UInt32 SW_SHOWMINIMIZED = 2;
private const UInt32 SW_SHOWMAXIMIZED = 3;
private const UInt32 SW_MAXIMIZE = 3;
private const UInt32 SW_SHOWNOACTIVATE = 4;
private const UInt32 SW_SHOW = 5;
private const UInt32 SW_MINIMIZE = 6;
private const UInt32 SW_SHOWMINNOACTIVE = 7;
private const UInt32 SW_SHOWNA = 8;
private const UInt32 SW_RESTORE = 9;
#endregion
#endregion
#region Private Variables
private Form _form;
#endregion
#region Constructors/Destructors
public WindowPlacement(Form form)
{
_form = form;
}
#endregion
#region Public Properties
public Form Form
{
@@ -90,19 +33,19 @@ namespace mRemoteNG.Tools
{
get
{
WINDOWPLACEMENT windowPlacement = GetWindowPlacement();
return Convert.ToBoolean(windowPlacement.flags & WPF_RESTORETOMAXIMIZED);
NativeMethods.WINDOWPLACEMENT windowPlacement = GetWindowPlacement();
return Convert.ToBoolean(windowPlacement.flags & NativeMethods.WPF_RESTORETOMAXIMIZED);
}
set
{
WINDOWPLACEMENT windowPlacement = GetWindowPlacement();
NativeMethods.WINDOWPLACEMENT windowPlacement = GetWindowPlacement();
if (value)
{
windowPlacement.flags = windowPlacement.flags | WPF_RESTORETOMAXIMIZED;
windowPlacement.flags = windowPlacement.flags | NativeMethods.WPF_RESTORETOMAXIMIZED;
}
else
{
windowPlacement.flags = windowPlacement.flags & ~WPF_RESTORETOMAXIMIZED;
windowPlacement.flags = windowPlacement.flags & ~NativeMethods.WPF_RESTORETOMAXIMIZED;
}
SetWindowPlacement(windowPlacement);
}
@@ -110,17 +53,17 @@ namespace mRemoteNG.Tools
#endregion
#region Private Functions
private WINDOWPLACEMENT GetWindowPlacement()
private NativeMethods.WINDOWPLACEMENT GetWindowPlacement()
{
if (_form == null)
{
throw (new System.NullReferenceException("WindowPlacement.Form is not set."));
throw (new NullReferenceException("WindowPlacement.Form is not set."));
}
WINDOWPLACEMENT windowPlacement = new WINDOWPLACEMENT();
NativeMethods.WINDOWPLACEMENT windowPlacement = new NativeMethods.WINDOWPLACEMENT();
windowPlacement.length = (uint)Marshal.SizeOf(windowPlacement);
try
{
GetWindowPlacement(_form.Handle, ref windowPlacement);
NativeMethods.GetWindowPlacement(_form.Handle, ref windowPlacement);
return windowPlacement;
}
catch (Exception)
@@ -129,16 +72,16 @@ namespace mRemoteNG.Tools
}
}
private bool SetWindowPlacement(WINDOWPLACEMENT windowPlacement)
private bool SetWindowPlacement(NativeMethods.WINDOWPLACEMENT windowPlacement)
{
if (_form == null)
{
throw (new System.NullReferenceException("WindowPlacement.Form is not set."));
throw (new NullReferenceException("WindowPlacement.Form is not set."));
}
windowPlacement.length = (uint)Marshal.SizeOf(windowPlacement);
try
{
return SetWindowPlacement(_form.Handle, ref windowPlacement);
return NativeMethods.SetWindowPlacement(_form.Handle, ref windowPlacement);
}
catch (Exception)
{

View File

@@ -1,7 +1,6 @@
using mRemoteNG.App;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Images;
using System;
using System.Windows.Forms;
using mRemoteNG.Messages;

View File

@@ -1,4 +1,4 @@
namespace mRemoteNG.Images
namespace mRemoteNG.Tree
{
public enum TreeImageType
{

View File

@@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using mRemoteNG.App;
namespace mRemoteNG.UI.Controls.FilteredPropertyGrid
{
/// <summary>
/// This class overrides the standard PropertyGrid provided by Microsoft.
/// It also allows to hide (or filter) the properties of the SelectedObject displayed by the PropertyGrid.
/// </summary>
public partial class FilteredPropertyGrid : PropertyGrid
{
/// <summary>Contain a reference to the collection of properties to show in the parent PropertyGrid.</summary>
/// <remarks>By default, m_PropertyDescriptors contain all the properties of the object. </remarks>
List<PropertyDescriptor> m_PropertyDescriptors = new List<PropertyDescriptor>();
/// <summary>Contain a reference to the array of properties to display in the PropertyGrid.</summary>
private AttributeCollection m_HiddenAttributes = null, m_BrowsableAttributes = null;
/// <summary>Contain references to the arrays of properties or categories to hide.</summary>
private string[] m_BrowsableProperties = null, m_HiddenProperties = null;
/// <summary>Contain a reference to the wrapper that contains the object to be displayed into the PropertyGrid.</summary>
private ObjectWrapper m_Wrapper = null;
/// <summary>Public constructor.</summary>
public FilteredPropertyGrid() {
InitializeComponent();
base.SelectedObject = m_Wrapper;
}
public new AttributeCollection BrowsableAttributes {
get { return m_BrowsableAttributes; }
set {
if(m_BrowsableAttributes != value) {
m_HiddenAttributes = null;
m_BrowsableAttributes = value;
RefreshProperties();
}
}
}
/// <summary>Get or set the categories to hide.</summary>
public AttributeCollection HiddenAttributes {
get { return m_HiddenAttributes; }
set {
if(value != m_HiddenAttributes) {
m_HiddenAttributes = value;
m_BrowsableAttributes = null;
RefreshProperties();
}
}
}
/// <summary>Get or set the properties to show.</summary>
/// <exception cref="ArgumentException">if one or several properties don't exist.</exception>
public string[] BrowsableProperties {
get { return m_BrowsableProperties; }
set {
if(value != m_BrowsableProperties) {
m_BrowsableProperties = value;
//m_HiddenProperties = null;
RefreshProperties();
}
}
}
/// <summary>Get or set the properties to hide.</summary>
public string[] HiddenProperties {
get { return m_HiddenProperties; }
set {
if(value != m_HiddenProperties) {
//m_BrowsableProperties = null;
m_HiddenProperties = value;
RefreshProperties();
}
}
}
/// <summary>Overwrite the PropertyGrid.SelectedObject property.</summary>
/// <remarks>The object passed to the base PropertyGrid is the wrapper.</remarks>
public new object SelectedObject {
get { return m_Wrapper != null ? ((ObjectWrapper)base.SelectedObject).SelectedObject : null; }
set {
// Set the new object to the wrapper and create one if necessary.
if(m_Wrapper == null) {
m_Wrapper = new ObjectWrapper(value);
RefreshProperties();
}
else if(m_Wrapper.SelectedObject != value) {
bool needrefresh = value.GetType() != m_Wrapper.SelectedObject.GetType();
m_Wrapper.SelectedObject = value;
if(needrefresh) RefreshProperties();
}
// Set the list of properties to the wrapper.
m_Wrapper.PropertyDescriptors = m_PropertyDescriptors;
// Link the wrapper to the parent PropertyGrid.
base.SelectedObject = m_Wrapper;
}
}
/// <summary>Called when the browsable properties have changed.</summary>
private void OnBrowsablePropertiesChanged() {
if(m_Wrapper == null) return;
}
/// <summary>Build the list of the properties to be displayed in the PropertyGrid, following the filters defined the Browsable and Hidden properties.</summary>
private void RefreshProperties() {
if(m_Wrapper == null) return;
// Clear the list of properties to be displayed.
m_PropertyDescriptors.Clear();
// Check whether the list is filtered
if(m_BrowsableAttributes != null && m_BrowsableAttributes.Count > 0) {
// Add to the list the attributes that need to be displayed.
foreach(Attribute attribute in m_BrowsableAttributes) ShowAttribute(attribute);
} else {
// Fill the collection with all the properties.
PropertyDescriptorCollection originalpropertydescriptors = TypeDescriptor.GetProperties(m_Wrapper.SelectedObject);
foreach(PropertyDescriptor propertydescriptor in originalpropertydescriptors) m_PropertyDescriptors.Add(propertydescriptor);
// Remove from the list the attributes that mustn't be displayed.
if(m_HiddenAttributes != null) foreach(Attribute attribute in m_HiddenAttributes) HideAttribute(attribute);
}
// Get all the properties of the SelectedObject
PropertyDescriptorCollection allproperties = TypeDescriptor.GetProperties(m_Wrapper.SelectedObject);
// Hide if necessary, some properties
if(m_HiddenProperties != null && m_HiddenProperties.Length > 0) {
// Remove from the list the properties that mustn't be displayed.
foreach(string propertyname in m_HiddenProperties) {
try {
PropertyDescriptor property = allproperties[propertyname];
// Remove from the list the property
HideProperty(property);
} catch(Exception ex) {
Runtime.MessageCollector.AddExceptionMessage("FilteredPropertyGrid: Could not hide Property.", ex);
}
}
}
// Display if necessary, some properties
if(m_BrowsableProperties != null && m_BrowsableProperties.Length > 0) {
foreach(string propertyname in m_BrowsableProperties) {
try {
ShowProperty(allproperties[propertyname]);
} catch(Exception knfe) {
Runtime.MessageCollector.AddExceptionMessage("FilteredPropertyGrid: Property not found", knfe);
}
}
}
}
/// <summary>Allows to hide a set of properties to the parent PropertyGrid.</summary>
/// <param name="propertyname">A set of attributes that filter the original collection of properties.</param>
/// <remarks>For better performance, include the BrowsableAttribute with true value.</remarks>
private void HideAttribute(Attribute attribute) {
PropertyDescriptorCollection filteredoriginalpropertydescriptors = TypeDescriptor.GetProperties(m_Wrapper.SelectedObject,new Attribute[] { attribute });
if(filteredoriginalpropertydescriptors == null || filteredoriginalpropertydescriptors.Count == 0) throw new ArgumentException("Attribute not found",attribute.ToString());
foreach(PropertyDescriptor propertydescriptor in filteredoriginalpropertydescriptors) HideProperty(propertydescriptor);
}
/// <summary>Add all the properties that match an attribute to the list of properties to be displayed in the PropertyGrid.</summary>
/// <param name="property">The attribute to be added.</param>
private void ShowAttribute(Attribute attribute) {
PropertyDescriptorCollection filteredoriginalpropertydescriptors = TypeDescriptor.GetProperties(m_Wrapper.SelectedObject,new Attribute[] { attribute });
if(filteredoriginalpropertydescriptors == null || filteredoriginalpropertydescriptors.Count == 0) throw new ArgumentException("Attribute not found",attribute.ToString());
foreach(PropertyDescriptor propertydescriptor in filteredoriginalpropertydescriptors) ShowProperty(propertydescriptor);
}
/// <summary>Add a property to the list of properties to be displayed in the PropertyGrid.</summary>
/// <param name="property">The property to be added.</param>
private void ShowProperty(PropertyDescriptor property) {
if(!m_PropertyDescriptors.Contains(property)) m_PropertyDescriptors.Add(property);
}
/// <summary>Allows to hide a property to the parent PropertyGrid.</summary>
/// <param name="propertyname">The name of the property to be hidden.</param>
private void HideProperty(PropertyDescriptor property) {
if(m_PropertyDescriptors.Contains(property)) m_PropertyDescriptors.Remove(property);
}
}
}

View File

@@ -0,0 +1,34 @@
namespace mRemoteNG.UI.Controls.FilteredPropertyGrid
{
partial class FilteredPropertyGrid
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
}
#endregion
}
}

View File

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace mRemoteNG.UI.Controls.FilteredPropertyGrid
{
/// <summary>This class is a wrapper. It contains the object the propertyGrid has to display.</summary>
internal class ObjectWrapper : ICustomTypeDescriptor
{
/// <summary>Contain a reference to the selected objet that will linked to the parent PropertyGrid.</summary>
private object m_SelectedObject = null;
/// <summary>Contain a reference to the collection of properties to show in the parent PropertyGrid.</summary>
/// <remarks>By default, m_PropertyDescriptors contain all the properties of the object. </remarks>
List<PropertyDescriptor> m_PropertyDescriptors = new List<PropertyDescriptor>();
/// <summary>Simple constructor.</summary>
/// <param name="obj">A reference to the selected object that will linked to the parent PropertyGrid.</param>
internal ObjectWrapper(object obj) {
m_SelectedObject = obj;
}
/// <summary>Get or set a reference to the selected objet that will linked to the parent PropertyGrid.</summary>
public object SelectedObject {
get { return m_SelectedObject; }
set { if(m_SelectedObject != value) m_SelectedObject = value; }
}
/// <summary>Get or set a reference to the collection of properties to show in the parent PropertyGrid.</summary>
public List<PropertyDescriptor> PropertyDescriptors {
get { return m_PropertyDescriptors; }
set { m_PropertyDescriptors = value; }
}
#region ICustomTypeDescriptor Members
public PropertyDescriptorCollection GetProperties(Attribute[] attributes) {
return GetProperties();
}
public PropertyDescriptorCollection GetProperties() {
return new PropertyDescriptorCollection(m_PropertyDescriptors.ToArray(),true);
}
/// <summary>GetAttributes.</summary>
/// <returns>AttributeCollection</returns>
public AttributeCollection GetAttributes() {
return TypeDescriptor.GetAttributes(m_SelectedObject,true);
}
/// <summary>Get Class Name.</summary>
/// <returns>String</returns>
public String GetClassName() {
return TypeDescriptor.GetClassName(m_SelectedObject,true);
}
/// <summary>GetComponentName.</summary>
/// <returns>String</returns>
public String GetComponentName() {
return TypeDescriptor.GetComponentName(m_SelectedObject,true);
}
/// <summary>GetConverter.</summary>
/// <returns>TypeConverter</returns>
public TypeConverter GetConverter() {
return TypeDescriptor.GetConverter(m_SelectedObject,true);
}
/// <summary>GetDefaultEvent.</summary>
/// <returns>EventDescriptor</returns>
public EventDescriptor GetDefaultEvent() {
return TypeDescriptor.GetDefaultEvent(m_SelectedObject,true);
}
/// <summary>GetDefaultProperty.</summary>
/// <returns>PropertyDescriptor</returns>
public PropertyDescriptor GetDefaultProperty() {
return TypeDescriptor.GetDefaultProperty(m_SelectedObject,true);
}
/// <summary>GetEditor.</summary>
/// <param name="editorBaseType">editorBaseType</param>
/// <returns>object</returns>
public object GetEditor(Type editorBaseType) {
return TypeDescriptor.GetEditor(this,editorBaseType,true);
}
public EventDescriptorCollection GetEvents(Attribute[] attributes) {
return TypeDescriptor.GetEvents(m_SelectedObject,attributes,true);
}
public EventDescriptorCollection GetEvents() {
return TypeDescriptor.GetEvents(m_SelectedObject,true);
}
public object GetPropertyOwner(PropertyDescriptor pd) {
return m_SelectedObject;
}
#endregion
}
}

View File

@@ -1,17 +1,9 @@
using System.Collections.Generic;
using System;
using AxWFICALib;
using System.Drawing;
using System.Diagnostics;
using System.Data;
using AxMSTSCLib;
using Microsoft.VisualBasic;
using System.Collections;
using System.Windows.Forms;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol;
using mRemoteNG.App;
using mRemoteNG.My;
namespace mRemoteNG.Controls

View File

@@ -1,12 +1,4 @@
using System.Collections.Generic;
using System;
using AxWFICALib;
using System.Drawing;
using System.Diagnostics;
using System.Data;
using AxMSTSCLib;
using Microsoft.VisualBasic;
using System.Collections;
using System.Windows.Forms;
using System.ComponentModel;

View File

@@ -0,0 +1,59 @@
/*
* http://www.csharp-examples.net/inputbox/
*
*/
using System;
using System.Windows.Forms;
using System.Drawing;
namespace mRemoteNG.UI.Forms.Input
{
internal class input
{
public static DialogResult InputBox(string title, string promptText, ref string value)
{
var form = new Form();
var label = new Label();
var textBox = new TextBox();
var buttonOk = new Button();
var buttonCancel = new Button();
label.Text = promptText;
label.AutoSize = true;
label.SetBounds(9, 20, 372, 13);
textBox.Text = value;
textBox.BorderStyle = BorderStyle.Fixed3D;
textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
textBox.SetBounds(12, 36, 372, 20);
buttonOk.Text = "OK";
buttonOk.DialogResult = DialogResult.OK;
buttonOk.FlatStyle = FlatStyle.Flat;
buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonOk.SetBounds(228, 72, 75, 23);
buttonCancel.Text = "Cancel";
buttonCancel.DialogResult = DialogResult.Cancel;
buttonCancel.FlatStyle = FlatStyle.Flat;
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.SetBounds(309, 72, 75, 23);
form.Text = title;
form.ClientSize = new Size(396, 107);
form.Controls.AddRange(new Control[] {label, textBox, buttonOk, buttonCancel});
form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.StartPosition = FormStartPosition.CenterScreen;
form.MinimizeBox = false;
form.MaximizeBox = false;
form.AcceptButton = buttonOk;
form.CancelButton = buttonCancel;
var dialogResult = form.ShowDialog();
value = textBox.Text;
return dialogResult;
}
}
}

View File

@@ -35,15 +35,12 @@ namespace mRemoteNG.UI.Forms.OptionsPages
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdvancedPage));
this.chkWriteLogFile = new System.Windows.Forms.CheckBox();
this.chkAutomaticallyGetSessionInfo = new System.Windows.Forms.CheckBox();
this.lblXulRunnerPath = new System.Windows.Forms.Label();
this.lblMaximumPuttyWaitTime = new System.Windows.Forms.Label();
this.chkEncryptCompleteFile = new System.Windows.Forms.CheckBox();
this.chkAutomaticReconnect = new System.Windows.Forms.CheckBox();
this.btnBrowseXulRunnerPath = new System.Windows.Forms.Button();
this.numPuttyWaitTime = new System.Windows.Forms.NumericUpDown();
this.chkUseCustomPuttyPath = new System.Windows.Forms.CheckBox();
this.lblConfigurePuttySessions = new System.Windows.Forms.Label();
this.txtXULrunnerPath = new System.Windows.Forms.TextBox();
this.numUVNCSCPort = new System.Windows.Forms.NumericUpDown();
this.txtCustomPuttyPath = new System.Windows.Forms.TextBox();
this.btnLaunchPutty = new System.Windows.Forms.Button();
@@ -74,15 +71,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.chkAutomaticallyGetSessionInfo.Text = "Automatically get session information";
this.chkAutomaticallyGetSessionInfo.UseVisualStyleBackColor = true;
//
// lblXulRunnerPath
//
this.lblXulRunnerPath.AutoSize = true;
this.lblXulRunnerPath.Location = new System.Drawing.Point(3, 240);
this.lblXulRunnerPath.Name = "lblXulRunnerPath";
this.lblXulRunnerPath.Size = new System.Drawing.Size(90, 13);
this.lblXulRunnerPath.TabIndex = 29;
this.lblXulRunnerPath.Text = "XULRunner path:";
//
// lblMaximumPuttyWaitTime
//
this.lblMaximumPuttyWaitTime.Location = new System.Drawing.Point(3, 195);
@@ -112,16 +100,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.chkAutomaticReconnect.Text = "Automatically try to reconnect when disconnected from server (RDP && ICA only)";
this.chkAutomaticReconnect.UseVisualStyleBackColor = true;
//
// btnBrowseXulRunnerPath
//
this.btnBrowseXulRunnerPath.Location = new System.Drawing.Point(373, 262);
this.btnBrowseXulRunnerPath.Name = "btnBrowseXulRunnerPath";
this.btnBrowseXulRunnerPath.Size = new System.Drawing.Size(75, 23);
this.btnBrowseXulRunnerPath.TabIndex = 31;
this.btnBrowseXulRunnerPath.Text = "Browse...";
this.btnBrowseXulRunnerPath.UseVisualStyleBackColor = true;
this.btnBrowseXulRunnerPath.Click += new System.EventHandler(this.btnBrowseXulRunnerPath_Click);
//
// numPuttyWaitTime
//
this.numPuttyWaitTime.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -160,14 +138,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.lblConfigurePuttySessions.Text = "To configure PuTTY sessions click this button:";
this.lblConfigurePuttySessions.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// txtXULrunnerPath
//
this.txtXULrunnerPath.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtXULrunnerPath.Location = new System.Drawing.Point(21, 264);
this.txtXULrunnerPath.Name = "txtXULrunnerPath";
this.txtXULrunnerPath.Size = new System.Drawing.Size(346, 20);
this.txtXULrunnerPath.TabIndex = 30;
//
// numUVNCSCPort
//
this.numUVNCSCPort.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
@@ -199,7 +169,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
//
// btnLaunchPutty
//
this.btnLaunchPutty.Image = Resources.PuttyConfig;
this.btnLaunchPutty.Image = global::mRemoteNG.Resources.PuttyConfig;
this.btnLaunchPutty.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnLaunchPutty.Location = new System.Drawing.Point(373, 159);
this.btnLaunchPutty.Name = "btnLaunchPutty";
@@ -246,15 +216,12 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.chkWriteLogFile);
this.Controls.Add(this.chkAutomaticallyGetSessionInfo);
this.Controls.Add(this.lblXulRunnerPath);
this.Controls.Add(this.lblMaximumPuttyWaitTime);
this.Controls.Add(this.chkEncryptCompleteFile);
this.Controls.Add(this.chkAutomaticReconnect);
this.Controls.Add(this.btnBrowseXulRunnerPath);
this.Controls.Add(this.numPuttyWaitTime);
this.Controls.Add(this.chkUseCustomPuttyPath);
this.Controls.Add(this.lblConfigurePuttySessions);
this.Controls.Add(this.txtXULrunnerPath);
this.Controls.Add(this.numUVNCSCPort);
this.Controls.Add(this.txtCustomPuttyPath);
this.Controls.Add(this.btnLaunchPutty);
@@ -272,15 +239,12 @@ namespace mRemoteNG.UI.Forms.OptionsPages
}
internal System.Windows.Forms.CheckBox chkWriteLogFile;
internal System.Windows.Forms.CheckBox chkAutomaticallyGetSessionInfo;
internal System.Windows.Forms.Label lblXulRunnerPath;
internal System.Windows.Forms.Label lblMaximumPuttyWaitTime;
internal System.Windows.Forms.CheckBox chkEncryptCompleteFile;
internal System.Windows.Forms.CheckBox chkAutomaticReconnect;
internal System.Windows.Forms.Button btnBrowseXulRunnerPath;
internal System.Windows.Forms.NumericUpDown numPuttyWaitTime;
internal System.Windows.Forms.CheckBox chkUseCustomPuttyPath;
internal System.Windows.Forms.Label lblConfigurePuttySessions;
internal System.Windows.Forms.TextBox txtXULrunnerPath;
internal System.Windows.Forms.NumericUpDown numUVNCSCPort;
internal System.Windows.Forms.TextBox txtCustomPuttyPath;
internal System.Windows.Forms.Button btnLaunchPutty;

View File

@@ -38,8 +38,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
chkAutomaticallyGetSessionInfo.Text = Language.strAutomaticallyGetSessionInfo;
chkWriteLogFile.Text = Language.strWriteLogFile;
lblUVNCSCPort.Text = Language.strUltraVNCSCListeningPort;
lblXulRunnerPath.Text = Language.strXULrunnerPath;
btnBrowseXulRunnerPath.Text = Language.strButtonBrowse;
chkEncryptCompleteFile.Text = Language.strEncryptCompleteConnectionFile;
}
@@ -59,8 +57,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
SetPuttyLaunchButtonEnabled();
numUVNCSCPort.Value = Settings.Default.UVNCSCPort;
txtXULrunnerPath.Text = Settings.Default.XULRunnerPath;
}
public override void SaveSettings()
@@ -89,7 +85,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
Settings.Default.MaxPuttyWaitTime = (int) numPuttyWaitTime.Value;
Settings.Default.UVNCSCPort = (int) numUVNCSCPort.Value;
Settings.Default.XULRunnerPath = txtXULrunnerPath.Text;
Settings.Default.Save();
}
@@ -148,18 +143,6 @@ namespace mRemoteNG.UI.Forms.OptionsPages
}
}
public void btnBrowseXulRunnerPath_Click(object sender, EventArgs e)
{
var oDlg = new FolderBrowserDialog {ShowNewFolderButton = false};
if (oDlg.ShowDialog() == DialogResult.OK)
{
txtXULrunnerPath.Text = oDlg.SelectedPath;
}
oDlg.Dispose();
}
#endregion
private void SetPuttyLaunchButtonEnabled()

View File

@@ -238,7 +238,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
this.chkSingleClickOnOpenedConnectionSwitchesToIt.Name = "chkSingleClickOnOpenedConnectionSwitchesToIt";
this.chkSingleClickOnOpenedConnectionSwitchesToIt.Size = new System.Drawing.Size(254, 17);
this.chkSingleClickOnOpenedConnectionSwitchesToIt.TabIndex = 8;
this.chkSingleClickOnOpenedConnectionSwitchesToIt.Text = "Single click on opened connection switches to it";
this.chkSingleClickOnOpenedConnectionSwitchesToIt.Text = Language.strSingleClickOnOpenConnectionSwitchesToIt;
this.chkSingleClickOnOpenedConnectionSwitchesToIt.UseVisualStyleBackColor = true;
//
//pnlAutoSave

View File

@@ -34,134 +34,134 @@ namespace mRemoteNG.Forms
[System.Diagnostics.DebuggerStepThrough()]
private void InitializeComponent()
{
this.lblPassword = new System.Windows.Forms.Label();
this.Load += new System.EventHandler(frmPassword_Load);
this.lblVerify = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
this.btnCancel = new System.Windows.Forms.Button();
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
this.lblStatus = new System.Windows.Forms.Label();
this.pbLock = new System.Windows.Forms.PictureBox();
this.txtVerify = new mRemoteNG.Controls.TextBox();
this.txtVerify.TextChanged += new System.EventHandler(this.txtPassword_TextChanged);
this.txtPassword = new mRemoteNG.Controls.TextBox();
this.txtPassword.TextChanged += new System.EventHandler(this.txtPassword_TextChanged);
((System.ComponentModel.ISupportInitialize) this.pbLock).BeginInit();
this.SuspendLayout();
//
//lblPassword
//
this.lblPassword.AutoSize = true;
this.lblPassword.Location = new System.Drawing.Point(82, 12);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new System.Drawing.Size(56, 13);
this.lblPassword.TabIndex = 1;
this.lblPassword.Text = "Password:";
//
//lblVerify
//
this.lblVerify.AutoSize = true;
this.lblVerify.Location = new System.Drawing.Point(82, 51);
this.lblVerify.Name = "lblVerify";
this.lblVerify.Size = new System.Drawing.Size(36, 13);
this.lblVerify.TabIndex = 3;
this.lblVerify.Text = "Verify:";
//
//btnOK
//
this.btnOK.Anchor = (System.Windows.Forms.AnchorStyles) (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.btnOK.Location = new System.Drawing.Point(291, 119);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 7;
this.btnOK.Text = Language.strButtonOK;
this.btnOK.UseVisualStyleBackColor = true;
//
//btnCancel
//
this.btnCancel.Anchor = (System.Windows.Forms.AnchorStyles) (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(210, 119);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 6;
this.btnCancel.Text = Language.strButtonCancel;
this.btnCancel.UseVisualStyleBackColor = true;
//
//lblStatus
//
this.lblStatus.Anchor = (System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.lblStatus.ForeColor = System.Drawing.Color.Red;
this.lblStatus.Location = new System.Drawing.Point(85, 90);
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(281, 13);
this.lblStatus.TabIndex = 5;
this.lblStatus.Text = "Status";
this.lblStatus.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.lblStatus.Visible = false;
//
//pbLock
//
this.pbLock.Image = Resources.Lock;
this.pbLock.Location = new System.Drawing.Point(12, 12);
this.pbLock.Name = "pbLock";
this.pbLock.Size = new System.Drawing.Size(64, 64);
this.pbLock.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pbLock.TabIndex = 7;
this.pbLock.TabStop = false;
//
//txtVerify
//
this.txtVerify.Anchor = (System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.txtVerify.Location = new System.Drawing.Point(85, 67);
this.txtVerify.Name = "txtVerify";
this.txtVerify.SelectAllOnFocus = true;
this.txtVerify.Size = new System.Drawing.Size(281, 20);
this.txtVerify.TabIndex = 4;
this.txtVerify.UseSystemPasswordChar = true;
//
//txtPassword
//
this.txtPassword.Anchor = (System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.txtPassword.Location = new System.Drawing.Point(85, 28);
this.txtPassword.Name = "txtPassword";
this.txtPassword.SelectAllOnFocus = true;
this.txtPassword.Size = new System.Drawing.Size(281, 20);
this.txtPassword.TabIndex = 2;
this.txtPassword.UseSystemPasswordChar = true;
//
//frmPassword
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF((float) (6.0F), (float) (13.0F));
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(378, 154);
this.ControlBox = false;
this.Controls.Add(this.pbLock);
this.Controls.Add(this.txtVerify);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.lblStatus);
this.Controls.Add(this.lblVerify);
this.Controls.Add(this.lblPassword);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "PasswordForm";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Password";
((System.ComponentModel.ISupportInitialize) this.pbLock).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
this.lblPassword = new System.Windows.Forms.Label();
this.lblVerify = new System.Windows.Forms.Label();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.lblStatus = new System.Windows.Forms.Label();
this.pbLock = new System.Windows.Forms.PictureBox();
this.txtVerify = new mRemoteNG.Controls.TextBox();
this.txtPassword = new mRemoteNG.Controls.TextBox();
((System.ComponentModel.ISupportInitialize)(this.pbLock)).BeginInit();
this.SuspendLayout();
//
// lblPassword
//
this.lblPassword.AutoSize = true;
this.lblPassword.Location = new System.Drawing.Point(82, 12);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new System.Drawing.Size(64, 15);
this.lblPassword.TabIndex = 1;
this.lblPassword.Text = "Password:";
//
// lblVerify
//
this.lblVerify.AutoSize = true;
this.lblVerify.Location = new System.Drawing.Point(82, 51);
this.lblVerify.Name = "lblVerify";
this.lblVerify.Size = new System.Drawing.Size(39, 15);
this.lblVerify.TabIndex = 3;
this.lblVerify.Text = "Verify:";
//
// btnOK
//
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnOK.Location = new System.Drawing.Point(210, 119);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 7;
this.btnOK.Text = global::mRemoteNG.Language.strButtonOK;
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(291, 119);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 6;
this.btnCancel.Text = global::mRemoteNG.Language.strButtonCancel;
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// lblStatus
//
this.lblStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblStatus.ForeColor = System.Drawing.Color.Red;
this.lblStatus.Location = new System.Drawing.Point(85, 90);
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(281, 13);
this.lblStatus.TabIndex = 5;
this.lblStatus.Text = "Status";
this.lblStatus.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.lblStatus.Visible = false;
//
// pbLock
//
this.pbLock.Image = global::mRemoteNG.Resources.Lock;
this.pbLock.Location = new System.Drawing.Point(12, 12);
this.pbLock.Name = "pbLock";
this.pbLock.Size = new System.Drawing.Size(64, 64);
this.pbLock.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pbLock.TabIndex = 7;
this.pbLock.TabStop = false;
//
// txtVerify
//
this.txtVerify.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtVerify.Location = new System.Drawing.Point(85, 67);
this.txtVerify.Name = "txtVerify";
this.txtVerify.SelectAllOnFocus = true;
this.txtVerify.Size = new System.Drawing.Size(281, 20);
this.txtVerify.TabIndex = 4;
this.txtVerify.UseSystemPasswordChar = true;
this.txtVerify.TextChanged += new System.EventHandler(this.txtPassword_TextChanged);
//
// txtPassword
//
this.txtPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtPassword.Location = new System.Drawing.Point(85, 28);
this.txtPassword.Name = "txtPassword";
this.txtPassword.SelectAllOnFocus = true;
this.txtPassword.Size = new System.Drawing.Size(281, 20);
this.txtPassword.TabIndex = 2;
this.txtPassword.UseSystemPasswordChar = true;
this.txtPassword.TextChanged += new System.EventHandler(this.txtPassword_TextChanged);
//
// PasswordForm
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(378, 154);
this.ControlBox = false;
this.Controls.Add(this.pbLock);
this.Controls.Add(this.txtVerify);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.lblStatus);
this.Controls.Add(this.lblVerify);
this.Controls.Add(this.lblPassword);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "PasswordForm";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Password";
this.Load += new System.EventHandler(this.frmPassword_Load);
((System.ComponentModel.ISupportInitialize)(this.pbLock)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
private Controls.TextBox txtPassword;
private Controls.TextBox txtVerify;

View File

@@ -112,9 +112,9 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -31,91 +31,88 @@ namespace mRemoteNG
//Do not modify it using the code editor.
[System.Diagnostics.DebuggerStepThrough()]private void InitializeComponent()
{
this.cbPanels = new System.Windows.Forms.ComboBox();
base.Load += new System.EventHandler(frmChoosePanel_Load);
this.btnOK = new System.Windows.Forms.Button();
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
this.lblDescription = new System.Windows.Forms.Label();
this.btnNew = new System.Windows.Forms.Button();
this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
this.btnCancel = new System.Windows.Forms.Button();
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
this.SuspendLayout();
//
//cbPanels
//
this.cbPanels.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbPanels.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cbPanels.FormattingEnabled = true;
this.cbPanels.Location = new System.Drawing.Point(79, 45);
this.cbPanels.Name = "cbPanels";
this.cbPanels.Size = new System.Drawing.Size(157, 21);
this.cbPanels.TabIndex = 10;
//
//btnOK
//
this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnOK.Location = new System.Drawing.Point(167, 74);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(69, 23);
this.btnOK.TabIndex = 20;
this.btnOK.Text = Language.strButtonOK;
this.btnOK.UseVisualStyleBackColor = true;
//
//lblDescription
//
this.lblDescription.Location = new System.Drawing.Point(7, 8);
this.lblDescription.Name = "lblDescription";
this.lblDescription.Size = new System.Drawing.Size(229, 29);
this.lblDescription.TabIndex = 0;
this.lblDescription.Text = Language.strLabelSelectPanel;
//
//btnNew
//
this.btnNew.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnNew.Image = Resources.Panel_Add;
this.btnNew.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnNew.Location = new System.Drawing.Point(10, 44);
this.btnNew.Name = "btnNew";
this.btnNew.Size = new System.Drawing.Size(57, 23);
this.btnNew.TabIndex = 40;
this.btnNew.Text = Language.strButtonNew;
this.btnNew.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnNew.UseVisualStyleBackColor = true;
//
//btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCancel.Location = new System.Drawing.Point(92, 74);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(69, 23);
this.btnCancel.TabIndex = 30;
this.btnCancel.Text = Language.strButtonCancel;
this.btnCancel.UseVisualStyleBackColor = true;
//
//frmChoosePanel
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF((float) (6.0F), (float) (13.0F));
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(245, 107);
this.Controls.Add(this.lblDescription);
this.Controls.Add(this.btnNew);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.cbPanels);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = Resources.Panels_Icon;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmChoosePanel";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = Language.strTitleSelectPanel;
this.ResumeLayout(false);
this.cbPanels = new System.Windows.Forms.ComboBox();
this.btnOK = new System.Windows.Forms.Button();
this.lblDescription = new System.Windows.Forms.Label();
this.btnNew = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// cbPanels
//
this.cbPanels.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbPanels.FormattingEnabled = true;
this.cbPanels.Location = new System.Drawing.Point(79, 42);
this.cbPanels.Name = "cbPanels";
this.cbPanels.Size = new System.Drawing.Size(157, 21);
this.cbPanels.TabIndex = 10;
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(92, 73);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(69, 23);
this.btnOK.TabIndex = 20;
this.btnOK.Text = global::mRemoteNG.Language.strButtonOK;
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// lblDescription
//
this.lblDescription.Location = new System.Drawing.Point(7, 8);
this.lblDescription.Name = "lblDescription";
this.lblDescription.Size = new System.Drawing.Size(229, 29);
this.lblDescription.TabIndex = 0;
this.lblDescription.Text = "Select a panel from the list below or click New to add a new one. Click OK to con" +
"tinue.";
//
// btnNew
//
this.btnNew.Image = global::mRemoteNG.Resources.Panel_Add;
this.btnNew.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnNew.Location = new System.Drawing.Point(10, 38);
this.btnNew.Name = "btnNew";
this.btnNew.Size = new System.Drawing.Size(60, 27);
this.btnNew.TabIndex = 40;
this.btnNew.Text = global::mRemoteNG.Language.strButtonNew;
this.btnNew.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnNew.UseVisualStyleBackColor = true;
this.btnNew.Click += new System.EventHandler(this.btnNew_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(167, 73);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(69, 23);
this.btnCancel.TabIndex = 30;
this.btnCancel.Text = global::mRemoteNG.Language.strButtonCancel;
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// frmChoosePanel
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(245, 107);
this.Controls.Add(this.lblDescription);
this.Controls.Add(this.btnNew);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.cbPanels);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = global::mRemoteNG.Resources.Panels_Icon;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmChoosePanel";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Select Panel";
this.Load += new System.EventHandler(this.frmChoosePanel_Load);
this.ResumeLayout(false);
}
internal System.Windows.Forms.ComboBox cbPanels;
internal System.Windows.Forms.Button btnOK;

View File

@@ -1,6 +1,6 @@
using Microsoft.VisualBasic;
using System.Windows.Forms;
using mRemoteNG.App;
using mRemoteNG.My;
using mRemoteNG.UI.Forms.Input;
namespace mRemoteNG
{
@@ -22,7 +22,7 @@ namespace mRemoteNG
}
}
public void frmChoosePanel_Load(System.Object sender, System.EventArgs e)
public void frmChoosePanel_Load(object sender, System.EventArgs e)
{
ApplyLanguage();
@@ -60,11 +60,11 @@ namespace mRemoteNG
}
}
public void btnNew_Click(System.Object sender, System.EventArgs e)
public void btnNew_Click(object sender, System.EventArgs e)
{
string pnlName = Interaction.InputBox(Language.strPanelName + ":", Language.strNewPanel, Language.strNewPanel);
string pnlName = Language.strNewPanel;
if (!string.IsNullOrEmpty(pnlName))
if (input.InputBox(Language.strNewPanel, Language.strPanelName + ":", ref pnlName) == DialogResult.OK && !string.IsNullOrEmpty(pnlName))
{
Runtime.AddPanel(pnlName);
AddAvailablePanels();
@@ -73,14 +73,14 @@ namespace mRemoteNG
}
}
public void btnOK_Click(System.Object sender, System.EventArgs e)
public void btnOK_Click(object sender, System.EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.OK;
DialogResult = DialogResult.OK;
}
public void btnCancel_Click(System.Object sender, System.EventArgs e)
public void btnCancel_Click(object sender, System.EventArgs e)
{
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
DialogResult = DialogResult.Cancel;
}
}
}

View File

@@ -112,9 +112,9 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -162,7 +162,7 @@ namespace mRemoteNG.UI.Forms
ApplySpecialSettingsForPortableVersion();
Startup.CreateConnectionsProvider();
Startup.Instance.CreateConnectionsProvider();
AddSysMenuItems();
Microsoft.Win32.SystemEvents.DisplaySettingsChanged += DisplayChanged;
Opacity = 1;
@@ -706,10 +706,11 @@ namespace mRemoteNG.UI.Forms
private void mMenViewResetLayout_Click(object sender, EventArgs e)
{
var msgBoxResult = MessageBox.Show(Language.strConfirmResetLayout, "", MessageBoxButtons.YesNo);
var msgBoxResult = MessageBox.Show(Language.strConfirmResetLayout, string.Empty, MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (msgBoxResult == DialogResult.Yes)
{
Startup.SetDefaultLayout();
Startup.Instance.SetDefaultLayout();
}
}

View File

@@ -25,6 +25,15 @@ namespace mRemoteNG.UI.Forms
SetImageListForListView();
AddOptionsPagesToListView();
SetInitiallyActivatedPage();
ApplyLanguage();
}
private void ApplyLanguage()
{
foreach (var optionPage in _pages.Values)
{
optionPage.ApplyLanguage();
}
}
private void CompileListOfOptionsPages()

View File

@@ -4,6 +4,7 @@ using WeifenLuo.WinFormsUI.Docking;
using System.IO;
using mRemoteNG.App;
using System.Threading;
using Gecko;
using mRemoteNG.App.Info;
using mRemoteNG.Connection.Protocol.RDP;
@@ -578,30 +579,31 @@ namespace mRemoteNG.UI.Window
bool GeckoBad = false;
if (Settings.Default.XULRunnerPath == "")
{
GeckoBad = true;
}
if (Directory.Exists(Convert.ToString(Settings.Default.XULRunnerPath)))
{
if (File.Exists(Path.Combine(Convert.ToString(Settings.Default.XULRunnerPath), "xpcom.dll")) == false)
{
GeckoBad = true;
}
}
else
{
GeckoBad = true;
}
if (GeckoBad == false)
var GeckoFxPath = Path.Combine(GeneralAppInfo.HomePath, "Firefox");
if(File.Exists(Path.Combine(GeneralAppInfo.HomePath, "Geckofx-Core.dll")))
{
if (Directory.Exists(GeckoFxPath))
{
if (!File.Exists(Path.Combine(GeckoFxPath, "xul.dll")))
{
GeckoBad = true;
}
}
else
{
GeckoBad = true;
}
}
if (GeckoBad == false)
{
pbCheck5.Image = Resources.Good_Symbol;
lblCheck5.ForeColor = Color.DarkOliveGreen;
lblCheck5.Text = "Gecko (Firefox) Rendering Engine (HTTP/S) " + Language.strCcCheckSucceeded;
txtCheck5.Text = Language.strCcGeckoOK;
if (!Xpcom.IsInitialized)
Xpcom.Initialize("Firefox");
txtCheck5.Text = Language.strCcGeckoOK + " Version: " + Xpcom.XulRunnerVersion;
}
else
{
@@ -611,7 +613,7 @@ namespace mRemoteNG.UI.Window
txtCheck5.Text = Language.strCcGeckoFailed;
Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Gecko " + errorMsg, true);
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "XULrunner was not found in " + Settings.Default.XULRunnerPath, true);
Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GeckoFx was not found in " + GeckoFxPath, true);
}
}

View File

@@ -1,4 +1,3 @@
using Azuria.Common.Controls;
using mRemoteNG.App;
using mRemoteNG.Connection;
using mRemoteNG.Connection.Protocol.RDP;
@@ -13,6 +12,7 @@ using System.Drawing;
using System.IO;
using System.Net.NetworkInformation;
using System.Windows.Forms;
using mRemoteNG.UI.Controls.FilteredPropertyGrid;
using WeifenLuo.WinFormsUI.Docking;

Some files were not shown because too many files have changed in this diff Show More