Compare commits

...

57 Commits

Author SHA1 Message Date
Riley McArdle
8ddb71758e Update CHANGELOG.TXT for 1.71 Beta 5. 2013-06-09 15:48:22 -05:00
Riley McArdle
54f19eaeb6 Fix typo in SQL queries. 2013-06-08 00:00:10 -05:00
Riley McArdle
960096273b Fix issue MR-499 - TS Gateway is not working in latest release 1.71 2013-06-07 23:30:07 -05:00
Riley McArdle
b360902bd9 Improve SetRdGateway(). 2013-06-03 15:40:52 -05:00
Riley McArdle
8006bb49ca Fix issue MR-491 - Could not start RDP Connection 2013-06-03 14:20:34 -05:00
Riley McArdle
ac65468233 Update CHANGELOG.TXT for release of 1.71 Beta 4. 2013-05-28 15:37:34 -05:00
Riley McArdle
8992cb29da Add nb-NO and pt-BR language DLLs to list to be signed in BUILD.CMD. 2013-05-28 15:31:13 -05:00
Riley McArdle
b5f5f43b4c Sign PuTTYNG.exe. 2013-05-28 15:20:38 -05:00
Riley McArdle
8a814d9016 Update VncSharpNG to 1.3.4896.25007. 2013-05-28 14:56:02 -05:00
Riley McArdle
4ff4a365e1 Fix issue MR-487 - Initiate connections on MouseUp event 2013-05-28 13:48:07 -05:00
Riley McArdle
905b6bb92a Update translations. Add Norwegian (Bokmål) and Portuguese (Brazil) translations. 2013-05-22 13:38:05 -05:00
Riley McArdle
88d06c8ef2 Add Spanish installer translation from Marlon Montoya Torres. 2013-05-22 12:55:36 -05:00
Riley McArdle
102987dac7 Fix list of files to sign with code signing certificate. 2013-05-22 12:53:39 -05:00
Riley McArdle
54cf76444e Update BUILD.CMD with new code signing certificate information. 2013-05-22 12:53:07 -05:00
Riley McArdle
f595c1d446 Fix issue MR-470 - Quick Connect to Linux server uses invalid credentials 2013-05-13 13:04:39 -05:00
Riley McArdle
9cf06c44e8 Improve loading time of large connection files. 2013-05-08 21:08:29 -05:00
Riley McArdle
5d63ec6d2a Fix issue MR-459 - Maximized -> Minimized -> Restored results in mangled active display
Fix issue MR-463 - Add support for LoadBalanceInfo to RDP
2013-05-08 19:17:51 -05:00
Riley McArdle
0544b61138 Code cleanup. 2013-05-08 17:52:52 -05:00
Riley McArdle
ceb6f70b4d Improve the PuTTY Saved Sessions list to update automatically when any changes are made. 2013-05-06 00:28:23 -05:00
Riley McArdle
f3075f4c51 Hide PuTTY sessions from PuTTY Saved Sessions if no host is set. Show "Default Settings" if host is set. Default to SSH2 if "Protocol" or "SshProt" are not set (matching behavior of PuTTY). 2013-05-05 19:55:52 -05:00
Riley McArdle
7b850892ae Improve changes made in commit 5737d78. Improve RDP components check and failure text. 2013-05-05 00:24:17 -05:00
Riley McArdle
6a3ca9c9de Fix issue MR-443 - Instructions for eolwtscom.dll registration for Portable version are inaccurate 2013-05-04 23:54:41 -05:00
Riley McArdle
d69d948963 Fix issue MR-446 - Putty saved sessions show in connection panel 2013-05-04 23:08:38 -05:00
Riley McArdle
aa6061d7b6 Fix issue MR-471 - PuTTY Saved Sessions disappears from connection list 2013-05-04 22:56:40 -05:00
Riley McArdle
ba667475bf Fix issue MR-440 - RDP import with non-standard port 2013-05-04 22:43:14 -05:00
Riley McArdle
5737d78f78 Fix issue MR-255 - The version of the RDP AX client should be updated to 7 2013-05-04 19:53:33 -05:00
Riley McArdle
079fe000bb Fix issue MR-439 - MRemoteNG 1.70 does not start 2013-05-02 18:21:17 -05:00
Riley McArdle
29865c69ab Sort language files. 2013-04-30 22:06:30 -05:00
Riley McArdle
f2e9cce248 Make "Sort Language Files.cmd" actually do something. 2013-04-30 22:06:08 -05:00
Riley McArdle
6a16656f03 Code cleanup. 2013-04-30 22:05:09 -05:00
Riley McArdle
7f4d3605c0 Added feature MR-435 - Add digital signature check to updater
Refactor update and announcement handling.
2013-04-30 22:04:07 -05:00
Riley McArdle
d97ad31cc3 Change PuTTY saved sessions to only send session name command line parameter. 2013-03-25 19:34:41 -05:00
Riley McArdle
a49ebf17bf Add PuTTY Session Settings command to the Config panel for PuTTY Saved Sessions.
Fix handling of the plus (+) character in PuTTY session names.
2013-03-25 19:29:20 -05:00
Riley McArdle
903a9dd5cc Start adding "Edit in PuTTY" command to property grid for PuTTY Saved Sessions. 2013-03-25 00:52:27 -05:00
Riley McArdle
5d8db1ade6 Change the "Launch PuTTY" button in the "Options" dialog to open PuTTY from the path the user has currently set, instead of what was previously saved. 2013-03-24 23:29:16 -05:00
Riley McArdle
423a89fdaa Change Internet Explorer to no longer force IE7 compatibility mode. 2013-03-23 19:21:11 -05:00
Riley McArdle
85d78fd4ae Remove unused BorderSize property from Connection.Protocol.PuttyBase. 2013-03-23 18:21:16 -05:00
Riley McArdle
725269e914 Fix issue MR-424 - Import of a few Linux SSH2 hosts discovered via the port scan tool results in a UE 2013-03-23 15:03:54 -05:00
Riley McArdle
9d3beaffbb Additional fix for MR-392. 2013-03-23 14:08:56 -05:00
Riley McArdle
7f36b7926b Fix issue MR-392 - Sessions Panel - context menu entries need to be context aware
Refactor UI.Window.Sessions.
2013-03-23 13:58:39 -05:00
Riley McArdle
f4bb268e27 Fix issue MR-422 - Gives error Object reference not set to an instance of an object. 2013-03-22 22:03:41 -05:00
Riley McArdle
e1329348d1 Remove intermediate debugging variables from Themes.ThemeSerializer.EncodeColorName(). 2013-03-20 22:26:10 -05:00
Riley McArdle
4f06a48d16 Fix an exception or crash when choosing unnamed colors for themes.
Fix possible error "Control does not support transparent background colors" when modifying themes.
Fix changes to the active theme not being saved reliably.
2013-03-20 22:20:58 -05:00
Riley McArdle
1dea64d2eb Improve SSH transfer error message. 2013-03-20 16:54:51 -05:00
Riley McArdle
375e737f02 Fix PuTTY saved sessions with spaces or special characters not being listed. 2013-03-20 16:25:51 -05:00
Riley McArdle
1032801f12 Fix the category names in the themes tab of the options dialog on Windows XP not showing correctly. 2013-03-20 16:09:32 -05:00
Riley McArdle
1002b8d32f Fix namespace problem in App.Runtime.vb. 2013-03-20 15:51:32 -05:00
Riley McArdle
36a72da71f Update CHANGELOG.TXT for 1.71 Beta 3 release. 2013-03-20 15:45:19 -05:00
Riley McArdle
a2b3a815e7 Fix issue MR-397 - Putty disappears from the screen
Fix issue MR-402 - scrollbar touch moves putty window
2013-03-20 15:36:30 -05:00
Riley McArdle
7820707e46 Fix issue MR-413 - Can't use aplication 2013-03-20 11:09:01 -05:00
Riley McArdle
c3f960cfe8 More small changes to fullscreen mode. 2013-03-20 00:17:06 -05:00
Riley McArdle
965f43a4c3 Fix issue MR-398 - Full Screen mode doesn't correctly make use of available space 2013-03-19 23:20:49 -05:00
Riley McArdle
317175bb03 Minor code cleanup. 2013-03-19 22:28:55 -05:00
Riley McArdle
1608d48495 Fix new connections having a globe icon. 2013-03-19 22:24:42 -05:00
Riley McArdle
08ddee1bda Fix issue MR-406 - Items disappear from External Tools toolbar when accessing External Tools panel 2013-03-19 22:22:49 -05:00
Riley McArdle
72756a2bb8 Fix issue MR-410 - Unhandled exception when clicking New button under Theme 2013-03-19 21:11:00 -05:00
Riley McArdle
38011a3546 Add missing line to CHANGELOG.TXT. 2013-03-19 13:15:18 -05:00
72 changed files with 6999 additions and 2431 deletions

View File

@@ -2,13 +2,13 @@
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
set VERSIONTAG= set VERSIONTAG=Beta4
set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
set DEVENV="devenv.exe" set DEVENV="devenv.exe"
set MAKENSIS="%ProgramFiles(x86)%\NSIS\Unicode\makensis.exe" set MAKENSIS="%ProgramFiles(x86)%\NSIS\Unicode\makensis.exe"
set RAR="%ProgramFiles%\WinRAR\WinRAR.exe" set RAR="%ProgramFiles%\WinRAR\WinRAR.exe"
set SIGNCMD=signtool.exe sign /n "Next Generation Software" /sha1 "c4ece717747eb7d0cac824f6c7431e5237138b02" /t http://timestamp.verisign.com/scripts/timstamp.dll set SIGNCMD=signtool.exe sign /n "Astrospark Technologies, LLC" /sha1 "1cbd910dbd6e77f26506e7f600736972f700673f" /tr http://timestamp.comodoca.com/rfc3161
rem Windows Sysinternals Sigcheck from http://technet.microsoft.com/en-us/sysinternals/bb897441 rem Windows Sysinternals Sigcheck from http://technet.microsoft.com/en-us/sysinternals/bb897441
set SIGCHECK="%ProgramFiles(x86)%\Sigcheck\sigcheck.exe" set SIGCHECK="%ProgramFiles(x86)%\Sigcheck\sigcheck.exe"
@@ -25,7 +25,49 @@ echo Building portable version...
%DEVENV% "%~dp0\mRemoteV1.sln" /build "Release Portable" %DEVENV% "%~dp0\mRemoteV1.sln" /build "Release Portable"
echo Signing binaries... echo Signing binaries...
%SIGNCMD% "%~dp0\mRemoteV1\bin\Release\de\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\en-US\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\fr\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\AxInterop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release\AxInterop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.ShDocVw.dll" "%~dp0\mRemoteV1\bin\Release\Interop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release\mRemoteNG.exe" "%~dp0\mRemoteV1\bin\Release Portable\de\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\en-US\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\fr\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\AxInterop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release Portable\AxInterop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.ShDocVw.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe" %SIGNCMD% ^
"%~dp0\mRemoteV1\bin\Release\de\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\en-US\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\es\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\es-AR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\fr\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\it\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\nb-NO\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\nl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pt\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pt-BR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\ru\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\uk\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\zh-CN\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\AxInterop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release\AxInterop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.ShDocVw.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release\mRemoteNG.exe" ^
"%~dp0\mRemoteV1\bin\Release Portable\de\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\en-US\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\es\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\es-AR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\fr\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\it\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\nb-NO\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\nl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pt\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pt-BR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\ru\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\uk\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\zh-CN\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.ShDocVw.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe" ^
mkdir "%~dp0\Release" > nul 2>&1 mkdir "%~dp0\Release" > nul 2>&1

View File

@@ -1,4 +1,52 @@
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
Fixed issue MR-392 - Sessions Panel - context menu entries need to be context aware
Fixed issue MR-422 - Gives error Object reference not set to an instance of an object.
Fixed issue MR-424 - Import of a few Linux SSH2 hosts discovered via the port scan tool results in a UE
Fixed issue MR-439 - MRemoteNG 1.70 does not start
Fixed issue MR-440 - RDP import with non-standard port
Fixed issue MR-443 - Instructions for eolwtscom.dll registration for Portable version are inaccurate
Fixed issue MR-446 - Putty saved sessions show in connection panel
Fixed issue MR-459 - Maximized -> Minimized -> Restored results in mangled active display
Fixed issue MR-463 - Add support for LoadBalanceInfo to RDP
Fixed issue MR-470 - Quick Connect to Linux server uses invalid credentials
Fixed issue MR-471 - PuTTY Saved Sessions disappears from connection list
Fixed issue MR-487 - Initiate connections on MouseUp event
Added PuTTY Session Settings command to the Config panel for PuTTY Saved Sessions.
Updated translations.
Added Norwegian (Bokmål) and Portuguese (Brazil) translations.
Added Spanish translation to the installer.
Fixed an exception or crash when choosing unnamed colors for themes.
Fixed possible error "Control does not support transparent background colors" when modifying themes.
Fixed changes to the active theme not being saved reliably.
Fixed handling of the plus (+) character in PuTTY session names.
Changed Internet Explorer to no longer force IE7 compatibility mode.
Changed the "Launch PuTTY" button in the "Options" dialog to open PuTTY from the path the user has currently set, instead of what was previously saved.
Improved update and announcement checking.
Improved the PuTTY Saved Sessions list to update automatically when any changes are made.
Improved loading time of large connection files.
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
Fixed issue MR-402 - scrollbar touch moves putty window
Fixed issue MR-406 - Items disappear from External Tools toolbar when accessing External Tools panel
Fixed issue MR-410 - Unhandled exception when clicking New button under Theme
Fixed issue MR-413 - Can't use aplication
Fixed new connections having a globe icon.
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): 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 Added feature MR-345 - Two separate options for confirming closure of Tabs and Connection Panels
Added feature MR-346 - Option to show/hide the description box at the bottom of the Config panel Added feature MR-346 - Option to show/hide the description box at the bottom of the Config panel
Added feature MR-351 - Import connections from PuTTY Added feature MR-351 - Import connections from PuTTY

Binary file not shown.

View File

@@ -1,22 +1,22 @@
; Spanish installer translation ; Spanish installer translation
; Start mRemoteNG after installation ; Start mRemoteNG after installation
LangString LaunchMremoteNow ${LANG_SPANISH} "mRemoteNG run SPANISH message" LangString LaunchMremoteNow ${LANG_SPANISH} "Iniciando de mRemoteNG"
; Installer Language ; Installer Language
LangString InstallerLanguage ${LANG_SPANISH} "Installer Language" LangString InstallerLanguage ${LANG_SPANISH} "Lenguaje de Instalación"
; Select installer Language ; Select installer Language
LangString SelectInstallerLanguage ${LANG_SPANISH} "Please select the language of the installer" LangString SelectInstallerLanguage ${LANG_SPANISH} "Seleccione el lenguaje de instalación"
; Requires .NET Framework ; Requires .NET Framework
LangString RequiresNetFramework ${LANG_SPANISH} "mRemoteNG requires Microsoft .NET Framework 3.0." LangString RequiresNetFramework ${LANG_SPANISH} "mRemoteNG requiere Microsoft .NET Framework 3.0."
; User needs to be Admin ; User needs to be Admin
LangString RequiresAdminUser ${LANG_SPANISH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG." LangString RequiresAdminUser ${LANG_SPANISH} "Debe ser miembro del grupo 'Administradores' para poder instalar mRemoteNG."
; Start Menu items ; Start Menu items
LangString CreditsLinkName ${LANG_SPANISH} "Credits" LangString CreditsLinkName ${LANG_SPANISH} "Créditos"
LangString CopyingLinkName ${LANG_SPANISH} "License" LangString CopyingLinkName ${LANG_SPANISH} "Licencia"
LangString UninstallLinkName ${LANG_SPANISH} "Uninstall" LangString UninstallLinkName ${LANG_SPANISH} "Desinstalar"
LangString ChangeLogLinkName ${LANG_SPANISH} "Version History" LangString ChangeLogLinkName ${LANG_SPANISH} "Historial de Versiones"

View File

@@ -16,7 +16,7 @@ mkdir %TEMP_FOLDER%
copy "%~dp0\mRemoteV1\Language\*.resx" %TEMP_FOLDER% copy "%~dp0\mRemoteV1\Language\*.resx" %TEMP_FOLDER%
pushd %TEMP_FOLDER% pushd %TEMP_FOLDER%
for %%f in (*) do echo %SORTRESX% %TEMP_FOLDER%\%%f "%~dp0\mRemoteV1\Language\%%f" for %%f in (*) do %SORTRESX% %TEMP_FOLDER%\%%f "%~dp0\mRemoteV1\Language\%%f"
popd popd
rmdir /s /q %TEMP_FOLDER% rmdir /s /q %TEMP_FOLDER%

View File

@@ -29,12 +29,15 @@ mkdir %TEMP_FOLDER%
%SORTRESX% %TEMP_FOLDER%\ar\Language.ar.resx "%~dp0\mRemoteV1\Language\Language.ar.resx" %SORTRESX% %TEMP_FOLDER%\ar\Language.ar.resx "%~dp0\mRemoteV1\Language\Language.ar.resx"
%SORTRESX% %TEMP_FOLDER%\de\Language.de.resx "%~dp0\mRemoteV1\Language\Language.de.resx" %SORTRESX% %TEMP_FOLDER%\de\Language.de.resx "%~dp0\mRemoteV1\Language\Language.de.resx"
%SORTRESX% %TEMP_FOLDER%\el\Language.el.resx "%~dp0\mRemoteV1\Language\Language.el.resx"
%SORTRESX% %TEMP_FOLDER%\en-US\Language.en.resx "%~dp0\mRemoteV1\Language\Language.en-US.resx" %SORTRESX% %TEMP_FOLDER%\en-US\Language.en.resx "%~dp0\mRemoteV1\Language\Language.en-US.resx"
%SORTRESX% %TEMP_FOLDER%\es-AR\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es-AR.resx" %SORTRESX% %TEMP_FOLDER%\es-AR\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es-AR.resx"
%SORTRESX% %TEMP_FOLDER%\es-ES\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es.resx" %SORTRESX% %TEMP_FOLDER%\es-ES\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es.resx"
%SORTRESX% %TEMP_FOLDER%\fr\Language.fr.resx "%~dp0\mRemoteV1\Language\Language.fr.resx" %SORTRESX% %TEMP_FOLDER%\fr\Language.fr.resx "%~dp0\mRemoteV1\Language\Language.fr.resx"
%SORTRESX% %TEMP_FOLDER%\he\Language.he.resx "%~dp0\mRemoteV1\Language\Language.he.resx"
%SORTRESX% %TEMP_FOLDER%\hu\Language.hu.resx "%~dp0\mRemoteV1\Language\Language.hu.resx" %SORTRESX% %TEMP_FOLDER%\hu\Language.hu.resx "%~dp0\mRemoteV1\Language\Language.hu.resx"
%SORTRESX% %TEMP_FOLDER%\it\Language.it.resx "%~dp0\mRemoteV1\Language\Language.it.resx" %SORTRESX% %TEMP_FOLDER%\it\Language.it.resx "%~dp0\mRemoteV1\Language\Language.it.resx"
%SORTRESX% %TEMP_FOLDER%\nb\Language.nb.resx "%~dp0\mRemoteV1\Language\Language.nb-NO.resx"
%SORTRESX% %TEMP_FOLDER%\nl\Language.nl.resx "%~dp0\mRemoteV1\Language\Language.nl.resx" %SORTRESX% %TEMP_FOLDER%\nl\Language.nl.resx "%~dp0\mRemoteV1\Language\Language.nl.resx"
%SORTRESX% %TEMP_FOLDER%\pl\Language.pl.resx "%~dp0\mRemoteV1\Language\Language.pl.resx" %SORTRESX% %TEMP_FOLDER%\pl\Language.pl.resx "%~dp0\mRemoteV1\Language\Language.pl.resx"
%SORTRESX% %TEMP_FOLDER%\pt-BR\Language.pt.resx "%~dp0\mRemoteV1\Language\Language.pt-BR.resx" %SORTRESX% %TEMP_FOLDER%\pt-BR\Language.pt.resx "%~dp0\mRemoteV1\Language\Language.pt-BR.resx"

View File

@@ -1,181 +0,0 @@
Imports System.Net
Imports mRemoteNG.App.Runtime
Namespace App
Public Class Announcement
Implements IDisposable
#Region "Private Variables"
Private webClient As WebClient
Private webProxy As WebProxy
#End Region
#Region "Public Properties"
Private _currentAnnouncementInfo As Info
Public ReadOnly Property CurrentAnnouncementInfo() As Info
Get
Return _currentAnnouncementInfo
End Get
End Property
#End Region
#Region "Public Methods"
Public Function IsAnnouncementAvailable() As Boolean
Try
Dim aI As Info = GetAnnouncementInfo()
If aI.InfoOk = False Then
Return False
End If
If aI.Name <> My.Settings.LastAnnouncement Then
Return True
Else
Return False
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "IsAnnouncementAvailable failed" & vbNewLine & ex.Message, True)
Return False
End Try
End Function
Public Function GetAnnouncementInfo() As Info
Try
Dim strAnnouncement As String = GetAnnouncementFile()
CreateWebClient()
Dim aI As New Info()
If strAnnouncement <> "" Then
aI.InfoOk = True
Try
'get Name
Dim strName As String = strAnnouncement.Substring(strAnnouncement.IndexOf("Name: ") + 6, strAnnouncement.IndexOf(vbNewLine) - 6)
aI.Name = strName
strAnnouncement = strAnnouncement.Remove(0, strAnnouncement.IndexOf(vbNewLine) + 2)
'get Download URL
Dim strU As String = ""
strU = strAnnouncement.Substring(strAnnouncement.IndexOf("URL: ") + 5, strAnnouncement.IndexOf(vbNewLine) - 5)
aI.Url = strU
Catch ex As Exception
aI.InfoOk = False
End Try
Else
aI.InfoOk = False
End If
_currentAnnouncementInfo = aI
Return aI
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Getting Announcement info failed" & vbNewLine & ex.Message, True)
Return Nothing
End Try
End Function
Private Function GetAnnouncementFile() As String
Try
CreateWebClient()
Dim strTemp As String
Try
strTemp = webClient.DownloadString(App.Info.General.URLAnnouncement)
Catch ex As Exception
strTemp = ""
End Try
Return strTemp
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "GetAnnouncementFile failed" & vbNewLine & ex.Message, True)
Return ""
End Try
End Function
Private Sub CreateWebClient()
webClient = New WebClient()
If My.Settings.UpdateUseProxy Then
webProxy = New WebProxy(My.Settings.UpdateProxyAddress, My.Settings.UpdateProxyPort)
If My.Settings.UpdateProxyUseAuthentication Then
Dim cred As ICredentials
cred = New NetworkCredential(My.Settings.UpdateProxyAuthUser, Security.Crypt.Decrypt(My.Settings.UpdateProxyAuthPass, App.Info.General.EncryptionKey))
webProxy.Credentials = cred
End If
webClient.Proxy = webProxy
End If
End Sub
#End Region
Public Class Info
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Private _url As String
Public Property Url() As String
Get
Return _url
End Get
Set(ByVal value As String)
_url = value
End Set
End Property
Private _InfoOk As Boolean
Public Property InfoOk() As Boolean
Get
Return _InfoOk
End Get
Set(ByVal value As Boolean)
_InfoOk = value
End Set
End Property
End Class
#Region "IDisposable Support"
Private disposedValue As Boolean ' To detect redundant calls
' IDisposable
Protected Overridable Sub Dispose(disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
If webClient IsNot Nothing Then webClient.Dispose()
End If
' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below.
' TODO: set large fields to null.
End If
Me.disposedValue = True
End Sub
' TODO: override Finalize() only if Dispose(ByVal disposing As Boolean) above has code to free unmanaged resources.
'Protected Overrides Sub Finalize()
' ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
' Dispose(False)
' MyBase.Finalize()
'End Sub
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class
End Namespace

View File

@@ -1,4 +1,5 @@
Imports System.Environment Imports System.Environment
Imports System.Threading
Namespace App Namespace App
Namespace Info Namespace Info
@@ -7,10 +8,27 @@ Namespace App
Public Shared ReadOnly URLDonate As String = "http://donate.mremoteng.org/" Public Shared ReadOnly URLDonate As String = "http://donate.mremoteng.org/"
Public Shared ReadOnly URLForum As String = "http://forum.mremoteng.org/" Public Shared ReadOnly URLForum As String = "http://forum.mremoteng.org/"
Public Shared ReadOnly URLBugs As String = "http://bugs.mremoteng.org/" Public Shared ReadOnly URLBugs As String = "http://bugs.mremoteng.org/"
Public Shared ReadOnly URLAnnouncement As String = "http://update.mremoteng.org/announcement.txt"
Public Shared ReadOnly HomePath As String = My.Application.Info.DirectoryPath Public Shared ReadOnly HomePath As String = My.Application.Info.DirectoryPath
Public Shared EncryptionKey As String = "mR3m" Public Shared EncryptionKey As String = "mR3m"
Public Shared ReportingFilePath As String = "" Public Shared ReportingFilePath As String = ""
Public Shared ReadOnly PuttyPath As String = My.Application.Info.DirectoryPath & "\PuTTYNG.exe"
Public Shared ReadOnly Property UserAgent As String
Get
Dim details As New List(Of String)
details.Add("compatible")
If OSVersion.Platform = PlatformID.Win32NT Then
details.Add(String.Format("Windows NT {0}.{1}", OSVersion.Version.Major, OSVersion.Version.Minor))
Else
details.Add(OSVersion.VersionString)
End If
If Tools.EnvironmentInfo.IsWow64 Then details.Add("WOW64")
details.Add(Thread.CurrentThread.CurrentUICulture.Name)
details.Add(String.Format(".NET CLR {0}", Version.ToString()))
Dim detailsString As String = String.Join("; ", details.ToArray())
Return String.Format("Mozilla/4.0 ({0}) {1}/{2}", detailsString, Application.ProductName, Application.ProductVersion)
End Get
End Property
End Class End Class
Public Class Settings Public Class Settings
@@ -25,8 +43,7 @@ Namespace App
End Class End Class
Public Class Update Public Class Update
Public Shared ReadOnly URL As String = "http://update.mremoteng.org/" Public Shared ReadOnly Property FileName As String
Public Shared ReadOnly Property File As String
Get Get
Select Case My.Settings.UpdateChannel.ToLowerInvariant() Select Case My.Settings.UpdateChannel.ToLowerInvariant()
Case "beta" Case "beta"
@@ -44,7 +61,7 @@ Namespace App
Public Shared ReadOnly DefaultConnectionsPath As String = App.Info.Settings.SettingsPath Public Shared ReadOnly DefaultConnectionsPath As String = App.Info.Settings.SettingsPath
Public Shared ReadOnly DefaultConnectionsFile As String = "confCons.xml" Public Shared ReadOnly DefaultConnectionsFile As String = "confCons.xml"
Public Shared ReadOnly DefaultConnectionsFileNew As String = "confConsNew.xml" Public Shared ReadOnly DefaultConnectionsFileNew As String = "confConsNew.xml"
Public Shared ReadOnly ConnectionFileVersion As Double = 2.4 Public Shared ReadOnly ConnectionFileVersion As Double = 2.5
End Class End Class
Public Class Credentials Public Class Credentials

View File

@@ -1,7 +1,9 @@
Imports log4net Imports System.ComponentModel
Imports log4net
Imports mRemoteNG.Messages Imports mRemoteNG.Messages
Imports mRemoteNG.Connection Imports mRemoteNG.Connection
Imports mRemoteNG.Tools Imports mRemoteNG.Tools
Imports PSTaskDialog
Imports WeifenLuo.WinFormsUI.Docking Imports WeifenLuo.WinFormsUI.Docking
Imports System.IO Imports System.IO
Imports Crownwood Imports Crownwood
@@ -19,6 +21,8 @@ Namespace App
End Sub End Sub
#Region "Public Properties" #Region "Public Properties"
Public Shared Property MainForm As frmMain
Private Shared _connectionList As Connection.List Private Shared _connectionList As Connection.List
Public Shared Property ConnectionList() As List Public Shared Property ConnectionList() As List
Get Get
@@ -130,26 +134,6 @@ Namespace App
End Set End Set
End Property End Property
Private Shared _isUpdateAvailable As Boolean
Public Shared Property IsUpdateAvailable() As Boolean
Get
Return _isUpdateAvailable
End Get
Set(ByVal value As Boolean)
_isUpdateAvailable = value
End Set
End Property
Private Shared _isAnnouncementAvailable As Boolean
Public Shared Property IsAnnouncementAvailable() As Boolean
Get
Return _isAnnouncementAvailable
End Get
Set(ByVal value As Boolean)
_isAnnouncementAvailable = value
End Set
End Property
Private Shared _isConnectionsFileLoaded As Boolean Private Shared _isConnectionsFileLoaded As Boolean
Public Shared Property IsConnectionsFileLoaded() As Boolean Public Shared Property IsConnectionsFileLoaded() As Boolean
Get Get
@@ -377,6 +361,11 @@ Namespace App
Public Class Startup Public Class Startup
Public Shared Sub CheckCompatibility() Public Shared Sub CheckCompatibility()
CheckFipsPolicy()
CheckLenovoAutoScrollUtility()
End Sub
Private Shared Sub CheckFipsPolicy()
Dim regKey As RegistryKey Dim regKey As RegistryKey
Dim isFipsPolicyEnabled As Boolean = False Dim isFipsPolicyEnabled As Boolean = False
@@ -399,6 +388,22 @@ Namespace App
End If End If
End Sub End Sub
Private Shared Sub CheckLenovoAutoScrollUtility()
If Not My.Settings.CompatibilityWarnLenovoAutoScrollUtility Then Return
Dim proccesses() As Process = {}
Try
proccesses = Process.GetProcessesByName("virtscrl")
Catch
End Try
If proccesses.Length = 0 Then Return
cTaskDialog.MessageBox(Application.ProductName, My.Language.strCompatibilityProblemDetected, String.Format(My.Language.strCompatibilityLenovoAutoScrollUtilityDetected, System.Windows.Forms.Application.ProductName), "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.OK, eSysIcons.Warning, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.CompatibilityWarnLenovoAutoScrollUtility = False
End If
End Sub
Public Shared Sub CreatePanels() Public Shared Sub CreatePanels()
Windows.configForm = New UI.Window.Config(Windows.configPanel) Windows.configForm = New UI.Window.Config(Windows.configPanel)
Windows.configPanel = Windows.configForm Windows.configPanel = Windows.configForm
@@ -516,35 +521,66 @@ Namespace App
End If End If
End Sub End Sub
Public Shared Sub UpdateCheck() Private Shared _appUpdate As Update
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then Public Shared Sub CheckForUpdate()
If My.Settings.UpdatePending Or My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then If _appUpdate Is Nothing Then
frmMain.tmrShowUpdate.Enabled = True _appUpdate = New Update
Windows.updateForm.CheckForUpdate() ElseIf _appUpdate.IsGetUpdateInfoRunning Then
AddHandler Windows.updateForm.UpdateCheckCompleted, AddressOf UpdateCheckComplete Return
End If
End If End If
Dim nextUpdateCheck As Date = My.Settings.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays))
If Not My.Settings.UpdatePending And Date.UtcNow < nextUpdateCheck Then Return
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
_appUpdate.GetUpdateInfoAsync()
End Sub End Sub
Private Shared Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean) Private Shared Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
My.Settings.CheckForUpdatesLastCheck = Date.Now If MainForm.InvokeRequired Then
My.Settings.UpdatePending = UpdateAvailable MainForm.Invoke(New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted), New Object() {sender, e})
IsUpdateAvailable = UpdateAvailable Return
End Sub
Public Shared Sub AnnouncementCheck()
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
If My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
frmMain.tmrShowUpdate.Enabled = True
Windows.AnnouncementForm.CheckForAnnouncement()
AddHandler Windows.AnnouncementForm.AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
End If
End If End If
Try
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
If _appUpdate.IsUpdateAvailable() Then Windows.Show(UI.Window.Type.Update)
Catch ex As Exception
MessageCollector.AddExceptionMessage("GetUpdateInfoCompleted() failed.", ex, MessageClass.ErrorMsg, True)
End Try
End Sub End Sub
Private Shared Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean) Public Shared Sub CheckForAnnouncement()
My.Settings.CheckForUpdatesLastCheck = Date.Now If _appUpdate Is Nothing Then
IsAnnouncementAvailable = AnnouncementAvailable _appUpdate = New Update
ElseIf _appUpdate.IsGetAnnouncementInfoRunning Then
Return
End If
AddHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
_appUpdate.GetAnnouncementInfoAsync()
End Sub
Private Shared Sub GetAnnouncementInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If MainForm.InvokeRequired Then
MainForm.Invoke(New AsyncCompletedEventHandler(AddressOf GetAnnouncementInfoCompleted), New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
If _appUpdate.IsAnnouncementAvailable() Then Windows.Show(UI.Window.Type.Announcement)
Catch ex As Exception
MessageCollector.AddExceptionMessage("GetAnnouncementInfoCompleted() failed.", ex, MessageClass.ErrorMsg, True)
End Try
End Sub End Sub
Public Shared Sub ParseCommandLineArgs() Public Shared Sub ParseCommandLineArgs()
@@ -678,6 +714,8 @@ Namespace App
Dim SettingsSave As New Config.Settings.Save() Dim SettingsSave As New Config.Settings.Save()
SettingsSave.Save() SettingsSave.Save()
IeBrowserEmulation.Unregister()
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
End Try End Try
@@ -704,10 +742,12 @@ Namespace App
My.Settings.ConDefaultPuttySession = .PuttySession My.Settings.ConDefaultPuttySession = .PuttySession
My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString
My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString
My.Settings.ConDefaultLoadBalanceInfo = .LoadBalanceInfo
My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession
My.Settings.ConDefaultUseCredSsp = .UseCredSsp My.Settings.ConDefaultUseCredSsp = .UseCredSsp
My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString
My.Settings.ConDefaultResolution = .Resolution.ToString My.Settings.ConDefaultResolution = .Resolution.ToString
My.Settings.ConDefaultAutomaticResize = .AutomaticResize
My.Settings.ConDefaultColors = .Colors.ToString My.Settings.ConDefaultColors = .Colors.ToString
My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps
My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper
@@ -770,7 +810,9 @@ Namespace App
My.Settings.InhDefaultRenderingEngine = .RenderingEngine My.Settings.InhDefaultRenderingEngine = .RenderingEngine
My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption
My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel
My.Settings.InhDefaultLoadBalanceInfo = .LoadBalanceInfo
My.Settings.InhDefaultResolution = .Resolution My.Settings.InhDefaultResolution = .Resolution
My.Settings.InhDefaultAutomaticResize = .AutomaticResize
My.Settings.InhDefaultColors = .Colors My.Settings.InhDefaultColors = .Colors
My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps
My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper
@@ -932,7 +974,7 @@ Namespace App
xW.WriteAttributeString("Name", My.Language.strConnections) xW.WriteAttributeString("Name", My.Language.strConnections)
xW.WriteAttributeString("Export", "", "False") xW.WriteAttributeString("Export", "", "False")
xW.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY") xW.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
xW.WriteAttributeString("ConfVersion", "", "2.4") xW.WriteAttributeString("ConfVersion", "", "2.5")
xW.WriteEndElement() xW.WriteEndElement()
xW.WriteEndDocument() xW.WriteEndDocument()
@@ -941,7 +983,6 @@ Namespace App
conL.ConnectionList = ConnectionList conL.ConnectionList = ConnectionList
conL.ContainerList = ContainerList conL.ContainerList = ContainerList
conL.Import = False
Tree.Node.ResetTree() Tree.Node.ResetTree()
@@ -949,7 +990,7 @@ Namespace App
' Load config ' Load config
conL.ConnectionFileName = filename conL.ConnectionFileName = filename
conL.Load() conL.Load(False)
Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode
Catch ex As Exception Catch ex As Exception
@@ -1032,8 +1073,6 @@ Namespace App
conL.PreviousSelected = LastSelected conL.PreviousSelected = LastSelected
End If End If
conL.Import = False
Tree.Node.ResetTree() Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0) conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
@@ -1045,7 +1084,7 @@ Namespace App
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey) conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
conL.SQLUpdate = Update conL.SQLUpdate = Update
conL.Load() conL.Load(False)
If My.Settings.UseSQLServer = True Then If My.Settings.UseSQLServer = True Then
LastSqlUpdate = Now LastSqlUpdate = Now
@@ -1062,14 +1101,31 @@ Namespace App
TimerSqlWatcher.Start() TimerSqlWatcher.Start()
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoaded & vbNewLine & ex.Message & ex.StackTrace, conL.ConnectionFileName)) If My.Settings.UseSQLServer Then
If My.Settings.UseSQLServer = False Then MessageCollector.AddExceptionMessage(My.Language.strLoadFromSqlFailed, ex)
Dim commandButtons As String = String.Join("|", {My.Language.strCommandTryAgain, My.Language.strCommandOpenConnectionFile, String.Format(My.Language.strCommandExitProgram, Application.ProductName)})
cTaskDialog.ShowCommandBox(Application.ProductName, My.Language.strLoadFromSqlFailed, My.Language.strLoadFromSqlFailedContent, Misc.GetExceptionMessageRecursive(ex), "", "", commandButtons, False, eSysIcons.Error, Nothing)
Select Case cTaskDialog.CommandButtonResult
Case 0
LoadConnections(WithDialog, Update)
Return
Case 1
My.Settings.UseSQLServer = False
LoadConnections(True, Update)
Return
Case Else
Application.Exit()
Return
End Select
Else
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, conL.ConnectionFileName), ex)
If Not conL.ConnectionFileName = GetStartupConnectionFileName() Then If Not conL.ConnectionFileName = GetStartupConnectionFileName() Then
LoadConnections() LoadConnections(WithDialog, Update)
Exit Sub Return
Else Else
MsgBox(String.Format(My.Language.strErrorStartupConnectionFileLoad, vbNewLine, Application.ProductName, GetStartupConnectionFileName(), ex.Message), MsgBoxStyle.OkOnly + MsgBoxStyle.Critical) MsgBox(String.Format(My.Language.strErrorStartupConnectionFileLoad, vbNewLine, Application.ProductName, GetStartupConnectionFileName(), Misc.GetExceptionMessageRecursive(ex)), MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
Application.Exit() Application.Exit()
Return
End If End If
End If End If
End Try End Try
@@ -1157,11 +1213,10 @@ Namespace App
Dim conL As New Config.Connections.Load Dim conL As New Config.Connections.Load
conL.ConnectionFileName = lD.FileNames(i) conL.ConnectionFileName = lD.FileNames(i)
conL.RootTreeNode = nNode conL.RootTreeNode = nNode
conL.Import = True
conL.ConnectionList = App.Runtime.ConnectionList conL.ConnectionList = App.Runtime.ConnectionList
conL.ContainerList = App.Runtime.ContainerList conL.ContainerList = App.Runtime.ContainerList
conL.Load() conL.Load(True)
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode) Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
Next Next
@@ -1171,136 +1226,139 @@ Namespace App
End Try End Try
End Sub End Sub
Public Shared Sub ImportConnectionsFromRDPFiles() Public Shared Sub ImportConnectionsRdpFile()
Try Try
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsRDPImportDialog Dim openFileDialog As OpenFileDialog = Controls.ImportConnectionsRdpFileDialog
lD.Multiselect = True If Not openFileDialog.ShowDialog = DialogResult.OK Then Return
If lD.ShowDialog = DialogResult.OK Then For Each fileName As String In openFileDialog.FileNames
For i As Integer = 0 To lD.FileNames.Length - 1 Dim lines As String() = File.ReadAllLines(fileName)
Dim lines As String() = File.ReadAllLines(lD.FileNames(i))
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(lD.FileNames(i))) Dim treeNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(fileName))
Dim nConI As New mRemoteNG.Connection.Info() Dim connectionInfo As New Connection.Info()
nConI.Inherit = New Connection.Info.Inheritance(nConI) connectionInfo.Inherit = New Connection.Info.Inheritance(connectionInfo)
nConI.Name = nNode.Text connectionInfo.Name = treeNode.Text
For Each l As String In lines For Each line As String In lines
Dim pName As String = l.Substring(0, l.IndexOf(":")) Dim parts() As String = line.Split(New Char() {":"}, 3)
Dim pValue As String = l.Substring(l.LastIndexOf(":") + 1) If parts.Length < 3 Then Continue For
Select Case LCase(pName) Dim key As String = parts(0)
Case "full address" Dim value As String = parts(2)
nConI.Hostname = pValue
Case "server port"
nConI.Port = pValue
Case "username"
nConI.Username = pValue
Case "domain"
nConI.Domain = pValue
Case "session bpp"
Select Case pValue
Case 8
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors256
Case 15
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors15Bit
Case 16
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors16Bit
Case 24
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors24Bit
Case 32
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors32Bit
End Select
Case "bitmapcachepersistenable"
If pValue = 1 Then
nConI.CacheBitmaps = True
Else
nConI.CacheBitmaps = False
End If
Case "screen mode id"
If pValue = 2 Then
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.Fullscreen
Else
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.FitToWindow
End If
Case "connect to console"
If pValue = 1 Then
nConI.UseConsoleSession = True
End If
Case "disable wallpaper"
If pValue = 1 Then
nConI.DisplayWallpaper = True
Else
nConI.DisplayWallpaper = False
End If
Case "disable themes"
If pValue = 1 Then
nConI.DisplayThemes = True
Else
nConI.DisplayThemes = False
End If
Case "allow font smoothing"
If pValue = 1 Then
nConI.EnableFontSmoothing = True
Else
nConI.EnableFontSmoothing = False
End If
Case "allow desktop composition"
If pValue = 1 Then
nConI.EnableDesktopComposition = True
Else
nConI.EnableDesktopComposition = False
End If
Case "redirectsmartcards"
If pValue = 1 Then
nConI.RedirectSmartCards = True
Else
nConI.RedirectSmartCards = False
End If
Case "redirectdrives"
If pValue = 1 Then
nConI.RedirectDiskDrives = True
Else
nConI.RedirectDiskDrives = False
End If
Case "redirectcomports"
If pValue = 1 Then
nConI.RedirectPorts = True
Else
nConI.RedirectPorts = False
End If
Case "redirectprinters"
If pValue = 1 Then
nConI.RedirectPrinters = True
Else
nConI.RedirectPrinters = False
End If
Case "audiomode"
Select Case pValue
Case 0
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.BringToThisComputer
Case 1
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
Case 2
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.DoNotPlay
End Select
End Select
Next
nNode.Tag = nConI Select Case LCase(key)
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode) Case "full address"
Dim uri As New Uri("dummyscheme" + uri.SchemeDelimiter + value)
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then If Not String.IsNullOrEmpty(uri.Host) Then connectionInfo.Hostname = uri.Host
nConI.Parent = nNode.Parent.Tag If Not uri.Port = -1 Then connectionInfo.Port = uri.Port
End If Case "server port"
connectionInfo.Port = value
ConnectionList.Add(nConI) Case "username"
connectionInfo.Username = value
Case "domain"
connectionInfo.Domain = value
Case "session bpp"
Select Case value
Case 8
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors256
Case 15
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors15Bit
Case 16
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors16Bit
Case 24
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors24Bit
Case 32
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors32Bit
End Select
Case "bitmapcachepersistenable"
If value = 1 Then
connectionInfo.CacheBitmaps = True
Else
connectionInfo.CacheBitmaps = False
End If
Case "screen mode id"
If value = 2 Then
connectionInfo.Resolution = Protocol.RDP.RDPResolutions.Fullscreen
Else
connectionInfo.Resolution = Protocol.RDP.RDPResolutions.FitToWindow
End If
Case "connect to console"
If value = 1 Then
connectionInfo.UseConsoleSession = True
End If
Case "disable wallpaper"
If value = 1 Then
connectionInfo.DisplayWallpaper = True
Else
connectionInfo.DisplayWallpaper = False
End If
Case "disable themes"
If value = 1 Then
connectionInfo.DisplayThemes = True
Else
connectionInfo.DisplayThemes = False
End If
Case "allow font smoothing"
If value = 1 Then
connectionInfo.EnableFontSmoothing = True
Else
connectionInfo.EnableFontSmoothing = False
End If
Case "allow desktop composition"
If value = 1 Then
connectionInfo.EnableDesktopComposition = True
Else
connectionInfo.EnableDesktopComposition = False
End If
Case "redirectsmartcards"
If value = 1 Then
connectionInfo.RedirectSmartCards = True
Else
connectionInfo.RedirectSmartCards = False
End If
Case "redirectdrives"
If value = 1 Then
connectionInfo.RedirectDiskDrives = True
Else
connectionInfo.RedirectDiskDrives = False
End If
Case "redirectcomports"
If value = 1 Then
connectionInfo.RedirectPorts = True
Else
connectionInfo.RedirectPorts = False
End If
Case "redirectprinters"
If value = 1 Then
connectionInfo.RedirectPrinters = True
Else
connectionInfo.RedirectPrinters = False
End If
Case "audiomode"
Select Case value
Case 0
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.BringToThisComputer
Case 1
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
Case 2
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.DoNotPlay
End Select
End Select
Next Next
End If
treeNode.Tag = connectionInfo
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(treeNode)
If Tree.Node.GetNodeType(treeNode.Parent) = Tree.Node.Type.Container Then
connectionInfo.Parent = treeNode.Parent.Tag
End If
ConnectionList.Add(connectionInfo)
Next
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFileCouldNotBeImported & vbNewLine & vbNewLine & ex.Message) MessageCollector.AddExceptionMessage(My.Language.strRdpFileCouldNotBeImported, ex)
End Try End Try
End Sub End Sub

View File

@@ -1,264 +1,431 @@
Imports System.IO Imports System.IO
Imports System.Net Imports System.Net
Imports mRemoteNG.App.Runtime Imports System.ComponentModel
Imports System.Threading
Imports mRemoteNG.Tools
Imports System.Reflection
Namespace App Namespace App
Public Class Update Public Class Update
Public Event DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) #Region "Events"
Public Event DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs, ByVal Success As Boolean) Public Event GetUpdateInfoCompletedEvent As AsyncCompletedEventHandler
Public Event GetChangeLogCompletedEvent As AsyncCompletedEventHandler
Public Event GetAnnouncementInfoCompletedEvent As AsyncCompletedEventHandler
Public Event DownloadUpdateProgressChangedEvent As DownloadProgressChangedEventHandler
Public Event DownloadUpdateCompletedEvent As AsyncCompletedEventHandler
#End Region
#Region "Public Properties" #Region "Public Properties"
Private _curUI As Info Private _currentUpdateInfo As UpdateInfo
Public ReadOnly Property curUI() As Info Public ReadOnly Property CurrentUpdateInfo() As UpdateInfo
Get Get
Return _curUI Return _currentUpdateInfo
End Get
End Property
Private _changeLog As String
Public ReadOnly Property ChangeLog() As String
Get
Return _changeLog
End Get
End Property
Private _currentAnnouncementInfo As AnnouncementInfo
Public ReadOnly Property CurrentAnnouncementInfo() As AnnouncementInfo
Get
Return _currentAnnouncementInfo
End Get
End Property
Public ReadOnly Property IsGetUpdateInfoRunning() As Boolean
Get
If _getUpdateInfoThread IsNot Nothing Then
If _getUpdateInfoThread.IsAlive Then Return True
End If
Return False
End Get
End Property
Public ReadOnly Property IsGetChangeLogRunning() As Boolean
Get
If _getChangeLogThread IsNot Nothing Then
If _getChangeLogThread.IsAlive Then Return True
End If
Return False
End Get
End Property
Public ReadOnly Property IsGetAnnouncementInfoRunning() As Boolean
Get
If _getAnnouncementInfoThread IsNot Nothing Then
If _getAnnouncementInfoThread.IsAlive Then Return True
End If
Return False
End Get
End Property
Public ReadOnly Property IsDownloadUpdateRunning() As Boolean
Get
Return (_downloadUpdateWebClient IsNot Nothing)
End Get End Get
End Property End Property
#End Region #End Region
#Region "Private Properties"
Private wCl As WebClient
Private wPr As WebProxy
#End Region
#Region "Public Methods" #Region "Public Methods"
Public Function IsProxyOK() As Boolean Public Sub New()
Try SetProxySettings()
Dim uI As Info = GetUpdateInfo() End Sub
Return uI.InfoOk Public Sub SetProxySettings()
Catch ex As Exception SetProxySettings(My.Settings.UpdateUseProxy, My.Settings.UpdateProxyAddress, My.Settings.UpdateProxyPort, My.Settings.UpdateProxyUseAuthentication, My.Settings.UpdateProxyAuthUser, Security.Crypt.Decrypt(My.Settings.UpdateProxyAuthPass, Info.General.EncryptionKey))
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "IsProxyOK (App.Update) failed" & vbNewLine & ex.Message, False) End Sub
Return False
End Try
End Function
Public Function IsUpdateAvailable() As Boolean Public Sub SetProxySettings(ByVal useProxy As Boolean, ByVal address As String, ByVal port As Integer, ByVal useAuthentication As Boolean, ByVal username As String, ByVal password As String)
Try If useProxy And Not String.IsNullOrEmpty(address) Then
Dim uI As Info = GetUpdateInfo() If Not port = 0 Then
_webProxy = New WebProxy(address, port)
If uI.InfoOk = False Then
Return False
End If
If uI.Version > My.Application.Info.Version Then
Return True
Else Else
Return False _webProxy = New WebProxy(address)
End If End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "IsUpdateAvailable failed" & vbNewLine & ex.Message, True)
Return False
End Try
End Function
Public Function GetUpdateInfo() As Info If useAuthentication Then
Try _webProxy.Credentials = New NetworkCredential(username, password)
Dim strUpdate As String = GetUpdateFile()
CreateWebClient()
Dim uI As New Info()
If strUpdate <> "" Then
uI.InfoOk = True
Try
'get Version
Dim strV As String = strUpdate.Substring(strUpdate.IndexOf("Version: ") + 9, strUpdate.IndexOf(vbNewLine) - 9)
uI.Version = New Version(strV)
strUpdate = strUpdate.Remove(0, strUpdate.IndexOf(vbNewLine) + 2)
'get Download URL
Dim strU As String = ""
strU = strUpdate.Substring(strUpdate.IndexOf("dURL: ") + 6, strUpdate.IndexOf(vbNewLine) - 6)
uI.DownloadUrl = strU
strUpdate = strUpdate.Remove(0, strUpdate.IndexOf(vbNewLine) + 2)
'get Change Log
Dim strClURL As String = strUpdate.Substring(strUpdate.IndexOf("clURL: ") + 7, strUpdate.IndexOf(vbNewLine) - 7)
Dim strCl As String = wCl.DownloadString(strClURL)
uI.ChangeLog = strCl
strUpdate = strUpdate.Remove(0, strUpdate.IndexOf(vbNewLine) + 2)
Try
'get Image
Dim strImgURL As String = strUpdate.Substring(strUpdate.IndexOf("imgURL: ") + 8, strUpdate.IndexOf(vbNewLine) - 8)
uI.ImageURL = strImgURL
strUpdate = strUpdate.Remove(0, strUpdate.IndexOf(vbNewLine) + 2)
'get Image Link
Dim strImgURLLink As String = strUpdate.Substring(strUpdate.IndexOf("imgURLLink: ") + 12, strUpdate.IndexOf(vbNewLine) - 12)
uI.ImageURLLink = strImgURLLink
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Update Image Info could not be read." & vbNewLine & ex.Message, True)
End Try
Catch ex As Exception
uI.InfoOk = False
End Try
Else Else
uI.InfoOk = False _webProxy.Credentials = Nothing
End If End If
Else
_curUI = uI _webProxy = Nothing
Return uI
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Getting update info failed" & vbNewLine & ex.Message, True)
Return Nothing
End Try
End Function
Public Function DownloadUpdate(ByVal dURL As String) As Boolean
Try
CreateWebClient()
AddHandler wCl.DownloadProgressChanged, AddressOf DLProgressChanged
AddHandler wCl.DownloadFileCompleted, AddressOf DLCompleted
_curUI.UpdateLocation = My.Computer.FileSystem.SpecialDirectories.Temp & "\mRemote_Update.exe"
wCl.DownloadFileAsync(New Uri(dURL), _curUI.UpdateLocation)
Return True
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Update download failed" & vbNewLine & ex.Message, True)
Return False
End Try
End Function
#End Region
#Region "Private Methods"
Private Sub CreateWebClient()
wCl = New WebClient()
If My.Settings.UpdateUseProxy Then
wPr = New WebProxy(My.Settings.UpdateProxyAddress, My.Settings.UpdateProxyPort)
If My.Settings.UpdateProxyUseAuthentication Then
Dim cred As ICredentials
cred = New NetworkCredential(My.Settings.UpdateProxyAuthUser, Security.Crypt.Decrypt(My.Settings.UpdateProxyAuthPass, App.Info.General.EncryptionKey))
wPr.Credentials = cred
End If
wCl.Proxy = wPr
End If End If
End Sub End Sub
Private Function GetUpdateFile() As String Public Function IsUpdateAvailable() As Boolean
Try If _currentUpdateInfo Is Nothing OrElse Not _currentUpdateInfo.IsValid Then Return False
CreateWebClient()
Dim strTemp As String Return _currentUpdateInfo.Version > My.Application.Info.Version
Try
strTemp = wCl.DownloadString(App.Info.Update.URL & App.Info.Update.File)
Catch ex As Exception
strTemp = ""
End Try
Return strTemp
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "GetUpdateFile failed" & vbNewLine & ex.Message, True)
Return ""
End Try
End Function End Function
Private Sub DLProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Public Function IsAnnouncementAvailable() As Boolean
RaiseEvent DownloadProgressChanged(sender, e) If _currentAnnouncementInfo Is Nothing OrElse _
(Not _currentAnnouncementInfo.IsValid Or _
String.IsNullOrEmpty(_currentAnnouncementInfo.Name)) Then Return False
Return (Not _currentAnnouncementInfo.Name = My.Settings.LastAnnouncement)
End Function
Public Sub GetUpdateInfoAsync()
If IsGetUpdateInfoRunning Then _getUpdateInfoThread.Abort()
_getUpdateInfoThread = New Thread(AddressOf GetUpdateInfo)
With _getUpdateInfoThread
.SetApartmentState(ApartmentState.STA)
.IsBackground = True
.Start()
End With
End Sub End Sub
Private Sub DLCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Public Sub GetChangeLogAsync()
Try If _currentUpdateInfo Is Nothing OrElse Not _currentUpdateInfo.IsValid Then
Dim fInfo As New FileInfo(_curUI.UpdateLocation) Throw New InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling GetChangeLogAsync().")
End If
If fInfo.Length > 0 Then If IsGetChangeLogRunning Then _getChangeLogThread.Abort()
RaiseEvent DownloadCompleted(sender, e, True)
Else _getChangeLogThread = New Thread(AddressOf GetChangeLog)
fInfo.Delete() With _getChangeLogThread
RaiseEvent DownloadCompleted(sender, e, False) .SetApartmentState(ApartmentState.STA)
End If .IsBackground = True
Catch ex As Exception .Start()
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "DLCompleted failed" & vbNewLine & ex.Message, True) End With
End Try End Sub
Public Sub GetAnnouncementInfoAsync()
If IsGetAnnouncementInfoRunning Then _getAnnouncementInfoThread.Abort()
_getAnnouncementInfoThread = New Thread(AddressOf GetAnnouncementInfo)
With _getAnnouncementInfoThread
.SetApartmentState(ApartmentState.STA)
.IsBackground = True
.Start()
End With
End Sub
Public Sub DownloadUpdateAsync()
If _downloadUpdateWebClient IsNot Nothing Then
Throw New InvalidOperationException("A previous call to DownloadUpdateAsync() is still in progress.")
End If
If _currentUpdateInfo Is Nothing OrElse Not _currentUpdateInfo.IsValid Then
Throw New InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling DownloadUpdateAsync().")
End If
_currentUpdateInfo.UpdateFilePath = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Path.GetRandomFileName, "exe"))
DownloadUpdateWebClient.DownloadFileAsync(CurrentUpdateInfo.DownloadAddress, _currentUpdateInfo.UpdateFilePath)
End Sub End Sub
#End Region #End Region
Public Class Info #Region "Private Properties"
Private _Version As Version Private _downloadUpdateWebClient As WebClient
Public Property Version() As Version Private ReadOnly Property DownloadUpdateWebClient() As WebClient
Get Get
Return _Version If _downloadUpdateWebClient IsNot Nothing Then Return _downloadUpdateWebClient
End Get
Set(ByVal value As Version)
_Version = value
End Set
End Property
Private _DownloadUrl As String _downloadUpdateWebClient = CreateWebClient()
Public Property DownloadUrl() As String
Get
Return _DownloadUrl
End Get
Set(ByVal value As String)
_DownloadUrl = value
End Set
End Property
Private _UpdateLocation As String AddHandler _downloadUpdateWebClient.DownloadProgressChanged, AddressOf DownloadUpdateProgressChanged
Public Property UpdateLocation() As String AddHandler _downloadUpdateWebClient.DownloadFileCompleted, AddressOf DownloadUpdateCompleted
Get
Return _UpdateLocation
End Get
Set(ByVal value As String)
_UpdateLocation = value
End Set
End Property
Private _ChangeLog As String Return _downloadUpdateWebClient
Public Property ChangeLog() As String End Get
Get End Property
Return _ChangeLog #End Region
End Get
Set(ByVal value As String)
_ChangeLog = value
End Set
End Property
Private _ImageURL As String #Region "Private Fields"
Public Property ImageURL() As String Private _webProxy As WebProxy
Get Private _getUpdateInfoThread As Thread
Return _ImageURL Private _getChangeLogThread As Thread
End Get Private _getAnnouncementInfoThread As Thread
Set(ByVal value As String) #End Region
_ImageURL = value
End Set
End Property
Private _ImageURLLink As String #Region "Private Methods"
Public Property ImageURLLink() As String Private Function CreateWebClient() As WebClient
Get Dim webClient As New WebClient
Return _ImageURLLink webClient.Headers.Add("user-agent", Info.General.UserAgent)
End Get webClient.Proxy = _webProxy
Set(ByVal value As String) Return webClient
_ImageURLLink = value End Function
End Set
End Property
Private _InfoOk As Boolean Private Shared Function NewDownloadStringCompletedEventArgs(ByVal result As String, ByVal exception As Exception, ByVal cancelled As Boolean, ByVal userToken As Object) As DownloadStringCompletedEventArgs
Public Property InfoOk() As Boolean Dim type As Type = GetType(DownloadStringCompletedEventArgs)
Get Const bindingFlags As BindingFlags = bindingFlags.NonPublic Or bindingFlags.Instance
Return _InfoOk Dim argumentTypes() As Type = {GetType(String), GetType(Exception), GetType(Boolean), GetType(Object)}
End Get Dim constructor As ConstructorInfo = type.GetConstructor(bindingFlags, Nothing, argumentTypes, Nothing)
Set(ByVal value As Boolean) Dim arguments() As Object = {result, exception, cancelled, userToken}
_InfoOk = value
End Set Return constructor.Invoke(arguments)
End Property End Function
Private Function DownloadString(ByVal address As Uri) As DownloadStringCompletedEventArgs
Dim webClient As WebClient = CreateWebClient()
Dim result As String = String.Empty
Dim exception As Exception = Nothing
Dim cancelled As Boolean = False
Try
result = webClient.DownloadString(address)
Catch ex As ThreadAbortException
cancelled = True
Catch ex As Exception
exception = ex
End Try
Return NewDownloadStringCompletedEventArgs(result, exception, cancelled, Nothing)
End Function
Private Sub GetUpdateInfo()
Dim updateFileUri As New Uri(New Uri(My.Settings.UpdateAddress), New Uri(Info.Update.FileName, UriKind.Relative))
Dim e As DownloadStringCompletedEventArgs = DownloadString(updateFileUri)
If Not e.Cancelled And e.Error Is Nothing Then
_currentUpdateInfo = UpdateInfo.FromString(e.Result)
My.Settings.CheckForUpdatesLastCheck = Date.UtcNow
If Not My.Settings.UpdatePending Then
My.Settings.UpdatePending = IsUpdateAvailable()
End If
End If
RaiseEvent GetUpdateInfoCompletedEvent(Me, e)
End Sub
Private Sub GetChangeLog()
Dim e As DownloadStringCompletedEventArgs = DownloadString(_currentUpdateInfo.ChangeLogAddress)
If Not e.Cancelled And e.Error Is Nothing Then _changeLog = e.Result
RaiseEvent GetChangeLogCompletedEvent(Me, e)
End Sub
Private Sub GetAnnouncementInfo()
Dim announcementFileUri As New Uri(My.Settings.AnnouncementAddress)
Dim e As DownloadStringCompletedEventArgs = DownloadString(announcementFileUri)
If Not e.Cancelled And e.Error Is Nothing Then
_currentAnnouncementInfo = AnnouncementInfo.FromString(e.Result)
If Not String.IsNullOrEmpty(_currentAnnouncementInfo.Name) Then
My.Settings.LastAnnouncement = _currentAnnouncementInfo.Name
End If
End If
RaiseEvent GetAnnouncementInfoCompletedEvent(Me, e)
End Sub
Private Sub DownloadUpdateProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
RaiseEvent DownloadUpdateProgressChangedEvent(sender, e)
End Sub
Private Sub DownloadUpdateCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Dim raiseEventArgs As AsyncCompletedEventArgs = e
If Not e.Cancelled And e.Error Is Nothing Then
Try
Dim updateAuthenticode As New Authenticode(_currentUpdateInfo.UpdateFilePath)
With updateAuthenticode
.RequireThumbprintMatch = True
.ThumbprintToMatch = _currentUpdateInfo.CertificateThumbprint
If Not .Verify() = Authenticode.StatusValue.Verified Then
If .Status = Authenticode.StatusValue.UnhandledException Then
Throw .Exception
Else
Throw New Exception(.StatusMessage)
End If
End If
End With
Catch ex As Exception
raiseEventArgs = New AsyncCompletedEventArgs(ex, False, Nothing)
End Try
End If
If raiseEventArgs.Cancelled Or raiseEventArgs.Error IsNot Nothing Then
File.Delete(_currentUpdateInfo.UpdateFilePath)
End If
RaiseEvent DownloadUpdateCompletedEvent(Me, raiseEventArgs)
_downloadUpdateWebClient.Dispose()
_downloadUpdateWebClient = Nothing
End Sub
#End Region
#Region "Public Classes"
Public Class UpdateInfo
#Region "Public Properties"
Public Property IsValid As Boolean
Public Property Version As Version
Public Property DownloadAddress As Uri
Public Property UpdateFilePath As String
Public Property ChangeLogAddress As Uri
Public Property ImageAddress As Uri
Public Property ImageLinkAddress As Uri
Public Property CertificateThumbprint As String
#End Region
#Region "Public Methods"
Public Shared Function FromString(ByVal input As String) As UpdateInfo
Dim newInfo As New UpdateInfo
With newInfo
If String.IsNullOrEmpty(input) Then
.IsValid = False
Else
Dim updateFile As New UpdateFile(input)
.Version = updateFile.GetVersion("Version")
.DownloadAddress = updateFile.GetUri("dURL")
.ChangeLogAddress = updateFile.GetUri("clURL")
.ImageAddress = updateFile.GetUri("imgURL")
.ImageLinkAddress = updateFile.GetUri("imgURLLink")
.CertificateThumbprint = updateFile.GetThumbprint("CertificateThumbprint")
.IsValid = True
End If
End With
Return newInfo
End Function
#End Region
End Class End Class
Public Class AnnouncementInfo
#Region "Public Properties"
Public Property IsValid As Boolean
Public Property Name As String
Public Property Address As Uri
#End Region
#Region "Public Methods"
Public Shared Function FromString(ByVal input As String) As AnnouncementInfo
Dim newInfo As New AnnouncementInfo
With newInfo
If String.IsNullOrEmpty(input) Then
.IsValid = False
Else
Dim updateFile As New UpdateFile(input)
.Name = updateFile.GetString("Name")
.Address = updateFile.GetUri("URL")
.IsValid = True
End If
End With
Return newInfo
End Function
#End Region
End Class
#End Region
#Region "Private Classes"
Private Class UpdateFile
#Region "Public Properties"
Private ReadOnly _items As New Dictionary(Of String, String)(StringComparer.InvariantCultureIgnoreCase)
' ReSharper disable MemberCanBePrivate.Local
Public ReadOnly Property Items() As Dictionary(Of String, String)
' ReSharper restore MemberCanBePrivate.Local
Get
Return _items
End Get
End Property
#End Region
#Region "Public Methods"
Public Sub New(ByVal content As String)
FromString(content)
End Sub
' ReSharper disable MemberCanBePrivate.Local
Public Sub FromString(ByVal content As String)
' ReSharper restore MemberCanBePrivate.Local
If String.IsNullOrEmpty(content) Then
Else
Dim lineSeparators() As Char = New Char() {Chr(&HA), Chr(&HD)}
Dim keyValueSeparators() As Char = New Char() {":", "="}
Dim commentCharacters() As Char = New Char() {"#", ";", "'"}
Dim lines() As String = content.Split(lineSeparators, StringSplitOptions.RemoveEmptyEntries)
For Each line As String In lines
line = line.Trim()
If line.Length = 0 Then Continue For
If Not line.Substring(0, 1).IndexOfAny(commentCharacters) = -1 Then Continue For
Dim parts() As String = line.Split(keyValueSeparators, 2)
If Not parts.Length = 2 Then Continue For
Dim key As String = parts(0).Trim()
Dim value As String = parts(1).Trim()
_items.Add(key, value)
Next
End If
End Sub
' ReSharper disable MemberCanBePrivate.Local
Public Function GetString(ByVal key As String) As String
' ReSharper restore MemberCanBePrivate.Local
If Not Items.ContainsKey(key) Then Return String.Empty
Return Items(key)
End Function
Public Function GetVersion(ByVal key As String) As Version
Dim value As String = GetString(key)
If String.IsNullOrEmpty(value) Then Return Nothing
Return New Version(value)
End Function
Public Function GetUri(ByVal key As String) As Uri
Dim value As String = GetString(key)
If String.IsNullOrEmpty(value) Then Return Nothing
Return New Uri(value)
End Function
Public Function GetThumbprint(ByVal key As String) As String
Return GetString(key).Replace(" ", "").ToUpperInvariant()
End Function
#End Region
End Class
#End Region
End Class End Class
End Namespace End Namespace

View File

@@ -113,16 +113,6 @@ Namespace Config
End Set End Set
End Property End Property
Private _Import As Boolean
Public Property Import() As Boolean
Get
Return Me._Import
End Get
Set(ByVal value As Boolean)
Me._Import = value
End Set
End Property
Private _ConnectionList As Connection.List Private _ConnectionList As Connection.List
Public Property ConnectionList() As Connection.List Public Property ConnectionList() As Connection.List
Get Get
@@ -165,17 +155,18 @@ Namespace Config
#End Region #End Region
#Region "Public Methods" #Region "Public Methods"
Public Sub Load() Public Sub Load(ByVal import As Boolean)
If _UseSQL = True Then If _UseSQL = True Then
LoadFromSQL() LoadFromSQL()
SetMainFormText("SQL Server") SetMainFormText("SQL Server")
Else Else
Dim strCons As String = DecryptCompleteFile() Dim strCons As String = DecryptCompleteFile()
LoadFromXML(strCons) LoadFromXML(strCons, import)
End If End If
If Import = False Then If import = False Then
SetMainFormText(ConnectionFileName) SetMainFormText(ConnectionFileName)
PuttySessions.AddSessionsToTree()
End If End If
End Sub End Sub
#End Region #End Region
@@ -208,7 +199,7 @@ Namespace Config
End If End If
confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture) confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture)
Const maxSupportedSchemaVersion As Double = 2.4 Const maxSupportedSchemaVersion As Double = 2.5
If confVersion > maxSupportedSchemaVersion Then If confVersion > maxSupportedSchemaVersion Then
cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible database schema", String.Format("The database schema on the server is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("Schema Version: {1}{0}Highest Supported Version: {2}", vbNewLine, confVersion.ToString(), maxSupportedSchemaVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing) cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible database schema", String.Format("The database schema on the server is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("Schema Version: {1}{0}Highest Supported Version: {2}", vbNewLine, confVersion.ToString(), maxSupportedSchemaVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
Throw New Exception(String.Format("Incompatible database schema (schema version {0}).", confVersion)) Throw New Exception(String.Format("Incompatible database schema (schema version {0}).", confVersion))
@@ -276,7 +267,7 @@ Namespace Config
App.Runtime.IsConnectionsFileLoaded = True App.Runtime.IsConnectionsFileLoaded = True
'App.Runtime.Windows.treeForm.InitialRefresh() 'App.Runtime.Windows.treeForm.InitialRefresh()
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strLoadFromSqlFailed & vbNewLine & ex.Message, True) Throw
Finally Finally
If sqlCon IsNot Nothing Then If sqlCon IsNot Nothing Then
sqlCon.Close() sqlCon.Close()
@@ -576,6 +567,13 @@ Namespace Config
conI.Inherit.UseCredSsp = .Item("InheritUseCredSsp") conI.Inherit.UseCredSsp = .Item("InheritUseCredSsp")
End If End If
If confVersion >= 2.5 Then
conI.LoadBalanceInfo = .Item("LoadBalanceInfo")
conI.AutomaticResize = .Item("AutomaticResize")
conI.Inherit.LoadBalanceInfo = .Item("InheritLoadBalanceInfo")
conI.Inherit.AutomaticResize = .Item("InheritAutomaticResize")
End If
If SQLUpdate = True Then If SQLUpdate = True Then
conI.PleaseConnect = .Item("Connected") conI.PleaseConnect = .Item("Connected")
End If End If
@@ -638,7 +636,7 @@ Namespace Config
Return "" Return ""
End Function End Function
Private Sub LoadFromXML(Optional ByVal cons As String = "") Private Sub LoadFromXML(ByVal cons As String, ByVal import As Boolean)
Try Try
App.Runtime.IsConnectionsFileLoaded = False App.Runtime.IsConnectionsFileLoaded = False
@@ -656,7 +654,7 @@ Namespace Config
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strOldConffile) MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strOldConffile)
End If End If
Const maxSupportedConfVersion As Double = 2.4 Const maxSupportedConfVersion As Double = 2.5
If confVersion > maxSupportedConfVersion Then If confVersion > maxSupportedConfVersion Then
cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible connection file format", String.Format("The format of this connection file is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", vbNewLine, ConnectionFileName, confVersion.ToString(), maxSupportedConfVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing) cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible connection file format", String.Format("The format of this connection file is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", vbNewLine, ConnectionFileName, confVersion.ToString(), maxSupportedConfVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
Throw New Exception(String.Format("Incompatible connection file format (file format version {0}).", confVersion)) Throw New Exception(String.Format("Incompatible connection file format (file format version {0}).", confVersion))
@@ -690,31 +688,29 @@ Namespace Config
End If End If
End If End If
Dim imp As Boolean = False Dim isExportFile As Boolean = False
If confVersion >= 1.0 Then
If Me.confVersion > 0.9 Then '1.0
If xDom.DocumentElement.Attributes("Export").Value = True Then If xDom.DocumentElement.Attributes("Export").Value = True Then
imp = True isExportFile = True
End If End If
End If End If
If Me._Import = True And imp = False Then If import And Not isExportFile Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strCannotImportNormalSessionFile) MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strCannotImportNormalSessionFile)
Return
Exit Sub
End If End If
If imp = False Then If Not isExportFile Then
Me._RootTreeNode.Text = rootNode.Text _RootTreeNode.Text = rootNode.Text
Me._RootTreeNode.Tag = rootNode.Tag _RootTreeNode.Tag = rootNode.Tag
Me._RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root _RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
Me._RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root _RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
End If End If
Windows.treeForm.tvConnections.BeginUpdate() Windows.treeForm.tvConnections.BeginUpdate()
' SECTION 3. Populate the TreeView with the DOM nodes. ' SECTION 3. Populate the TreeView with the DOM nodes.
AddNodeFromXML(xDom.DocumentElement, Me._RootTreeNode) AddNodeFromXml(xDom.DocumentElement, _RootTreeNode)
Me._RootTreeNode.Expand() Me._RootTreeNode.Expand()
@@ -1059,6 +1055,13 @@ Namespace Config
conI.UseCredSsp = .Attributes("UseCredSsp").Value conI.UseCredSsp = .Attributes("UseCredSsp").Value
conI.Inherit.UseCredSsp = .Attributes("InheritUseCredSsp").Value conI.Inherit.UseCredSsp = .Attributes("InheritUseCredSsp").Value
End If End If
If confVersion >= 2.5 Then
conI.LoadBalanceInfo = .Attributes("LoadBalanceInfo").Value
conI.AutomaticResize = .Attributes("AutomaticResize").Value
conI.Inherit.LoadBalanceInfo = .Attributes("InheritLoadBalanceInfo").Value
conI.Inherit.AutomaticResize = .Attributes("InheritAutomaticResize").Value
End If
End With End With
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strGetConnectionInfoFromXmlFailed, conI.Name, Me.ConnectionFileName, ex.Message), False) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strGetConnectionInfoFromXmlFailed, conI.Name, Me.ConnectionFileName, ex.Message), False)

View File

@@ -5,7 +5,6 @@ Imports System.Globalization
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Imports System.Data.SqlClient Imports System.Data.SqlClient
Imports mRemoteNG.Tools.Misc Imports mRemoteNG.Tools.Misc
Imports mRemoteNG.My.Resources
Namespace Config Namespace Config
Namespace Connections Namespace Connections
@@ -98,7 +97,14 @@ Namespace Config
databaseVersion = New Version(2, 4) databaseVersion = New Version(2, 4)
End If End If
If databaseVersion.CompareTo(New System.Version(2, 4)) = 0 Then ' 2.4 If databaseVersion.CompareTo(New Version(2, 4)) = 0 Then ' 2.4
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format("Upgrading database from version {0} to version {1}.", databaseVersion.ToString, "2.5"))
sqlCommand = New SqlCommand("ALTER TABLE tblCons ADD LoadBalanceInfo varchar (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, AutomaticResize bit NOT NULL DEFAULT 1, InheritLoadBalanceInfo bit NOT NULL DEFAULT 0, InheritAutomaticResize bit NOT NULL DEFAULT 0;", sqlConnection)
sqlCommand.ExecuteNonQuery()
databaseVersion = New Version(2, 5)
End If
If databaseVersion.CompareTo(New Version(2, 5)) = 0 Then ' 2.5
isVerified = True isVerified = True
End If End If
@@ -173,7 +179,7 @@ Namespace Config
Dim curConI As Connection.Info Dim curConI As Connection.Info
_sqlQuery = New SqlCommand("INSERT INTO tblCons (Name, Type, Expanded, Description, Icon, Panel, Username, " & _ _sqlQuery = New SqlCommand("INSERT INTO tblCons (Name, Type, Expanded, Description, Icon, Panel, Username, " & _
"DomainName, Password, Hostname, Protocol, PuttySession, " & _ "DomainName, Password, Hostname, Protocol, PuttySession, " & _
"Port, ConnectToConsole, RenderingEngine, ICAEncryptionStrength, RDPAuthenticationLevel, Colors, Resolution, DisplayWallpaper, " & _ "Port, ConnectToConsole, RenderingEngine, ICAEncryptionStrength, RDPAuthenticationLevel, LoadBalanceInfo, Colors, Resolution, AutomaticResize, DisplayWallpaper, " & _
"DisplayThemes, EnableFontSmoothing, EnableDesktopComposition, CacheBitmaps, RedirectDiskDrives, RedirectPorts, " & _ "DisplayThemes, EnableFontSmoothing, EnableDesktopComposition, CacheBitmaps, RedirectDiskDrives, RedirectPorts, " & _
"RedirectPrinters, RedirectSmartCards, RedirectSound, RedirectKeys, " & _ "RedirectPrinters, RedirectSmartCards, RedirectSound, RedirectKeys, " & _
"Connected, PreExtApp, PostExtApp, MacAddress, UserField, ExtApp, VNCCompression, VNCEncoding, VNCAuthMode, " & _ "Connected, PreExtApp, PostExtApp, MacAddress, UserField, ExtApp, VNCCompression, VNCEncoding, VNCAuthMode, " & _
@@ -186,8 +192,8 @@ Namespace Config
"InheritIcon, InheritPanel, InheritPassword, InheritPort, " & _ "InheritIcon, InheritPanel, InheritPassword, InheritPort, " & _
"InheritProtocol, InheritPuttySession, InheritRedirectDiskDrives, " & _ "InheritProtocol, InheritPuttySession, InheritRedirectDiskDrives, " & _
"InheritRedirectKeys, InheritRedirectPorts, InheritRedirectPrinters, " & _ "InheritRedirectKeys, InheritRedirectPorts, InheritRedirectPrinters, " & _
"InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, " & _ "InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, InheritAutomaticResize, " & _
"InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, " & _ "InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, InheritLoadBalanceInfo, " & _
"InheritPreExtApp, InheritPostExtApp, InheritMacAddress, InheritUserField, InheritExtApp, InheritVNCCompression, InheritVNCEncoding, " & _ "InheritPreExtApp, InheritPostExtApp, InheritMacAddress, InheritUserField, InheritExtApp, InheritVNCCompression, InheritVNCEncoding, " & _
"InheritVNCAuthMode, InheritVNCProxyType, InheritVNCProxyIP, InheritVNCProxyPort, " & _ "InheritVNCAuthMode, InheritVNCProxyType, InheritVNCProxyIP, InheritVNCProxyPort, " & _
"InheritVNCProxyUsername, InheritVNCProxyPassword, InheritVNCColors, " & _ "InheritVNCProxyUsername, InheritVNCProxyPassword, InheritVNCColors, " & _
@@ -260,8 +266,10 @@ Namespace Config
_sqlQuery.CommandText &= "'" & .RenderingEngine.ToString & "'," _sqlQuery.CommandText &= "'" & .RenderingEngine.ToString & "',"
_sqlQuery.CommandText &= "'" & .ICAEncryption.ToString & "'," _sqlQuery.CommandText &= "'" & .ICAEncryption.ToString & "',"
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel.ToString & "'," _sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel.ToString & "',"
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
_sqlQuery.CommandText &= "'" & .Colors.ToString & "'," _sqlQuery.CommandText &= "'" & .Colors.ToString & "',"
_sqlQuery.CommandText &= "'" & .Resolution.ToString & "'," _sqlQuery.CommandText &= "'" & .Resolution.ToString & "',"
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
_sqlQuery.CommandText &= "'" & .DisplayWallpaper & "'," _sqlQuery.CommandText &= "'" & .DisplayWallpaper & "',"
_sqlQuery.CommandText &= "'" & .DisplayThemes & "'," _sqlQuery.CommandText &= "'" & .DisplayThemes & "',"
_sqlQuery.CommandText &= "'" & .EnableFontSmoothing & "'," _sqlQuery.CommandText &= "'" & .EnableFontSmoothing & "',"
@@ -345,11 +353,13 @@ Namespace Config
_sqlQuery.CommandText &= "'" & .RedirectSmartCards & "'," _sqlQuery.CommandText &= "'" & .RedirectSmartCards & "',"
_sqlQuery.CommandText &= "'" & .RedirectSound & "'," _sqlQuery.CommandText &= "'" & .RedirectSound & "',"
_sqlQuery.CommandText &= "'" & .Resolution & "'," _sqlQuery.CommandText &= "'" & .Resolution & "',"
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
_sqlQuery.CommandText &= "'" & .UseConsoleSession & "'," _sqlQuery.CommandText &= "'" & .UseConsoleSession & "',"
_sqlQuery.CommandText &= "'" & .RenderingEngine & "'," _sqlQuery.CommandText &= "'" & .RenderingEngine & "',"
_sqlQuery.CommandText &= "'" & .Username & "'," _sqlQuery.CommandText &= "'" & .Username & "',"
_sqlQuery.CommandText &= "'" & .ICAEncryption & "'," _sqlQuery.CommandText &= "'" & .ICAEncryption & "',"
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel & "'," _sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel & "',"
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
_sqlQuery.CommandText &= "'" & .PreExtApp & "'," _sqlQuery.CommandText &= "'" & .PreExtApp & "',"
_sqlQuery.CommandText &= "'" & .PostExtApp & "'," _sqlQuery.CommandText &= "'" & .PostExtApp & "',"
_sqlQuery.CommandText &= "'" & .MacAddress & "'," _sqlQuery.CommandText &= "'" & .MacAddress & "',"
@@ -398,11 +408,15 @@ Namespace Config
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," ' .AutomaticResize
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," ' .LoadBalanceInfo
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "'," _sqlQuery.CommandText &= "'" & False & "',"
@@ -597,10 +611,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("RDPAuthenticationLevel", "", curConI.RDPAuthenticationLevel.ToString) _xmlTextWriter.WriteAttributeString("RDPAuthenticationLevel", "", curConI.RDPAuthenticationLevel.ToString)
_xmlTextWriter.WriteAttributeString("LoadBalanceInfo", "", curConI.LoadBalanceInfo)
_xmlTextWriter.WriteAttributeString("Colors", "", curConI.Colors.ToString) _xmlTextWriter.WriteAttributeString("Colors", "", curConI.Colors.ToString)
_xmlTextWriter.WriteAttributeString("Resolution", "", curConI.Resolution.ToString) _xmlTextWriter.WriteAttributeString("Resolution", "", curConI.Resolution.ToString)
_xmlTextWriter.WriteAttributeString("AutomaticResize", "", curConI.AutomaticResize)
_xmlTextWriter.WriteAttributeString("DisplayWallpaper", "", curConI.DisplayWallpaper) _xmlTextWriter.WriteAttributeString("DisplayWallpaper", "", curConI.DisplayWallpaper)
_xmlTextWriter.WriteAttributeString("DisplayThemes", "", curConI.DisplayThemes) _xmlTextWriter.WriteAttributeString("DisplayThemes", "", curConI.DisplayThemes)
@@ -692,12 +710,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", curConI.Inherit.RedirectSmartCards) _xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", curConI.Inherit.RedirectSmartCards)
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", curConI.Inherit.RedirectSound) _xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", curConI.Inherit.RedirectSound)
_xmlTextWriter.WriteAttributeString("InheritResolution", "", curConI.Inherit.Resolution) _xmlTextWriter.WriteAttributeString("InheritResolution", "", curConI.Inherit.Resolution)
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", curConI.Inherit.AutomaticResize)
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", curConI.Inherit.UseConsoleSession) _xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", curConI.Inherit.UseConsoleSession)
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", curConI.Inherit.UseCredSsp) _xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", curConI.Inherit.UseCredSsp)
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", curConI.Inherit.RenderingEngine) _xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", curConI.Inherit.RenderingEngine)
_xmlTextWriter.WriteAttributeString("InheritUsername", "", curConI.Inherit.Username) _xmlTextWriter.WriteAttributeString("InheritUsername", "", curConI.Inherit.Username)
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", curConI.Inherit.ICAEncryption) _xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", curConI.Inherit.ICAEncryption)
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", curConI.Inherit.RDPAuthenticationLevel) _xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", curConI.Inherit.RDPAuthenticationLevel)
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", curConI.Inherit.LoadBalanceInfo)
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", curConI.Inherit.PreExtApp) _xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", curConI.Inherit.PreExtApp)
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", curConI.Inherit.PostExtApp) _xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", curConI.Inherit.PostExtApp)
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", curConI.Inherit.MacAddress) _xmlTextWriter.WriteAttributeString("InheritMacAddress", "", curConI.Inherit.MacAddress)
@@ -742,12 +762,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", False) _xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", False)
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", False) _xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", False)
_xmlTextWriter.WriteAttributeString("InheritResolution", "", False) _xmlTextWriter.WriteAttributeString("InheritResolution", "", False)
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", False)
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", False) _xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", False)
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", False) _xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", False)
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", False) _xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", False)
_xmlTextWriter.WriteAttributeString("InheritUsername", "", False) _xmlTextWriter.WriteAttributeString("InheritUsername", "", False)
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", False) _xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", False)
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", False) _xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", False)
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", False)
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", False) _xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", False)
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", False) _xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", False)
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", False) _xmlTextWriter.WriteAttributeString("InheritMacAddress", "", False)
@@ -809,10 +831,10 @@ Namespace Config
csvLn += "Domain;" csvLn += "Domain;"
End If End If
csvLn += "Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;Colors;Resolution;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;" csvLn += "Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;"
If SaveSecurity.Inheritance Then If SaveSecurity.Inheritance Then
csvLn += "InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain" csvLn += "InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain"
End If End If
csvWr.WriteLine(csvLn) csvWr.WriteLine(csvLn)
@@ -863,10 +885,10 @@ Namespace Config
csvLn += con.Domain & ";" csvLn += con.Domain & ";"
End If End If
csvLn += con.Hostname & ";" & con.Protocol.ToString & ";" & con.PuttySession & ";" & con.Port & ";" & con.UseConsoleSession & ";" & con.UseCredSsp & ";" & con.RenderingEngine.ToString & ";" & con.ICAEncryption.ToString & ";" & con.RDPAuthenticationLevel.ToString & ";" & con.Colors.ToString & ";" & con.Resolution.ToString & ";" & con.DisplayWallpaper & ";" & con.DisplayThemes & ";" & con.EnableFontSmoothing & ";" & con.EnableDesktopComposition & ";" & con.CacheBitmaps & ";" & con.RedirectDiskDrives & ";" & con.RedirectPorts & ";" & con.RedirectPrinters & ";" & con.RedirectSmartCards & ";" & con.RedirectSound.ToString & ";" & con.RedirectKeys & ";" & con.PreExtApp & ";" & con.PostExtApp & ";" & con.MacAddress & ";" & con.UserField & ";" & con.ExtApp & ";" & con.VNCCompression.ToString & ";" & con.VNCEncoding.ToString & ";" & con.VNCAuthMode.ToString & ";" & con.VNCProxyType.ToString & ";" & con.VNCProxyIP & ";" & con.VNCProxyPort & ";" & con.VNCProxyUsername & ";" & con.VNCProxyPassword & ";" & con.VNCColors.ToString & ";" & con.VNCSmartSizeMode.ToString & ";" & con.VNCViewOnly & ";" csvLn += con.Hostname & ";" & con.Protocol.ToString & ";" & con.PuttySession & ";" & con.Port & ";" & con.UseConsoleSession & ";" & con.UseCredSsp & ";" & con.RenderingEngine.ToString & ";" & con.ICAEncryption.ToString & ";" & con.RDPAuthenticationLevel.ToString & ";" & con.LoadBalanceInfo & ";" & con.Colors.ToString & ";" & con.Resolution.ToString & ";" & con.AutomaticResize & ";" & con.DisplayWallpaper & ";" & con.DisplayThemes & ";" & con.EnableFontSmoothing & ";" & con.EnableDesktopComposition & ";" & con.CacheBitmaps & ";" & con.RedirectDiskDrives & ";" & con.RedirectPorts & ";" & con.RedirectPrinters & ";" & con.RedirectSmartCards & ";" & con.RedirectSound.ToString & ";" & con.RedirectKeys & ";" & con.PreExtApp & ";" & con.PostExtApp & ";" & con.MacAddress & ";" & con.UserField & ";" & con.ExtApp & ";" & con.VNCCompression.ToString & ";" & con.VNCEncoding.ToString & ";" & con.VNCAuthMode.ToString & ";" & con.VNCProxyType.ToString & ";" & con.VNCProxyIP & ";" & con.VNCProxyPort & ";" & con.VNCProxyUsername & ";" & con.VNCProxyPassword & ";" & con.VNCColors.ToString & ";" & con.VNCSmartSizeMode.ToString & ";" & con.VNCViewOnly & ";"
If SaveSecurity.Inheritance Then If SaveSecurity.Inheritance Then
csvLn += con.Inherit.CacheBitmaps & ";" & con.Inherit.Colors & ";" & con.Inherit.Description & ";" & con.Inherit.DisplayThemes & ";" & con.Inherit.DisplayWallpaper & ";" & con.Inherit.EnableFontSmoothing & ";" & con.Inherit.EnableDesktopComposition & ";" & con.Inherit.Domain & ";" & con.Inherit.Icon & ";" & con.Inherit.Panel & ";" & con.Inherit.Password & ";" & con.Inherit.Port & ";" & con.Inherit.Protocol & ";" & con.Inherit.PuttySession & ";" & con.Inherit.RedirectDiskDrives & ";" & con.Inherit.RedirectKeys & ";" & con.Inherit.RedirectPorts & ";" & con.Inherit.RedirectPrinters & ";" & con.Inherit.RedirectSmartCards & ";" & con.Inherit.RedirectSound & ";" & con.Inherit.Resolution & ";" & con.Inherit.UseConsoleSession & ";" & con.Inherit.UseCredSsp & ";" & con.Inherit.RenderingEngine & ";" & con.Inherit.Username & ";" & con.Inherit.ICAEncryption & ";" & con.Inherit.RDPAuthenticationLevel & ";" & con.Inherit.PreExtApp & ";" & con.Inherit.PostExtApp & ";" & con.Inherit.MacAddress & ";" & con.Inherit.UserField & ";" & con.Inherit.ExtApp & ";" & con.Inherit.VNCCompression & ";" & con.Inherit.VNCEncoding & ";" & con.Inherit.VNCAuthMode & ";" & con.Inherit.VNCProxyType & ";" & con.Inherit.VNCProxyIP & ";" & con.Inherit.VNCProxyPort & ";" & con.Inherit.VNCProxyUsername & ";" & con.Inherit.VNCProxyPassword & ";" & con.Inherit.VNCColors & ";" & con.Inherit.VNCSmartSizeMode & ";" & con.Inherit.VNCViewOnly csvLn += con.Inherit.CacheBitmaps & ";" & con.Inherit.Colors & ";" & con.Inherit.Description & ";" & con.Inherit.DisplayThemes & ";" & con.Inherit.DisplayWallpaper & ";" & con.Inherit.EnableFontSmoothing & ";" & con.Inherit.EnableDesktopComposition & ";" & con.Inherit.Domain & ";" & con.Inherit.Icon & ";" & con.Inherit.Panel & ";" & con.Inherit.Password & ";" & con.Inherit.Port & ";" & con.Inherit.Protocol & ";" & con.Inherit.PuttySession & ";" & con.Inherit.RedirectDiskDrives & ";" & con.Inherit.RedirectKeys & ";" & con.Inherit.RedirectPorts & ";" & con.Inherit.RedirectPrinters & ";" & con.Inherit.RedirectSmartCards & ";" & con.Inherit.RedirectSound & ";" & con.Inherit.Resolution & ";" & con.Inherit.AutomaticResize & ";" & con.Inherit.UseConsoleSession & ";" & con.Inherit.UseCredSsp & ";" & con.Inherit.RenderingEngine & ";" & con.Inherit.Username & ";" & con.Inherit.ICAEncryption & ";" & con.Inherit.RDPAuthenticationLevel & ";" & con.Inherit.LoadBalanceInfo & ";" & con.Inherit.PreExtApp & ";" & con.Inherit.PostExtApp & ";" & con.Inherit.MacAddress & ";" & con.Inherit.UserField & ";" & con.Inherit.ExtApp & ";" & con.Inherit.VNCCompression & ";" & con.Inherit.VNCEncoding & ";" & con.Inherit.VNCAuthMode & ";" & con.Inherit.VNCProxyType & ";" & con.Inherit.VNCProxyIP & ";" & con.Inherit.VNCProxyPort & ";" & con.Inherit.VNCProxyUsername & ";" & con.Inherit.VNCProxyPassword & ";" & con.Inherit.VNCColors & ";" & con.Inherit.VNCSmartSizeMode & ";" & con.Inherit.VNCViewOnly
End If End If
csvWr.WriteLine(csvLn) csvWr.WriteLine(csvLn)
@@ -1040,7 +1062,7 @@ Namespace Config
'Smart Size 'Smart Size
_xmlTextWriter.WriteStartElement("AutoSize") _xmlTextWriter.WriteStartElement("AutoSize")
_xmlTextWriter.WriteValue(IIf(con.Resolution = Connection.Protocol.RDP.RDPResolutions.SmartSize, True, False)) _xmlTextWriter.WriteValue(con.Resolution = Connection.Protocol.RDP.RDPResolutions.SmartSize)
_xmlTextWriter.WriteEndElement() _xmlTextWriter.WriteEndElement()
'SeparateResolutionX 'SeparateResolutionX
@@ -1053,26 +1075,18 @@ Namespace Config
_xmlTextWriter.WriteValue("768") _xmlTextWriter.WriteValue("768")
_xmlTextWriter.WriteEndElement() _xmlTextWriter.WriteEndElement()
Dim resolution As Rectangle = Connection.Protocol.RDP.GetResolutionRectangle(con.Resolution)
If resolution.Width = 0 Then resolution.Width = 1024
If resolution.Height = 0 Then resolution.Height = 768
'TabResolutionX 'TabResolutionX
_xmlTextWriter.WriteStartElement("TabResolutionX") _xmlTextWriter.WriteStartElement("TabResolutionX")
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _ _xmlTextWriter.WriteValue(resolution.Width)
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.Fullscreen And _
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.SmartSize Then
_xmlTextWriter.WriteValue(con.Resolution.ToString.Remove(con.Resolution.ToString.IndexOf("x")))
Else
_xmlTextWriter.WriteValue("1024")
End If
_xmlTextWriter.WriteEndElement() _xmlTextWriter.WriteEndElement()
'TabResolutionY 'TabResolutionY
_xmlTextWriter.WriteStartElement("TabResolutionY") _xmlTextWriter.WriteStartElement("TabResolutionY")
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _ _xmlTextWriter.WriteValue(resolution.Height)
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.Fullscreen And _
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.SmartSize Then
_xmlTextWriter.WriteValue(con.Resolution.ToString.Remove(0, con.Resolution.ToString.IndexOf("x")))
Else
_xmlTextWriter.WriteValue("768")
End If
_xmlTextWriter.WriteEndElement() _xmlTextWriter.WriteEndElement()
'RDPColorDepth 'RDPColorDepth

View File

@@ -80,13 +80,14 @@ Namespace Config
.Location = newBounds.Location .Location = newBounds.Location
If My.Settings.MainFormKiosk = True Then If My.Settings.MainFormKiosk = True Then
Tools.Misc.Fullscreen.EnterFullscreen() .Fullscreen.Value = True
.mMenViewFullscreen.Checked = True
End If End If
If My.Settings.UseCustomPuttyPath Then If My.Settings.UseCustomPuttyPath Then
Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath
Else Else
Connection.Protocol.PuttyBase.PuttyPath = My.Application.Info.DirectoryPath & "\PuTTYNG.exe" Connection.Protocol.PuttyBase.PuttyPath = App.Info.General.PuttyPath
End If End If
If My.Settings.ShowSystemTrayIcon Then If My.Settings.ShowSystemTrayIcon Then
@@ -114,8 +115,7 @@ Namespace Config
End If End If
End With End With
Catch ex As Exception Catch ex As Exception
App.Runtime.log.Error("Loading settings failed" & vbNewLine & ex.Message) Log.Error("Loading settings failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "Loading settings failed" & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
@@ -196,8 +196,7 @@ Namespace Config
End If End If
End With End With
Catch ex As Exception Catch ex As Exception
App.Runtime.log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message) Log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "LoadPanelsFromXML failed" & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
@@ -268,8 +267,7 @@ Namespace Config
Return Windows.screenshotPanel Return Windows.screenshotPanel
End If End If
Catch ex As Exception Catch ex As Exception
App.Runtime.log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message) Log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "GetContentFromPersistString failed" & vbNewLine & ex.Message, True)
End Try End Try
Return Nothing Return Nothing

View File

@@ -25,7 +25,7 @@ Namespace Config
My.Settings.MainFormState = .WindowState My.Settings.MainFormState = .WindowState
My.Settings.MainFormKiosk = Tools.Misc.Fullscreen.FullscreenActive My.Settings.MainFormKiosk = .Fullscreen.Value
My.Settings.FirstStart = False My.Settings.FirstStart = False
My.Settings.ResetPanels = False My.Settings.ResetPanels = False

View File

@@ -1,16 +1,29 @@
Imports System.ComponentModel Imports System.ComponentModel
Imports System.Management
Imports mRemoteNG.Messages
Imports Microsoft.Win32 Imports Microsoft.Win32
Imports mRemoteNG.Connection.Protocol Imports mRemoteNG.Connection.Protocol
Imports mRemoteNG.Tree
Imports mRemoteNG.My Imports mRemoteNG.My
Imports mRemoteNG.App.Runtime
Imports System.Security.Principal
Namespace Config Namespace Config
Public Class PuttySessions Public Class PuttySessions
Private Const PuttySessionsKey As String = "Software\SimonTatham\PuTTY\Sessions" Private Const PuttySessionsKey As String = "Software\SimonTatham\PuTTY\Sessions"
Private Shared _rootTreeNode As TreeNode
Private Shared _eventWatcher As ManagementEventWatcher
Public Shared Sub AddSessionsToTree(ByVal treeView As TreeView) Private Delegate Sub AddSessionsToTreeDelegate()
Dim savedSessions() As Connection.Info = LoadSessions() Public Shared Sub AddSessionsToTree()
If savedSessions Is Nothing OrElse savedSessions.Length = 0 Then Return Dim treeView As TreeView = Tree.Node.TreeView
If treeView Is Nothing Then Return
If treeView.InvokeRequired Then
treeView.Invoke(New AddSessionsToTreeDelegate(AddressOf AddSessionsToTree))
Return
End If
Dim savedSessions As New List(Of Connection.Info)(LoadSessions())
If savedSessions Is Nothing OrElse savedSessions.Count = 0 Then Return
Dim puttyRootInfo As New Root.PuttySessions.Info() Dim puttyRootInfo As New Root.PuttySessions.Info()
If String.IsNullOrEmpty(My.Settings.PuttySavedSessionsName) Then If String.IsNullOrEmpty(My.Settings.PuttySavedSessionsName) Then
@@ -24,55 +37,106 @@ Namespace Config
puttyRootInfo.Panel = My.Settings.PuttySavedSessionsPanel puttyRootInfo.Panel = My.Settings.PuttySavedSessionsPanel
End If End If
Dim puttyRootNode As TreeNode = New TreeNode Dim inUpdate As Boolean = False
puttyRootNode.Text = puttyRootInfo.Name
puttyRootNode.Tag = puttyRootInfo
puttyRootNode.ImageIndex = Images.Enums.TreeImage.PuttySessions
puttyRootNode.SelectedImageIndex = Images.Enums.TreeImage.PuttySessions
puttyRootInfo.TreeNode = puttyRootNode If _rootTreeNode Is Nothing Then
_rootTreeNode = New TreeNode
_rootTreeNode.Name = puttyRootInfo.Name
_rootTreeNode.Text = puttyRootInfo.Name
_rootTreeNode.Tag = puttyRootInfo
_rootTreeNode.ImageIndex = Images.Enums.TreeImage.PuttySessions
_rootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.PuttySessions
treeView.Nodes.Add(_rootTreeNode)
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
End If
treeView.BeginUpdate() puttyRootInfo.TreeNode = _rootTreeNode
treeView.Nodes.Add(puttyRootNode)
Dim newTreeNode As TreeNode Dim newTreeNodes As New List(Of TreeNode)
For Each sessionInfo As Connection.PuttySession.Info In savedSessions For Each sessionInfo As Connection.PuttySession.Info In savedSessions
newTreeNode = Node.AddNode(Node.Type.PuttySession, sessionInfo.Name) Dim treeNode As TreeNode
If newTreeNode Is Nothing Then Continue For Dim isNewNode As Boolean
If _rootTreeNode.Nodes.ContainsKey(sessionInfo.Name) Then
treeNode = _rootTreeNode.Nodes.Item(sessionInfo.Name)
isNewNode = False
Else
treeNode = Tree.Node.AddNode(Tree.Node.Type.PuttySession, sessionInfo.Name)
If treeNode Is Nothing Then Continue For
treeNode.Name = treeNode.Text
treeNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
treeNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
isNewNode = True
End If
sessionInfo.RootPuttySessionsInfo = puttyRootInfo sessionInfo.RootPuttySessionsInfo = puttyRootInfo
sessionInfo.TreeNode = newTreeNode sessionInfo.TreeNode = treeNode
sessionInfo.Inherit.TurnOffInheritanceCompletely() sessionInfo.Inherit.TurnOffInheritanceCompletely()
newTreeNode.Tag = sessionInfo treeNode.Tag = sessionInfo
newTreeNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
newTreeNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
puttyRootNode.Nodes.Add(newTreeNode) If isNewNode Then newTreeNodes.Add(treeNode)
Next Next
puttyRootNode.Expand() For Each treeNode As TreeNode In _rootTreeNode.Nodes
treeView.EndUpdate() If Not savedSessions.Contains(treeNode.Tag) Then
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
_rootTreeNode.Nodes.Remove(treeNode)
End If
Next
If Not newTreeNodes.Count = 0 Then
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
_rootTreeNode.Nodes.AddRange(newTreeNodes.ToArray())
End If
If inUpdate Then
Tree.Node.Sort(_rootTreeNode, SortOrder.Ascending)
_rootTreeNode.Expand()
treeView.EndUpdate()
End If
End Sub End Sub
Protected Shared Function GetSessionNames(Optional ByVal addDefaultSettings As Boolean = False) As String() Protected Shared Function GetSessionNames(Optional ByVal raw As Boolean = False) As String()
Dim sessionsKey As RegistryKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey) Dim sessionsKey As RegistryKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey)
If sessionsKey Is Nothing Then Return Nothing If sessionsKey Is Nothing Then Return New String() {}
Dim sessionNames As New List(Of String) Dim sessionNames As New List(Of String)
If addDefaultSettings Then sessionNames.Add("Default Settings")
For Each sessionName As String In sessionsKey.GetSubKeyNames() For Each sessionName As String In sessionsKey.GetSubKeyNames()
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName)) If raw Then
sessionNames.Add(sessionName)
Else
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B")))
End If
Next Next
If raw Then
If Not sessionNames.Contains("Default%20Settings") Then ' Do not localize
sessionNames.Insert(0, "Default%20Settings")
End If
Else
If Not sessionNames.Contains("Default Settings") Then
sessionNames.Insert(0, "Default Settings")
End If
End If
Return sessionNames.ToArray() Return sessionNames.ToArray()
End Function End Function
Protected Shared Function LoadSessions() As Connection.PuttySession.Info() Protected Shared Function LoadSessions() As Connection.PuttySession.Info()
Dim sessionList As New List(Of Connection.PuttySession.Info) Dim sessionList As New List(Of Connection.PuttySession.Info)
Dim sessionInfo As Connection.Info Dim sessionInfo As Connection.Info
For Each sessionName As String In GetSessionNames() For Each sessionName As String In GetSessionNames(True)
sessionInfo = SessionToConnectionInfo(sessionName) sessionInfo = SessionToConnectionInfo(sessionName)
If sessionInfo Is Nothing Then Continue For If sessionInfo Is Nothing OrElse String.IsNullOrEmpty(sessionInfo.Hostname) Then Continue For
sessionList.Add(sessionInfo) sessionList.Add(sessionInfo)
Next Next
Return sessionList.ToArray() Return sessionList.ToArray()
@@ -85,6 +149,8 @@ Namespace Config
Dim sessionKey As RegistryKey = sessionsKey.OpenSubKey(sessionName) Dim sessionKey As RegistryKey = sessionsKey.OpenSubKey(sessionName)
If sessionKey Is Nothing Then Return Nothing If sessionKey Is Nothing Then Return Nothing
sessionName = Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B"))
Dim sessionInfo As New Connection.PuttySession.Info Dim sessionInfo As New Connection.PuttySession.Info
With sessionInfo With sessionInfo
.PuttySession = sessionName .PuttySession = sessionName
@@ -92,6 +158,7 @@ Namespace Config
.Hostname = sessionKey.GetValue("HostName") .Hostname = sessionKey.GetValue("HostName")
.Username = sessionKey.GetValue("UserName") .Username = sessionKey.GetValue("UserName")
Dim protocol As String = sessionKey.GetValue("Protocol") Dim protocol As String = sessionKey.GetValue("Protocol")
If protocol Is Nothing Then protocol = "ssh"
Select Case protocol.ToLowerInvariant() Select Case protocol.ToLowerInvariant()
Case "raw" Case "raw"
.Protocol = Protocols.RAW .Protocol = Protocols.RAW
@@ -100,11 +167,16 @@ Namespace Config
Case "serial" Case "serial"
Return Nothing Return Nothing
Case "ssh" Case "ssh"
Dim sshVersion As Integer = sessionKey.GetValue("SshProt") Dim sshVersionObject As Object = sessionKey.GetValue("SshProt")
If sshVersion >= 2 Then If sshVersionObject IsNot Nothing Then
.Protocol = Protocols.SSH2 Dim sshVersion As Integer = CType(sshVersionObject, Integer)
If sshVersion >= 2 Then
.Protocol = Protocols.SSH2
Else
.Protocol = Protocols.SSH1
End If
Else Else
.Protocol = Protocols.SSH1 .Protocol = Protocols.SSH2
End If End If
Case "telnet" Case "telnet"
.Protocol = Protocols.Telnet .Protocol = Protocols.Telnet
@@ -117,12 +189,38 @@ Namespace Config
Return sessionInfo Return sessionInfo
End Function End Function
Public Shared Sub StartWatcher()
If _eventWatcher IsNot Nothing Then Return
Try
Dim currentUserSid As String = WindowsIdentity.GetCurrent().User.Value
Dim key As String = String.Join("\", {currentUserSid, PuttySessionsKey}).Replace("\", "\\")
Dim query As New WqlEventQuery(String.Format("SELECT * FROM RegistryTreeChangeEvent WHERE Hive = 'HKEY_USERS' AND RootPath = '{0}'", key))
_eventWatcher = New ManagementEventWatcher(query)
AddHandler _eventWatcher.EventArrived, AddressOf OnManagementEventArrived
_eventWatcher.Start()
Catch ex As Exception
MessageCollector.AddExceptionMessage("PuttySessions.Watcher.StartWatching() failed.", ex, MessageClass.WarningMsg, True)
End Try
End Sub
Public Shared Sub StopWatcher()
If _eventWatcher Is Nothing Then Return
_eventWatcher.Stop()
_eventWatcher.Dispose()
_eventWatcher = Nothing
End Sub
Private Shared Sub OnManagementEventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
AddSessionsToTree()
End Sub
Public Class SessionList Public Class SessionList
Inherits StringConverter Inherits StringConverter
Public Shared ReadOnly Property Names() As String() Public Shared ReadOnly Property Names() As String()
Get Get
Return GetSessionNames(True) Return GetSessionNames()
End Get End Get
End Property End Property

View File

@@ -102,17 +102,18 @@ Namespace Connection
End Property End Property
#End Region #End Region
#Region "2 Connection" #Region "2 Connection"
Private _Hostname As String = "" Private _hostname As String = ""
<LocalizedCategory("strCategoryConnection", 2), _ <LocalizedCategory("strCategoryConnection", 2), _
Browsable(True), _ Browsable(True), _
LocalizedDisplayName("strPropertyNameAddress"), _ LocalizedDisplayName("strPropertyNameAddress"), _
LocalizedDescription("strPropertyDescriptionAddress")> _ LocalizedDescription("strPropertyDescriptionAddress")> _
Public Overridable Property Hostname() As String Public Overridable Property Hostname() As String
Get Get
Return Me._Hostname.Trim() Return _hostname.Trim()
End Get End Get
Set(ByVal value As String) Set(ByVal value As String)
Me._Hostname = value.Trim() If String.IsNullOrEmpty(value) Then _hostname = ""
_hostname = value.Trim()
End Set End Set
End Property End Property
@@ -384,6 +385,32 @@ Namespace Connection
End Set End Set
End Property End Property
Private _loadBalanceInfo As String = My.Settings.ConDefaultLoadBalanceInfo
<LocalizedCategory("strCategoryProtocol", 3), _
Browsable(True), _
LocalizedDisplayName("strPropertyNameLoadBalanceInfo"), _
LocalizedDescription("strPropertyDescriptionLoadBalanceInfo")> _
Public Property LoadBalanceInfo() As String
Get
If _Inherit.LoadBalanceInfo And _Parent IsNot Nothing Then
Dim parCon As Info = TryCast(_Parent, Container.Info).ConnectionInfo
If _IsContainer = True Then
Dim curCont As Container.Info = _Parent
Dim parCont As Container.Info = curCont.Parent
parCon = parCont.ConnectionInfo
End If
Return parCon.LoadBalanceInfo.Trim()
Else
Return _loadBalanceInfo.Trim()
End If
End Get
Set(ByVal value As String)
_loadBalanceInfo = value.Trim()
End Set
End Property
Private _RenderingEngine As Connection.Protocol.HTTPBase.RenderingEngine = Tools.Misc.StringToEnum(GetType(mRemoteNG.Connection.Protocol.HTTPBase.RenderingEngine), My.Settings.ConDefaultRenderingEngine) Private _RenderingEngine As Connection.Protocol.HTTPBase.RenderingEngine = Tools.Misc.StringToEnum(GetType(mRemoteNG.Connection.Protocol.HTTPBase.RenderingEngine), My.Settings.ConDefaultRenderingEngine)
<LocalizedCategory("strCategoryProtocol", 3), _ <LocalizedCategory("strCategoryProtocol", 3), _
Browsable(True), _ Browsable(True), _
@@ -626,6 +653,33 @@ Namespace Connection
End Set End Set
End Property End Property
Private _automaticResize As Boolean = My.Settings.ConDefaultAutomaticResize
<LocalizedCategory("strCategoryAppearance", 5), _
Browsable(True), _
LocalizedDisplayName("strPropertyNameAutomaticResize"), _
LocalizedDescription("strPropertyDescriptionAutomaticResize"), _
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
Public Property AutomaticResize() As Boolean
Get
If _Inherit.CacheBitmaps And _Parent IsNot Nothing Then
Dim parCon As Info = TryCast(_Parent, Container.Info).ConnectionInfo
If _IsContainer = True Then
Dim curCont As Container.Info = _Parent
Dim parCont As Container.Info = curCont.Parent
parCon = parCont.ConnectionInfo
End If
Return parCon.AutomaticResize
Else
Return _automaticResize
End If
End Get
Set(ByVal value As Boolean)
_automaticResize = value
End Set
End Property
Private _Colors As Connection.Protocol.RDP.RDPColors = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPColors), My.Settings.ConDefaultColors) Private _Colors As Connection.Protocol.RDP.RDPColors = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPColors), My.Settings.ConDefaultColors)
<LocalizedCategory("strCategoryAppearance", 5), _ <LocalizedCategory("strCategoryAppearance", 5), _
Browsable(True), _ Browsable(True), _
@@ -1848,6 +1902,21 @@ Namespace Connection
End Set End Set
End Property End Property
Private _loadBalanceInfo As Boolean = My.Settings.InhDefaultLoadBalanceInfo
<LocalizedCategory("strCategoryProtocol", 4), _
Browsable(True), _
LocalizedDisplayNameInheritAttribute("strPropertyNameLoadBalanceInfo"), _
LocalizedDescriptionInheritAttribute("strPropertyDescriptionLoadBalanceInfo"), _
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
Public Property LoadBalanceInfo() As Boolean
Get
Return _loadBalanceInfo
End Get
Set(ByVal value As Boolean)
_loadBalanceInfo = value
End Set
End Property
Private _RenderingEngine As Boolean = My.Settings.InhDefaultRenderingEngine Private _RenderingEngine As Boolean = My.Settings.InhDefaultRenderingEngine
<LocalizedCategory("strCategoryProtocol", 4), _ <LocalizedCategory("strCategoryProtocol", 4), _
Browsable(True), _ Browsable(True), _
@@ -2000,6 +2069,21 @@ Namespace Connection
End Set End Set
End Property End Property
Private _automaticResize As Boolean = My.Settings.InhDefaultAutomaticResize
<LocalizedCategory("strCategoryAppearance", 6), _
Browsable(True), _
LocalizedDisplayNameInheritAttribute("strPropertyNameAutomaticResize"), _
LocalizedDescriptionInheritAttribute("strPropertyDescriptionAutomaticResize"), _
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
Public Property AutomaticResize() As Boolean
Get
Return _automaticResize
End Get
Set(ByVal value As Boolean)
_automaticResize = value
End Set
End Property
Private _Colors As Boolean = My.Settings.InhDefaultColors Private _Colors As Boolean = My.Settings.InhDefaultColors
<LocalizedCategory("strCategoryAppearance", 6), _ <LocalizedCategory("strCategoryAppearance", 6), _
Browsable(True), _ Browsable(True), _

View File

@@ -156,7 +156,8 @@ Namespace Connection
ICA.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, Screen.FromControl(frmMain).Bounds.Width, Screen.FromControl(frmMain).Bounds.Height, 0) ICA.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, Screen.FromControl(frmMain).Bounds.Width, Screen.FromControl(frmMain).Bounds.Height, 0)
ICA.FullScreenWindow() ICA.FullScreenWindow()
Case Else Case Else
ICA.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, RDP.Resolutions.Items(Int(Info.Resolution)).Width, RDP.Resolutions.Items(Int(Info.Resolution)).Height, 0) Dim resolution As Rectangle = RDP.GetResolutionRectangle(Info.Resolution)
ICA.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, resolution.Width, resolution.Height, 0)
End Select End Select
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strIcaSetResolutionFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strIcaSetResolutionFailed & vbNewLine & ex.Message, True)

View File

@@ -73,18 +73,6 @@ Namespace Connection
End Set End Set
End Property End Property
'Private borderWidth As Integer = frmMain.Size.Width - frmMain.ClientSize.Width
'Private borderHeight As Integer = frmMain.Size.Height - frmMain.ClientSize.Height
Private Shared _BorderSize As Size
Public Shared Property BorderSize() As Size
Get
Return _BorderSize
End Get
Set(ByVal value As Size)
_BorderSize = value
End Set
End Property
Public ReadOnly Property Focused() As Boolean Public ReadOnly Property Focused() As Boolean
Get Get
If GetForegroundWindow() = PuttyHandle Then If GetForegroundWindow() = PuttyHandle Then
@@ -120,38 +108,45 @@ Namespace Connection
arguments.EscapeForShell = False arguments.EscapeForShell = False
arguments.Add("-load", InterfaceControl.Info.PuttySession) arguments.Add("-load", InterfaceControl.Info.PuttySession)
arguments.Add("-" & _PuttyProtocol.ToString)
If _PuttyProtocol = Putty_Protocol.ssh Then If Not TypeOf InterfaceControl.Info Is PuttySession.Info Then
Dim username As String = "" arguments.Add("-" & _PuttyProtocol.ToString)
Dim password As String = ""
If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then If _PuttyProtocol = Putty_Protocol.ssh Then
username = InterfaceControl.Info.Username Dim username As String = ""
Else Dim password As String = ""
If My.Settings.EmptyCredentials = "windows" Then
username = Environment.UserName If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then
ElseIf My.Settings.EmptyCredentials = "custom" Then username = InterfaceControl.Info.Username
username = My.Settings.DefaultUsername Else
If My.Settings.EmptyCredentials = "windows" Then
username = Environment.UserName
ElseIf My.Settings.EmptyCredentials = "custom" Then
username = My.Settings.DefaultUsername
End If
End If
If Not String.IsNullOrEmpty(InterfaceControl.Info.Password) Then
password = InterfaceControl.Info.Password
Else
If My.Settings.EmptyCredentials = "custom" Then
password = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If
End If
arguments.Add("-" & _PuttySSHVersion)
If Not String.IsNullOrEmpty(username) Then
arguments.Add("-l", username)
End If
If Not String.IsNullOrEmpty(password) Then
arguments.Add("-pw", password)
End If End If
End If End If
If Not String.IsNullOrEmpty(InterfaceControl.Info.Password) Then arguments.Add("-P", InterfaceControl.Info.Port.ToString)
password = InterfaceControl.Info.Password arguments.Add(InterfaceControl.Info.Hostname)
Else
If My.Settings.EmptyCredentials = "custom" Then
password = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If
End If
arguments.Add("-" & _PuttySSHVersion)
arguments.Add("-l", username)
arguments.Add("-pw", password)
End If End If
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
arguments.Add(InterfaceControl.Info.Hostname)
If _isPuttyNg Then If _isPuttyNg Then
arguments.Add("-hwndparent", InterfaceControl.Handle.ToString()) arguments.Add("-hwndparent", InterfaceControl.Handle.ToString())
End If End If
@@ -252,19 +247,6 @@ Namespace Connection
End Try End Try
Return isPuttyNg Return isPuttyNg
End Function End Function
Public Shared Sub StartPutty()
Try
Dim p As Process
Dim pSI As New ProcessStartInfo
pSI.FileName = PuttyPath
p = Process.Start(pSI)
p.WaitForExit()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strPuttyStartFailed & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region #End Region
#Region "Enums" #Region "Enums"

View File

@@ -3,31 +3,32 @@ Imports System.Threading
Imports AxMSTSCLib Imports AxMSTSCLib
Imports EOLWTSCOM Imports EOLWTSCOM
Imports System.ComponentModel Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Tools.LocalizedAttributes Imports mRemoteNG.Tools.LocalizedAttributes
Imports MSTSCLib
Namespace Connection Namespace Connection
Namespace Protocol Namespace Protocol
Public Class RDP Public Class RDP
Inherits Connection.Protocol.Base Inherits Base
#Region "Properties" #Region "Properties"
Public Property SmartSize() As Boolean Public Property SmartSize() As Boolean
Get Get
Return RDP.AdvancedSettings4.SmartSizing Return _rdpClient.AdvancedSettings2.SmartSizing
End Get End Get
Set(ByVal value As Boolean) Set(ByVal value As Boolean)
RDP.AdvancedSettings4.SmartSizing = value _rdpClient.AdvancedSettings2.SmartSizing = value
ReconnectForResize() ReconnectForResize()
End Set End Set
End Property End Property
Public Property Fullscreen() As Boolean Public Property Fullscreen() As Boolean
Get Get
Return RDP.FullScreen Return _rdpClient.FullScreen
End Get End Get
Set(ByVal value As Boolean) Set(ByVal value As Boolean)
RDP.FullScreen = value _rdpClient.FullScreen = value
ReconnectForResize() ReconnectForResize()
End Set End Set
End Property End Property
@@ -42,8 +43,8 @@ Namespace Connection
Try Try
If Not _redirectKeys Then Return If Not _redirectKeys Then Return
Debug.Assert(RDP.SecuredSettingsEnabled) Debug.Assert(_rdpClient.SecuredSettingsEnabled)
Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = RDP.SecuredSettings2 Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = _rdpClient.SecuredSettings2
msRdpClientSecuredSettings.KeyboardHookMode = 1 ' Apply key combinations at the remote server. msRdpClientSecuredSettings.KeyboardHookMode = 1 ' Apply key combinations at the remote server.
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectKeysFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectKeysFailed & vbNewLine & ex.Message, True)
@@ -53,69 +54,72 @@ Namespace Connection
#End Region #End Region
#Region "Private Declarations" #Region "Private Declarations"
Private RDP As AxMsRdpClient6NotSafeForScripting Private _rdpClient As MsRdpClient5NotSafeForScripting
Private Info As Connection.Info Private _rdpVersion As Version
Private RDPVersion As Version Private _connectionInfo As Info
#End Region #End Region
#Region "Public Methods" #Region "Public Methods"
Public Sub New() Public Sub New()
Me.Control = New AxMsRdpClient6NotSafeForScripting Control = New AxMsRdpClient5NotSafeForScripting
End Sub End Sub
Public Overrides Function SetProps() As Boolean Public Overrides Function SetProps() As Boolean
MyBase.SetProps() MyBase.SetProps()
Try Try
RDP = Me.Control Control.CreateControl()
Info = Me.InterfaceControl.Info _connectionInfo = InterfaceControl.Info
Try Try
RDP.CreateControl() Do Until Control.Created
Thread.Sleep(0)
Do Until Me.RDP.Created
Thread.Sleep(10)
System.Windows.Forms.Application.DoEvents() System.Windows.Forms.Application.DoEvents()
Loop Loop
Catch comEx As System.Runtime.InteropServices.COMException
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpControlCreationFailed & vbNewLine & vbNewLine & comEx.Message) _rdpClient = CType(Control, AxMsRdpClient5NotSafeForScripting).GetOcx()
RDP.Dispose() Catch ex As Runtime.InteropServices.COMException
MessageCollector.AddExceptionMessage(My.Language.strRdpControlCreationFailed, ex)
Control.Dispose()
Return False Return False
End Try End Try
Me.RDPVersion = New Version(RDP.Version) _rdpVersion = New Version(_rdpClient.Version)
RDP.Server = Me.Info.Hostname _rdpClient.Server = Me._connectionInfo.Hostname
Me.SetCredentials() Me.SetCredentials()
Me.SetResolution() Me.SetResolution()
Me.RDP.FullScreenTitle = Me.Info.Name Me._rdpClient.FullScreenTitle = Me._connectionInfo.Name
'not user changeable 'not user changeable
RDP.AdvancedSettings2.GrabFocusOnConnect = True _rdpClient.AdvancedSettings2.GrabFocusOnConnect = True
RDP.AdvancedSettings3.EnableAutoReconnect = True _rdpClient.AdvancedSettings3.EnableAutoReconnect = True
RDP.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount _rdpClient.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount
RDP.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds) _rdpClient.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds)
RDP.AdvancedSettings5.AuthenticationLevel = 0 _rdpClient.AdvancedSettings5.AuthenticationLevel = 0
RDP.AdvancedSettings2.EncryptionEnabled = 1 _rdpClient.AdvancedSettings2.EncryptionEnabled = 1
RDP.AdvancedSettings2.overallConnectionTimeout = 20 _rdpClient.AdvancedSettings2.overallConnectionTimeout = 20
RDP.AdvancedSettings2.BitmapPeristence = Me.Info.CacheBitmaps _rdpClient.AdvancedSettings2.BitmapPeristence = Me._connectionInfo.CacheBitmaps
RDP.AdvancedSettings7.EnableCredSspSupport = Info.UseCredSsp If _rdpVersion >= Versions.RDC61 Then
_rdpClient.AdvancedSettings7.EnableCredSspSupport = _connectionInfo.UseCredSsp
End If
Me.SetUseConsoleSession() Me.SetUseConsoleSession()
Me.SetPort() Me.SetPort()
RedirectKeys = Info.RedirectKeys RedirectKeys = _connectionInfo.RedirectKeys
Me.SetRedirection() Me.SetRedirection()
Me.SetAuthenticationLevel() Me.SetAuthenticationLevel()
Me.SetRDGateway() SetLoadBalanceInfo()
Me.SetRdGateway()
RDP.ColorDepth = Int(Me.Info.Colors) _rdpClient.ColorDepth = Int(Me._connectionInfo.Colors)
Me.SetPerformanceFlags() Me.SetPerformanceFlags()
RDP.ConnectingText = My.Language.strConnecting _rdpClient.ConnectingText = My.Language.strConnecting
Control.Anchor = AnchorStyles.None Control.Anchor = AnchorStyles.None
@@ -130,7 +134,7 @@ Namespace Connection
Me.SetEventHandlers() Me.SetEventHandlers()
Try Try
RDP.Connect() _rdpClient.Connect()
MyBase.Connect() MyBase.Connect()
Return True Return True
Catch ex As Exception Catch ex As Exception
@@ -142,7 +146,7 @@ Namespace Connection
Public Overrides Sub Disconnect() Public Overrides Sub Disconnect()
Try Try
RDP.Disconnect() _rdpClient.Disconnect()
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpDisconnectFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpDisconnectFailed & vbNewLine & ex.Message, True)
MyBase.Close() MyBase.Close()
@@ -167,8 +171,8 @@ Namespace Connection
Public Overrides Sub Focus() Public Overrides Sub Focus()
Try Try
If RDP.ContainsFocus = False Then If Control.ContainsFocus = False Then
RDP.Focus() Control.Focus()
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFocusFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFocusFailed & vbNewLine & ex.Message, True)
@@ -208,11 +212,14 @@ Namespace Connection
End Function End Function
Private Sub ReconnectForResize() Private Sub ReconnectForResize()
If RDPVersion < Versions.RDC80 Then Return If _rdpVersion < Versions.RDC80 Then Return
If Not InterfaceControl.Info.AutomaticResize Then Return
If Not (InterfaceControl.Info.Resolution = RDPResolutions.FitToWindow Or _ If Not (InterfaceControl.Info.Resolution = RDPResolutions.FitToWindow Or _
InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Or _ InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Then Return
SmartSize Then Return
If SmartSize Then Return
Dim size As Size Dim size As Size
If Not Fullscreen Then If Not Fullscreen Then
@@ -221,109 +228,104 @@ Namespace Connection
size = Screen.FromControl(Control).Bounds.Size size = Screen.FromControl(Control).Bounds.Size
End If End If
Dim msRdpClient8 As MSTSCLib.IMsRdpClient8 = RDP.GetOcx() Dim msRdpClient8 As IMsRdpClient8 = _rdpClient
msRdpClient8.Reconnect(size.Width, size.Height) msRdpClient8.Reconnect(size.Width, size.Height)
End Sub End Sub
Private Sub SetRDGateway() Private Sub SetRdGateway()
Try Try
If RDP.TransportSettings.GatewayIsSupported = 1 Then If _rdpClient.TransportSettings.GatewayIsSupported = 0 Then Return
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True) MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True)
If Info.RDGatewayUsageMethod <> RDGatewayUsageMethod.Never Then If Not _connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Never Then
RDP.TransportSettings2.GatewayProfileUsageMethod = 1 _rdpClient.TransportSettings.GatewayUsageMethod = _connectionInfo.RDGatewayUsageMethod
RDP.TransportSettings.GatewayUsageMethod = Info.RDGatewayUsageMethod _rdpClient.TransportSettings.GatewayHostname = _connectionInfo.RDGatewayHostname
RDP.TransportSettings.GatewayHostname = Info.RDGatewayHostname _rdpClient.TransportSettings.GatewayProfileUsageMethod = 1 ' TSC_PROXY_PROFILE_MODE_EXPLICIT
If Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
RDP.TransportSettings.GatewayUsername = Info.Username _rdpClient.TransportSettings.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD
RDP.TransportSettings.GatewayPassword = Info.Password End If
RDP.TransportSettings.GatewayDomain = Info.Domain If _rdpVersion >= Versions.RDC61 Then
ElseIf Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then
RDP.TransportSettings2.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD _rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.Username
RDP.TransportSettings2.GatewayCredSharing = 0 _rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.Password
_rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.Domain
ElseIf _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
_rdpClient.TransportSettings2.GatewayCredSharing = 0
Else Else
RDP.TransportSettings.GatewayUsername = Info.RDGatewayUsername _rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.RDGatewayUsername
RDP.TransportSettings.GatewayPassword = Info.RDGatewayPassword _rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.RDGatewayPassword
RDP.TransportSettings.GatewayDomain = Info.RDGatewayDomain _rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.RDGatewayDomain
RDP.TransportSettings2.GatewayCredSharing = 0 _rdpClient.TransportSettings2.GatewayCredSharing = 0
End If End If
End If End If
Else Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True) MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True)
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetGatewayFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(MessageClass.ErrorMsg, My.Language.strRdpSetGatewayFailed & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
Private Sub SetUseConsoleSession() Private Sub SetUseConsoleSession()
Try Try
If (Me.Force And Connection.Info.Force.UseConsoleSession) = Connection.Info.Force.UseConsoleSession Then Dim value As Boolean
If RDPVersion < Versions.RDC61 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True) If (Force And Info.Force.UseConsoleSession) = Info.Force.UseConsoleSession Then
RDP.AdvancedSettings2.ConnectToServerConsole = True value = True
Else ElseIf (Force And Info.Force.DontUseConsoleSession) = Info.Force.DontUseConsoleSession Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True) value = False
RDP.AdvancedSettings6.ConnectToAdministerServer = True
End If
ElseIf (Me.Force And Connection.Info.Force.DontUseConsoleSession) = Connection.Info.Force.DontUseConsoleSession Then
If RDPVersion < Versions.RDC61 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
RDP.AdvancedSettings2.ConnectToServerConsole = False
Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
RDP.AdvancedSettings6.ConnectToAdministerServer = False
End If
Else Else
If RDPVersion < Versions.RDC61 Then value = _connectionInfo.UseConsoleSession
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True) End If
RDP.AdvancedSettings2.ConnectToServerConsole = Me.Info.UseConsoleSession
Else If _rdpVersion >= Versions.RDC61 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True) MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
RDP.AdvancedSettings6.ConnectToAdministerServer = Me.Info.UseConsoleSession _rdpClient.AdvancedSettings7.ConnectToAdministerServer = value
End If Else
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
_rdpClient.AdvancedSettings2.ConnectToServerConsole = value
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetConsoleSessionFailed & vbNewLine & ex.Message, True) MessageCollector.AddExceptionMessage(My.Language.strRdpSetConsoleSessionFailed, ex, MessageClass.ErrorMsg, True)
End Try End Try
End Sub End Sub
Private Sub SetCredentials() Private Sub SetCredentials()
Try Try
Dim _user As String = Me.Info.Username Dim userName As String = _connectionInfo.Username
Dim _pass As String = Me.Info.Password Dim password As String = _connectionInfo.Password
Dim _dom As String = Me.Info.Domain Dim domain As String = _connectionInfo.Domain
If _user = "" Then If userName = "" Then
Select Case My.Settings.EmptyCredentials Select Case My.Settings.EmptyCredentials
Case "windows" Case "windows"
RDP.UserName = Environment.UserName _rdpClient.UserName = Environment.UserName
Case "custom" Case "custom"
RDP.UserName = My.Settings.DefaultUsername _rdpClient.UserName = My.Settings.DefaultUsername
End Select End Select
Else Else
RDP.UserName = _user _rdpClient.UserName = userName
End If End If
If _pass = "" Then If password = "" Then
Select Case My.Settings.EmptyCredentials Select Case My.Settings.EmptyCredentials
Case "custom" Case "custom"
If My.Settings.DefaultPassword <> "" Then If My.Settings.DefaultPassword <> "" Then
RDP.AdvancedSettings2.ClearTextPassword = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey) _rdpClient.AdvancedSettings2.ClearTextPassword = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If End If
End Select End Select
Else Else
RDP.AdvancedSettings2.ClearTextPassword = _pass _rdpClient.AdvancedSettings2.ClearTextPassword = password
End If End If
If _dom = "" Then If domain = "" Then
Select Case My.Settings.EmptyCredentials Select Case My.Settings.EmptyCredentials
Case "windows" Case "windows"
RDP.Domain = Environment.UserDomainName _rdpClient.Domain = Environment.UserDomainName
Case "custom" Case "custom"
RDP.Domain = My.Settings.DefaultDomain _rdpClient.Domain = My.Settings.DefaultDomain
End Select End Select
Else Else
RDP.Domain = _dom _rdpClient.Domain = domain
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetCredentialsFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetCredentialsFailed & vbNewLine & ex.Message, True)
@@ -333,28 +335,25 @@ Namespace Connection
Private Sub SetResolution() Private Sub SetResolution()
Try Try
If (Me.Force And Connection.Info.Force.Fullscreen) = Connection.Info.Force.Fullscreen Then If (Me.Force And Connection.Info.Force.Fullscreen) = Connection.Info.Force.Fullscreen Then
RDP.FullScreen = True _rdpClient.FullScreen = True
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width _rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height _rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
Exit Sub Exit Sub
End If End If
Select Case Me.InterfaceControl.Info.Resolution Select Case Me.InterfaceControl.Info.Resolution
Case RDPResolutions.FitToWindow Case RDPResolutions.FitToWindow, RDPResolutions.SmartSize
RDP.DesktopWidth = Me.InterfaceControl.Size.Width _rdpClient.DesktopWidth = InterfaceControl.Size.Width
RDP.DesktopHeight = Me.InterfaceControl.Size.Height _rdpClient.DesktopHeight = InterfaceControl.Size.Height
Case RDPResolutions.SmartSize
RDP.AdvancedSettings.SmartSizing = True
RDP.DesktopWidth = Me.InterfaceControl.Size.Width
RDP.DesktopHeight = Me.InterfaceControl.Size.Height
Case RDPResolutions.Fullscreen Case RDPResolutions.Fullscreen
RDP.FullScreen = True _rdpClient.FullScreen = True
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width _rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height _rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
Case Else Case Else
RDP.DesktopWidth = Resolutions.Items(Int(Me.Info.Resolution)).Width Dim resolution As Rectangle = GetResolutionRectangle(_connectionInfo.Resolution)
RDP.DesktopHeight = Resolutions.Items(Int(Me.Info.Resolution)).Height _rdpClient.DesktopWidth = resolution.Width
_rdpClient.DesktopHeight = resolution.Height
End Select End Select
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetResolutionFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetResolutionFailed & vbNewLine & ex.Message, True)
@@ -363,8 +362,8 @@ Namespace Connection
Private Sub SetPort() Private Sub SetPort()
Try Try
If Me.Info.Port <> Connection.Protocol.RDP.Defaults.Port Then If _connectionInfo.Port <> Defaults.Port Then
RDP.AdvancedSettings2.RDPPort = Me.Info.Port _rdpClient.AdvancedSettings2.RDPPort = _connectionInfo.Port
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPortFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPortFailed & vbNewLine & ex.Message, True)
@@ -373,11 +372,11 @@ Namespace Connection
Private Sub SetRedirection() Private Sub SetRedirection()
Try Try
RDP.AdvancedSettings2.RedirectDrives = Me.Info.RedirectDiskDrives _rdpClient.AdvancedSettings2.RedirectDrives = Me._connectionInfo.RedirectDiskDrives
RDP.AdvancedSettings2.RedirectPorts = Me.Info.RedirectPorts _rdpClient.AdvancedSettings2.RedirectPorts = Me._connectionInfo.RedirectPorts
RDP.AdvancedSettings2.RedirectPrinters = Me.Info.RedirectPrinters _rdpClient.AdvancedSettings2.RedirectPrinters = Me._connectionInfo.RedirectPrinters
RDP.AdvancedSettings2.RedirectSmartCards = Me.Info.RedirectSmartCards _rdpClient.AdvancedSettings2.RedirectSmartCards = Me._connectionInfo.RedirectSmartCards
RDP.SecuredSettings2.AudioRedirectionMode = Int(Me.Info.RedirectSound) _rdpClient.SecuredSettings2.AudioRedirectionMode = Int(Me._connectionInfo.RedirectSound)
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectionFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectionFailed & vbNewLine & ex.Message, True)
End Try End Try
@@ -386,23 +385,23 @@ Namespace Connection
Private Sub SetPerformanceFlags() Private Sub SetPerformanceFlags()
Try Try
Dim pFlags As Integer Dim pFlags As Integer
If Me.Info.DisplayThemes = False Then If Me._connectionInfo.DisplayThemes = False Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableThemes) pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableThemes)
End If End If
If Me.Info.DisplayWallpaper = False Then If Me._connectionInfo.DisplayWallpaper = False Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableWallpaper) pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableWallpaper)
End If End If
If Me.Info.EnableFontSmoothing Then If Me._connectionInfo.EnableFontSmoothing Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableFontSmoothing) pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableFontSmoothing)
End If End If
If Me.Info.EnableDesktopComposition Then If Me._connectionInfo.EnableDesktopComposition Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableDesktopComposition) pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableDesktopComposition)
End If End If
RDP.AdvancedSettings.PerformanceFlags = pFlags _rdpClient.AdvancedSettings2.PerformanceFlags = pFlags
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPerformanceFlagsFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPerformanceFlagsFailed & vbNewLine & ex.Message, True)
End Try End Try
@@ -410,19 +409,28 @@ Namespace Connection
Private Sub SetAuthenticationLevel() Private Sub SetAuthenticationLevel()
Try Try
RDP.AdvancedSettings5.AuthenticationLevel = Me.Info.RDPAuthenticationLevel _rdpClient.AdvancedSettings5.AuthenticationLevel = Me._connectionInfo.RDPAuthenticationLevel
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetAuthenticationLevelFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetAuthenticationLevelFailed & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
Private Sub SetLoadBalanceInfo()
If String.IsNullOrEmpty(_connectionInfo.LoadBalanceInfo) Then Return
Try
_rdpClient.AdvancedSettings2.LoadBalanceInfo = _connectionInfo.LoadBalanceInfo
Catch ex As Exception
MessageCollector.AddExceptionMessage("Unable to set load balance info.", ex)
End Try
End Sub
Private Sub SetEventHandlers() Private Sub SetEventHandlers()
Try Try
AddHandler RDP.OnConnecting, AddressOf RDPEvent_OnConnecting AddHandler _rdpClient.OnConnecting, AddressOf RDPEvent_OnConnecting
AddHandler RDP.OnConnected, AddressOf RDPEvent_OnConnected AddHandler _rdpClient.OnConnected, AddressOf RDPEvent_OnConnected
AddHandler RDP.OnFatalError, AddressOf RDPEvent_OnFatalError AddHandler _rdpClient.OnFatalError, AddressOf RDPEvent_OnFatalError
AddHandler RDP.OnDisconnected, AddressOf RDPEvent_OnDisconnected AddHandler _rdpClient.OnDisconnected, AddressOf RDPEvent_OnDisconnected
AddHandler RDP.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode AddHandler _rdpClient.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetEventHandlersFailed & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetEventHandlersFailed & vbNewLine & ex.Message, True)
End Try End Try
@@ -430,15 +438,15 @@ Namespace Connection
#End Region #End Region
#Region "Private Events & Handlers" #Region "Private Events & Handlers"
Private Sub RDPEvent_OnFatalError(ByVal sender As Object, ByVal e As AxMSTSCLib.IMsTscAxEvents_OnFatalErrorEvent) Private Sub RDPEvent_OnFatalError(ByVal errorCode As Integer)
MyBase.Event_ErrorOccured(Me, e.errorCode) Event_ErrorOccured(Me, errorCode)
End Sub End Sub
Private Sub RDPEvent_OnDisconnected(ByVal sender As Object, ByVal e As IMsTscAxEvents_OnDisconnectedEvent) Private Sub RDPEvent_OnDisconnected(ByVal discReason As Integer)
Const UI_ERR_NORMAL_DISCONNECT As Integer = &HB08 Const UI_ERR_NORMAL_DISCONNECT As Integer = &HB08
If Not e.discReason = UI_ERR_NORMAL_DISCONNECT Then If Not discReason = UI_ERR_NORMAL_DISCONNECT Then
Dim reason As String = RDP.GetErrorDescription(e.discReason, RDP.ExtendedDisconnectReason) Dim reason As String = _rdpClient.GetErrorDescription(discReason, _rdpClient.ExtendedDisconnectReason)
Event_Disconnected(Me, e.discReason & vbCrLf & reason) Event_Disconnected(Me, discReason & vbCrLf & reason)
End If End If
If My.Settings.ReconnectOnDisconnect Then If My.Settings.ReconnectOnDisconnect Then
@@ -453,17 +461,17 @@ Namespace Connection
End If End If
End Sub End Sub
Private Sub RDPEvent_OnConnecting(ByVal sender As Object, ByVal e As System.EventArgs) Private Sub RDPEvent_OnConnecting()
MyBase.Event_Connecting(Me) Event_Connecting(Me)
End Sub End Sub
Private Sub RDPEvent_OnConnected(ByVal sender As Object, ByVal e As System.EventArgs) Private Sub RDPEvent_OnConnected()
MyBase.Event_Connected(Me) Event_Connected(Me)
End Sub End Sub
Private Sub RDPEvent_OnLeaveFullscreenMode(ByVal sender As Object, ByVal e As System.EventArgs) Private Sub RDPEvent_OnLeaveFullscreenMode()
Fullscreen = False Fullscreen = False
RaiseEvent LeaveFullscreen(Me, e) RaiseEvent LeaveFullscreen(Me, New EventArgs())
End Sub End Sub
#End Region #End Region
@@ -594,82 +602,19 @@ Namespace Connection
#End Region #End Region
#Region "Resolution" #Region "Resolution"
Public Class Resolution Public Shared Function GetResolutionRectangle(ByVal resolution As RDPResolutions) As Rectangle
Private _Width As Integer Dim resolutionParts() As String = Nothing
Public Property Width() As Integer If Not resolution = RDPResolutions.FitToWindow And _
Get Not resolution = RDPResolutions.Fullscreen And _
Return Me._Width Not resolution = RDPResolutions.SmartSize Then
End Get resolutionParts = resolution.ToString.Replace("Res", "").Split("x")
Set(ByVal value As Integer) End If
Me._Width = value If resolutionParts Is Nothing OrElse Not resolutionParts.Length = 2 Then
End Set Return New Rectangle(0, 0, 0, 0)
End Property Else
Return New Rectangle(0, 0, resolutionParts(0), resolutionParts(1))
Private _Height As Integer End If
Public Property Height() As Integer End Function
Get
Return Me._Height
End Get
Set(ByVal value As Integer)
Me._Height = value
End Set
End Property
Public Sub New(ByVal Width As Integer, ByVal Height As Integer)
Me._Width = Width
Me._Height = Height
End Sub
End Class
Public Class Resolutions
Public Shared List As New Collection
Public Shared Sub AddResolutions()
Try
For Each RDPResolution As RDPResolutions In [Enum].GetValues(GetType(RDPResolutions))
If RDPResolution = RDPResolutions.FitToWindow Or RDPResolution = RDPResolutions.SmartSize Or RDPResolution = RDPResolutions.Fullscreen Then
Resolutions.Add(New Resolution(0, 0))
Else
Dim ResSize() As String = Split([Enum].GetName(GetType(RDPResolutions), RDPResolution), "x")
Dim ResWidth As String = ResSize(0).Substring(3)
Dim ResHeight As String = ResSize(1)
Resolutions.Add(New Resolution(ResWidth, ResHeight))
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddResolutionsFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Public Shared ReadOnly Property Items(ByVal Index As Object) As Resolution
Get
If TypeOf Index Is Resolution Then
Return Index
Else
Return CType(List.Item(Index + 1), Resolution)
End If
End Get
End Property
Public Shared ReadOnly Property ItemsCount() As Integer
Get
Return List.Count
End Get
End Property
Public Shared Function Add(ByVal nRes As Resolution) As Resolution
Try
List.Add(nRes)
Return nRes
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddResolutionFailed & vbNewLine & ex.Message, True)
End Try
Return Nothing
End Function
End Class
#End Region #End Region
Public Class Versions Public Class Versions
@@ -857,7 +802,7 @@ Namespace Connection
#Region "Reconnect Stuff" #Region "Reconnect Stuff"
Private Sub tmrReconnect_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmrReconnect.Elapsed Private Sub tmrReconnect_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmrReconnect.Elapsed
Dim srvReady As Boolean = Tools.PortScan.Scanner.IsPortOpen(Info.Hostname, Info.Port) Dim srvReady As Boolean = Tools.PortScan.Scanner.IsPortOpen(_connectionInfo.Hostname, _connectionInfo.Port)
ReconnectGroup.ServerReady = srvReady ReconnectGroup.ServerReady = srvReady
@@ -865,7 +810,7 @@ Namespace Connection
tmrReconnect.Enabled = False tmrReconnect.Enabled = False
ReconnectGroup.DisposeReconnectGroup() ReconnectGroup.DisposeReconnectGroup()
'SetProps() 'SetProps()
RDP.Connect() _rdpClient.Connect()
End If End If
End Sub End Sub
#End Region #End Region

View File

@@ -1,10 +1,36 @@
Imports System.ComponentModel Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.Tools.LocalizedAttributes
Imports mRemoteNG.My
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Tools
Namespace Connection Namespace Connection
Namespace PuttySession Namespace PuttySession
Public Class Info Public Class Info
Inherits Connection.Info Inherits Connection.Info
Implements IComponent
#Region "Commands"
<Command(),
LocalizedDisplayName("strPuttySessionSettings")> _
Public Sub SessionSettings()
Try
Dim puttyProcess As New PuttyProcessController
If Not puttyProcess.Start() Then Return
If puttyProcess.SelectListBoxItem(PuttySession) Then
puttyProcess.ClickButton("&Load")
End If
puttyProcess.SetControlText("Button", "&Cancel", "&Close")
puttyProcess.SetControlVisible("Button", "&Open", False)
puttyProcess.WaitForExit()
Catch ex As Exception
MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strErrorCouldNotLaunchPutty & vbNewLine & ex.Message, False)
End Try
End Sub
#End Region
#Region "Properties"
<Browsable(False)> _ <Browsable(False)> _
Public Property RootPuttySessionsInfo() As Root.PuttySessions.Info Public Property RootPuttySessionsInfo() As Root.PuttySessions.Info
@@ -71,6 +97,24 @@ Namespace Connection
<[ReadOnly](True), _ <[ReadOnly](True), _
Browsable(False)> _ Browsable(False)> _
Public Overrides Property UserField() As String Public Overrides Property UserField() As String
#End Region
#Region "IComponent"
Public Property Site() As ISite Implements IComponent.Site
Get
Return New PropertyGridCommandSite(Me)
End Get
Set(value As ISite)
Throw New NotImplementedException()
End Set
End Property
Public Sub Dispose() Implements IDisposable.Dispose
RaiseEvent Disposed(Me, EventArgs.Empty)
End Sub
Public Event Disposed As EventHandler Implements IComponent.Disposed
#End Region
End Class End Class
End Namespace End Namespace
End Namespace End Namespace

View File

@@ -120,7 +120,6 @@ Partial Class frmMain
Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton
Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem
Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem
Me.tmrShowUpdate = New System.Windows.Forms.Timer(Me.components)
Me.tmrAutoSave = New System.Windows.Forms.Timer(Me.components) Me.tmrAutoSave = New System.Windows.Forms.Timer(Me.components)
Me.msMain.SuspendLayout() Me.msMain.SuspendLayout()
Me.tsContainer.ContentPanel.SuspendLayout() Me.tsContainer.ContentPanel.SuspendLayout()
@@ -793,11 +792,6 @@ Partial Class frmMain
Me.ToolStripMenuItem2.Size = New System.Drawing.Size(135, 22) Me.ToolStripMenuItem2.Size = New System.Drawing.Size(135, 22)
Me.ToolStripMenuItem2.Text = "Ctrl-Esc" Me.ToolStripMenuItem2.Text = "Ctrl-Esc"
' '
'tmrShowUpdate
'
Me.tmrShowUpdate.Enabled = True
Me.tmrShowUpdate.Interval = 5000
'
'tmrAutoSave 'tmrAutoSave
' '
Me.tmrAutoSave.Interval = 10000 Me.tmrAutoSave.Interval = 10000
@@ -860,7 +854,6 @@ Partial Class frmMain
Friend WithEvents mMenViewFullscreen As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenViewFullscreen As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents mMenToolsSSHTransfer As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenToolsSSHTransfer As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents tsContainer As System.Windows.Forms.ToolStripContainer Friend WithEvents tsContainer As System.Windows.Forms.ToolStripContainer
Friend WithEvents tmrShowUpdate As System.Windows.Forms.Timer
Friend WithEvents mMenToolsExternalApps As System.Windows.Forms.ToolStripMenuItem Friend WithEvents mMenToolsExternalApps As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents tmrAutoSave As System.Windows.Forms.Timer Friend WithEvents tmrAutoSave As System.Windows.Forms.Timer
Friend WithEvents tsExternalTools As System.Windows.Forms.ToolStrip Friend WithEvents tsExternalTools As System.Windows.Forms.ToolStrip

View File

@@ -278,9 +278,6 @@
<metadata name="ToolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="ToolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>184, 56</value> <value>184, 56</value>
</metadata> </metadata>
<metadata name="tmrShowUpdate.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>112, 17</value>
</metadata>
<metadata name="tmrAutoSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="tmrAutoSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>252, 17</value> <value>252, 17</value>
</metadata> </metadata>

View File

@@ -1,4 +1,3 @@
Imports System.IO
Imports WeifenLuo.WinFormsUI.Docking Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Imports System.Reflection Imports System.Reflection
@@ -33,6 +32,8 @@ Public Class frmMain
#Region "Startup & Shutdown" #Region "Startup & Shutdown"
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MainForm = Me
Startup.CheckCompatibility() Startup.CheckCompatibility()
Startup.CreateLogger() Startup.CreateLogger()
@@ -56,13 +57,12 @@ Public Class frmMain
MessageCollector = New Messages.Collector(Windows.errorsForm) MessageCollector = New Messages.Collector(Windows.errorsForm)
Connection.Protocol.RDP.Resolutions.AddResolutions()
Connection.Protocol.PuttyBase.BorderSize = New Size(SystemInformation.FrameBorderSize.Width, SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height) 'Size.Subtract(Me.Size, Me.ClientSize)
WindowList = New UI.Window.List WindowList = New UI.Window.List
Tools.IeBrowserEmulation.Register()
Startup.GetConnectionIcons() Startup.GetConnectionIcons()
App.Runtime.GetExtApps() GetExtApps()
Windows.treePanel.Focus() Windows.treePanel.Focus()
Tree.Node.TreeView = Windows.treeForm.tvConnections Tree.Node.TreeView = Windows.treeForm.tvConnections
@@ -74,27 +74,13 @@ Public Class frmMain
Return Return
End If End If
PuttySessions.AddSessionsToTree(Tree.Node.TreeView) PuttySessions.StartWatcher()
If My.Settings.StartupComponentsCheck Then If My.Settings.StartupComponentsCheck Then
Windows.Show(UI.Window.Type.ComponentsCheck) Windows.Show(UI.Window.Type.ComponentsCheck)
End If End If
#If Not PORTABLE Then #If PORTABLE Then
If Not My.Settings.CheckForUpdatesAsked Then
Dim CommandButtons() As String = {My.Language.strAskUpdatesCommandRecommended, My.Language.strAskUpdatesCommandCustom, My.Language.strAskUpdatesCommandAskLater}
cTaskDialog.ShowTaskDialogBox(Me, My.Application.Info.ProductName, My.Language.strAskUpdatesMainInstruction, String.Format(My.Language.strAskUpdatesContent, My.Application.Info.ProductName), "", "", "", "", String.Join("|", CommandButtons), eTaskDialogButtons.None, eSysIcons.Question, eSysIcons.Question)
If cTaskDialog.CommandButtonResult = 0 Or cTaskDialog.CommandButtonResult = 1 Then
My.Settings.CheckForUpdatesAsked = True
End If
If cTaskDialog.CommandButtonResult = 1 Then
Windows.ShowUpdatesTab()
End If
End If
Startup.UpdateCheck()
Startup.AnnouncementCheck()
#Else
mMenInfoAnnouncements.Visible = False mMenInfoAnnouncements.Visible = False
mMenToolsUpdate.Visible = False mMenToolsUpdate.Visible = False
mMenInfoSep2.Visible = False mMenInfoSep2.Visible = False
@@ -198,7 +184,7 @@ Public Class frmMain
End With End With
End Sub End Sub
Private Sub ApplyMenuColors(itemCollection As ToolStripItemCollection) Private Shared Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
With ThemeManager.ActiveTheme With ThemeManager.ActiveTheme
Dim menuItem As ToolStripMenuItem Dim menuItem As ToolStripMenuItem
For Each item As ToolStripItem In itemCollection For Each item As ToolStripItem In itemCollection
@@ -213,6 +199,28 @@ Public Class frmMain
End With End With
End Sub End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown
#If Not PORTABLE Then
If Not My.Settings.CheckForUpdatesAsked Then
Dim commandButtons() As String = {My.Language.strAskUpdatesCommandRecommended, My.Language.strAskUpdatesCommandCustom, My.Language.strAskUpdatesCommandAskLater}
cTaskDialog.ShowTaskDialogBox(Me, My.Application.Info.ProductName, My.Language.strAskUpdatesMainInstruction, String.Format(My.Language.strAskUpdatesContent, My.Application.Info.ProductName), "", "", "", "", String.Join("|", commandButtons), eTaskDialogButtons.None, eSysIcons.Question, eSysIcons.Question)
If cTaskDialog.CommandButtonResult = 0 Or cTaskDialog.CommandButtonResult = 1 Then
My.Settings.CheckForUpdatesAsked = True
End If
If cTaskDialog.CommandButtonResult = 1 Then
Windows.ShowUpdatesTab()
End If
End If
Dim nextUpdateCheck As Date = My.Settings.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays))
If My.Settings.UpdatePending Or Date.UtcNow > nextUpdateCheck Then
If Not IsHandleCreated Then CreateHandle() ' Make sure the handle is created so that InvokeRequired returns the correct result
Startup.CheckForUpdate()
Startup.CheckForAnnouncement()
End If
#End If
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Not (WindowList Is Nothing OrElse WindowList.Count = 0) Then If Not (WindowList Is Nothing OrElse WindowList.Count = 0) Then
Dim connectionWindow As UI.Window.Connection Dim connectionWindow As UI.Window.Connection
@@ -239,6 +247,8 @@ Public Class frmMain
End If End If
End If End If
PuttySessions.StopWatcher()
Shutdown.BeforeQuit() Shutdown.BeforeQuit()
_IsClosing = True _IsClosing = True
@@ -254,25 +264,6 @@ Public Class frmMain
#End Region #End Region
#Region "Timer" #Region "Timer"
Private tmrRuns As Integer = 0
Private Sub tmrShowUpdate_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrShowUpdate.Tick
If tmrRuns = 5 Then
Me.tmrShowUpdate.Enabled = False
End If
If App.Runtime.IsUpdateAvailable Then
App.Runtime.Windows.Show(UI.Window.Type.Update)
Me.tmrShowUpdate.Enabled = False
End If
If App.Runtime.IsAnnouncementAvailable Then
App.Runtime.Windows.Show(UI.Window.Type.Announcement)
Me.tmrShowUpdate.Enabled = False
End If
tmrRuns += 1
End Sub
Private Sub tmrAutoSave_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAutoSave.Tick Private Sub tmrAutoSave_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAutoSave.Tick
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Doing AutoSave", True) MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Doing AutoSave", True)
App.Runtime.SaveConnections() App.Runtime.SaveConnections()
@@ -286,8 +277,8 @@ Public Class frmMain
Public Sub AddExternalToolsToToolBar() Public Sub AddExternalToolsToToolBar()
Try Try
For Each item As ToolStripItem In tsExternalTools.Items For index As Integer = tsExternalTools.Items.Count - 1 To 0 Step -1
item.Dispose() tsExternalTools.Items(index).Dispose()
Next Next
tsExternalTools.Items.Clear() tsExternalTools.Items.Clear()
@@ -589,14 +580,10 @@ Public Class frmMain
End If End If
End Sub End Sub
Public Fullscreen As New Tools.Misc.Fullscreen(Me)
Private Sub mMenViewFullscreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenViewFullscreen.Click Private Sub mMenViewFullscreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenViewFullscreen.Click
If Tools.Misc.Fullscreen.FullscreenActive Then Fullscreen.Value = Not Fullscreen.Value
Tools.Misc.Fullscreen.ExitFullscreen() mMenViewFullscreen.Checked = Fullscreen.Value
Me.mMenViewFullscreen.Checked = False
Else
Tools.Misc.Fullscreen.EnterFullscreen()
Me.mMenViewFullscreen.Checked = True
End If
End Sub End Sub
#End Region #End Region
@@ -742,7 +729,7 @@ Public Class frmMain
Next Next
End Sub End Sub
Private Sub AddNodeToMenu(ByVal tnc As TreeNodeCollection, ByVal menToolStrip As ToolStripMenuItem) Private Shared Sub AddNodeToMenu(ByVal tnc As TreeNodeCollection, ByVal menToolStrip As ToolStripMenuItem)
Try Try
For Each tNode As TreeNode In tnc For Each tNode As TreeNode In tnc
Dim tMenItem As New ToolStripMenuItem() Dim tMenItem As New ToolStripMenuItem()
@@ -763,16 +750,16 @@ Public Class frmMain
menToolStrip.DropDownItems.Add(tMenItem) menToolStrip.DropDownItems.Add(tMenItem)
End If End If
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
Next Next
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
Private Sub ConMenItem_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Private Shared Sub ConMenItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = MouseButtons.Left Then If e.Button = MouseButtons.Left Then
If TypeOf sender.Tag Is mRemoteNG.Connection.Info Then If TypeOf sender.Tag Is Connection.Info Then
App.Runtime.OpenConnection(sender.Tag) App.Runtime.OpenConnection(sender.Tag)
End If End If
End If End If

View File

@@ -1,6 +1,9 @@
Imports System.IO Imports System.IO
Imports System.ComponentModel Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.My Imports mRemoteNG.My
Imports mRemoteNG.Tools
Imports PSTaskDialog
Imports WeifenLuo.WinFormsUI.Docking Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Themes Imports mRemoteNG.Themes
@@ -1489,6 +1492,7 @@ Public Class frmOptions
Me.ThemePropertyGrid.Name = "ThemePropertyGrid" Me.ThemePropertyGrid.Name = "ThemePropertyGrid"
Me.ThemePropertyGrid.Size = New System.Drawing.Size(596, 426) Me.ThemePropertyGrid.Size = New System.Drawing.Size(596, 426)
Me.ThemePropertyGrid.TabIndex = 3 Me.ThemePropertyGrid.TabIndex = 3
Me.ThemePropertyGrid.UseCompatibleTextRendering = True
' '
'frmOptions 'frmOptions
' '
@@ -1646,10 +1650,12 @@ Public Class frmOptions
Me.chkAutomaticallyGetSessionInfo.Checked = My.Settings.AutomaticallyGetSessionInfo Me.chkAutomaticallyGetSessionInfo.Checked = My.Settings.AutomaticallyGetSessionInfo
Me.chkAutomaticReconnect.Checked = My.Settings.ReconnectOnDisconnect Me.chkAutomaticReconnect.Checked = My.Settings.ReconnectOnDisconnect
Me.chkSingleInstance.Checked = My.Settings.SingleInstance Me.chkSingleInstance.Checked = My.Settings.SingleInstance
Me.chkUseCustomPuttyPath.Checked = My.Settings.UseCustomPuttyPath
Me.txtCustomPuttyPath.Text = My.Settings.CustomPuttyPath
Me.numPuttyWaitTime.Value = My.Settings.MaxPuttyWaitTime Me.numPuttyWaitTime.Value = My.Settings.MaxPuttyWaitTime
chkUseCustomPuttyPath.Checked = Settings.UseCustomPuttyPath
txtCustomPuttyPath.Text = Settings.CustomPuttyPath
SetPuttyLaunchButtonEnabled()
Me.chkUseProxyForAutomaticUpdates.Checked = My.Settings.UpdateUseProxy Me.chkUseProxyForAutomaticUpdates.Checked = My.Settings.UpdateUseProxy
Me.btnTestProxy.Enabled = My.Settings.UpdateUseProxy Me.btnTestProxy.Enabled = My.Settings.UpdateUseProxy
Me.pnlProxyBasic.Enabled = My.Settings.UpdateUseProxy Me.pnlProxyBasic.Enabled = My.Settings.UpdateUseProxy
@@ -1779,10 +1785,10 @@ Public Class frmOptions
My.Settings.UseCustomPuttyPath = Me.chkUseCustomPuttyPath.Checked My.Settings.UseCustomPuttyPath = Me.chkUseCustomPuttyPath.Checked
My.Settings.CustomPuttyPath = Me.txtCustomPuttyPath.Text My.Settings.CustomPuttyPath = Me.txtCustomPuttyPath.Text
If My.Settings.UseCustomPuttyPath Then If Settings.UseCustomPuttyPath Then
mRemoteNG.Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath Connection.Protocol.PuttyBase.PuttyPath = Settings.CustomPuttyPath
Else Else
mRemoteNG.Connection.Protocol.PuttyBase.PuttyPath = My.Application.Info.DirectoryPath & "\PuTTYNG.exe" Connection.Protocol.PuttyBase.PuttyPath = App.Info.General.PuttyPath
End If End If
My.Settings.MaxPuttyWaitTime = Me.numPuttyWaitTime.Value My.Settings.MaxPuttyWaitTime = Me.numPuttyWaitTime.Value
@@ -1822,8 +1828,9 @@ Public Class frmOptions
End Sub End Sub
#End Region #End Region
#Region "Private Variables" #Region "Private Fields"
Private _initialTab As Integer = 0 Private _initialTab As Integer = 0
Private _appUpdate As App.Update
Private _themeList As BindingList(Of ThemeInfo) Private _themeList As BindingList(Of ThemeInfo)
Private _originalTheme As ThemeInfo Private _originalTheme As ThemeInfo
#End Region #End Region
@@ -2005,26 +2012,70 @@ Public Class frmOptions
End Sub End Sub
Private Sub chkUseCustomPuttyPath_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseCustomPuttyPath.CheckedChanged Private Sub chkUseCustomPuttyPath_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseCustomPuttyPath.CheckedChanged
Me.txtCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked txtCustomPuttyPath.Enabled = chkUseCustomPuttyPath.Checked
Me.btnBrowseCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked btnBrowseCustomPuttyPath.Enabled = chkUseCustomPuttyPath.Checked
SetPuttyLaunchButtonEnabled()
End Sub
Private Sub txtCustomPuttyPath_TextChanged(sender As Object, e As System.EventArgs) Handles txtCustomPuttyPath.TextChanged
SetPuttyLaunchButtonEnabled()
End Sub
Private Sub btnBrowseCustomPuttyPath_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnBrowseCustomPuttyPath.Click
Using openFileDialog As New OpenFileDialog()
With openFileDialog
.Filter = String.Format("{0}|*.exe|{1}|*.*", Language.strFilterApplication, Language.strFilterAll)
.FileName = Path.GetFileName(App.Info.General.PuttyPath)
.CheckFileExists = True
.Multiselect = False
If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
txtCustomPuttyPath.Text = .FileName
SetPuttyLaunchButtonEnabled()
End If
End With
End Using
End Sub
Private Sub SetPuttyLaunchButtonEnabled()
Dim puttyPath As String
If chkUseCustomPuttyPath.Checked Then
puttyPath = txtCustomPuttyPath.Text
Else
puttyPath = App.Info.General.PuttyPath
End If
Dim exists As Boolean = False
Try
exists = File.Exists(puttyPath)
Catch
End Try
If exists Then
lblConfigurePuttySessions.Enabled = True
btnLaunchPutty.Enabled = True
Else
lblConfigurePuttySessions.Enabled = False
btnLaunchPutty.Enabled = False
End If
End Sub End Sub
Private Sub btnLaunchPutty_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaunchPutty.Click Private Sub btnLaunchPutty_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaunchPutty.Click
mRemoteNG.Connection.Protocol.PuttyBase.StartPutty() Try
End Sub Dim puttyProcess As New PuttyProcessController
Dim fileName As String
Private Sub btnBrowseCustomPuttyPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseCustomPuttyPath.Click If chkUseCustomPuttyPath.Checked Then
Dim oDlg As New OpenFileDialog() fileName = txtCustomPuttyPath.Text
oDlg.Filter = My.Language.strFilterApplication & "|*.exe|" & My.Language.strFilterAll & "|*.*" Else
oDlg.FileName = "PuTTYNG.exe" fileName = App.Info.General.PuttyPath
oDlg.CheckFileExists = True End If
oDlg.Multiselect = False puttyProcess.Start(fileName)
puttyProcess.SetControlText("Button", "&Cancel", "&Close")
If oDlg.ShowDialog = System.Windows.Forms.DialogResult.OK Then puttyProcess.SetControlVisible("Button", "&Open", False)
Me.txtCustomPuttyPath.Text = oDlg.FileName puttyProcess.WaitForExit()
End If Catch ex As Exception
cTaskDialog.MessageBox(Application.Info.ProductName, Language.strErrorCouldNotLaunchPutty, "", ex.Message, "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
oDlg.Dispose() End Try
End Sub End Sub
Private Sub btnBrowseXulRunnerPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseXulRunnerPath.Click Private Sub btnBrowseXulRunnerPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseXulRunnerPath.Click
@@ -2063,14 +2114,41 @@ Public Class frmOptions
End Sub End Sub
Private Sub btnTestProxy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestProxy.Click Private Sub btnTestProxy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestProxy.Click
SaveOptions() If _appUpdate IsNot Nothing Then
Dim ud As New App.Update() If _appUpdate.IsGetUpdateInfoRunning Then Return
If ud.IsProxyOK Then
MsgBox(My.Language.strProxyTestSucceeded, MsgBoxStyle.Information)
Else
MsgBox(My.Language.strProxyTestFailed, MsgBoxStyle.Exclamation)
End If End If
_appUpdate = New App.Update
_appUpdate.SetProxySettings(chkUseProxyForAutomaticUpdates.Checked, txtProxyAddress.Text, numProxyPort.Value, chkUseProxyAuthentication.Checked, txtProxyUsername.Text, txtProxyPassword.Text)
btnTestProxy.Enabled = False
btnTestProxy.Text = Language.strOptionsProxyTesting
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
_appUpdate.GetUpdateInfoAsync()
End Sub
Private Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
btnTestProxy.Enabled = True
btnTestProxy.Text = Language.strButtonTestProxy
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
cTaskDialog.ShowCommandBox(Me, Application.Info.ProductName, Language.strProxyTestSucceeded, "", Language.strButtonOK, False)
Catch ex As Exception
cTaskDialog.ShowCommandBox(Me, Application.Info.ProductName, Language.strProxyTestFailed, Misc.GetExceptionMessageRecursive(ex), "", "", "", "", False, eSysIcons.Error, 0)
End Try
End Sub End Sub
Private Sub chkUseProxyAuthentication_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseProxyAuthentication.CheckedChanged Private Sub chkUseProxyAuthentication_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseProxyAuthentication.CheckedChanged

View File

@@ -263,7 +263,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Current Version. ''' Looks up a localized string similar to Latest version.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strAvailableVersion() As String Friend Shared ReadOnly Property strAvailableVersion() As String
Get Get
@@ -561,10 +561,10 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to The (RDP) Sessions feature requires that you have a registered copy of eolwtscom.dll on your system. ''' Looks up a localized string similar to The (RDP) Sessions feature requires that you have a copy of eolwtscom.dll registered on your system.
'''mRemoteNG ships with this component but will not register it automatically unless you run the setup package. '''mRemoteNG ships with this component but it is not registered automatically if you do not use the mRemoteNG Installer.
'''To do register it manually do this: Open up the run dialog (Start - Run) and enter the following: regsvr32 &quot;c:\Program Files\mRemoteNG\eolwtscom.dll&quot; (Where c:\Program Files\mRemoteNG\ is the path to your mRemoteNG installation). '''To register it manually, run the following command from an elevated command prompt: regsvr32 &quot;C:\Program Files\mRemoteNG\eolwtscom.dll&quot; (where C:\Program Files\mRemoteNG\ is the path to your mRemoteNG installation).
'''If you are still not able to pass this check or use the (RDP) Session [rest of string was truncated]&quot;;. '''If this check still fails or you are unable to use the (RDP) Sessions feat [rest of string was truncated]&quot;;.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strCcEOLFailed() As String Friend Shared ReadOnly Property strCcEOLFailed() As String
Get Get
@@ -652,9 +652,8 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services Client) 6.1 installed. You can get it here: http://support.microsoft.com/kb/951616 ''' Looks up a localized string similar to For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services) Client 6.0 installed. You can download it here: http://support.microsoft.com/kb/925876
'''If you have RDP 6.1 installed and the check still fails, try to register mstscax.dll manually. To do this open up the run dialog (Start - Run) and enter the following: regsvr32 &quot;c:\windows\system32\mstscax.dll&quot; (Where c:\ is your system drive). '''If this check still fails or you are unable to use RDP, please consult the mRemoteNG Forum at http://forum.mremoteng.org/..
'''If you still have trouble getting RDP to work please consult the mRemoteNG Forum at ht [rest of string was truncated]&quot;;.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strCcRDPFailed() As String Friend Shared ReadOnly Property strCcRDPFailed() As String
Get Get
@@ -918,6 +917,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to E&amp;xit {0}.
'''</summary>
Friend Shared ReadOnly Property strCommandExitProgram() As String
Get
Return ResourceManager.GetString("strCommandExitProgram", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Couldn&apos;t parse command line args!. ''' Looks up a localized string similar to Couldn&apos;t parse command line args!.
'''</summary> '''</summary>
@@ -927,6 +935,42 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to &amp;Open a connection file.
'''</summary>
Friend Shared ReadOnly Property strCommandOpenConnectionFile() As String
Get
Return ResourceManager.GetString("strCommandOpenConnectionFile", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Try again.
'''</summary>
Friend Shared ReadOnly Property strCommandTryAgain() As String
Get
Return ResourceManager.GetString("strCommandTryAgain", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to {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..
'''</summary>
Friend Shared ReadOnly Property strCompatibilityLenovoAutoScrollUtilityDetected() As String
Get
Return ResourceManager.GetString("strCompatibilityLenovoAutoScrollUtilityDetected", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Compatibility problem detected.
'''</summary>
Friend Shared ReadOnly Property strCompatibilityProblemDetected() As String
Get
Return ResourceManager.GetString("strCompatibilityProblemDetected", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Components Check. ''' Looks up a localized string similar to Components Check.
'''</summary> '''</summary>
@@ -1524,6 +1568,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to PuTTY could not be launched..
'''</summary>
Friend Shared ReadOnly Property strErrorCouldNotLaunchPutty() As String
Get
Return ResourceManager.GetString("strErrorCouldNotLaunchPutty", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Decryption failed. {0}. ''' Looks up a localized string similar to Decryption failed. {0}.
'''</summary> '''</summary>
@@ -2366,7 +2419,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Load From SQL failed!. ''' Looks up a localized string similar to Load from SQL failed.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strLoadFromSqlFailed() As String Friend Shared ReadOnly Property strLoadFromSqlFailed() As String
Get Get
@@ -2374,6 +2427,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to The connection information could not be loaded from the SQL server..
'''</summary>
Friend Shared ReadOnly Property strLoadFromSqlFailedContent() As String
Get
Return ResourceManager.GetString("strLoadFromSqlFailedContent", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Load From XML failed!. ''' Looks up a localized string similar to Load From XML failed!.
'''</summary> '''</summary>
@@ -2950,6 +3012,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Retrieve.
'''</summary>
Friend Shared ReadOnly Property strMenuSessionRetrieve() As String
Get
Return ResourceManager.GetString("strMenuSessionRetrieve", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Sessions. ''' Looks up a localized string similar to Sessions.
'''</summary> '''</summary>
@@ -3257,6 +3328,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Testing....
'''</summary>
Friend Shared ReadOnly Property strOptionsProxyTesting() As String
Get
Return ResourceManager.GetString("strOptionsProxyTesting", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Theme. ''' Looks up a localized string similar to Theme.
'''</summary> '''</summary>
@@ -3365,6 +3445,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Select whether to automatically resize the connection when the window is resized or when fullscreen mode is toggled. Requires RDC 8.0 or higher..
'''</summary>
Friend Shared ReadOnly Property strPropertyDescriptionAutomaticResize() As String
Get
Return ResourceManager.GetString("strPropertyDescriptionAutomaticResize", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Select whether to use bitmap caching or not.. ''' Looks up a localized string similar to Select whether to use bitmap caching or not..
'''</summary> '''</summary>
@@ -3500,6 +3589,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Specifies the load balancing information for use by load balancing routers to choose the best server..
'''</summary>
Friend Shared ReadOnly Property strPropertyDescriptionLoadBalanceInfo() As String
Get
Return ResourceManager.GetString("strPropertyDescriptionLoadBalanceInfo", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Enter the MAC address of the remote host if you wish to use it in an external tool.. ''' Looks up a localized string similar to Enter the MAC address of the remote host if you wish to use it in an external tool..
'''</summary> '''</summary>
@@ -3815,6 +3913,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Automatic Resize.
'''</summary>
Friend Shared ReadOnly Property strPropertyNameAutomaticResize() As String
Get
Return ResourceManager.GetString("strPropertyNameAutomaticResize", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Cache Bitmaps. ''' Looks up a localized string similar to Cache Bitmaps.
'''</summary> '''</summary>
@@ -3950,6 +4057,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Load Balance Info.
'''</summary>
Friend Shared ReadOnly Property strPropertyNameLoadBalanceInfo() As String
Get
Return ResourceManager.GetString("strPropertyNameLoadBalanceInfo", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to MAC Address. ''' Looks up a localized string similar to MAC Address.
'''</summary> '''</summary>
@@ -4367,6 +4483,15 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to PuTTY Session Settings.
'''</summary>
Friend Shared ReadOnly Property strPuttySessionSettings() As String
Get
Return ResourceManager.GetString("strPuttySessionSettings", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to PuTTY Settings. ''' Looks up a localized string similar to PuTTY Settings.
'''</summary> '''</summary>
@@ -4836,7 +4961,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Open RDP Connectin failed!. ''' Looks up a localized string similar to Open RDP Connection failed!.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strRdpOpenConnectionFailed() As String Friend Shared ReadOnly Property strRdpOpenConnectionFailed() As String
Get Get
@@ -5403,7 +5528,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Transfer. ''' Looks up a localized string similar to SSH transfer failed..
'''</summary> '''</summary>
Friend Shared ReadOnly Property strSSHTransferFailed() As String Friend Shared ReadOnly Property strSSHTransferFailed() As String
Get Get
@@ -5979,7 +6104,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Check for update completion failed!. ''' Looks up a localized string similar to The update information could not be downloaded..
'''</summary> '''</summary>
Friend Shared ReadOnly Property strUpdateCheckCompleteFailed() As String Friend Shared ReadOnly Property strUpdateCheckCompleteFailed() As String
Get Get
@@ -5988,11 +6113,20 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Check For Update failed!. ''' Looks up a localized string similar to Check failed.
'''</summary> '''</summary>
Friend Shared ReadOnly Property strUpdateCheckFailed() As String Friend Shared ReadOnly Property strUpdateCheckFailedLabel() As String
Get Get
Return ResourceManager.GetString("strUpdateCheckFailed", resourceCulture) Return ResourceManager.GetString("strUpdateCheckFailedLabel", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Checking for updates....
'''</summary>
Friend Shared ReadOnly Property strUpdateCheckingLabel() As String
Get
Return ResourceManager.GetString("strUpdateCheckingLabel", resourceCulture)
End Get End Get
End Property End Property
@@ -6005,15 +6139,6 @@ Namespace My
End Get End Get
End Property End Property
'''<summary>
''' Looks up a localized string similar to Error deleting update file!.
'''</summary>
Friend Shared ReadOnly Property strUpdateDeleteFailed() As String
Get
Return ResourceManager.GetString("strUpdateDeleteFailed", resourceCulture)
End Get
End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Download complete! ''' Looks up a localized string similar to Download complete!
'''mRemoteNG will now quit and begin with the installation.. '''mRemoteNG will now quit and begin with the installation..
@@ -6025,7 +6150,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Download complete failed!. ''' Looks up a localized string similar to The update could not be downloaded..
'''</summary> '''</summary>
Friend Shared ReadOnly Property strUpdateDownloadCompleteFailed() As String Friend Shared ReadOnly Property strUpdateDownloadCompleteFailed() As String
Get Get
@@ -6034,7 +6159,7 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Download Update failed!. ''' Looks up a localized string similar to The update download could not be initiated..
'''</summary> '''</summary>
Friend Shared ReadOnly Property strUpdateDownloadFailed() As String Friend Shared ReadOnly Property strUpdateDownloadFailed() As String
Get Get
@@ -6079,11 +6204,20 @@ Namespace My
End Property End Property
'''<summary> '''<summary>
''' Looks up a localized string similar to Error starting update!. ''' Looks up a localized string similar to The announcement information could not be downloaded..
'''</summary> '''</summary>
Friend Shared ReadOnly Property strUpdateStartFailed() As String Friend Shared ReadOnly Property strUpdateGetAnnouncementInfoFailed() As String
Get Get
Return ResourceManager.GetString("strUpdateStartFailed", resourceCulture) Return ResourceManager.GetString("strUpdateGetAnnouncementInfoFailed", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The change log could not be downloaded..
'''</summary>
Friend Shared ReadOnly Property strUpdateGetChangeLogFailed() As String
Get
Return ResourceManager.GetString("strUpdateGetChangeLogFailed", resourceCulture)
End Get End Get
End Property End Property

View File

@@ -1827,9 +1827,6 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH Abschluss der Übertragung fehlgeschlagen!</value> <value>SSH Abschluss der Übertragung fehlgeschlagen!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Übertragung fehlgeschlagen!</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>Anfangs IP</value> <value>Anfangs IP</value>
</data> </data>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
@@ -59,7 +59,7 @@
: using a System.ComponentModel.TypeConverter : using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
--> -->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType> <xsd:complexType>
@@ -105,15 +105,15 @@
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer"> <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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>

View File

@@ -416,12 +416,30 @@ Versión de Control {0} de VNCSharpNG</value>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve"> <data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>¡No se pudieron procesar los argumentos de línea de comandos!</value> <value>¡No se pudieron procesar los argumentos de línea de comandos!</value>
</data> </data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Detectado problema de compatibilidad</value>
</data>
<data name="strComponentsCheck" xml:space="preserve"> <data name="strComponentsCheck" xml:space="preserve">
<value>Comprobación de Componentes</value> <value>Comprobación de Componentes</value>
</data> </data>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>¡Error en btnIcon_Click!</value>
</data>
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
<value>¡Fallo en ShowHideGridItems!</value>
</data>
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
<value>¡Fallo en IconMenu_Click!</value>
</data>
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
<value>¡Fallo en el objeto de propiedad de red!</value>
</data>
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve"> <data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
<value>No se pudo definir el estado del host!</value> <value>No se pudo definir el estado del host!</value>
</data> </data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>¡Fallo en pGrid_PopertyValueChanged!</value>
</data>
<data name="strConfigUiLoadFailed" xml:space="preserve"> <data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Error al Cargar la Interfaz de Configuración de Usuario</value> <value>Error al Cargar la Interfaz de Configuración de Usuario</value>
</data> </data>
@@ -521,6 +539,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strConnenctionClosedByUserDetail" xml:space="preserve"> <data name="strConnenctionClosedByUserDetail" xml:space="preserve">
<value>Connexión a {0} via {1} cerrada por el usuario {2}. (Descripción: "{3}"; Campo de Usuario: "{4}")</value> <value>Connexión a {0} via {1} cerrada por el usuario {2}. (Descripción: "{3}"; Campo de Usuario: "{4}")</value>
</data> </data>
<data name="strConnenctionCloseEvent" xml:space="preserve">
<value>Evento de conexión cerrado</value>
</data>
<data name="strConnenctionCloseEventFailed" xml:space="preserve"> <data name="strConnenctionCloseEventFailed" xml:space="preserve">
<value>¡Ha fallado el evento Closed en Connection!</value> <value>¡Ha fallado el evento Closed en Connection!</value>
</data> </data>
@@ -572,6 +593,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strEndPort" xml:space="preserve"> <data name="strEndPort" xml:space="preserve">
<value>Puerto Final</value> <value>Puerto Final</value>
</data> </data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>Fallo al AddExternalToolsToToolBar (frmMain). {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve"> <data name="strErrorAddFolderFailed" xml:space="preserve">
<value>Añadir Carpeta (UI.Window.Tree) fallida. {0}</value> <value>Añadir Carpeta (UI.Window.Tree) fallida. {0}</value>
</data> </data>
@@ -687,6 +711,9 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strHttpConnectionFailed" xml:space="preserve"> <data name="strHttpConnectionFailed" xml:space="preserve">
<value>¡No se pudo crear una nueva conexión HTTP!</value> <value>¡No se pudo crear una nueva conexión HTTP!</value>
</data> </data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>¡Fallo al cambiar el azulejo del documento HTTP!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve"> <data name="strHttpSetPropsFailed" xml:space="preserve">
<value>¡Asignación de Propiedades HTTP fallida!</value> <value>¡Asignación de Propiedades HTTP fallida!</value>
</data> </data>
@@ -741,6 +768,21 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strIntAppFocusFailed" xml:space="preserve"> <data name="strIntAppFocusFailed" xml:space="preserve">
<value>¡No se pudo centrar el foco en Int App!</value> <value>¡No se pudo centrar el foco en Int App!</value>
</data> </data>
<data name="strIntAppHandle" xml:space="preserve">
<value>Manejar aplicación interna: {0}</value>
</data>
<data name="strIntAppKillFailed" xml:space="preserve">
<value>¡Fallo en el proceso de detención de la aplicación interna!</value>
</data>
<data name="strIntAppParentHandle" xml:space="preserve">
<value>Manejar el panel: {0}</value>
</data>
<data name="strIntAppResizeFailed" xml:space="preserve">
<value>¡Fallo al redimensionar la aplicación interna!</value>
</data>
<data name="strIntAppStuff" xml:space="preserve">
<value>--- Cosas de la aplicación interna ---</value>
</data>
<data name="strIntAppTitle" xml:space="preserve"> <data name="strIntAppTitle" xml:space="preserve">
<value>Título Int App: {0}</value> <value>Título Int App: {0}</value>
</data> </data>
@@ -964,10 +1006,10 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<value>Copiar todo</value> <value>Copiar todo</value>
</data> </data>
<data name="strMenuNotificationsDelete" xml:space="preserve"> <data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Eliminar</value> <value>Borrar</value>
</data> </data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve"> <data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Eliminar todo</value> <value>Borrar todo</value>
</data> </data>
<data name="strMenuOpenConnectionFile" xml:space="preserve"> <data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Abrir Archivo de Conexión...</value> <value>Abrir Archivo de Conexión...</value>
@@ -1029,9 +1071,15 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strMenuSessionsAndScreenshots" xml:space="preserve"> <data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sesiones y Capturas de Pantalla</value> <value>Sesiones y Capturas de Pantalla</value>
</data> </data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Mostrar texto de ayuda</value>
</data>
<data name="strMenuShowText" xml:space="preserve"> <data name="strMenuShowText" xml:space="preserve">
<value>Mostar Texto</value> <value>Mostar Texto</value>
</data> </data>
<data name="strMenuSmartSize" xml:space="preserve">
<value>SmartSize (RDP/VNC)</value>
</data>
<data name="strMenuSSHFileTransfer" xml:space="preserve"> <data name="strMenuSSHFileTransfer" xml:space="preserve">
<value>Tranferencia de Archivos por SSH</value> <value>Tranferencia de Archivos por SSH</value>
</data> </data>
@@ -1467,12 +1515,21 @@ Mensaje:
<data name="strPuttyGetSessionsFailed" xml:space="preserve"> <data name="strPuttyGetSessionsFailed" xml:space="preserve">
<value>¡Fallo en la carga de las Sesiones de Putty!</value> <value>¡Fallo en la carga de las Sesiones de Putty!</value>
</data> </data>
<data name="strPuttyHandle" xml:space="preserve">
<value>Manejar Putty: {0}</value>
</data>
<data name="strPuttyKillFailed" xml:space="preserve"> <data name="strPuttyKillFailed" xml:space="preserve">
<value>¡Kill del Proceso Putty fallido!</value> <value>¡Kill del Proceso Putty fallido!</value>
</data> </data>
<data name="strPuttyParentHandle" xml:space="preserve">
<value>Manejar el panel: {0}</value>
</data>
<data name="strPuttyResizeFailed" xml:space="preserve"> <data name="strPuttyResizeFailed" xml:space="preserve">
<value>¡Redimensionamiento de Putty fallido!</value> <value>¡Redimensionamiento de Putty fallido!</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>Sesiones guardadas de PuTTY</value>
</data>
<data name="strPuttySettings" xml:space="preserve"> <data name="strPuttySettings" xml:space="preserve">
<value>Opciones de PuTTY</value> <value>Opciones de PuTTY</value>
</data> </data>
@@ -1482,6 +1539,12 @@ Mensaje:
<data name="strPuttyStartFailed" xml:space="preserve"> <data name="strPuttyStartFailed" xml:space="preserve">
<value>¡Fallo en el arranque de Putty!</value> <value>¡Fallo en el arranque de Putty!</value>
</data> </data>
<data name="strPuttyStuff" xml:space="preserve">
<value>--- Cosas de PuTTY ---</value>
</data>
<data name="strPuttyTitle" xml:space="preserve">
<value>Titulo PuTTy: {0}</value>
</data>
<data name="strQuickConnect" xml:space="preserve"> <data name="strQuickConnect" xml:space="preserve">
<value>Conexión Rápida</value> <value>Conexión Rápida</value>
</data> </data>
@@ -1794,9 +1857,6 @@ Mensaje:
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>¡Final de Transferencia SSH (UI.Window.SSHTransfer) fallida!</value> <value>¡Final de Transferencia SSH (UI.Window.SSHTransfer) fallida!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Tranferencia</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>IP Inicial</value> <value>IP Inicial</value>
</data> </data>
@@ -1845,15 +1905,30 @@ Mensaje:
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve"> <data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Color de fondo del panel de configuración</value> <value>Color de fondo del panel de configuración</value>
</data> </data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Color del texto del panel de configuración</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Color de fondo del menú</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve"> <data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Color del texto del menú</value> <value>Color del texto del menú</value>
</data> </data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Color de fondo de la caja de búsqueda</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Color del texto de la caja de búsqueda</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve"> <data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Color de fondo de la barra de herramientas</value> <value>Color de fondo de la barra de herramientas</value>
</data> </data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve"> <data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Color del texto de la barra de herramientas</value> <value>Color del texto de la barra de herramientas</value>
</data> </data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Color de fondo de la ventana</value>
</data>
<data name="strTitleError" xml:space="preserve"> <data name="strTitleError" xml:space="preserve">
<value>Error ({0})</value> <value>Error ({0})</value>
</data> </data>

View File

@@ -148,7 +148,7 @@
<value>Toujours se connecter, même si l'authentification échoue</value> <value>Toujours se connecter, même si l'authentification échoue</value>
</data> </data>
<data name="strAlwaysShowPanelSelection" xml:space="preserve"> <data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Toujours afficher la sélection de panneau à l'ouverture d'une connexion</value> <value>Toujours demander la sélection d'un panneau lors de l'ouverture d'une connexion</value>
</data> </data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve"> <data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Toujours afficher les onglets du panneau</value> <value>Toujours afficher les onglets du panneau</value>
@@ -403,6 +403,12 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve"> <data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Impossible de parcourir les arguments de la ligne de commande !</value> <value>Impossible de parcourir les arguments de la ligne de commande !</value>
</data> </data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<value>{0} a détecté que l'utilitaire Lenovo Auto Scroll Utility est executé sur le système. Cet utilitaire est connu pour générer des problèmes avec {0}. Il est recommandé de le désactiver ou de le désinstaller.</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Problème de compatibilité détecté</value>
</data>
<data name="strComponentsCheck" xml:space="preserve"> <data name="strComponentsCheck" xml:space="preserve">
<value>Vérifiez les composants</value> <value>Vérifiez les composants</value>
</data> </data>
@@ -603,7 +609,7 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
</data> </data>
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve"> <data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
<value>Les paramètres de sécurité Windows, "Système de cryptographie: Utilise FIPS, algorithmes compatible pour le cryptage, hachage et signature", est activé. Ce paramètre n'est pas compatible avec {0}. <value>Les paramètres de sécurité Windows, "Système de cryptographie: Utilise FIPS, algorithmes compatible pour le cryptage, hachage et signature", est activé. Ce paramètre n'est pas compatible avec {0}.
Allez sur l'article du support de Microsoft pour plus d'informations http://support.microsoft.com/kb/811833 for more information. Consultez l'article du support de Microsoft pour plus d'informations http://support.microsoft.com/kb/811833
{0} va maintenant fermer.</value> {0} va maintenant fermer.</value>
</data> </data>
@@ -719,7 +725,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<value>Échec de ICA Set Resolution !</value> <value>Échec de ICA Set Resolution !</value>
</data> </data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve"> <data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Identifier les onglets de connexion rapide en ajoutant le préfix "Rapide."</value> <value>Identifier les onglets de connexion rapide en ajoutant le préfixe "Rapide."</value>
</data> </data>
<data name="strImportAD" xml:space="preserve"> <data name="strImportAD" xml:space="preserve">
<value>Importer à partir d'Active Directory</value> <value>Importer à partir d'Active Directory</value>
@@ -776,7 +782,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<value>CTRL-ALT-DEL</value> <value>CTRL-ALT-DEL</value>
</data> </data>
<data name="strKeysCtrlEsc" xml:space="preserve"> <data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value> <value>CTRL-Echap</value>
</data> </data>
<data name="strLabelAddress" xml:space="preserve"> <data name="strLabelAddress" xml:space="preserve">
<value>Adresse:</value> <value>Adresse:</value>
@@ -989,7 +995,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<value>Notifications</value> <value>Notifications</value>
</data> </data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve"> <data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copiez tout</value> <value>Tout copier</value>
</data> </data>
<data name="strMenuNotificationsDelete" xml:space="preserve"> <data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Supprimer</value> <value>Supprimer</value>
@@ -1522,6 +1528,9 @@ Message:
<data name="strPuttyResizeFailed" xml:space="preserve"> <data name="strPuttyResizeFailed" xml:space="preserve">
<value>Échec du redimensionnement de Putty !</value> <value>Échec du redimensionnement de Putty !</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>Sessions PuTTY sauvegardées</value>
</data>
<data name="strPuttySettings" xml:space="preserve"> <data name="strPuttySettings" xml:space="preserve">
<value>Paramètres PuTTY</value> <value>Paramètres PuTTY</value>
</data> </data>
@@ -1868,7 +1877,7 @@ Message:
<value>Échec de SSH Transfer End (UI.Window.SSHTransfer)!</value> <value>Échec de SSH Transfer End (UI.Window.SSHTransfer)!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve"> <data name="strSSHTransferFailed" xml:space="preserve">
<value>Transfert</value> <value>Echec du transfert SSH échoué.</value>
</data> </data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>IP de début</value> <value>IP de début</value>
@@ -1964,7 +1973,7 @@ Message:
<value>La couleur d'arrière-plan de la fenêtre principale.</value> <value>La couleur d'arrière-plan de la fenêtre principale.</value>
</data> </data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve"> <data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Couleur de fond de panneau de configuration</value> <value>Couleur de fond du panneau de configuration</value>
</data> </data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve"> <data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Couleur de texte pour le panneau de configuration</value> <value>Couleur de texte pour le panneau de configuration</value>
@@ -2000,16 +2009,16 @@ Message:
<value>Couleur de fond de la boite de recherche</value> <value>Couleur de fond de la boite de recherche</value>
</data> </data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve"> <data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Couleur du texte pour la boite de recherche</value> <value>Couleur du texte de la recherche</value>
</data> </data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve"> <data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Couleur du Texte de la Boîte de Recherche</value> <value>Couleur du Texte de la Boîte de Recherche</value>
</data> </data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve"> <data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Couleur de fond de barre d'outils</value> <value>Couleur de fond de la barre d'outils</value>
</data> </data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve"> <data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Couleur du texte pour la barre d'outils</value> <value>Couleur du texte de la barre d'outils</value>
</data> </data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve"> <data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Couleur de fond de la fenêtre</value> <value>Couleur de fond de la fenêtre</value>

View File

@@ -1876,9 +1876,6 @@ Messaggio:
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH Transfer End (UI.Window.SSHTransfer) fallito!</value> <value>SSH Transfer End (UI.Window.SSHTransfer) fallito!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Trasferimento</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>IP iniziale</value> <value>IP iniziale</value>
</data> </data>

File diff suppressed because it is too large Load Diff

View File

@@ -417,6 +417,12 @@ VncSharpNG Versie {0}</value>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve"> <data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Kan opdrachtprompt argumenten niet parsen!</value> <value>Kan opdrachtprompt argumenten niet parsen!</value>
</data> </data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<value>{0} heeft de Lenovo Auto Scroll Utility op het systeem ontdekt. Deze utility staat bekend om problemen met {0}. Het wordt aangeraden om het uit te schakelen of te deïnstalleren.</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Compatibiliteits probleem ontdekt</value>
</data>
<data name="strComponentsCheck" xml:space="preserve"> <data name="strComponentsCheck" xml:space="preserve">
<value>Controle Componenten</value> <value>Controle Componenten</value>
</data> </data>
@@ -1541,6 +1547,9 @@ Bericht:
<data name="strPuttyResizeFailed" xml:space="preserve"> <data name="strPuttyResizeFailed" xml:space="preserve">
<value>PuTTy Formaat Wijzigen Mislukt!</value> <value>PuTTy Formaat Wijzigen Mislukt!</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY opgeslagen sessies</value>
</data>
<data name="strPuttySettings" xml:space="preserve"> <data name="strPuttySettings" xml:space="preserve">
<value>PuTTY Instellingen</value> <value>PuTTY Instellingen</value>
</data> </data>
@@ -1887,7 +1896,7 @@ Bericht:
<value>SSH Overdracht (UI.Window.SSHTransfer) mislukt!</value> <value>SSH Overdracht (UI.Window.SSHTransfer) mislukt!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve"> <data name="strSSHTransferFailed" xml:space="preserve">
<value>Overdracht</value> <value>SSH overdracht heeft gefaald.</value>
</data> </data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>Start IP</value> <value>Start IP</value>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,351 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="strAbout" xml:space="preserve">
<value>Sobre</value>
</data>
<data name="strActive" xml:space="preserve">
<value>Ativo</value>
</data>
<data name="strActivity" xml:space="preserve">
<value>Atividade</value>
</data>
<data name="strAddConnection" xml:space="preserve">
<value>Nova conexão</value>
</data>
<data name="strAddFolder" xml:space="preserve">
<value>Nova pasta</value>
</data>
<data name="strAddNodeFromXmlFailed" xml:space="preserve">
<value>AddNodeFromXML falhou!</value>
</data>
<data name="strAddNodesFromSqlFailed" xml:space="preserve">
<value>AddNodesFromSQL falhou!</value>
</data>
<data name="strAllowOnlySingleInstance" xml:space="preserve">
<value>Permitir apenas uma única instância do aplicativo (mRemoteNG é necessário reiniciar)</value>
</data>
<data name="strAlways" xml:space="preserve">
<value>Sempre</value>
</data>
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
<value>Conectar sempre, mesmo se a autenticação falhar</value>
</data>
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Sempre mostrar a caixa de diálogo de seleção de painel ao abrir conexões</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Sempre mostrar ícone da área de notificação</value>
</data>
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
<value>Me pergunte novamente mais tarde</value>
</data>
<data name="strAskUpdatesCommandCustom" xml:space="preserve">
<value>Personalizar as configurações agora</value>
</data>
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
<value>Usar as configurações recomendadas</value>
</data>
<data name="strAskUpdatesContent" xml:space="preserve">
<value>{0} pode verificar automaticamente as atualizações que podem fornecer novas funcionalidades e correções de bugs. É recomendável que você permita {0} verificar atualizações semanais.</value>
</data>
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
<value>Configurações de atualização automática</value>
</data>
<data name="strAspect" xml:space="preserve">
<value>Aspecto</value>
</data>
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
<value>Obter automaticamente informações de sessão</value>
</data>
<data name="strAutoSaveEvery" xml:space="preserve">
<value>Salvar automaticamente a cada:</value>
</data>
<data name="strAutoSaveMins" xml:space="preserve">
<value>Minutos (0 significa desativado)</value>
</data>
<data name="strAvailableVersion" xml:space="preserve">
<value>Versão atual</value>
</data>
<data name="strButtonBrowse" xml:space="preserve">
<value>&amp; Procurar...</value>
</data>
<data name="strButtonCancel" xml:space="preserve">
<value>&amp; Cancelar</value>
</data>
<data name="strButtonChange" xml:space="preserve">
<value>Alterar</value>
</data>
<data name="strButtonClose" xml:space="preserve">
<value>&amp; Fechar</value>
</data>
<data name="strButtonDefaultInheritance" xml:space="preserve">
<value>Herança padrão</value>
</data>
<data name="strButtonDefaultProperties" xml:space="preserve">
<value>Propriedades padrões</value>
</data>
<data name="strButtonDisconnect" xml:space="preserve">
<value>Desconectar</value>
</data>
<data name="strButtonIcon" xml:space="preserve">
<value>Ícone</value>
</data>
<data name="strButtonImport" xml:space="preserve">
<value>&amp; Importar</value>
</data>
<data name="strButtonInheritance" xml:space="preserve">
<value>Herança</value>
</data>
<data name="strButtonLaunchPutty" xml:space="preserve">
<value>Executar o PuTTY</value>
</data>
<data name="strButtonNew" xml:space="preserve">
<value>&amp; Novo</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp; OK</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Propriedades</value>
</data>
<data name="strButtonScan" xml:space="preserve">
<value>&amp; Scanear</value>
</data>
<data name="strButtonStop" xml:space="preserve">
<value>&amp; Parar</value>
</data>
<data name="strButtonTestProxy" xml:space="preserve">
<value>Testar Proxy</value>
</data>
<data name="strCannotImportNormalSessionFile" xml:space="preserve">
<value>Você não pode importar um arquivo de conexão normal. Por favor, use Arquivo - Carregar Conexões para os arquivos de conexão normal!</value>
</data>
<data name="strCannotStartPortScan" xml:space="preserve">
<value>Não é possível iniciar a varredura de portas, formato IP incorreto!</value>
</data>
<data name="strCategoryAppearance" xml:space="preserve">
<value>Aparência</value>
</data>
<data name="strCategoryConnection" xml:space="preserve">
<value>Conexão</value>
</data>
<data name="strCategoryCredentials" xml:space="preserve">
<value>Credenciais</value>
</data>
<data name="strCategoryDisplay" xml:space="preserve">
<value>Mostrar</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>Geral</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Diversos</value>
</data>
<data name="strCategoryProtocol" xml:space="preserve">
<value>Protocolo</value>
</data>
<data name="strCategoryRedirect" xml:space="preserve">
<value>Redirecionar</value>
</data>
<data name="strCcAlwaysShowScreen" xml:space="preserve">
<value>Sempre mostrar esta tela na inicialização</value>
</data>
<data name="strCcCheckAgain" xml:space="preserve">
<value>Atualizar</value>
</data>
<data name="strCcCheckFailed" xml:space="preserve">
<value>Falha na verificação!</value>
</data>
<data name="strCcCheckSucceeded" xml:space="preserve">
<value>Verificação com sucesso!</value>
</data>
<data name="strCcNotInstalledProperly" xml:space="preserve">
<value>não instalado corretamente</value>
</data>
<data name="strCheckboxDomain" xml:space="preserve">
<value>Domínio</value>
</data>
<data name="strCheckboxDoNotShowThisMessageAgain" xml:space="preserve">
<value>Não mostre esta mensagem novamente.</value>
</data>
<data name="strCheckboxInheritance" xml:space="preserve">
<value>Herança</value>
</data>
<data name="strCheckboxPassword" xml:space="preserve">
<value>Senha</value>
</data>
<data name="strCheckboxProxyAuthentication" xml:space="preserve">
<value>Este servidor proxy requer autenticação</value>
</data>
<data name="strCheckboxPuttyPath" xml:space="preserve">
<value>Use o caminho personalizado para o PuTTY:</value>
</data>
<data name="strCheckboxReconnectWhenReady" xml:space="preserve">
<value>Reconectar quando estiver pronto</value>
</data>
<data name="strCheckboxUpdateUseProxy" xml:space="preserve">
<value>Usar um servidor proxy para se conectar</value>
</data>
<data name="strCheckboxUsername" xml:space="preserve">
<value>Nome de usuário</value>
</data>
<data name="strCheckboxWaitForExit" xml:space="preserve">
<value>Esperar para sair</value>
</data>
<data name="strCheckForUpdate" xml:space="preserve">
<value>Verifique novamente</value>
</data>
<data name="strCheckForUpdatesOnStartup" xml:space="preserve">
<value>Verificar se há atualizações e anúncios na inicialização</value>
</data>
<data name="strCheckNow" xml:space="preserve">
<value>Verificar agora</value>
</data>
<data name="strClosedPorts" xml:space="preserve">
<value>Portas fechadas</value>
</data>
<data name="strCollapseAllFolders" xml:space="preserve">
<value>Recolher todas as pastas</value>
</data>
<data name="strColumnArguments" xml:space="preserve">
<value>Argumentos</value>
</data>
<data name="strColumnDisplayName" xml:space="preserve">
<value>Nome de exibição</value>
</data>
<data name="strColumnFilename" xml:space="preserve">
<value>Nome do arquivo</value>
</data>
<data name="strColumnHostnameIP" xml:space="preserve">
<value>HostName/IP</value>
</data>
<data name="strColumnMessage" xml:space="preserve">
<value>Mensagem</value>
</data>
<data name="strColumnUsername" xml:space="preserve">
<value>Nome de usuário</value>
</data>
<data name="strColumnWaitForExit" xml:space="preserve">
<value>Esperar para sair</value>
</data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>pGrid_PopertyValueChanged falhou!</value>
</data>
</root>

View File

@@ -1856,9 +1856,6 @@ Descrição do erro: {1}</value>
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH transferência final (interface do usuário.Window.SSHTransfer) falhou!</value> <value>SSH transferência final (interface do usuário.Window.SSHTransfer) falhou!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Transferência</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>IP de início</value> <value>IP de início</value>
</data> </data>

View File

@@ -105,15 +105,15 @@
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:schema> </xsd:schema>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="resmimetype"> <resheader name="resmimetype">
<value>text/microsoft-resx</value> <value>text/microsoft-resx</value>
</resheader> </resheader>
<resheader name="version"> <resheader name="version">
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer"> <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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve"> <data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Always show panel selection dialog when opening connections</value> <value>Always show panel selection dialog when opening connections</value>
</data> </data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Always show panel tabs</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve"> <data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Always show notification area icon</value> <value>Always show notification area icon</value>
</data> </data>
@@ -181,7 +184,7 @@
<value>Minutes (0 means disabled)</value> <value>Minutes (0 means disabled)</value>
</data> </data>
<data name="strAvailableVersion" xml:space="preserve"> <data name="strAvailableVersion" xml:space="preserve">
<value>Current Version</value> <value>Latest version</value>
</data> </data>
<data name="strButtonBrowse" xml:space="preserve"> <data name="strButtonBrowse" xml:space="preserve">
<value>&amp;Browse...</value> <value>&amp;Browse...</value>
@@ -281,10 +284,10 @@ Please use File - Load Connections for normal connection files!</value>
<value>Check succeeded!</value> <value>Check succeeded!</value>
</data> </data>
<data name="strCcEOLFailed" xml:space="preserve"> <data name="strCcEOLFailed" xml:space="preserve">
<value>The (RDP) Sessions feature requires that you have a registered copy of eolwtscom.dll on your system. <value>The (RDP) Sessions feature requires that you have a copy of eolwtscom.dll registered on your system.
mRemoteNG ships with this component but will not register it automatically unless you run the setup package. mRemoteNG ships with this component but it is not registered automatically if you do not use the mRemoteNG Installer.
To do register it manually do this: Open up the run dialog (Start - Run) and enter the following: regsvr32 "c:\Program Files\mRemoteNG\eolwtscom.dll" (Where c:\Program Files\mRemoteNG\ is the path to your mRemoteNG installation). To register it manually, run the following command from an elevated command prompt: regsvr32 "C:\Program Files\mRemoteNG\eolwtscom.dll" (where C:\Program Files\mRemoteNG\ is the path to your mRemoteNG installation).
If you are still not able to pass this check or use the (RDP) Sessions feature in mRemoteNG please consult the mRemoteNG Forum at http://forum.mremoteng.org/</value> If this check still fails or you are unable to use the (RDP) Sessions feature, please consult the mRemoteNG Forum at http://forum.mremoteng.org/.</value>
</data> </data>
<data name="strCcEOLOK" xml:space="preserve"> <data name="strCcEOLOK" xml:space="preserve">
<value>EOLWTSCOM was found and seems to be registered properly.</value> <value>EOLWTSCOM was found and seems to be registered properly.</value>
@@ -319,9 +322,8 @@ Please make sure that either you have the Putty.exe in your mRemoteNG directory
<value>The PuTTY executable was found and should be ready to use.</value> <value>The PuTTY executable was found and should be ready to use.</value>
</data> </data>
<data name="strCcRDPFailed" xml:space="preserve"> <data name="strCcRDPFailed" xml:space="preserve">
<value>For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services Client) 6.1 installed. You can get it here: http://support.microsoft.com/kb/951616 <value>For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services) Client 6.0 installed. You can download it here: http://support.microsoft.com/kb/925876
If you have RDP 6.1 installed and the check still fails, try to register mstscax.dll manually. To do this open up the run dialog (Start - Run) and enter the following: regsvr32 "c:\windows\system32\mstscax.dll" (Where c:\ is your system drive). If this check still fails or you are unable to use RDP, please consult the mRemoteNG Forum at http://forum.mremoteng.org/.</value>
If you still have trouble getting RDP to work please consult the mRemoteNG Forum at http://forum.mremoteng.org/</value>
</data> </data>
<data name="strCcRDPOK" xml:space="preserve"> <data name="strCcRDPOK" xml:space="preserve">
<value>All RDP components were found and seem to be registered properly. <value>All RDP components were found and seem to be registered properly.
@@ -411,9 +413,24 @@ VncSharpNG Control Version {0}</value>
<data name="strColumnWaitForExit" xml:space="preserve"> <data name="strColumnWaitForExit" xml:space="preserve">
<value>Wait For Exit</value> <value>Wait For Exit</value>
</data> </data>
<data name="strCommandExitProgram" xml:space="preserve">
<value>E&amp;xit {0}</value>
</data>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve"> <data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Couldn't parse command line args!</value> <value>Couldn't parse command line args!</value>
</data> </data>
<data name="strCommandOpenConnectionFile" xml:space="preserve">
<value>&amp;Open a connection file</value>
</data>
<data name="strCommandTryAgain" xml:space="preserve">
<value>&amp;Try again</value>
</data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<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>
</data>
<data name="strComponentsCheck" xml:space="preserve"> <data name="strComponentsCheck" xml:space="preserve">
<value>Components Check</value> <value>Components Check</value>
</data> </data>
@@ -543,9 +560,15 @@ Starting with new connections file.</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve"> <data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Couldn't create new connections file!</value> <value>Couldn't create new connections file!</value>
</data> </data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve"> <data name="strCurrentVersion" xml:space="preserve">
<value>Installed version</value> <value>Installed version</value>
</data> </data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Default Theme</value>
</data>
<data name="strDetect" xml:space="preserve"> <data name="strDetect" xml:space="preserve">
<value>Detect</value> <value>Detect</value>
</data> </data>
@@ -609,6 +632,9 @@ Starting with new connections file.</value>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve"> <data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>The connection list could not be saved.</value> <value>The connection list could not be saved.</value>
</data> </data>
<data name="strErrorCouldNotLaunchPutty" xml:space="preserve">
<value>PuTTY could not be launched.</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve"> <data name="strErrorDecryptionFailed" xml:space="preserve">
<value>Decryption failed. {0}</value> <value>Decryption failed. {0}</value>
</data> </data>
@@ -751,6 +777,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strIcaSetResolutionFailed" xml:space="preserve"> <data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>ICA Set Resolution Failed!</value> <value>ICA Set Resolution Failed!</value>
</data> </data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Identify quick connect tabs by adding the prefix "Quick:"</value>
</data>
<data name="strImportAD" xml:space="preserve"> <data name="strImportAD" xml:space="preserve">
<value>Import from Active Directory</value> <value>Import from Active Directory</value>
</data> </data>
@@ -817,6 +846,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strLabelChangeLog" xml:space="preserve"> <data name="strLabelChangeLog" xml:space="preserve">
<value>Change Log:</value> <value>Change Log:</value>
</data> </data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>When closing connections:</value>
</data>
<data name="strLabelConnect" xml:space="preserve"> <data name="strLabelConnect" xml:space="preserve">
<value>&amp;Connect:</value> <value>&amp;Connect:</value>
</data> </data>
@@ -887,7 +919,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>{0} must be restarted before changes to the language will take effect.</value> <value>{0} must be restarted before changes to the language will take effect.</value>
</data> </data>
<data name="strLoadFromSqlFailed" xml:space="preserve"> <data name="strLoadFromSqlFailed" xml:space="preserve">
<value>Load From SQL failed!</value> <value>Load from SQL failed</value>
</data>
<data name="strLoadFromSqlFailedContent" xml:space="preserve">
<value>The connection information could not be loaded from the SQL server.</value>
</data> </data>
<data name="strLoadFromXmlFailed" xml:space="preserve"> <data name="strLoadFromXmlFailed" xml:space="preserve">
<value>Load From XML failed!</value> <value>Load From XML failed!</value>
@@ -1018,6 +1053,15 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strMenuNotifications" xml:space="preserve"> <data name="strMenuNotifications" xml:space="preserve">
<value>Notifications</value> <value>Notifications</value>
</data> </data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copy All</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Delete All</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve"> <data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Open Connection File...</value> <value>Open Connection File...</value>
</data> </data>
@@ -1072,12 +1116,18 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strMenuSendSpecialKeys" xml:space="preserve"> <data name="strMenuSendSpecialKeys" xml:space="preserve">
<value>Send Special Keys (VNC)</value> <value>Send Special Keys (VNC)</value>
</data> </data>
<data name="strMenuSessionRetrieve" xml:space="preserve">
<value>Retrieve</value>
</data>
<data name="strMenuSessions" xml:space="preserve"> <data name="strMenuSessions" xml:space="preserve">
<value>Sessions</value> <value>Sessions</value>
</data> </data>
<data name="strMenuSessionsAndScreenshots" xml:space="preserve"> <data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sessions and Screenshots</value> <value>Sessions and Screenshots</value>
</data> </data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Show Help Text</value>
</data>
<data name="strMenuShowText" xml:space="preserve"> <data name="strMenuShowText" xml:space="preserve">
<value>Show Text</value> <value>Show Text</value>
</data> </data>
@@ -1172,6 +1222,18 @@ If you run into such an error, please create a new connection file!</value>
<data name="strOpenPorts" xml:space="preserve"> <data name="strOpenPorts" xml:space="preserve">
<value>Open Ports</value> <value>Open Ports</value>
</data> </data>
<data name="strOptionsProxyTesting" xml:space="preserve">
<value>Testing...</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Theme</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Delete</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;New</value>
</data>
<data name="strPanelName" xml:space="preserve"> <data name="strPanelName" xml:space="preserve">
<value>Panel Name</value> <value>Panel Name</value>
</data> </data>
@@ -1199,6 +1261,9 @@ If you run into such an error, please create a new connection file!</value>
<data name="strPropertyDescriptionAuthenticationMode" xml:space="preserve"> <data name="strPropertyDescriptionAuthenticationMode" xml:space="preserve">
<value>Select how you want to authenticate against the VNC server.</value> <value>Select how you want to authenticate against the VNC server.</value>
</data> </data>
<data name="strPropertyDescriptionAutomaticResize" xml:space="preserve">
<value>Select whether to automatically resize the connection when the window is resized or when fullscreen mode is toggled. Requires RDC 8.0 or higher.</value>
</data>
<data name="strPropertyDescriptionCacheBitmaps" xml:space="preserve"> <data name="strPropertyDescriptionCacheBitmaps" xml:space="preserve">
<value>Select whether to use bitmap caching or not.</value> <value>Select whether to use bitmap caching or not.</value>
</data> </data>
@@ -1244,6 +1309,9 @@ If you run into such an error, please create a new connection file!</value>
<data name="strPropertyDescriptionIcon" xml:space="preserve"> <data name="strPropertyDescriptionIcon" xml:space="preserve">
<value>Choose a icon that will be displayed when connected to the host.</value> <value>Choose a icon that will be displayed when connected to the host.</value>
</data> </data>
<data name="strPropertyDescriptionLoadBalanceInfo" xml:space="preserve">
<value>Specifies the load balancing information for use by load balancing routers to choose the best server.</value>
</data>
<data name="strPropertyDescriptionMACAddress" xml:space="preserve"> <data name="strPropertyDescriptionMACAddress" xml:space="preserve">
<value>Enter the MAC address of the remote host if you wish to use it in an external tool.</value> <value>Enter the MAC address of the remote host if you wish to use it in an external tool.</value>
</data> </data>
@@ -1349,6 +1417,9 @@ If you run into such an error, please create a new connection file!</value>
<data name="strPropertyNameAuthenticationMode" xml:space="preserve"> <data name="strPropertyNameAuthenticationMode" xml:space="preserve">
<value>Authentication Mode</value> <value>Authentication Mode</value>
</data> </data>
<data name="strPropertyNameAutomaticResize" xml:space="preserve">
<value>Automatic Resize</value>
</data>
<data name="strPropertyNameCacheBitmaps" xml:space="preserve"> <data name="strPropertyNameCacheBitmaps" xml:space="preserve">
<value>Cache Bitmaps</value> <value>Cache Bitmaps</value>
</data> </data>
@@ -1394,6 +1465,9 @@ If you run into such an error, please create a new connection file!</value>
<data name="strPropertyNameIcon" xml:space="preserve"> <data name="strPropertyNameIcon" xml:space="preserve">
<value>Icon</value> <value>Icon</value>
</data> </data>
<data name="strPropertyNameLoadBalanceInfo" xml:space="preserve">
<value>Load Balance Info</value>
</data>
<data name="strPropertyNameMACAddress" xml:space="preserve"> <data name="strPropertyNameMACAddress" xml:space="preserve">
<value>MAC Address</value> <value>MAC Address</value>
</data> </data>
@@ -1532,6 +1606,12 @@ Message:
<data name="strPuttyResizeFailed" xml:space="preserve"> <data name="strPuttyResizeFailed" xml:space="preserve">
<value>Putty Resize Failed!</value> <value>Putty Resize Failed!</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY Saved Sessions</value>
</data>
<data name="strPuttySessionSettings" xml:space="preserve">
<value>PuTTY Session Settings</value>
</data>
<data name="strPuttySettings" xml:space="preserve"> <data name="strPuttySettings" xml:space="preserve">
<value>PuTTY Settings</value> <value>PuTTY Settings</value>
</data> </data>
@@ -1562,6 +1642,18 @@ Message:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve"> <data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Quick Connect History Exists Failed!</value> <value>Quick Connect History Exists Failed!</value>
</data> </data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Warn me when closing connections</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Warn me only when e&amp;xiting mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Warn me only when closing &amp;multiple connections</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>Do &amp;not warn me when closing connections</value>
</data>
<data name="strRAW" xml:space="preserve"> <data name="strRAW" xml:space="preserve">
<value>RAW</value> <value>RAW</value>
</data> </data>
@@ -1677,7 +1769,7 @@ Message:
<value>GetSessions failed!</value> <value>GetSessions failed!</value>
</data> </data>
<data name="strRdpOpenConnectionFailed" xml:space="preserve"> <data name="strRdpOpenConnectionFailed" xml:space="preserve">
<value>Open RDP Connectin failed!</value> <value>Open RDP Connection failed!</value>
</data> </data>
<data name="strRdpReconnectCount" xml:space="preserve"> <data name="strRdpReconnectCount" xml:space="preserve">
<value>RDP reconnection count:</value> <value>RDP reconnection count:</value>
@@ -1778,6 +1870,9 @@ Message:
<data name="strScreenshots" xml:space="preserve"> <data name="strScreenshots" xml:space="preserve">
<value>Screenshots</value> <value>Screenshots</value>
</data> </data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Search</value>
</data>
<data name="strSendTo" xml:space="preserve"> <data name="strSendTo" xml:space="preserve">
<value>Send To...</value> <value>Send To...</value>
</data> </data>
@@ -1863,7 +1958,7 @@ Message:
<value>SSH Transfer End (UI.Window.SSHTransfer) failed!</value> <value>SSH Transfer End (UI.Window.SSHTransfer) failed!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve"> <data name="strSSHTransferFailed" xml:space="preserve">
<value>Transfer</value> <value>SSH transfer failed.</value>
</data> </data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>Start IP</value> <value>Start IP</value>
@@ -1898,216 +1993,14 @@ Message:
<data name="strTheFollowing" xml:space="preserve"> <data name="strTheFollowing" xml:space="preserve">
<value>The following:</value> <value>The following:</value>
</data> </data>
<data name="strTitleError" xml:space="preserve">
<value>Error ({0})</value>
</data>
<data name="strTitleInformation" xml:space="preserve">
<value>Information ({0})</value>
</data>
<data name="strTitlePassword" xml:space="preserve">
<value>Password</value>
</data>
<data name="strTitleSelectPanel" xml:space="preserve">
<value>Select Panel</value>
</data>
<data name="strTitleWarning" xml:space="preserve">
<value>Warning ({0})</value>
</data>
<data name="strTransfer" xml:space="preserve">
<value>Transfer</value>
</data>
<data name="strTransferFailed" xml:space="preserve">
<value>Transfer failed!</value>
</data>
<data name="strTryIntegrate" xml:space="preserve">
<value>Try to integrate</value>
</data>
<data name="strType" xml:space="preserve">
<value>Type</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>Ultra VNC Repeater</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>UltraVNC SingleClick port:</value>
</data>
<data name="strUncheckProperties" xml:space="preserve">
<value>Uncheck the properties you want not to be saved!</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG requires an update</value>
</data>
<data name="strUpdateCheck" xml:space="preserve">
<value>mRemoteNG can periodically connect to the mRemoteNG website to check for updates and product announcements.</value>
</data>
<data name="strUpdateCheckCompleteFailed" xml:space="preserve">
<value>Check for update completion failed!</value>
</data>
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Check For Update failed!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition does not currently support automatic updates.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>Error deleting update file!</value>
</data>
<data name="strUpdateDownloadComplete" xml:space="preserve">
<value>Download complete!
mRemoteNG will now quit and begin with the installation.</value>
</data>
<data name="strUpdateDownloadCompleteFailed" xml:space="preserve">
<value>Download complete failed!</value>
</data>
<data name="strUpdateDownloadFailed" xml:space="preserve">
<value>Download Update failed!</value>
</data>
<data name="strUpdateFrequencyCustom" xml:space="preserve">
<value>Every {0} days</value>
</data>
<data name="strUpdateFrequencyDaily" xml:space="preserve">
<value>Daily</value>
</data>
<data name="strUpdateFrequencyMonthly" xml:space="preserve">
<value>Monthly</value>
</data>
<data name="strUpdateFrequencyWeekly" xml:space="preserve">
<value>Weekly</value>
</data>
<data name="strUpdateStartFailed" xml:space="preserve">
<value>Error starting update!</value>
</data>
<data name="strUseDifferentUsernameAndPassword" xml:space="preserve">
<value>Use a different username and password</value>
</data>
<data name="strUseOnlyErrorsAndInfosPanel" xml:space="preserve">
<value>Use only Notifications panel (no messagebox popups)</value>
</data>
<data name="strUser" xml:space="preserve">
<value>User</value>
</data>
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Use the same username and password</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Use a smart card</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Use SQL Server to load &amp;&amp; save connections</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>VNC disconnect failed!</value>
</data>
<data name="strVncConnectionOpenFailed" xml:space="preserve">
<value>Opening connection failed!</value>
</data>
<data name="strVncRefreshFailed" xml:space="preserve">
<value>VNC Refresh Screen Failed!</value>
</data>
<data name="strVncSendSpecialKeysFailed" xml:space="preserve">
<value>VNC SendSpecialKeys failed!</value>
</data>
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
<value>VNC Set Event Handlers failed!</value>
</data>
<data name="strVncSetPropsFailed" xml:space="preserve">
<value>VNC Set Props Failed!</value>
</data>
<data name="strVncStartChatFailed" xml:space="preserve">
<value>VNC Start Chat Failed!</value>
</data>
<data name="strVncToggleSmartSizeFailed" xml:space="preserve">
<value>VNC Toggle SmartSize Failed!</value>
</data>
<data name="strVncToggleViewOnlyFailed" xml:space="preserve">
<value>VNC Toggle ViewOnly Failed!</value>
</data>
<data name="strWarnIfAuthFails" xml:space="preserve">
<value>Warn me if authentication fails</value>
</data>
<data name="strWarnings" xml:space="preserve">
<value>Warnings</value>
</data>
<data name="strWeifenLuoAttribution" xml:space="preserve">
<value>Uses the DockPanel Suite by [Weifen Luo]</value>
</data>
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
</data>
<data name="strWriteLogFile" xml:space="preserve">
<value>Write log file (mRemoteNG.log)</value>
</data>
<data name="strXULrunnerPath" xml:space="preserve">
<value>XULrunner path:</value>
</data>
<data name="strYes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Always show panel tabs</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Identify quick connect tabs by adding the prefix "Quick:"</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Search</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copy All</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Delete</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Delete All</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>When closing connections:</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Warn me when closing connections</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Warn me only when e&amp;xiting mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Warn me only when closing &amp;multiple connections</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>Do &amp;not warn me when closing connections</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>General</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve"> <data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Config Panel</value> <value>Config Panel</value>
</data> </data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve"> <data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Connections Panel</value> <value>Connections Panel</value>
</data> </data>
<data name="strDefaultTheme" xml:space="preserve"> <data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Default Theme</value> <value>General</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Theme</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Delete</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;New</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Unnamed Theme</value>
</data> </data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve"> <data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>The background colour of the config panel.</value> <value>The background colour of the config panel.</value>
@@ -2211,10 +2104,161 @@ mRemoteNG will now quit and begin with the installation.</value>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve"> <data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Window Background Colour</value> <value>Window Background Colour</value>
</data> </data>
<data name="strMenuShowHelpText" xml:space="preserve"> <data name="strTitleError" xml:space="preserve">
<value>&amp;Show Help Text</value> <value>Error ({0})</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve"> <data name="strTitleInformation" xml:space="preserve">
<value>PuTTY Saved Sessions</value> <value>Information ({0})</value>
</data>
<data name="strTitlePassword" xml:space="preserve">
<value>Password</value>
</data>
<data name="strTitleSelectPanel" xml:space="preserve">
<value>Select Panel</value>
</data>
<data name="strTitleWarning" xml:space="preserve">
<value>Warning ({0})</value>
</data>
<data name="strTransfer" xml:space="preserve">
<value>Transfer</value>
</data>
<data name="strTransferFailed" xml:space="preserve">
<value>Transfer failed!</value>
</data>
<data name="strTryIntegrate" xml:space="preserve">
<value>Try to integrate</value>
</data>
<data name="strType" xml:space="preserve">
<value>Type</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>Ultra VNC Repeater</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>UltraVNC SingleClick port:</value>
</data>
<data name="strUncheckProperties" xml:space="preserve">
<value>Uncheck the properties you want not to be saved!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Unnamed Theme</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG requires an update</value>
</data>
<data name="strUpdateCheck" xml:space="preserve">
<value>mRemoteNG can periodically connect to the mRemoteNG website to check for updates and product announcements.</value>
</data>
<data name="strUpdateCheckCompleteFailed" xml:space="preserve">
<value>The update information could not be downloaded.</value>
</data>
<data name="strUpdateCheckFailedLabel" xml:space="preserve">
<value>Check failed</value>
</data>
<data name="strUpdateCheckingLabel" xml:space="preserve">
<value>Checking for updates...</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition does not currently support automatic updates.</value>
</data>
<data name="strUpdateDownloadComplete" xml:space="preserve">
<value>Download complete!
mRemoteNG will now quit and begin with the installation.</value>
</data>
<data name="strUpdateDownloadCompleteFailed" xml:space="preserve">
<value>The update could not be downloaded.</value>
</data>
<data name="strUpdateDownloadFailed" xml:space="preserve">
<value>The update download could not be initiated.</value>
</data>
<data name="strUpdateFrequencyCustom" xml:space="preserve">
<value>Every {0} days</value>
</data>
<data name="strUpdateFrequencyDaily" xml:space="preserve">
<value>Daily</value>
</data>
<data name="strUpdateFrequencyMonthly" xml:space="preserve">
<value>Monthly</value>
</data>
<data name="strUpdateFrequencyWeekly" xml:space="preserve">
<value>Weekly</value>
</data>
<data name="strUpdateGetAnnouncementInfoFailed" xml:space="preserve">
<value>The announcement information could not be downloaded.</value>
</data>
<data name="strUpdateGetChangeLogFailed" xml:space="preserve">
<value>The change log could not be downloaded.</value>
</data>
<data name="strUseDifferentUsernameAndPassword" xml:space="preserve">
<value>Use a different username and password</value>
</data>
<data name="strUseOnlyErrorsAndInfosPanel" xml:space="preserve">
<value>Use only Notifications panel (no messagebox popups)</value>
</data>
<data name="strUser" xml:space="preserve">
<value>User</value>
</data>
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Use the same username and password</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Use a smart card</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Use SQL Server to load &amp;&amp; save connections</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>VNC disconnect failed!</value>
</data>
<data name="strVncConnectionOpenFailed" xml:space="preserve">
<value>Opening connection failed!</value>
</data>
<data name="strVncRefreshFailed" xml:space="preserve">
<value>VNC Refresh Screen Failed!</value>
</data>
<data name="strVncSendSpecialKeysFailed" xml:space="preserve">
<value>VNC SendSpecialKeys failed!</value>
</data>
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
<value>VNC Set Event Handlers failed!</value>
</data>
<data name="strVncSetPropsFailed" xml:space="preserve">
<value>VNC Set Props Failed!</value>
</data>
<data name="strVncStartChatFailed" xml:space="preserve">
<value>VNC Start Chat Failed!</value>
</data>
<data name="strVncToggleSmartSizeFailed" xml:space="preserve">
<value>VNC Toggle SmartSize Failed!</value>
</data>
<data name="strVncToggleViewOnlyFailed" xml:space="preserve">
<value>VNC Toggle ViewOnly Failed!</value>
</data>
<data name="strWarnIfAuthFails" xml:space="preserve">
<value>Warn me if authentication fails</value>
</data>
<data name="strWarnings" xml:space="preserve">
<value>Warnings</value>
</data>
<data name="strWeifenLuoAttribution" xml:space="preserve">
<value>Uses the DockPanel Suite by [Weifen Luo]</value>
</data>
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
</data>
<data name="strWriteLogFile" xml:space="preserve">
<value>Write log file (mRemoteNG.log)</value>
</data>
<data name="strXULrunnerPath" xml:space="preserve">
<value>XULrunner path:</value>
</data>
<data name="strYes" xml:space="preserve">
<value>Yes</value>
</data> </data>
</root> </root>

View File

@@ -417,6 +417,12 @@
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve"> <data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Невозможно разобрать аргументы командной строки!</value> <value>Невозможно разобрать аргументы командной строки!</value>
</data> </data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<value>{0} обнаружено что на этой системе работает утилита Lenovo Auto Scroll. Известно, что эта утилита вызвает проблемы с {0}. Рекомендуется отключить или удалить ее.</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Обнаружена проблема совместимости</value>
</data>
<data name="strComponentsCheck" xml:space="preserve"> <data name="strComponentsCheck" xml:space="preserve">
<value>Проверка компонентов</value> <value>Проверка компонентов</value>
</data> </data>
@@ -1547,6 +1553,9 @@
<data name="strPuttyResizeFailed" xml:space="preserve"> <data name="strPuttyResizeFailed" xml:space="preserve">
<value>Ошибка изменения размера окна Putty!</value> <value>Ошибка изменения размера окна Putty!</value>
</data> </data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>Сохраненные сессии PuTTY</value>
</data>
<data name="strPuttySettings" xml:space="preserve"> <data name="strPuttySettings" xml:space="preserve">
<value>Настройки PuTTY</value> <value>Настройки PuTTY</value>
</data> </data>
@@ -1893,7 +1902,7 @@
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value> <value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve"> <data name="strSSHTransferFailed" xml:space="preserve">
<value>Передача</value> <value>SSH ошибка передачи.</value>
</data> </data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>Начальный IP</value> <value>Начальный IP</value>

View File

@@ -1814,9 +1814,6 @@ VncSharpNG Control Version {0}</value>
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value> <value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Передача</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>Початковий IP</value> <value>Початковий IP</value>
</data> </data>

View File

@@ -1863,9 +1863,6 @@ VncSharpNG 版本 {0}</value>
<data name="strSSHTransferEndFailed" xml:space="preserve"> <data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH 传输结束(UI.Window.SSHTransfer失败</value> <value>SSH 传输结束(UI.Window.SSHTransfer失败</value>
</data> </data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>传输</value>
</data>
<data name="strStartIP" xml:space="preserve"> <data name="strStartIP" xml:space="preserve">
<value>起始IP</value> <value>起始IP</value>
</data> </data>

View File

@@ -113,6 +113,10 @@ Namespace Messages
AddToList(lvItem) AddToList(lvItem)
End Sub End Sub
Public Sub AddExceptionMessage(ByVal message As String, ByVal ex As Exception, Optional ByVal msgClass As MessageClass = MessageClass.ErrorMsg, Optional ByVal logOnly As Boolean = False)
AddMessage(msgClass, message & vbNewLine & Tools.Misc.GetExceptionMessageRecursive(ex), logOnly)
End Sub
Private Sub SwitchTimerTick(ByVal sender As Object, ByVal e As System.EventArgs) Private Sub SwitchTimerTick(ByVal sender As Object, ByVal e As System.EventArgs)
Me.SwitchToMessage() Me.SwitchToMessage()
Me.ECTimer.Enabled = False Me.ECTimer.Enabled = False

View File

@@ -2080,7 +2080,7 @@ Namespace My
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _ <Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN")> _ Global.System.Configuration.DefaultSettingValueAttribute("de,en,en-US,es-AR,es,fr,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN")> _
Public ReadOnly Property SupportedUICultures() As String Public ReadOnly Property SupportedUICultures() As String
Get Get
Return CType(Me("SupportedUICultures"),String) Return CType(Me("SupportedUICultures"),String)
@@ -2384,6 +2384,94 @@ Namespace My
Me("PuttySavedSessionsPanel") = value Me("PuttySavedSessionsPanel") = value
End Set End Set
End Property End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property CompatibilityWarnLenovoAutoScrollUtility() As Boolean
Get
Return CType(Me("CompatibilityWarnLenovoAutoScrollUtility"),Boolean)
End Get
Set
Me("CompatibilityWarnLenovoAutoScrollUtility") = value
End Set
End Property
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/announcement-beta.txt")> _
Public ReadOnly Property AnnouncementAddress() As String
Get
Return CType(Me("AnnouncementAddress"),String)
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/")> _
Public Property UpdateAddress() As String
Get
Return CType(Me("UpdateAddress"),String)
End Get
Set
Me("UpdateAddress") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property ConDefaultLoadBalanceInfo() As String
Get
Return CType(Me("ConDefaultLoadBalanceInfo"),String)
End Get
Set
Me("ConDefaultLoadBalanceInfo") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property ConDefaultAutomaticResize() As Boolean
Get
Return CType(Me("ConDefaultAutomaticResize"),Boolean)
End Get
Set
Me("ConDefaultAutomaticResize") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property InhDefaultLoadBalanceInfo() As Boolean
Get
Return CType(Me("InhDefaultLoadBalanceInfo"),Boolean)
End Get
Set
Me("InhDefaultLoadBalanceInfo") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property InhDefaultAutomaticResize() As Boolean
Get
Return CType(Me("InhDefaultAutomaticResize"),Boolean)
End Get
Set
Me("InhDefaultAutomaticResize") = value
End Set
End Property
End Class End Class
End Namespace End Namespace

View File

@@ -471,7 +471,7 @@
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="SupportedUICultures" Type="System.String" Scope="Application"> <Setting Name="SupportedUICultures" Type="System.String" Scope="Application">
<Value Profile="(Default)">de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN</Value> <Value Profile="(Default)">de,en,en-US,es-AR,es,fr,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN</Value>
</Setting> </Setting>
<Setting Name="ConDefaultRDGatewayHostname" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User"> <Setting Name="ConDefaultRDGatewayHostname" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
@@ -542,5 +542,26 @@
<Setting Name="PuttySavedSessionsPanel" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User"> <Setting Name="PuttySavedSessionsPanel" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" /> <Value Profile="(Default)" />
</Setting> </Setting>
<Setting Name="CompatibilityWarnLenovoAutoScrollUtility" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="AnnouncementAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="Application">
<Value Profile="(Default)">https://update.mremoteng.org/announcement-beta.txt</Value>
</Setting>
<Setting Name="UpdateAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)">https://update.mremoteng.org/</Value>
</Setting>
<Setting Name="ConDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ConDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="InhDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InhDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

Binary file not shown.

Binary file not shown.

View File

@@ -114,7 +114,7 @@ Namespace Themes
Return _toolbarBackgroundColor Return _toolbarBackgroundColor
End Get End Get
Set(value As Color) Set(value As Color)
If _toolbarBackgroundColor = value Then Return If _toolbarBackgroundColor = value Or value.A < 255 Then Return
_toolbarBackgroundColor = value _toolbarBackgroundColor = value
NotifyPropertyChanged("ToolbarBackgroundColor") NotifyPropertyChanged("ToolbarBackgroundColor")
End Set End Set
@@ -147,7 +147,7 @@ Namespace Themes
Return _connectionsPanelBackgroundColor Return _connectionsPanelBackgroundColor
End Get End Get
Set(value As Color) Set(value As Color)
If _connectionsPanelBackgroundColor = value Or value = Color.Transparent Then Return If _connectionsPanelBackgroundColor = value Or value.A < 255 Then Return
_connectionsPanelBackgroundColor = value _connectionsPanelBackgroundColor = value
NotifyPropertyChanged("ConnectionsPanelBackgroundColor") NotifyPropertyChanged("ConnectionsPanelBackgroundColor")
End Set End Set
@@ -192,7 +192,7 @@ Namespace Themes
Return _searchBoxBackgroundColor Return _searchBoxBackgroundColor
End Get End Get
Set(value As Color) Set(value As Color)
If _searchBoxBackgroundColor = value Or value = Color.Transparent Then Return If _searchBoxBackgroundColor = value Or value.A < 255 Then Return
_searchBoxBackgroundColor = value _searchBoxBackgroundColor = value
NotifyPropertyChanged("SearchBoxBackgroundColor") NotifyPropertyChanged("SearchBoxBackgroundColor")
End Set End Set
@@ -239,7 +239,7 @@ Namespace Themes
Return _configPanelBackgroundColor Return _configPanelBackgroundColor
End Get End Get
Set(value As Color) Set(value As Color)
If _configPanelBackgroundColor = value Or value = Color.Transparent Then Return If _configPanelBackgroundColor = value Or value.A < 255 Then Return
_configPanelBackgroundColor = value _configPanelBackgroundColor = value
NotifyPropertyChanged("ConfigPanelBackgroundColor") NotifyPropertyChanged("ConfigPanelBackgroundColor")
End Set End Set
@@ -284,7 +284,7 @@ Namespace Themes
Return _configPanelHelpBackgroundColor Return _configPanelHelpBackgroundColor
End Get End Get
Set(value As Color) Set(value As Color)
If _configPanelHelpBackgroundColor = value Or value = Color.Transparent Then Return If _configPanelHelpBackgroundColor = value Or value.A < 255 Then Return
_configPanelHelpBackgroundColor = value _configPanelHelpBackgroundColor = value
NotifyPropertyChanged("ConfigPanelHelpBackgroundColor") NotifyPropertyChanged("ConfigPanelHelpBackgroundColor")
End Set End Set

View File

@@ -24,7 +24,11 @@ Namespace Themes
Public Shared Function LoadThemes() As List(Of ThemeInfo) Public Shared Function LoadThemes() As List(Of ThemeInfo)
Dim themes As New List(Of ThemeInfo) Dim themes As New List(Of ThemeInfo)
themes.Add(DefaultTheme) themes.Add(DefaultTheme)
themes.AddRange(ThemeSerializer.LoadFromXmlFile(Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName))) Try
themes.AddRange(ThemeSerializer.LoadFromXmlFile(Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName)))
Catch ex As FileNotFoundException
End Try
Return themes Return themes
End Function End Function
@@ -69,16 +73,21 @@ Namespace Themes
Return _activeTheme Return _activeTheme
End Get End Get
Set(value As ThemeInfo) Set(value As ThemeInfo)
If _activeTheme Is Nothing OrElse Not _activeTheme.Equals(value) Then ' We need to set ActiveTheme to the new theme to make sure it references the right object.
If _activeThemeHandlerSet Then RemoveHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged ' However, if both themes have the same properties, we don't need to raise a notification event.
Dim needNotify As Boolean = True
_activeTheme = value If _activeTheme IsNot Nothing Then
If _activeTheme.Equals(value) Then needNotify = False
AddHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
_activeThemeHandlerSet = True
NotifyThemeChanged(_activeTheme, New PropertyChangedEventArgs(""))
End If End If
If _activeThemeHandlerSet Then RemoveHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
_activeTheme = value
AddHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
_activeThemeHandlerSet = True
If needNotify Then NotifyThemeChanged(_activeTheme, New PropertyChangedEventArgs(""))
End Set End Set
End Property End Property
#End Region #End Region

View File

@@ -39,7 +39,7 @@ Namespace Themes
color = propertyInfo.GetValue(themeInfo, Nothing) color = propertyInfo.GetValue(themeInfo, Nothing)
xmlTextWriter.WriteStartElement("Color") xmlTextWriter.WriteStartElement("Color")
xmlTextWriter.WriteAttributeString("Name", propertyInfo.Name) xmlTextWriter.WriteAttributeString("Name", propertyInfo.Name)
xmlTextWriter.WriteAttributeString("Value", color.Name) xmlTextWriter.WriteAttributeString("Value", EncodeColorName(color))
xmlTextWriter.WriteEndElement() ' Color xmlTextWriter.WriteEndElement() ' Color
Next Next
@@ -91,12 +91,29 @@ Namespace Themes
colorValue = colorNode.Attributes("Value").Value colorValue = colorNode.Attributes("Value").Value
propertyInfo = themeType.GetProperty(colorName) propertyInfo = themeType.GetProperty(colorName)
If propertyInfo Is Nothing OrElse Not propertyInfo.PropertyType Is colorType Then Continue For If propertyInfo Is Nothing OrElse Not propertyInfo.PropertyType Is colorType Then Continue For
propertyInfo.SetValue(themeInfo, Color.FromName(colorValue), Nothing) propertyInfo.SetValue(themeInfo, DecodeColorName(colorValue), Nothing)
Next Next
themes.Add(themeInfo) themes.Add(themeInfo)
Next Next
Return themes Return themes
End Function End Function
Private Shared Function EncodeColorName(ByVal color As Color) As String
If color.IsNamedColor Then
Return color.Name
Else
Return Hex(color.ToArgb()).PadLeft(8, "0")
End If
End Function
Private Shared Function DecodeColorName(ByVal name As String) As Color
Dim regex As New System.Text.RegularExpressions.Regex("^[0-9a-fA-F]{8}$")
If regex.Match(name).Success Then
Return Color.FromArgb(Convert.ToInt32(name, 16))
Else
Return Color.FromName(name)
End If
End Function
End Class End Class
End Namespace End Namespace

View File

@@ -0,0 +1,248 @@
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports System.Runtime.InteropServices
Imports System.Security.Cryptography
Imports System.Reflection
Imports System.ComponentModel
Namespace Tools
Public Class Authenticode
#Region "Public Methods"
Public Sub New(ByVal filePath As String)
Me.FilePath = filePath
End Sub
Public Function Verify() As StatusValue
Dim trustFileInfoPointer As IntPtr
Dim trustDataPointer As IntPtr
Try
Dim fileInfo As New FileInfo(FilePath)
If Not fileInfo.Exists() Then
_status = StatusValue.FileNotExist
Return _status
End If
If fileInfo.Length = 0 Then
_status = StatusValue.FileEmpty
Return _status
End If
If RequireThumbprintMatch Then
If String.IsNullOrEmpty(ThumbprintToMatch) Then
_status = StatusValue.NoThumbprintToMatch
Return _status
End If
Dim certificate As X509Certificate = X509Certificate.CreateFromSignedFile(FilePath)
Dim certificate2 As New X509Certificate2(certificate)
_thumbprint = certificate2.Thumbprint
If Not _thumbprint = ThumbprintToMatch Then
_status = StatusValue.ThumbprintNotMatch
Return _status
End If
End If
Dim trustFileInfo As New Win32.WINTRUST_FILE_INFO
trustFileInfo.pcwszFilePath = FilePath
trustFileInfoPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(trustFileInfo))
Marshal.StructureToPtr(trustFileInfo, trustFileInfoPointer, False)
Dim trustData As New Win32.WINTRUST_DATA
With trustData
.dwUIChoice = Display
.fdwRevocationChecks = Win32.WTD_REVOKE_WHOLECHAIN
.dwUnionChoice = Win32.WTD_CHOICE_FILE
.pFile = trustFileInfoPointer
.dwStateAction = Win32.WTD_STATEACTION_IGNORE
.dwProvFlags = Win32.WTD_DISABLE_MD2_MD4
.dwUIContext = DisplayContext
End With
trustDataPointer = Marshal.AllocCoTaskMem(Marshal.SizeOf(trustData))
Marshal.StructureToPtr(trustData, trustDataPointer, False)
Dim windowHandle As IntPtr
If DisplayParentForm Is Nothing Then
windowHandle = IntPtr.Zero
Else
windowHandle = DisplayParentForm.Handle
End If
_trustProviderErrorCode = Win32.WinVerifyTrust(windowHandle, Win32.WINTRUST_ACTION_GENERIC_VERIFY_V2, trustDataPointer)
Select Case _trustProviderErrorCode
Case Win32.TRUST_E_NOSIGNATURE
_status = StatusValue.NoSignature
Case Win32.TRUST_E_SUBJECT_NOT_TRUSTED
End Select
If Not _trustProviderErrorCode = 0 Then
_status = StatusValue.TrustProviderError
Return _status
End If
_status = StatusValue.Verified
Return _status
Catch ex As CryptographicException
Dim hResultProperty As PropertyInfo = ex.GetType.GetProperty("HResult", BindingFlags.NonPublic Or BindingFlags.Instance)
Dim hResult As Integer = hResultProperty.GetValue(ex, Nothing)
If hResult = Win32.CRYPT_E_NO_MATCH Then
_status = StatusValue.NoSignature
Return _status
Else
_status = StatusValue.UnhandledException
Exception = ex
Return _status
End If
Catch ex As Exception
_status = StatusValue.UnhandledException
Exception = ex
Return _status
Finally
If Not trustDataPointer = IntPtr.Zero Then Marshal.FreeCoTaskMem(trustDataPointer)
If Not trustFileInfoPointer = IntPtr.Zero Then Marshal.FreeCoTaskMem(trustFileInfoPointer)
End Try
End Function
#End Region
#Region "Public Properties"
Public Property Display() As DisplayValue = DisplayValue.None
Public Property DisplayContext() As DisplayContextValue
Public Property DisplayParentForm() As Form
Public Property Exception() As Exception
Public Property FilePath() As String
Public Property RequireThumbprintMatch() As Boolean
Private _status As StatusValue
Public ReadOnly Property Status() As StatusValue
Get
Return _status
End Get
End Property
Public ReadOnly Property StatusMessage() As String
Get
Select Case Status
Case StatusValue.Verified
Return "The file was verified successfully."
Case StatusValue.FileNotExist
Return "The specified file does not exist."
Case StatusValue.FileEmpty
Return "The specified file is empty."
Case StatusValue.NoSignature
Return "The specified file is not digitally signed."
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, ChrW(&H2260), ThumbprintToMatch)
Case StatusValue.TrustProviderError
Dim ex As New Win32Exception(_trustProviderErrorCode)
Return String.Format("The trust provider returned an error. {0}", ex.Message)
Case StatusValue.UnhandledException
Return String.Format("An unhandled exception occurred. {0}", Exception.Message)
Case Else
Return "The status is unknown."
End Select
End Get
End Property
Private _thumbprint As String
Public ReadOnly Property Thumbprint() As String
Get
Return _thumbprint
End Get
End Property
Public Property ThumbprintToMatch() As String
Private _trustProviderErrorCode As Integer
Public ReadOnly Property TrustProviderErrorCode() As Integer
Get
Return _trustProviderErrorCode
End Get
End Property
#End Region
#Region "Public Enums"
Public Enum DisplayValue As UInt32
Unknown = 0
All = Win32.WTD_UI_ALL
None = Win32.WTD_UI_NONE
NoBad = Win32.WTD_UI_NOBAD
NoGood = Win32.WTD_UI_NOGOOD
End Enum
Public Enum DisplayContextValue As UInt32
Execute = Win32.WTD_UICONTEXT_EXECUTE
Install = Win32.WTD_UICONTEXT_INSTALL
End Enum
Public Enum StatusValue As Integer
Unknown = 0
Verified
FileNotExist
FileEmpty
NoSignature
NoThumbprintToMatch
ThumbprintNotMatch
TrustProviderError
UnhandledException
End Enum
#End Region
#Region "Protected Classes"
Protected Class Win32
' ReSharper disable InconsistentNaming
<DllImport("wintrust.dll", CharSet:=CharSet.Auto, SetLastError:=False)> _
Public Shared Function WinVerifyTrust(<[In]()> ByVal hWnd As IntPtr, <[In](), MarshalAs(UnmanagedType.LPStruct)> ByVal pgActionOID As Guid, <[In]()> ByVal pWVTData As IntPtr) As Integer
End Function
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public Class WINTRUST_DATA
Public cbStruct As UInt32 = Marshal.SizeOf(GetType(WINTRUST_DATA))
Public pPolicyCallbackData As IntPtr
Public pSIPClientData As IntPtr
Public dwUIChoice As UInt32
Public fdwRevocationChecks As UInt32
Public dwUnionChoice As UInt32
Public pFile As IntPtr
Public dwStateAction As UInt32
Public hWVTStateData As IntPtr
Public pwszURLReference As IntPtr
Public dwProvFlags As UInt32
Public dwUIContext As UInt32
End Class
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public Class WINTRUST_FILE_INFO
Public cbStruct As UInt32 = Marshal.SizeOf(GetType(WINTRUST_FILE_INFO))
<MarshalAs(UnmanagedType.LPTStr)> _
Public pcwszFilePath As String
Public hFile As IntPtr
Public pgKnownSubject As IntPtr
End Class
Public Const CRYPT_E_NO_MATCH As Integer = &H80092009
Public Const TRUST_E_SUBJECT_NOT_TRUSTED As Integer = &H800B0004
Public Const TRUST_E_NOSIGNATURE As Integer = &H800B0100
Public Shared ReadOnly WINTRUST_ACTION_GENERIC_VERIFY_V2 As New Guid("{00AAC56B-CD44-11d0-8CC2-00C04FC295EE}")
Public Const WTD_CHOICE_FILE As UInt32 = 1
Public Const WTD_DISABLE_MD2_MD4 As UInt32 = &H2000
Public Const WTD_REVOKE_WHOLECHAIN As UInt32 = 1
Public Const WTD_STATEACTION_IGNORE As UInt32 = &H0
Public Const WTD_STATEACTION_VERIFY As UInt32 = &H1
Public Const WTD_STATEACTION_CLOSE As UInt32 = &H2
Public Const WTD_UI_ALL As UInt32 = 1
Public Const WTD_UI_NONE As UInt32 = 2
Public Const WTD_UI_NOBAD As UInt32 = 3
Public Const WTD_UI_NOGOOD As UInt32 = 4
Public Const WTD_UICONTEXT_EXECUTE As UInt32 = 0
Public Const WTD_UICONTEXT_INSTALL As UInt32 = 1
' ReSharper restore InconsistentNaming
End Class
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,40 @@
Namespace Tools
Public Class EnumWindows
Public Shared Function EnumWindows() As List(Of IntPtr)
Dim handleList As New List(Of IntPtr)
HandleLists.Add(handleList)
Dim handleIndex As Integer = HandleLists.IndexOf(handleList)
Win32.EnumWindows(AddressOf EnumCallback, handleIndex)
HandleLists.Remove(handleList)
Return handleList
End Function
Public Shared Function EnumChildWindows(ByVal hWndParent As IntPtr) As List(Of IntPtr)
Dim handleList As New List(Of IntPtr)
HandleLists.Add(handleList)
Dim handleIndex As Integer = HandleLists.IndexOf(handleList)
Win32.EnumChildWindows(hWndParent, AddressOf EnumCallback, handleIndex)
HandleLists.Remove(handleList)
Return handleList
End Function
Private Shared ReadOnly HandleLists As New List(Of List(Of IntPtr))
Private Shared Function EnumCallback(hwnd As Integer, lParam As Integer) As Boolean
HandleLists(lParam).Add(hwnd)
Return True
End Function
' ReSharper disable ClassNeverInstantiated.Local
Private Class Win32
' ReSharper restore ClassNeverInstantiated.Local
Public Delegate Function EnumWindowsProc(ByVal hwnd As Integer, ByVal lParam As Integer) As Boolean
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Boolean
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Boolean
End Class
End Class
End Namespace

View File

@@ -0,0 +1,43 @@
Imports System.Runtime.InteropServices
Namespace Tools
Public Class EnvironmentInfo
Public Shared ReadOnly Property IsWow64() As Boolean
Get
Dim isWow64ProcessDelegate As Win32.IsWow64ProcessDelegate = GetIsWow64ProcessDelegate()
If isWow64ProcessDelegate Is Nothing Then Return False
Dim isWow64Process As Boolean
Dim result As Boolean = isWow64ProcessDelegate.Invoke(Process.GetCurrentProcess().Handle, isWow64Process)
If Not result Then Return False
Return isWow64Process
End Get
End Property
Private Shared Function GetIsWow64ProcessDelegate() As Win32.IsWow64ProcessDelegate
Dim moduleHandle As IntPtr = Win32.LoadLibrary("kernel32")
If moduleHandle = IntPtr.Zero Then Return Nothing
Dim functionPointer As IntPtr = Win32.GetProcAddress(moduleHandle, "IsWow64Process")
If functionPointer = IntPtr.Zero Then Return Nothing
Return Marshal.GetDelegateForFunctionPointer(functionPointer, GetType(Win32.IsWow64ProcessDelegate))
End Function
Protected Class Win32
' ReSharper disable InconsistentNaming
<DllImport("kernel32", CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function LoadLibrary(<[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpFileName As String) As IntPtr
End Function
<DllImport("kernel32", ExactSpelling:=True, CharSet:=CharSet.Ansi, SetLastError:=True)> _
Public Shared Function GetProcAddress(<[In]()> ByVal hModule As IntPtr, <[In](), MarshalAs(UnmanagedType.LPStr)> ByVal lpProcName As String) As IntPtr
End Function
Public Delegate Function IsWow64ProcessDelegate(<[In]()> hProcess As IntPtr, <[Out]()> ByRef Wow64Process As Boolean) As Boolean
' ReSharper restore InconsistentNaming
End Class
End Class
End Namespace

View File

@@ -0,0 +1,39 @@
Imports System.IO
Imports Microsoft.Win32
Namespace Tools
Public Class IeBrowserEmulation
Private Const BrowserEmulationKey As String = "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"
Private Shared _previousIeBrowserEmulationValue As Integer = 0
Public Shared Sub Register()
Dim registryKey As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
If registryKey Is Nothing Then
Registry.CurrentUser.CreateSubKey(BrowserEmulationKey)
registryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
If registryKey Is Nothing Then Return
End If
Dim exeName As String = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName)
_previousIeBrowserEmulationValue = registryKey.GetValue(exeName, 0)
registryKey.SetValue(exeName, 11000, RegistryValueKind.DWord)
End Sub
Public Shared Sub Unregister()
#If Not PORTABLE Then
Return
#Else
Try
Dim registryKey As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
If registryKey Is Nothing Then Return
Dim exeName As String = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName)
If _previousIeBrowserEmulationValue = 0 Then
registryKey.DeleteValue(exeName)
Else
registryKey.SetValue(exeName, _previousIeBrowserEmulationValue, RegistryValueKind.DWord)
End If
Catch
End Try
#End If
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,181 @@
Imports System.Runtime.InteropServices
Imports System.Text
Imports mRemoteNG.My
Namespace Tools
Public Class ProcessController
#Region "Public Methods"
Public Function Start(ByVal fileName As String, Optional ByVal arguments As CommandLineArguments = Nothing) As Boolean
With Process.StartInfo
.UseShellExecute = False
.FileName = fileName
If arguments IsNot Nothing Then .Arguments = arguments.ToString()
End With
If Not Process.Start() Then Return False
GetMainWindowHandle()
Return True
End Function
Public Function SetControlVisible(ByVal className As String, ByVal text As String, Optional ByVal visible As Boolean = True) As Boolean
If Process Is Nothing OrElse Process.HasExited Then Return False
If Handle = IntPtr.Zero Then Return False
Dim controlHandle As IntPtr = GetControlHandle(className, text)
If controlHandle = IntPtr.Zero Then Return False
Dim nCmdShow As Integer
If visible Then
nCmdShow = Win32.SW_SHOW
Else
nCmdShow = Win32.SW_HIDE
End If
Win32.ShowWindow(controlHandle, nCmdShow)
Return True
End Function
Public Function SetControlText(ByVal className As String, ByVal oldText As String, ByVal newText As String) As Boolean
If Process Is Nothing OrElse Process.HasExited Then Return False
If Handle = IntPtr.Zero Then Return False
Dim controlHandle As IntPtr = GetControlHandle(className, oldText)
If controlHandle = IntPtr.Zero Then Return False
Dim result As IntPtr = Win32.SendMessage(controlHandle, Win32.WM_SETTEXT, 0, New StringBuilder(newText))
If Not result.ToInt32() = Win32.TRUE Then Return False
Return True
End Function
Public Function SelectListBoxItem(ByVal itemText As String) As Boolean
If Process Is Nothing OrElse Process.HasExited Then Return False
If Handle = IntPtr.Zero Then Return False
Dim listBoxHandle As IntPtr = GetControlHandle("ListBox")
If listBoxHandle = IntPtr.Zero Then Return False
Dim result As IntPtr = Win32.SendMessage(listBoxHandle, Win32.LB_SELECTSTRING, -1, New StringBuilder(itemText))
If result.ToInt32() = Win32.LB_ERR Then Return False
Return True
End Function
Public Function ClickButton(ByVal text As String) As Boolean
If Process Is Nothing OrElse Process.HasExited Then Return False
If Handle = IntPtr.Zero Then Return False
Dim buttonHandle As IntPtr = GetControlHandle("Button", text)
If buttonHandle = IntPtr.Zero Then Return False
Dim buttonControlId As Integer = Win32.GetDlgCtrlID(buttonHandle)
Win32.SendMessage(Handle, Win32.WM_COMMAND, buttonControlId, buttonHandle)
Return True
End Function
Public Sub WaitForExit()
If Process Is Nothing OrElse Process.HasExited Then Return
Process.WaitForExit()
End Sub
#End Region
#Region "Protected Fields"
Protected Process As New Process
Protected Handle As IntPtr = IntPtr.Zero
Protected Controls As New List(Of IntPtr)
#End Region
#Region "Protected Methods"
Protected Function GetMainWindowHandle() As IntPtr
If Process Is Nothing OrElse Process.HasExited Then Return IntPtr.Zero
Process.WaitForInputIdle(Settings.MaxPuttyWaitTime * 1000)
Handle = IntPtr.Zero
Dim startTicks As Integer = Environment.TickCount
While Handle = IntPtr.Zero And Environment.TickCount < startTicks + (Settings.MaxPuttyWaitTime * 1000)
Process.Refresh()
Handle = Process.MainWindowHandle
If Handle = IntPtr.Zero Then Threading.Thread.Sleep(0)
End While
Return Handle
End Function
Protected Function GetControlHandle(ByVal className As String, Optional ByVal text As String = "") As IntPtr
If Process Is Nothing OrElse Process.HasExited Then Return IntPtr.Zero
If Handle = IntPtr.Zero Then Return IntPtr.Zero
If Controls.Count = 0 Then
Controls = EnumWindows.EnumChildWindows(Handle)
End If
Dim stringBuilder As New System.Text.StringBuilder
Dim controlHandle As IntPtr = IntPtr.Zero
For Each control As IntPtr In Controls
Win32.GetClassName(control, stringBuilder, stringBuilder.Capacity)
If (stringBuilder.ToString() = className) Then
If String.IsNullOrEmpty(text) Then
controlHandle = control
Exit For
Else
Win32.SendMessage(control, Win32.WM_GETTEXT, stringBuilder.Capacity, stringBuilder)
If (stringBuilder.ToString() = text) Then
controlHandle = control
Exit For
End If
End If
End If
Next
Return controlHandle
End Function
#End Region
#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 Shared Sub GetClassName(ByVal hWnd As IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer)
End Sub
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As System.Text.StringBuilder) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function GetDlgCtrlID(ByVal hwndCtl As Integer) As Integer
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
End Function
Public Const LB_ERR As Integer = -1
Public Const LB_SELECTSTRING As Integer = &H18C
Public Const WM_SETTEXT As Integer = &HC
Public Const WM_GETTEXT As Integer = &HD
Public Const WM_COMMAND As Integer = &H111
Public Const SW_HIDE As Integer = 0
Public Const SW_SHOW As Integer = 5
Public Const [TRUE] As Integer = 1
' ReSharper restore UnusedMethodReturnValue.Local
' ReSharper restore InconsistentNaming
End Class
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,143 @@
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Reflection
Namespace Tools
Public Class PropertyGridCommandSite
Implements IMenuCommandService, ISite
Protected TheObject As Object
Sub New(ByVal [object] As Object)
TheObject = [object]
End Sub
Public ReadOnly Property Verbs() As DesignerVerbCollection Implements IMenuCommandService.Verbs
Get
Dim objectVerbs As New DesignerVerbCollection()
' ReSharper disable VBPossibleMistakenCallToGetType.2
Dim methods() As MethodInfo = TheObject.GetType().GetMethods(BindingFlags.Public Or BindingFlags.Instance)
' ReSharper restore VBPossibleMistakenCallToGetType.2
For Each method As MethodInfo In methods
Dim commandAttributes() As Object = method.GetCustomAttributes(GetType(CommandAttribute), True)
If commandAttributes Is Nothing OrElse commandAttributes.Length = 0 Then Continue For
Dim commandAttribute As CommandAttribute = CType(commandAttributes(0), CommandAttribute)
If Not commandAttribute.Command Then Continue For
Dim displayName As String = method.Name
Dim displayNameAttributes() As Object = method.GetCustomAttributes(GetType(DisplayNameAttribute), True)
If Not (displayNameAttributes Is Nothing OrElse displayNameAttributes.Length = 0) Then
Dim displayNameAttribute As DisplayNameAttribute = CType(displayNameAttributes(0), DisplayNameAttribute)
If Not String.IsNullOrEmpty(displayNameAttribute.DisplayName) Then
displayName = displayNameAttribute.DisplayName
End If
End If
objectVerbs.Add(New DesignerVerb(displayName, New EventHandler(AddressOf VerbEventHandler)))
Next
Return objectVerbs
End Get
End Property
Private Sub VerbEventHandler(ByVal sender As Object, ByVal e As EventArgs)
Dim verb As DesignerVerb = TryCast(sender, DesignerVerb)
If verb Is Nothing Then Return
' ReSharper disable VBPossibleMistakenCallToGetType.2
Dim methods() As MethodInfo = TheObject.GetType().GetMethods(BindingFlags.Public Or BindingFlags.Instance)
' ReSharper restore VBPossibleMistakenCallToGetType.2
For Each method As MethodInfo In methods
Dim commandAttributes() As Object = method.GetCustomAttributes(GetType(CommandAttribute), True)
If commandAttributes Is Nothing OrElse commandAttributes.Length = 0 Then Continue For
Dim commandAttribute As CommandAttribute = CType(commandAttributes(0), CommandAttribute)
If Not commandAttribute.Command Then Continue For
Dim displayName As String = method.Name
Dim displayNameAttributes() As Object = method.GetCustomAttributes(GetType(DisplayNameAttribute), True)
If Not (displayNameAttributes Is Nothing OrElse displayNameAttributes.Length = 0) Then
Dim displayNameAttribute As DisplayNameAttribute = CType(displayNameAttributes(0), DisplayNameAttribute)
If Not String.IsNullOrEmpty(displayNameAttribute.DisplayName) Then
displayName = displayNameAttribute.DisplayName
End If
End If
If verb.Text = displayName Then
method.Invoke(TheObject, Nothing)
Return
End If
Next
End Sub
Public Function GetService(serviceType As Type) As Object Implements IServiceProvider.GetService
If serviceType Is GetType(IMenuCommandService) Then
Return Me
Else
Return Nothing
End If
End Function
Public ReadOnly Property Component As System.ComponentModel.IComponent Implements System.ComponentModel.ISite.Component
Get
Throw New NotImplementedException()
End Get
End Property
Public ReadOnly Property Container As System.ComponentModel.IContainer Implements System.ComponentModel.ISite.Container
Get
Return Nothing
End Get
End Property
Public ReadOnly Property DesignMode As Boolean Implements System.ComponentModel.ISite.DesignMode
Get
Return True
End Get
End Property
Public Property Name As String Implements System.ComponentModel.ISite.Name
Get
Throw New NotImplementedException()
End Get
Set(value As String)
Throw New NotImplementedException()
End Set
End Property
Public Sub AddCommand(ByVal command As MenuCommand) Implements IMenuCommandService.AddCommand
Throw New NotImplementedException()
End Sub
Public Sub AddVerb(ByVal verb As DesignerVerb) Implements IMenuCommandService.AddVerb
Throw New NotImplementedException()
End Sub
Public Function FindCommand(ByVal commandId As CommandID) As MenuCommand Implements IMenuCommandService.FindCommand
Throw New NotImplementedException()
End Function
Public Function GlobalInvoke(ByVal commandId As CommandID) As Boolean Implements IMenuCommandService.GlobalInvoke
Throw New NotImplementedException()
End Function
Public Sub RemoveCommand(ByVal command As MenuCommand) Implements IMenuCommandService.RemoveCommand
Throw New NotImplementedException()
End Sub
Public Sub RemoveVerb(ByVal verb As DesignerVerb) Implements IMenuCommandService.RemoveVerb
Throw New NotImplementedException()
End Sub
Public Sub ShowContextMenu(ByVal menuId As CommandID, ByVal x As Integer, ByVal y As Integer) Implements IMenuCommandService.ShowContextMenu
Throw New NotImplementedException()
End Sub
End Class
Public Class CommandAttribute
Inherits Attribute
Public Property Command As Boolean = False
Sub New(Optional ByVal isCommand As Boolean = True)
Command = isCommand
End Sub
End Class
End Namespace

View File

@@ -0,0 +1,17 @@
Imports mRemoteNG.My
Namespace Tools
Public Class PuttyProcessController
Inherits ProcessController
Public Overloads Function Start(Optional ByVal arguments As CommandLineArguments = Nothing) As Boolean
Dim filename As String
If Settings.UseCustomPuttyPath Then
filename = Settings.CustomPuttyPath
Else
filename = App.Info.General.PuttyPath
End If
Return Start(filename, arguments)
End Function
End Class
End Namespace

View File

@@ -125,14 +125,15 @@ Namespace Tools
menToolStrip.DropDownItems.Add(tMenItem) menToolStrip.DropDownItems.Add(tMenItem)
AddNodeToMenu(tNode.Nodes, tMenItem) AddNodeToMenu(tNode.Nodes, tMenItem)
Else ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Or _
tMenItem.Image = My.Resources.Play Tree.Node.GetNodeType(tNode) = Tree.Node.Type.PuttySession Then
tMenItem.Image = Windows.treeForm.imgListTree.Images(tNode.ImageIndex)
tMenItem.Tag = tNode.Tag tMenItem.Tag = tNode.Tag
menToolStrip.DropDownItems.Add(tMenItem) menToolStrip.DropDownItems.Add(tMenItem)
End If End If
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
Next Next
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
@@ -162,12 +163,10 @@ Namespace Tools
frmMain.PreviousWindowState = frmMain.WindowState frmMain.PreviousWindowState = frmMain.WindowState
End Sub End Sub
Private Sub ConMenItem_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Private Sub ConMenItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
If e.Button = MouseButtons.Left Then If e.Button = MouseButtons.Left Then
If TypeOf sender.Tag Is mRemoteNG.Connection.Info Then If TypeOf sender.Tag Is Connection.Info Then
If frmMain.Visible = False Then If frmMain.Visible = False Then ShowForm()
ShowForm()
End If
App.Runtime.OpenConnection(sender.Tag) App.Runtime.OpenConnection(sender.Tag)
End If End If
End If End If
@@ -211,13 +210,13 @@ Namespace Tools
Return lDlg Return lDlg
End Function End Function
Public Shared Function ConnectionsRDPImportDialog() As OpenFileDialog Public Shared Function ImportConnectionsRdpFileDialog() As OpenFileDialog
Dim lDlg As New OpenFileDialog() Dim openFileDialog As New OpenFileDialog()
lDlg.CheckFileExists = True openFileDialog.CheckFileExists = True
'lDlg.InitialDirectory = App.Info.Connections.DefaultConnectionsPath openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
lDlg.Filter = My.Language.strFilterRDP & "|*.rdp|" & My.Language.strFilterAll & "|*.*" openFileDialog.Filter = String.Join("|", {My.Language.strFilterRDP, "*.rdp", My.Language.strFilterAll, "*.*"})
openFileDialog.Multiselect = True
Return lDlg Return openFileDialog
End Function End Function
Public Class TreeNodeSorter Public Class TreeNodeSorter

View File

@@ -116,25 +116,8 @@ Namespace Tools
End If End If
End Function End Function
Private Shared rndNums As New ArrayList
Public Shared Function CreateConstantID() As String Public Shared Function CreateConstantID() As String
Dim cID As String Return Guid.NewGuid().ToString()
Dim rnd As New Random(Now.Second)
Dim iRnd As Integer
Dim NewFound As Boolean = False
Do Until NewFound
iRnd = rnd.Next(10000, 99999)
If rndNums.Contains(iRnd) = False Then
rndNums.Add(iRnd)
NewFound = True
End If
Loop
cID = Now.Year & LeadingZero(Now.Month) & LeadingZero(Now.Day) & LeadingZero(Now.Hour) & LeadingZero(Now.Minute) & LeadingZero(Now.Second) & LeadingZero(Now.Millisecond & iRnd)
Return cID
End Function End Function
Public Shared Function LeadingZero(ByVal Number As String) As String Public Shared Function LeadingZero(ByVal Number As String) As String
@@ -167,15 +150,16 @@ Namespace Tools
End Function End Function
Public Shared Function StringToEnum(ByVal t As Type, ByVal value As String) As Object Public Shared Function StringToEnum(ByVal t As Type, ByVal value As String) As Object
For Each fI As FieldInfo In t.GetFields Return [Enum].Parse(t, value)
If fI.Name = value Then End Function
Return fI.GetValue(vbNull)
End If
Next
Dim ex As New Exception(String.Format("Can't convert {0} to {1}", value, t.ToString)) Public Shared Function GetExceptionMessageRecursive(ByVal ex As Exception, Optional ByVal separator As String = vbNewLine) As String
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "StringToEnum failed" & vbNewLine & ex.Message, True) Dim message As String = ex.Message
Throw ex If ex.InnerException IsNot Nothing Then
Dim innerMessage As String = GetExceptionMessageRecursive(ex.InnerException, separator)
message = String.Join(separator, New String() {message, innerMessage})
End If
Return message
End Function End Function
Public Shared Function TakeScreenshot(ByVal sender As UI.Window.Connection) As Image Public Shared Function TakeScreenshot(ByVal sender As UI.Window.Connection) As Image
@@ -297,62 +281,47 @@ Namespace Tools
End Class End Class
Public Class Fullscreen Public Class Fullscreen
Private Shared winState As FormWindowState Public Sub New(ByVal handledForm As Form)
Private Shared brdStyle As FormBorderStyle _handledForm = handledForm
Private Shared topMost As Boolean End Sub
Private Shared bounds As Rectangle
Public Shared targetForm As Form = frmMain Private ReadOnly _handledForm As Form
Public Shared FullscreenActive As Boolean = False Private _savedWindowState As FormWindowState
Private _savedBorderStyle As FormBorderStyle
Private _savedBounds As Rectangle
Public Shared Sub EnterFullscreen() Private _value As Boolean = False
Try Public Property Value() As Boolean
If Not FullscreenActive Then Get
FullscreenActive = True Return _value
Save() End Get
targetForm.WindowState = FormWindowState.Maximized Set(newValue As Boolean)
targetForm.FormBorderStyle = FormBorderStyle.None If _value = newValue Then Return
SetWinFullScreen(targetForm.Handle) If Not _value Then
EnterFullscreen()
Else
ExitFullscreen()
End If End If
Catch ex As Exception _value = newValue
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Entering Fullscreen failed" & vbNewLine & ex.Message, True) End Set
End Try End Property
Private Sub EnterFullscreen()
_savedBorderStyle = _handledForm.FormBorderStyle
_savedWindowState = _handledForm.WindowState
_savedBounds = _handledForm.Bounds
_handledForm.FormBorderStyle = FormBorderStyle.None
If _handledForm.WindowState = FormWindowState.Maximized Then
_handledForm.WindowState = FormWindowState.Normal
End If
_handledForm.WindowState = FormWindowState.Maximized
End Sub End Sub
Public Shared Sub Save() Private Sub ExitFullscreen()
winState = targetForm.WindowState _handledForm.FormBorderStyle = _savedBorderStyle
brdStyle = targetForm.FormBorderStyle _handledForm.WindowState = _savedWindowState
bounds = targetForm.Bounds _handledForm.Bounds = _savedBounds
End Sub
Public Shared Sub ExitFullscreen()
Try
targetForm.WindowState = winState
targetForm.FormBorderStyle = brdStyle
targetForm.Bounds = bounds
FullscreenActive = False
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Exiting Fullscreen failed" & vbNewLine & ex.Message, True)
End Try
End Sub
<DllImport("user32.dll", EntryPoint:="GetSystemMetrics")> Public Shared Function GetSystemMetrics(ByVal which As Integer) As Integer
End Function
<DllImport("user32.dll")> Public Shared Sub SetWindowPos(ByVal hwnd As IntPtr, ByVal hwndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal flags As UInteger)
End Sub
Private Shared HWND_TOP As IntPtr = IntPtr.Zero
Private Const SWP_SHOWWINDOW As Integer = 64
' 0<>0040
Public Shared Sub SetWinFullScreen(ByVal hwnd As IntPtr)
Try
Dim curScreen As Screen = Screen.FromHandle(targetForm.Handle)
SetWindowPos(hwnd, HWND_TOP, curScreen.Bounds.Left, curScreen.Bounds.Top, curScreen.Bounds.Right, curScreen.Bounds.Bottom, SWP_SHOWWINDOW)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SetWindowPos failed" & vbNewLine & ex.Message, True)
End Try
End Sub End Sub
End Class End Class

View File

@@ -81,43 +81,30 @@ Namespace Tools
End Set End Set
End Property End Property
Private _hostName As String = ""
Private _HostName As String
Public Property HostName() As String Public Property HostName() As String
Get Get
Return _HostName Return _hostName
End Get End Get
Set(ByVal value As String) Set(ByVal value As String)
_HostName = value _hostName = value
End Set End Set
End Property End Property
Public ReadOnly Property HostNameWithoutDomain() As String Public ReadOnly Property HostNameWithoutDomain() As String
Get Get
If _HostName <> _HostIP Then If String.IsNullOrEmpty(HostName) OrElse HostName = HostIp Then Return HostIp
If _HostName IsNot Nothing Then Return HostName.Split(".")(0)
If _HostName.Contains(".") Then
Return _HostName.Substring(0, _HostName.IndexOf("."))
Else
Return _HostName
End If
Else
Return _HostIP
End If
Else
Return _HostIP
End If
End Get End Get
End Property End Property
Private _HostIP As String Private _hostIp As String
Public Property HostIP() As String Public Property HostIp() As String
Get Get
Return _HostIP Return _hostIp
End Get End Get
Set(ByVal value As String) Set(ByVal value As String)
_HostIP = value _hostIp = value
End Set End Set
End Property End Property
@@ -214,7 +201,7 @@ Namespace Tools
#Region "Methods" #Region "Methods"
Public Sub New(ByVal host As String) Public Sub New(ByVal host As String)
_HostIP = host _hostIp = host
_OpenPorts = New ArrayList _OpenPorts = New ArrayList
_ClosedPorts = New ArrayList _ClosedPorts = New ArrayList
End Sub End Sub
@@ -232,10 +219,10 @@ Namespace Tools
Try Try
Dim lvI As New ListViewItem Dim lvI As New ListViewItem
lvI.Tag = Me lvI.Tag = Me
If _HostName <> "" Then If _hostName <> "" Then
lvI.Text = _HostName lvI.Text = _hostName
Else Else
lvI.Text = _HostIP lvI.Text = _hostIp
End If End If
If Mode = PortScanMode.Import Then If Mode = PortScanMode.Import Then
@@ -463,12 +450,11 @@ Namespace Tools
Next Next
End If End If
If HostAlive = True Then Try
Try sHost.HostName = Net.Dns.GetHostEntry(sHost.HostIp).HostName
sHost.HostName = Net.Dns.GetHostEntry(sHost.HostIP).HostName Catch ex As Exception
Catch ex As Exception End Try
End Try If String.IsNullOrEmpty(sHost.HostName) Then sHost.HostName = sHost.HostIp
End If
_ScannedHosts.Add(sHost) _ScannedHosts.Add(sHost)
RaiseEvent HostScanned(sHost, hCount, Hosts.Count) RaiseEvent HostScanned(sHost, hCount, Hosts.Count)

View File

@@ -190,7 +190,7 @@ Namespace Tree
Dim nNode As New TreeNode Dim nNode As New TreeNode
Select Case NodeType Select Case NodeType
Case Type.Connection Or Type.PuttySession Case Type.Connection, Type.PuttySession
nNode.Text = My.Language.strNewConnection nNode.Text = My.Language.strNewConnection
nNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed nNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
nNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed nNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed

View File

@@ -0,0 +1,35 @@
Namespace UI
Namespace Window
Partial Public Class Announcement
#Region " Windows Form Designer generated code "
Friend WithEvents webBrowser As System.Windows.Forms.WebBrowser
Private Sub InitializeComponent()
Me.webBrowser = New System.Windows.Forms.WebBrowser()
Me.SuspendLayout()
'
'webBrowser
'
Me.webBrowser.Dock = System.Windows.Forms.DockStyle.Fill
Me.webBrowser.Location = New System.Drawing.Point(0, 0)
Me.webBrowser.MinimumSize = New System.Drawing.Size(20, 20)
Me.webBrowser.Name = "webBrowser"
Me.webBrowser.Size = New System.Drawing.Size(549, 474)
Me.webBrowser.TabIndex = 0
'
'Announcement
'
Me.ClientSize = New System.Drawing.Size(549, 474)
Me.Controls.Add(Me.webBrowser)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = Global.mRemoteNG.My.Resources.Resources.News_Icon
Me.Name = "Announcement"
Me.TabText = "Announcement"
Me.Text = "Announcement"
Me.ResumeLayout(False)
End Sub
#End Region
End Class
End Namespace
End Namespace

View File

@@ -0,0 +1,74 @@
Imports System.ComponentModel
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Announcement
Inherits Base
#Region "Public Methods"
Public Sub New(ByVal panel As DockContent)
WindowType = Type.Announcement
DockPnl = panel
InitializeComponent()
End Sub
#End Region
#Region "Private Fields"
Private _appUpdate As App.Update
#End Region
#Region "Private Methods"
Private Sub Announcement_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
AddHandler webBrowser.Navigated, AddressOf webBrowser_Navigated
ApplyLanguage()
CheckForAnnouncement()
End Sub
Private Sub ApplyLanguage()
End Sub
Private Sub webBrowser_Navigated(sender As Object, e As System.Windows.Forms.WebBrowserNavigatedEventArgs)
' This can only be set once the WebBrowser control is shown, it will throw a COM exception otherwise.
webBrowser.AllowWebBrowserDrop = False
RemoveHandler webBrowser.Navigated, AddressOf webBrowser_Navigated
End Sub
Private Sub CheckForAnnouncement()
If _appUpdate Is Nothing Then
_appUpdate = New App.Update
ElseIf _appUpdate.IsGetAnnouncementInfoRunning Then
Return
End If
AddHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
_appUpdate.GetAnnouncementInfoAsync()
End Sub
Private Sub GetAnnouncementInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetAnnouncementInfoCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
webBrowser.Navigate(_appUpdate.CurrentAnnouncementInfo.Address)
Catch ex As Exception
MessageCollector.AddExceptionMessage(Language.strUpdateGetAnnouncementInfoFailed, ex)
End Try
End Sub
#End Region
End Class
End Namespace
End Namespace

View File

@@ -1,112 +0,0 @@
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Imports System.Threading
Namespace UI
Namespace Window
Public Class Announcement
Inherits UI.Window.Base
#Region "Form Init"
Friend WithEvents wBrowser As System.Windows.Forms.WebBrowser
Private Sub InitializeComponent()
Me.wBrowser = New System.Windows.Forms.WebBrowser
Me.SuspendLayout()
'
'wBrowser
'
Me.wBrowser.Dock = System.Windows.Forms.DockStyle.Fill
Me.wBrowser.Location = New System.Drawing.Point(0, 0)
Me.wBrowser.MinimumSize = New System.Drawing.Size(20, 20)
Me.wBrowser.Name = "wBrowser"
Me.wBrowser.Size = New System.Drawing.Size(549, 474)
Me.wBrowser.TabIndex = 0
'
'Announcement
'
Me.ClientSize = New System.Drawing.Size(549, 474)
Me.Controls.Add(Me.wBrowser)
Me.Name = "Announcement"
Me.TabText = "Announcement"
Me.Text = "Announcement"
Me.Icon = My.Resources.News_Icon
Me.ResumeLayout(False)
End Sub
#End Region
#Region "Public Methods"
Public Sub New(ByVal Panel As DockContent)
Me.WindowType = Type.Announcement
Me.DockPnl = Panel
Me.InitializeComponent()
End Sub
#End Region
#Region "Private Methods"
Private Sub Announcement_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
Me.CheckForAnnouncement()
End Sub
Private Sub ApplyLanguage()
End Sub
Private Sub Announcement_Shown(sender As Object, e As EventArgs) Handles Me.Shown
' This can only be set once the WebBrowser control is shown, it will throw a COM exception otherwise.
wBrowser.AllowWebBrowserDrop = False
End Sub
#End Region
Private aN As App.Announcement
Private uT As Thread
Public Event AnnouncementCheckCompleted(ByVal AnnouncementAvailable As Boolean)
Private IsAnnouncementCheckHandlerDeclared As Boolean = False
Public Sub CheckForAnnouncement()
Try
uT = New Thread(AddressOf CheckForAnnouncementBG)
uT.SetApartmentState(ApartmentState.STA)
uT.IsBackground = True
If Me.IsAnnouncementCheckHandlerDeclared = False Then
AddHandler AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
Me.IsAnnouncementCheckHandlerDeclared = True
End If
uT.Start()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CheckForAnnouncement (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub CheckForAnnouncementBG()
Try
aN = New App.Announcement
If aN.IsAnnouncementAvailable = True Then
RaiseEvent AnnouncementCheckCompleted(True)
Else
RaiseEvent AnnouncementCheckCompleted(False)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CheckForAnnouncementBG (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
Try
wBrowser.Navigate(aN.CurrentAnnouncementInfo.Url)
My.Settings.LastAnnouncement = aN.CurrentAnnouncementInfo.Name
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AnnouncementCheckComplete (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
End Class
End Namespace
End Namespace

View File

@@ -489,21 +489,25 @@ Namespace UI
pnlCheck6.Visible = True pnlCheck6.Visible = True
Dim RDP As AxMSTSCLib.AxMsRdpClient6NotSafeForScripting = Nothing Dim rdpClient As AxMSTSCLib.AxMsRdpClient5NotSafeForScripting = Nothing
Try Try
RDP = New AxMSTSCLib.AxMsRdpClient6NotSafeForScripting rdpClient = New AxMSTSCLib.AxMsRdpClient5NotSafeForScripting
RDP.CreateControl() rdpClient.CreateControl()
Do Until RDP.Created Do Until rdpClient.Created
Thread.Sleep(10) Thread.Sleep(0)
System.Windows.Forms.Application.DoEvents() System.Windows.Forms.Application.DoEvents()
Loop Loop
If Not New Version(rdpClient.Version) >= mRemoteNG.Connection.Protocol.RDP.Versions.RDC60 Then
Throw New Exception(String.Format("Found RDC Client version {0} but version {1} or higher is required.", rdpClient.Version, mRemoteNG.Connection.Protocol.RDP.Versions.RDC60))
End If
pbCheck1.Image = My.Resources.Good_Symbol pbCheck1.Image = My.Resources.Good_Symbol
lblCheck1.ForeColor = Color.DarkOliveGreen lblCheck1.ForeColor = Color.DarkOliveGreen
lblCheck1.Text = "RDP (Remote Desktop) " & My.Language.strCcCheckSucceeded lblCheck1.Text = "RDP (Remote Desktop) " & My.Language.strCcCheckSucceeded
txtCheck1.Text = String.Format(My.Language.strCcRDPOK, RDP.Version) txtCheck1.Text = String.Format(My.Language.strCcRDPOK, rdpClient.Version)
Catch ex As Exception Catch ex As Exception
pbCheck1.Image = My.Resources.Bad_Symbol pbCheck1.Image = My.Resources.Bad_Symbol
lblCheck1.ForeColor = Color.Firebrick lblCheck1.ForeColor = Color.Firebrick
@@ -514,7 +518,7 @@ Namespace UI
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, ex.Message, True)
End Try End Try
If RDP IsNot Nothing Then RDP.Dispose() If rdpClient IsNot Nothing Then rdpClient.Dispose()
Dim VNC As VncSharp.RemoteDesktop = Nothing Dim VNC As VncSharp.RemoteDesktop = Nothing
@@ -539,7 +543,6 @@ Namespace UI
txtCheck2.Text = My.Language.strCcVNCFailed txtCheck2.Text = My.Language.strCcVNCFailed
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "VNC " & errorMsg, True) MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "VNC " & errorMsg, True)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, ex.Message, True)
End Try End Try
If VNC IsNot Nothing Then VNC.Dispose() If VNC IsNot Nothing Then VNC.Dispose()

View File

@@ -1,4 +1,5 @@
Imports mRemoteNG.My Imports mRemoteNG.My
Imports mRemoteNG.Connection.Protocol
Imports WeifenLuo.WinFormsUI.Docking Imports WeifenLuo.WinFormsUI.Docking
Imports System.Net.NetworkInformation Imports System.Net.NetworkInformation
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
@@ -710,6 +711,10 @@ Namespace UI
strHide.Add("RDGatewayPassword") strHide.Add("RDGatewayPassword")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
End If End If
If Not (conI.Resolution = RDP.RDPResolutions.FitToWindow Or _
conI.Resolution = RDP.RDPResolutions.Fullscreen) Then
strHide.Add("AutomaticResize")
End If
Case mRemoteNG.Connection.Protocol.Protocols.VNC Case mRemoteNG.Connection.Protocol.Protocols.VNC
strHide.Add("CacheBitmaps") strHide.Add("CacheBitmaps")
strHide.Add("Colors") strHide.Add("Colors")
@@ -727,6 +732,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -735,6 +741,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
If conI.VNCAuthMode = mRemoteNG.Connection.Protocol.VNC.AuthMode.AuthVNC Then If conI.VNCAuthMode = mRemoteNG.Connection.Protocol.VNC.AuthMode.AuthVNC Then
@@ -764,6 +771,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -772,6 +780,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")
@@ -802,6 +811,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -810,6 +820,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")
@@ -841,6 +852,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -849,6 +861,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("Username") strHide.Add("Username")
@@ -881,6 +894,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -889,6 +903,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("Username") strHide.Add("Username")
@@ -921,6 +936,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -929,6 +945,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("Username") strHide.Add("Username")
@@ -961,6 +978,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -968,6 +986,7 @@ Namespace UI
strHide.Add("RedirectSmartCards") strHide.Add("RedirectSmartCards")
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")
@@ -999,12 +1018,14 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
strHide.Add("RedirectPrinters") strHide.Add("RedirectPrinters")
strHide.Add("RedirectSmartCards") strHide.Add("RedirectSmartCards")
strHide.Add("RedirectSound;Resolution") strHide.Add("RedirectSound;Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")
@@ -1033,6 +1054,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -1040,6 +1062,7 @@ Namespace UI
strHide.Add("RedirectSmartCards") strHide.Add("RedirectSmartCards")
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")
@@ -1070,6 +1093,7 @@ Namespace UI
strHide.Add("RDGatewayUseConnectionCredentials") strHide.Add("RDGatewayUseConnectionCredentials")
strHide.Add("RDGatewayUsername") strHide.Add("RDGatewayUsername")
strHide.Add("RDPAuthenticationLevel") strHide.Add("RDPAuthenticationLevel")
strHide.Add("LoadBalanceInfo")
strHide.Add("RedirectDiskDrives") strHide.Add("RedirectDiskDrives")
strHide.Add("RedirectKeys") strHide.Add("RedirectKeys")
strHide.Add("RedirectPorts") strHide.Add("RedirectPorts")
@@ -1078,6 +1102,7 @@ Namespace UI
strHide.Add("RedirectSound") strHide.Add("RedirectSound")
strHide.Add("RenderingEngine") strHide.Add("RenderingEngine")
strHide.Add("Resolution") strHide.Add("Resolution")
strHide.Add("AutomaticResize")
strHide.Add("UseConsoleSession") strHide.Add("UseConsoleSession")
strHide.Add("UseCredSsp") strHide.Add("UseCredSsp")
strHide.Add("VNCAuthMode") strHide.Add("VNCAuthMode")

View File

@@ -0,0 +1,99 @@
Namespace UI
Namespace Window
Partial Public Class Sessions
#Region " Windows Form Designer generated code "
Private components As System.ComponentModel.IContainer
Friend WithEvents sessionMenuRetrieve As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents sessionMenuLogoff As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents sessionList As System.Windows.Forms.ListView
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim sessionMenu As System.Windows.Forms.ContextMenuStrip
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Sessions))
Me.sessionMenuRetrieve = New System.Windows.Forms.ToolStripMenuItem()
Me.sessionMenuLogoff = New System.Windows.Forms.ToolStripMenuItem()
Me.sessionList = New System.Windows.Forms.ListView()
Me.sessionUsernameColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.sessionActivityColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.sessionTypeColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
sessionMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
sessionMenu.SuspendLayout()
Me.SuspendLayout()
'
'sessionMenu
'
sessionMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.sessionMenuRetrieve, Me.sessionMenuLogoff})
sessionMenu.Name = "cMenSession"
sessionMenu.Size = New System.Drawing.Size(153, 70)
AddHandler sessionMenu.Opening, AddressOf Me.menuSession_Opening
'
'sessionMenuRetrieve
'
Me.sessionMenuRetrieve.Image = Global.mRemoteNG.My.Resources.Resources.Refresh
Me.sessionMenuRetrieve.Name = "sessionMenuRetrieve"
Me.sessionMenuRetrieve.Size = New System.Drawing.Size(152, 22)
Me.sessionMenuRetrieve.Text = "Retrieve"
'
'sessionMenuLogoff
'
Me.sessionMenuLogoff.Image = Global.mRemoteNG.My.Resources.Resources.Session_LogOff
Me.sessionMenuLogoff.Name = "sessionMenuLogoff"
Me.sessionMenuLogoff.Size = New System.Drawing.Size(152, 22)
Me.sessionMenuLogoff.Text = Global.mRemoteNG.My.Language.strLogOff
'
'sessionList
'
Me.sessionList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.sessionList.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.sessionList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.sessionUsernameColumn, Me.sessionActivityColumn, Me.sessionTypeColumn})
Me.sessionList.ContextMenuStrip = sessionMenu
Me.sessionList.FullRowSelect = True
Me.sessionList.GridLines = True
Me.sessionList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.sessionList.Location = New System.Drawing.Point(0, -1)
Me.sessionList.MultiSelect = False
Me.sessionList.Name = "sessionList"
Me.sessionList.ShowGroups = False
Me.sessionList.Size = New System.Drawing.Size(242, 174)
Me.sessionList.TabIndex = 0
Me.sessionList.UseCompatibleStateImageBehavior = False
Me.sessionList.View = System.Windows.Forms.View.Details
'
'sessionUsernameColumn
'
Me.sessionUsernameColumn.Text = Global.mRemoteNG.My.Language.strColumnUsername
Me.sessionUsernameColumn.Width = 80
'
'sessionActivityColumn
'
Me.sessionActivityColumn.Text = Global.mRemoteNG.My.Language.strActivity
'
'sessionTypeColumn
'
Me.sessionTypeColumn.Text = Global.mRemoteNG.My.Language.strType
Me.sessionTypeColumn.Width = 80
'
'Sessions
'
Me.ClientSize = New System.Drawing.Size(242, 173)
Me.Controls.Add(Me.sessionList)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.HideOnClose = True
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Sessions"
Me.TabText = Global.mRemoteNG.My.Language.strMenuSessions
Me.Text = "Sessions"
sessionMenu.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
Friend WithEvents sessionUsernameColumn As System.Windows.Forms.ColumnHeader
Friend WithEvents sessionActivityColumn As System.Windows.Forms.ColumnHeader
Friend WithEvents sessionTypeColumn As System.Windows.Forms.ColumnHeader
#End Region
End Class
End Namespace
End Namespace

View File

@@ -117,7 +117,10 @@
<resheader name="writer"> <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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="cMenSession.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="sessionMenu.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="sessionMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>14, 16</value> <value>14, 16</value>
</metadata> </metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View File

@@ -1,412 +1,268 @@
Imports WeifenLuo.WinFormsUI.Docking Imports System.Threading
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Namespace UI Namespace UI
Namespace Window Namespace Window
Public Class Sessions Public Class Sessions
Inherits UI.Window.Base Inherits Base
#Region "Private Fields"
#Region "Form Init" Private _getSessionsThread As Thread
Friend WithEvents clmSesType As System.Windows.Forms.ColumnHeader Private _retrieved As Boolean = False
Friend WithEvents clmSesUsername As System.Windows.Forms.ColumnHeader
Friend WithEvents clmSesActivity As System.Windows.Forms.ColumnHeader
Friend WithEvents cMenSession As System.Windows.Forms.ContextMenuStrip
Private components As System.ComponentModel.IContainer
Friend WithEvents cMenSessionRefresh As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents cMenSessionLogOff As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents lvSessions As System.Windows.Forms.ListView
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Sessions))
Me.lvSessions = New System.Windows.Forms.ListView
Me.clmSesUsername = New System.Windows.Forms.ColumnHeader
Me.clmSesActivity = New System.Windows.Forms.ColumnHeader
Me.clmSesType = New System.Windows.Forms.ColumnHeader
Me.cMenSession = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cMenSessionRefresh = New System.Windows.Forms.ToolStripMenuItem
Me.cMenSessionLogOff = New System.Windows.Forms.ToolStripMenuItem
Me.cMenSession.SuspendLayout()
Me.SuspendLayout()
'
'lvSessions
'
Me.lvSessions.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lvSessions.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.lvSessions.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.clmSesUsername, Me.clmSesActivity, Me.clmSesType})
Me.lvSessions.ContextMenuStrip = Me.cMenSession
Me.lvSessions.FullRowSelect = True
Me.lvSessions.GridLines = True
Me.lvSessions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.lvSessions.Location = New System.Drawing.Point(0, -1)
Me.lvSessions.MultiSelect = False
Me.lvSessions.Name = "lvSessions"
Me.lvSessions.ShowGroups = False
Me.lvSessions.Size = New System.Drawing.Size(242, 174)
Me.lvSessions.TabIndex = 0
Me.lvSessions.UseCompatibleStateImageBehavior = False
Me.lvSessions.View = System.Windows.Forms.View.Details
'
'clmSesUsername
'
Me.clmSesUsername.Text = My.Language.strColumnUsername
Me.clmSesUsername.Width = 80
'
'clmSesActivity
'
Me.clmSesActivity.Text = My.Language.strActivity
'
'clmSesType
'
Me.clmSesType.Text = My.Language.strType
Me.clmSesType.Width = 80
'
'cMenSession
'
Me.cMenSession.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cMenSessionRefresh, Me.cMenSessionLogOff})
Me.cMenSession.Name = "cMenSession"
Me.cMenSession.Size = New System.Drawing.Size(124, 48)
'
'cMenSessionRefresh
'
Me.cMenSessionRefresh.Image = Global.mRemoteNG.My.Resources.Resources.Refresh
Me.cMenSessionRefresh.Name = "cMenSessionRefresh"
Me.cMenSessionRefresh.Size = New System.Drawing.Size(123, 22)
Me.cMenSessionRefresh.Text = My.Language.strRefresh
'
'cMenSessionLogOff
'
Me.cMenSessionLogOff.Image = Global.mRemoteNG.My.Resources.Resources.Session_LogOff
Me.cMenSessionLogOff.Name = "cMenSessionLogOff"
Me.cMenSessionLogOff.Size = New System.Drawing.Size(123, 22)
Me.cMenSessionLogOff.Text = My.Language.strLogOff
'
'Sessions
'
Me.ClientSize = New System.Drawing.Size(242, 173)
Me.Controls.Add(Me.lvSessions)
Me.HideOnClose = True
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Sessions"
Me.TabText = My.Language.strMenuSessions
Me.Text = My.Language.strMenuSessions
Me.cMenSession.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
#Region "Private Properties"
Private tServerName As String
Private tUserName As String
Private tPassword As String
Private tDomain As String
Private tSessionID As Long
Private tKillingSession As Boolean
Private threadSessions As Threading.Thread
Private tServerHandle As Long
#End Region
#Region "Public Properties"
Private _CurrentHost As String
Public Property CurrentHost() As String
Get
Return Me._CurrentHost
End Get
Set(ByVal value As String)
Me._CurrentHost = value
End Set
End Property
#End Region
#Region "Form Stuff"
Private Sub Sessions_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
End Sub
Private Sub ApplyLanguage()
clmSesUsername.Text = My.Language.strColumnUsername
clmSesActivity.Text = My.Language.strActivity
clmSesType.Text = My.Language.strType
cMenSessionRefresh.Text = My.Language.strRefresh
cMenSessionLogOff.Text = My.Language.strLogOff
TabText = My.Language.strMenuSessions
Text = My.Language.strMenuSessions
End Sub
#End Region
#Region "Private Methods"
Private Sub GetSessionsBG()
Try
Dim tS As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
Dim sU As New Security.Impersonator
Dim tsSessions As New mRemoteNG.Connection.Protocol.RDP.Sessions
sU.StartImpersonation(tDomain, tUserName, tPassword)
Try
'Trace.WriteLine("Opening connection to server: " & tServerName)
If tS.OpenConnection(tServerName) = True Then
tServerHandle = tS.ServerHandle
'Trace.WriteLine("Trying to get sessions")
tsSessions = tS.GetSessions
End If
Catch ex As Exception
End Try
Dim i As Integer = 0
'Trace.WriteLine("Sessions Count: " & tsSessions.Count)
If tServerName = Me._CurrentHost Then
For i = 0 To tsSessions.ItemsCount - 1
Dim lItem As New ListViewItem
lItem.Tag = tsSessions(i).SessionID
lItem.Text = tsSessions(i).SessionUser
lItem.SubItems.Add(tsSessions(i).SessionState)
lItem.SubItems.Add(Replace(tsSessions(i).SessionName, vbNewLine, ""))
'Trace.WriteLine("Session " & i & ": " & tsSessions(i).SessionUser)
AddToList(lItem)
Next
End If
sU.StopImpersonation()
sU = Nothing
tS.CloseConnection(tServerHandle)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSessionGetFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub KillSessionBG()
Try
If tUserName = "" Or tPassword = "" Then
'Trace.WriteLine("No Logon Info")
Exit Sub
End If
Dim ts As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
Dim sU As New Security.Impersonator
sU.StartImpersonation(tDomain, tUserName, tPassword)
Try
If ts.OpenConnection(tServerName) = True Then
If ts.KillSession(tSessionID) = True Then
sU.StopImpersonation()
'Trace.WriteLine("Successfully killed session: " & tSessionID)
Else
sU.StopImpersonation()
'Trace.WriteLine("Killing session " & tSessionID & " failed")
End If
End If
Catch ex As Exception
sU.StopImpersonation()
End Try
sU.StopImpersonation()
ClearList()
GetSessionsBG()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSessionKillFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Delegate Sub AddToListCB(ByVal [ListItem] As ListViewItem)
Private Sub AddToList(ByVal [ListItem] As ListViewItem)
If Me.lvSessions.InvokeRequired Then
Dim d As New AddToListCB(AddressOf AddToList)
Me.lvSessions.Invoke(d, New Object() {[ListItem]})
Else
Me.lvSessions.Items.Add(ListItem)
End If
End Sub
Delegate Sub ClearListCB()
Private Sub ClearList()
If Me.lvSessions.InvokeRequired Then
Dim d As New ClearListCB(AddressOf ClearList)
Me.lvSessions.Invoke(d)
Else
Me.lvSessions.Items.Clear()
End If
End Sub
Private Sub cMenSessionRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenSessionRefresh.Click
Me.GetSessions()
End Sub
Private Sub cMenSessionLogOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenSessionLogOff.Click
Me.KillSession()
End Sub
#End Region #End Region
#Region "Public Methods" #Region "Public Methods"
Public Sub New(ByVal Panel As DockContent) Public Sub New(ByVal panel As DockContent)
Me.WindowType = Type.Sessions WindowType = Type.Sessions
Me.DockPnl = Panel DockPnl = panel
Me.InitializeComponent() InitializeComponent()
End Sub End Sub
Public Sub GetSessionsAuto() Public Sub GetSessions(Optional ByVal auto As Boolean = False)
ClearList()
If auto Then
_retrieved = False
If Not Settings.AutomaticallyGetSessionInfo Then Return
End If
Try Try
Dim nowHost As String = "" Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
If connectionInfo Is Nothing Then Return
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
nowHost = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info).Hostname connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA) Then Return
Else
Me.ClearList()
Exit Sub
End If
If My.Settings.AutomaticallyGetSessionInfo And Me._CurrentHost = nowHost Then Dim data As New BackgroundData
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag With data
.Hostname = connectionInfo.Hostname
.Username = connectionInfo.Username
.Password = connectionInfo.Password
.Domain = connectionInfo.Domain
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then If Settings.EmptyCredentials = "custom" Then
'continue If .Username = "" Then
Else .Username = Settings.DefaultUsername
Me.ClearList()
Exit Sub
End If
Dim sUser As String = conI.Username
Dim sPass As String = conI.Password
Dim sDom As String = conI.Domain
If My.Settings.EmptyCredentials = "custom" Then
If sUser = "" Then
sUser = My.Settings.DefaultUsername
End If End If
If sPass = "" Then If .Password = "" Then
sPass = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey) .Password = Security.Crypt.Decrypt(Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If End If
If sDom = "" Then If .Domain = "" Then
sDom = My.Settings.DefaultDomain .Domain = Settings.DefaultDomain
End If End If
End If End If
End With
Me.GetSessions(conI.Hostname, sUser, sPass, sDom) If _getSessionsThread IsNot Nothing Then
If _getSessionsThread.IsAlive Then _getSessionsThread.Abort()
End If End If
_getSessionsThread = New Thread(AddressOf GetSessionsBackground)
_getSessionsThread.SetApartmentState(ApartmentState.STA)
_getSessionsThread.IsBackground = True
_getSessionsThread.Start(data)
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GetSessionsAuto (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Sessions.GetSessions() failed." & vbNewLine & ex.Message, True)
End Try
End Sub
Public Sub GetSessions()
If mRemoteNG.Tree.Node.SelectedNode Is Nothing Then
Exit Sub
End If
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
'continue
Else
Me.ClearList()
Exit Sub
End If
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
'continue
Else
Me.ClearList()
Exit Sub
End If
Me._CurrentHost = conI.Hostname
Dim sUser As String = conI.Username
Dim sPass As String = conI.Password
Dim sDom As String = conI.Domain
If My.Settings.EmptyCredentials = "custom" Then
If sUser = "" Then
sUser = My.Settings.DefaultUsername
End If
If sPass = "" Then
sPass = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If
If sDom = "" Then
sDom = My.Settings.DefaultDomain
End If
End If
Me.GetSessions(conI.Hostname, sUser, sPass, sDom)
End Sub
Public Sub GetSessions(ByVal ServerName As String, ByVal Username As String, ByVal Password As String, ByVal Domain As String)
Try
Me.lvSessions.Items.Clear()
tServerName = ServerName
tUserName = Username
tPassword = Password
tDomain = Domain
threadSessions = New Threading.Thread(AddressOf GetSessionsBG)
threadSessions.SetApartmentState(Threading.ApartmentState.STA)
threadSessions.IsBackground = True
threadSessions.Start()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GetSessions (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
Public Sub KillSession() Public Sub KillSession()
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then If sessionList.SelectedItems.Count = 0 Then Return
'continue
Else
Exit Sub
End If
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
If connectionInfo Is Nothing Then Return
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then If Not connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then Return
'continue
Else
Exit Sub
End If
If Me.lvSessions.SelectedItems.Count > 0 Then For Each lvItem As ListViewItem In sessionList.SelectedItems
'continue KillSession(connectionInfo.Hostname, connectionInfo.Username, connectionInfo.Password, connectionInfo.Domain, lvItem.Tag)
Else
Exit Sub
End If
For Each lvItem As ListViewItem In Me.lvSessions.SelectedItems
Me.KillSession(conI.Hostname, conI.Username, conI.Password, conI.Domain, lvItem.Tag)
Next Next
End Sub End Sub
Public Sub KillSession(ByVal ServerName As String, ByVal Username As String, ByVal Password As String, ByVal Domain As String, ByVal SessionID As String) Public Sub KillSession(ByVal hostname As String, ByVal username As String, ByVal password As String, ByVal domain As String, ByVal sessionId As String)
Try Try
tServerName = ServerName Dim data As New BackgroundData
tUserName = Username With data
tPassword = Password .Hostname = hostname
tDomain = Domain .Username = username
tSessionID = SessionID .Password = password
.Domain = domain
.SessionId = sessionId
End With
threadSessions = New Threading.Thread(AddressOf KillSessionBG) Dim thread As New Thread(AddressOf KillSessionBackground)
threadSessions.SetApartmentState(Threading.ApartmentState.STA) thread.SetApartmentState(ApartmentState.STA)
threadSessions.IsBackground = True thread.IsBackground = True
threadSessions.Start() thread.Start(data)
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "KillSession (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Sessions.KillSession() failed." & vbNewLine & ex.Message, True)
End Try End Try
End Sub End Sub
#End Region #End Region
#Region "Private Methods"
#Region "Form Stuff"
Private Sub Sessions_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ApplyLanguage()
End Sub
Private Sub ApplyLanguage()
TabText = Language.strMenuSessions
Text = Language.strMenuSessions
sessionActivityColumn.Text = Language.strActivity
sessionMenuLogoff.Text = Language.strLogOff
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
sessionTypeColumn.Text = Language.strType
sessionUsernameColumn.Text = Language.strColumnUsername
End Sub
#End Region
Private Sub GetSessionsBackground(ByVal dataObject As Object)
Dim data As BackgroundData = TryCast(dataObject, BackgroundData)
If data Is Nothing Then Return
Dim impersonator As New Security.Impersonator
Dim terminalSessions As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
Dim serverHandle As Long = 0
Try
With data
impersonator.StartImpersonation(.Domain, .Username, .Password)
If Not terminalSessions.OpenConnection(.Hostname) Then Return
serverHandle = terminalSessions.ServerHandle
GetSessions(terminalSessions)
End With
_retrieved = True
Catch ex As ThreadAbortException
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionGetFailed & vbNewLine & ex.Message, True)
Finally
impersonator.StopImpersonation()
If Not serverHandle = 0 Then
terminalSessions.CloseConnection(serverHandle)
End If
End Try
End Sub
' Get sessions from an already impersonated and connected TerminalSessions object
Private Sub GetSessions(ByVal terminalSessions As mRemoteNG.Connection.Protocol.RDP.TerminalSessions)
Dim rdpSessions As mRemoteNG.Connection.Protocol.RDP.Sessions = terminalSessions.GetSessions
For Each session As mRemoteNG.Connection.Protocol.RDP.Session In rdpSessions
Dim item As New ListViewItem
item.Tag = session.SessionID
item.Text = session.SessionUser
item.SubItems.Add(session.SessionState)
item.SubItems.Add(Replace(session.SessionName, vbNewLine, ""))
AddToList(item)
Next
End Sub
Private Sub KillSessionBackground(ByVal dataObject As Object)
Dim data As BackgroundData = TryCast(dataObject, BackgroundData)
If data Is Nothing Then Return
Dim impersonator As New Security.Impersonator
Dim terminalSessions As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
Dim serverHandle As Long = 0
Try
With data
If String.IsNullOrEmpty(.Username) Or String.IsNullOrEmpty(.Password) Then Return
impersonator.StartImpersonation(.Domain, .Username, .Password)
If terminalSessions.OpenConnection(.Hostname) Then
serverHandle = terminalSessions.ServerHandle
terminalSessions.KillSession(.SessionId)
End If
ClearList()
GetSessions(terminalSessions)
_retrieved = True
End With
Catch ex As ThreadAbortException
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionKillFailed & vbNewLine & ex.Message, True)
Finally
impersonator.StopImpersonation()
If Not serverHandle = 0 Then
terminalSessions.CloseConnection(serverHandle)
End If
End Try
End Sub
Delegate Sub AddToListCallback(ByVal item As ListViewItem)
Private Sub AddToList(ByVal item As ListViewItem)
If sessionList.InvokeRequired Then
Dim callback As New AddToListCallback(AddressOf AddToList)
sessionList.Invoke(callback, New Object() {item})
Else
sessionList.Items.Add(item)
End If
End Sub
Delegate Sub ClearListCallback()
Private Sub ClearList()
If sessionList.InvokeRequired Then
Dim callback As New ClearListCallback(AddressOf ClearList)
sessionList.Invoke(callback)
Else
sessionList.Items.Clear()
End If
End Sub
Private Sub menuSession_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
If connectionInfo Is Nothing Then
sessionMenuLogoff.Enabled = False
sessionMenuRetrieve.Enabled = False
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
Return
End If
If connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP And sessionList.SelectedItems.Count > 0 Then
sessionMenuLogoff.Enabled = True
Else
sessionMenuLogoff.Enabled = False
End If
If connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
sessionMenuRetrieve.Enabled = True
Else
sessionMenuRetrieve.Enabled = False
End If
If Not _retrieved Then
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
Else
sessionMenuRetrieve.Text = Language.strRefresh
End If
End Sub
Private Sub sessionMenuRetrieve_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles sessionMenuRetrieve.Click
GetSessions()
End Sub
Private Sub sessionMenuLogoff_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles sessionMenuLogoff.Click
KillSession()
End Sub
#End Region
#Region "Private Classes"
Private Class BackgroundData
Public Hostname As String
Public Username As String
Public Password As String
Public Domain As String
Public SessionId As Long
End Class
#End Region
End Class End Class
End Namespace End Namespace
End Namespace End Namespace

View File

@@ -589,7 +589,6 @@ Namespace UI
Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node) Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node)
Case mRemoteNG.Tree.Node.Type.Connection, mRemoteNG.Tree.Node.Type.PuttySession Case mRemoteNG.Tree.Node.Type.Connection, mRemoteNG.Tree.Node.Type.PuttySession
Windows.configForm.SetPropertyGridObject(e.Node.Tag) Windows.configForm.SetPropertyGridObject(e.Node.Tag)
Windows.sessionsForm.CurrentHost = TryCast(e.Node.Tag, mRemoteNG.Connection.Info).Hostname
Case mRemoteNG.Tree.Node.Type.Container Case mRemoteNG.Tree.Node.Type.Container
Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo) Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo)
Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot
@@ -600,7 +599,7 @@ Namespace UI
Windows.configForm.pGrid_SelectedObjectChanged() Windows.configForm.pGrid_SelectedObjectChanged()
ShowHideTreeContextMenuItems(e.Node) ShowHideTreeContextMenuItems(e.Node)
Windows.sessionsForm.GetSessionsAuto() Windows.sessionsForm.GetSessions(True)
LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node) LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
Catch ex As Exception Catch ex As Exception
@@ -1183,7 +1182,7 @@ Namespace UI
Private Sub ImportFromRDPFiles() Private Sub ImportFromRDPFiles()
Try Try
App.Runtime.ImportConnectionsFromRDPFiles() App.Runtime.ImportConnectionsRdpFile()
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromRDPFiles (UI.Window.Tree) failed" & vbNewLine & ex.Message, True) MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromRDPFiles (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try End Try

193
mRemoteV1/UI/UI.Window.Update.Designer.vb generated Normal file
View File

@@ -0,0 +1,193 @@
Namespace UI
Namespace Window
Partial Public Class Update
#Region " Windows Form Designer generated code "
Friend WithEvents lblStatus As System.Windows.Forms.Label
Friend WithEvents txtChangeLog As System.Windows.Forms.TextBox
Friend WithEvents prgbDownload As System.Windows.Forms.ProgressBar
Friend WithEvents btnDownload As System.Windows.Forms.Button
Friend WithEvents lblChangeLogLabel As System.Windows.Forms.Label
Friend WithEvents pnlUpdate As System.Windows.Forms.Panel
Friend WithEvents lblLatestVersionLabel As System.Windows.Forms.Label
Friend WithEvents lblInstalledVersionLabel As System.Windows.Forms.Label
Friend WithEvents lblLatestVersion As System.Windows.Forms.Label
Friend WithEvents lblInstalledVersion As System.Windows.Forms.Label
Friend WithEvents pbUpdateImage As System.Windows.Forms.PictureBox
Friend WithEvents btnCheckForUpdate As System.Windows.Forms.Button
Private Sub InitializeComponent()
Me.btnCheckForUpdate = New System.Windows.Forms.Button()
Me.pnlUpdate = New System.Windows.Forms.Panel()
Me.lblChangeLogLabel = New System.Windows.Forms.Label()
Me.btnDownload = New System.Windows.Forms.Button()
Me.prgbDownload = New System.Windows.Forms.ProgressBar()
Me.txtChangeLog = New System.Windows.Forms.TextBox()
Me.lblStatus = New System.Windows.Forms.Label()
Me.lblLatestVersionLabel = New System.Windows.Forms.Label()
Me.lblInstalledVersionLabel = New System.Windows.Forms.Label()
Me.lblLatestVersion = New System.Windows.Forms.Label()
Me.lblInstalledVersion = New System.Windows.Forms.Label()
Me.pbUpdateImage = New System.Windows.Forms.PictureBox()
Me.pnlUpdate.SuspendLayout()
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'btnCheckForUpdate
'
Me.btnCheckForUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnCheckForUpdate.Location = New System.Drawing.Point(16, 104)
Me.btnCheckForUpdate.Name = "btnCheckForUpdate"
Me.btnCheckForUpdate.Size = New System.Drawing.Size(104, 32)
Me.btnCheckForUpdate.TabIndex = 5
Me.btnCheckForUpdate.Text = "Check Again"
Me.btnCheckForUpdate.UseVisualStyleBackColor = True
'
'pnlUpdate
'
Me.pnlUpdate.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pnlUpdate.Controls.Add(Me.lblChangeLogLabel)
Me.pnlUpdate.Controls.Add(Me.btnDownload)
Me.pnlUpdate.Controls.Add(Me.prgbDownload)
Me.pnlUpdate.Controls.Add(Me.txtChangeLog)
Me.pnlUpdate.Location = New System.Drawing.Point(16, 152)
Me.pnlUpdate.Name = "pnlUpdate"
Me.pnlUpdate.Size = New System.Drawing.Size(718, 248)
Me.pnlUpdate.TabIndex = 6
Me.pnlUpdate.Visible = False
'
'lblChangeLogLabel
'
Me.lblChangeLogLabel.AutoSize = True
Me.lblChangeLogLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblChangeLogLabel.Location = New System.Drawing.Point(0, 0)
Me.lblChangeLogLabel.Name = "lblChangeLogLabel"
Me.lblChangeLogLabel.Size = New System.Drawing.Size(79, 13)
Me.lblChangeLogLabel.TabIndex = 0
Me.lblChangeLogLabel.Text = "Change Log:"
'
'btnDownload
'
Me.btnDownload.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnDownload.Location = New System.Drawing.Point(0, 216)
Me.btnDownload.Name = "btnDownload"
Me.btnDownload.Size = New System.Drawing.Size(144, 32)
Me.btnDownload.TabIndex = 2
Me.btnDownload.Text = "Download and Install"
Me.btnDownload.UseVisualStyleBackColor = True
'
'prgbDownload
'
Me.prgbDownload.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.prgbDownload.Location = New System.Drawing.Point(160, 224)
Me.prgbDownload.Name = "prgbDownload"
Me.prgbDownload.Size = New System.Drawing.Size(542, 23)
Me.prgbDownload.TabIndex = 3
Me.prgbDownload.Visible = False
'
'txtChangeLog
'
Me.txtChangeLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.txtChangeLog.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtChangeLog.Cursor = System.Windows.Forms.Cursors.Arrow
Me.txtChangeLog.Location = New System.Drawing.Point(16, 24)
Me.txtChangeLog.Multiline = True
Me.txtChangeLog.Name = "txtChangeLog"
Me.txtChangeLog.ReadOnly = True
Me.txtChangeLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtChangeLog.Size = New System.Drawing.Size(699, 181)
Me.txtChangeLog.TabIndex = 1
Me.txtChangeLog.TabStop = False
'
'lblStatus
'
Me.lblStatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStatus.ForeColor = System.Drawing.SystemColors.ControlText
Me.lblStatus.Location = New System.Drawing.Point(12, 16)
Me.lblStatus.Name = "lblStatus"
Me.lblStatus.Size = New System.Drawing.Size(660, 23)
Me.lblStatus.TabIndex = 0
Me.lblStatus.Text = "Status"
Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblLatestVersionLabel
'
Me.lblLatestVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblLatestVersionLabel.Location = New System.Drawing.Point(16, 72)
Me.lblLatestVersionLabel.Name = "lblLatestVersionLabel"
Me.lblLatestVersionLabel.Size = New System.Drawing.Size(120, 16)
Me.lblLatestVersionLabel.TabIndex = 3
Me.lblLatestVersionLabel.Text = "Current version:"
Me.lblLatestVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'lblInstalledVersionLabel
'
Me.lblInstalledVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblInstalledVersionLabel.Location = New System.Drawing.Point(16, 48)
Me.lblInstalledVersionLabel.Name = "lblInstalledVersionLabel"
Me.lblInstalledVersionLabel.Size = New System.Drawing.Size(120, 16)
Me.lblInstalledVersionLabel.TabIndex = 1
Me.lblInstalledVersionLabel.Text = "Installed version:"
Me.lblInstalledVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'lblLatestVersion
'
Me.lblLatestVersion.Location = New System.Drawing.Point(136, 72)
Me.lblLatestVersion.Name = "lblLatestVersion"
Me.lblLatestVersion.Size = New System.Drawing.Size(104, 16)
Me.lblLatestVersion.TabIndex = 4
Me.lblLatestVersion.Text = "Version"
Me.lblLatestVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblInstalledVersion
'
Me.lblInstalledVersion.Location = New System.Drawing.Point(136, 48)
Me.lblInstalledVersion.Name = "lblInstalledVersion"
Me.lblInstalledVersion.Size = New System.Drawing.Size(104, 16)
Me.lblInstalledVersion.TabIndex = 2
Me.lblInstalledVersion.Text = "Version"
Me.lblInstalledVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'pbUpdateImage
'
Me.pbUpdateImage.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pbUpdateImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.pbUpdateImage.Cursor = System.Windows.Forms.Cursors.Hand
Me.pbUpdateImage.Location = New System.Drawing.Point(246, 48)
Me.pbUpdateImage.Name = "pbUpdateImage"
Me.pbUpdateImage.Size = New System.Drawing.Size(468, 60)
Me.pbUpdateImage.TabIndex = 45
Me.pbUpdateImage.TabStop = False
Me.pbUpdateImage.Visible = False
'
'Update
'
Me.ClientSize = New System.Drawing.Size(734, 418)
Me.Controls.Add(Me.pbUpdateImage)
Me.Controls.Add(Me.lblLatestVersionLabel)
Me.Controls.Add(Me.lblInstalledVersionLabel)
Me.Controls.Add(Me.lblLatestVersion)
Me.Controls.Add(Me.btnCheckForUpdate)
Me.Controls.Add(Me.lblInstalledVersion)
Me.Controls.Add(Me.pnlUpdate)
Me.Controls.Add(Me.lblStatus)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = Global.mRemoteNG.My.Resources.Resources.Update_Icon
Me.Name = "Update"
Me.TabText = "Update"
Me.Text = "Update"
Me.pnlUpdate.ResumeLayout(False)
Me.pnlUpdate.PerformLayout()
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
End Class
End Namespace
End Namespace

View File

@@ -1,454 +1,208 @@
Imports System.ComponentModel
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking Imports WeifenLuo.WinFormsUI.Docking
Imports System.Threading
Imports System.IO Imports System.IO
Imports mRemoteNG.App.Runtime Imports mRemoteNG.App.Runtime
Namespace UI Namespace UI
Namespace Window Namespace Window
Public Class Update Public Class Update
Inherits UI.Window.Base Inherits Base
#Region "Form Init"
Friend WithEvents lblStatus As System.Windows.Forms.Label
Friend WithEvents txtChangeLog As System.Windows.Forms.TextBox
Friend WithEvents prgbDownload As System.Windows.Forms.ProgressBar
Friend WithEvents btnDownload As System.Windows.Forms.Button
Friend WithEvents lblChangeLogLabel As System.Windows.Forms.Label
Friend WithEvents pnlUp As System.Windows.Forms.Panel
Friend WithEvents lblCurrentVersionLabel As System.Windows.Forms.Label
Friend WithEvents lblInstalledVersionLabel As System.Windows.Forms.Label
Friend WithEvents lblAvailableVersion As System.Windows.Forms.Label
Friend WithEvents lblCurrentVersion As System.Windows.Forms.Label
Friend WithEvents pbUpdateImage As System.Windows.Forms.PictureBox
Friend WithEvents btnCheckForUpdate As System.Windows.Forms.Button
Private Sub InitializeComponent()
Me.btnCheckForUpdate = New System.Windows.Forms.Button
Me.pnlUp = New System.Windows.Forms.Panel
Me.lblChangeLogLabel = New System.Windows.Forms.Label
Me.btnDownload = New System.Windows.Forms.Button
Me.prgbDownload = New System.Windows.Forms.ProgressBar
Me.txtChangeLog = New System.Windows.Forms.TextBox
Me.lblStatus = New System.Windows.Forms.Label
Me.lblCurrentVersionLabel = New System.Windows.Forms.Label
Me.lblInstalledVersionLabel = New System.Windows.Forms.Label
Me.lblAvailableVersion = New System.Windows.Forms.Label
Me.lblCurrentVersion = New System.Windows.Forms.Label
Me.pbUpdateImage = New System.Windows.Forms.PictureBox
Me.pnlUp.SuspendLayout()
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'btnCheckForUpdate
'
Me.btnCheckForUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnCheckForUpdate.Location = New System.Drawing.Point(16, 104)
Me.btnCheckForUpdate.Name = "btnCheckForUpdate"
Me.btnCheckForUpdate.Size = New System.Drawing.Size(104, 32)
Me.btnCheckForUpdate.TabIndex = 5
Me.btnCheckForUpdate.Text = "Check Again"
Me.btnCheckForUpdate.UseVisualStyleBackColor = True
'
'pnlUp
'
Me.pnlUp.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pnlUp.Controls.Add(Me.lblChangeLogLabel)
Me.pnlUp.Controls.Add(Me.btnDownload)
Me.pnlUp.Controls.Add(Me.prgbDownload)
Me.pnlUp.Controls.Add(Me.txtChangeLog)
Me.pnlUp.Location = New System.Drawing.Point(16, 152)
Me.pnlUp.Name = "pnlUp"
Me.pnlUp.Size = New System.Drawing.Size(718, 248)
Me.pnlUp.TabIndex = 6
Me.pnlUp.Visible = False
'
'lblChangeLogLabel
'
Me.lblChangeLogLabel.AutoSize = True
Me.lblChangeLogLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblChangeLogLabel.Location = New System.Drawing.Point(0, 0)
Me.lblChangeLogLabel.Name = "lblChangeLogLabel"
Me.lblChangeLogLabel.Size = New System.Drawing.Size(79, 13)
Me.lblChangeLogLabel.TabIndex = 0
Me.lblChangeLogLabel.Text = "Change Log:"
'
'btnDownload
'
Me.btnDownload.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.btnDownload.Location = New System.Drawing.Point(0, 216)
Me.btnDownload.Name = "btnDownload"
Me.btnDownload.Size = New System.Drawing.Size(144, 32)
Me.btnDownload.TabIndex = 2
Me.btnDownload.Text = "Download and Install"
Me.btnDownload.UseVisualStyleBackColor = True
'
'prgbDownload
'
Me.prgbDownload.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.prgbDownload.Location = New System.Drawing.Point(160, 224)
Me.prgbDownload.Name = "prgbDownload"
Me.prgbDownload.Size = New System.Drawing.Size(542, 23)
Me.prgbDownload.TabIndex = 3
'
'txtChangeLog
'
Me.txtChangeLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.txtChangeLog.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtChangeLog.Cursor = System.Windows.Forms.Cursors.Arrow
Me.txtChangeLog.Location = New System.Drawing.Point(16, 24)
Me.txtChangeLog.Multiline = True
Me.txtChangeLog.Name = "txtChangeLog"
Me.txtChangeLog.ReadOnly = True
Me.txtChangeLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.txtChangeLog.Size = New System.Drawing.Size(699, 181)
Me.txtChangeLog.TabIndex = 1
Me.txtChangeLog.TabStop = False
'
'lblStatus
'
Me.lblStatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStatus.ForeColor = System.Drawing.SystemColors.ControlText
Me.lblStatus.Location = New System.Drawing.Point(12, 16)
Me.lblStatus.Name = "lblStatus"
Me.lblStatus.Size = New System.Drawing.Size(660, 23)
Me.lblStatus.TabIndex = 0
Me.lblStatus.Text = "Status"
Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblCurrentVersionLabel
'
Me.lblCurrentVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblCurrentVersionLabel.Location = New System.Drawing.Point(16, 72)
Me.lblCurrentVersionLabel.Name = "lblCurrentVersionLabel"
Me.lblCurrentVersionLabel.Size = New System.Drawing.Size(120, 16)
Me.lblCurrentVersionLabel.TabIndex = 3
Me.lblCurrentVersionLabel.Text = "Current version:"
Me.lblCurrentVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'lblInstalledVersionLabel
'
Me.lblInstalledVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblInstalledVersionLabel.Location = New System.Drawing.Point(16, 48)
Me.lblInstalledVersionLabel.Name = "lblInstalledVersionLabel"
Me.lblInstalledVersionLabel.Size = New System.Drawing.Size(120, 16)
Me.lblInstalledVersionLabel.TabIndex = 1
Me.lblInstalledVersionLabel.Text = "Installed version:"
Me.lblInstalledVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
'
'lblAvailableVersion
'
Me.lblAvailableVersion.Location = New System.Drawing.Point(136, 72)
Me.lblAvailableVersion.Name = "lblAvailableVersion"
Me.lblAvailableVersion.Size = New System.Drawing.Size(104, 16)
Me.lblAvailableVersion.TabIndex = 4
Me.lblAvailableVersion.Text = "Version"
Me.lblAvailableVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'lblCurrentVersion
'
Me.lblCurrentVersion.Location = New System.Drawing.Point(136, 48)
Me.lblCurrentVersion.Name = "lblCurrentVersion"
Me.lblCurrentVersion.Size = New System.Drawing.Size(104, 16)
Me.lblCurrentVersion.TabIndex = 2
Me.lblCurrentVersion.Text = "Version"
Me.lblCurrentVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
'
'pbUpdateImage
'
Me.pbUpdateImage.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pbUpdateImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.pbUpdateImage.Cursor = System.Windows.Forms.Cursors.Hand
Me.pbUpdateImage.Location = New System.Drawing.Point(246, 48)
Me.pbUpdateImage.Name = "pbUpdateImage"
Me.pbUpdateImage.Size = New System.Drawing.Size(468, 60)
Me.pbUpdateImage.TabIndex = 45
Me.pbUpdateImage.TabStop = False
Me.pbUpdateImage.Visible = False
'
'Update
'
Me.ClientSize = New System.Drawing.Size(734, 418)
Me.Controls.Add(Me.pbUpdateImage)
Me.Controls.Add(Me.lblCurrentVersionLabel)
Me.Controls.Add(Me.lblInstalledVersionLabel)
Me.Controls.Add(Me.lblAvailableVersion)
Me.Controls.Add(Me.btnCheckForUpdate)
Me.Controls.Add(Me.lblCurrentVersion)
Me.Controls.Add(Me.pnlUp)
Me.Controls.Add(Me.lblStatus)
Me.Icon = Global.mRemoteNG.My.Resources.Resources.Update_Icon
Me.Name = "Update"
Me.TabText = "Update"
Me.Text = "Update"
Me.pnlUp.ResumeLayout(False)
Me.pnlUp.PerformLayout()
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
#Region "Private Properties"
Private uD As App.Update
Private uT As Thread
Private IsUpdateCheckHandlerDeclared As Boolean = False
Private IsUpdateDownloadHandlerDeclared As Boolean = False
#End Region
#Region "Public Events"
Public Event UpdateCheckCompleted(ByVal UpdateAvailable As Boolean)
#End Region
#Region "Public Methods" #Region "Public Methods"
Public Sub New(ByVal Panel As DockContent) Public Sub New(ByVal panel As DockContent)
Me.WindowType = Type.Update WindowType = Type.Update
Me.DockPnl = Panel DockPnl = panel
Me.InitializeComponent() InitializeComponent()
App.Runtime.FontOverride(Me) FontOverride(Me)
End Sub
Public Sub CheckForUpdate()
Try
uT = New Thread(AddressOf CheckForUpdateBG)
uT.SetApartmentState(ApartmentState.STA)
uT.IsBackground = True
If Me.IsUpdateCheckHandlerDeclared = False Then
AddHandler UpdateCheckCompleted, AddressOf UpdateCheckComplete
Me.IsUpdateCheckHandlerDeclared = True
End If
uT.Start()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckFailed & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Private Methods"
Private Sub CheckForUpdateBG()
Try
uD = New App.Update
If uD.IsUpdateAvailable = True Then
RaiseEvent UpdateCheckCompleted(True)
Else
RaiseEvent UpdateCheckCompleted(False)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
Try
My.Settings.CheckForUpdatesLastCheck = Date.Now
SetCurrentVersionText(My.Application.Info.Version.ToString)
If UpdateAvailable = True Then
My.Settings.UpdatePending = True
SetStatus(Color.OrangeRed, My.Language.strUpdateAvailable)
SetVisible(pnlUp, True)
Dim uI As App.Update.Info = uD.GetUpdateInfo()
SetAvailableVersionText(uI.Version.ToString)
SetChangeLogText(uI.ChangeLog)
If uI.ImageURL <> String.Empty Then
SetImageURL(uI.ImageURL)
If uI.ImageURLLink <> String.Empty Then
pbUpdateImage.Tag = uI.ImageURLLink
End If
SetVisible(pbUpdateImage, True)
Else
SetVisible(pbUpdateImage, False)
End If
FocusDownloadButton()
Else
My.Settings.UpdatePending = False
SetStatus(Color.ForestGreen, My.Language.strNoUpdateAvailable)
SetVisible(pnlUp, False)
Dim uI As App.Update.Info = uD.GetUpdateInfo()
SetAvailableVersionText(uI.Version.ToString)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckCompleteFailed & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
#Region "Threading Callbacks"
Private Delegate Sub SetImageURLCB(ByVal img As String)
Private Sub SetImageURL(ByVal img As String)
If Me.pbUpdateImage.InvokeRequired = True Then
Dim d As New SetImageURLCB(AddressOf SetImageURL)
Me.pbUpdateImage.Invoke(d, New Object() {img})
Else
Me.pbUpdateImage.ImageLocation = img
End If
End Sub
Private Delegate Sub SetStatusCB(ByVal Color As Color, ByVal Text As String)
Private Sub SetStatus(ByVal Color As Color, ByVal Text As String)
If Me.lblStatus.InvokeRequired = True Then
Dim d As New SetStatusCB(AddressOf SetStatus)
Me.lblStatus.Invoke(d, New Object() {Color, Text})
Else
Me.lblStatus.ForeColor = Color
Me.lblStatus.Text = Text
End If
End Sub
Private Delegate Sub SetVisibleCB(ByVal ctrl As Control, ByVal visible As Boolean)
Private Sub SetVisible(ByVal ctrl As Control, ByVal visible As Boolean)
If ctrl.InvokeRequired Then
Dim d As New SetVisibleCB(AddressOf SetVisible)
ctrl.Invoke(d, New Object() {ctrl, visible})
Else
ctrl.Visible = visible
End If
End Sub
Private Delegate Sub SetCurrentVersionTextCB(ByVal Text As String)
Private Sub SetCurrentVersionText(ByVal Text As String)
If Me.lblCurrentVersion.InvokeRequired = True Then
Dim d As New SetCurrentVersionTextCB(AddressOf SetCurrentVersionText)
Me.lblCurrentVersion.Invoke(d, New Object() {Text})
Else
Me.lblCurrentVersion.Text = Text
End If
End Sub
Private Delegate Sub SetAvailableVersionTextCB(ByVal Text As String)
Private Sub SetAvailableVersionText(ByVal Text As String)
If Me.lblAvailableVersion.InvokeRequired = True Then
Dim d As New SetAvailableVersionTextCB(AddressOf SetAvailableVersionText)
Me.lblAvailableVersion.Invoke(d, New Object() {Text})
Else
Me.lblAvailableVersion.Text = Text
End If
End Sub
Private Delegate Sub SetChangeLogTextCB(ByVal Text As String)
Private Sub SetChangeLogText(ByVal Text As String)
If Me.txtChangeLog.InvokeRequired = True Then
Dim d As New SetChangeLogTextCB(AddressOf SetChangeLogText)
Me.txtChangeLog.Invoke(d, New Object() {Text})
Else
Me.txtChangeLog.Text = Text
End If
End Sub
Private Delegate Sub FocusDownloadButtonCB()
Private Sub FocusDownloadButton()
If Me.btnDownload.InvokeRequired = True Then
Dim d As New FocusDownloadButtonCB(AddressOf FocusDownloadButton)
Me.btnDownload.Invoke(d)
Else
Me.btnDownload.Focus()
End If
End Sub End Sub
#End Region #End Region
#Region "Form Stuff" #Region "Form Stuff"
Private Sub Update_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Private Sub Update_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ApplyLanguage() ApplyLanguage()
CheckForUpdate()
Me.CheckForUpdate()
End Sub End Sub
Private Sub ApplyLanguage() Private Sub ApplyLanguage()
btnCheckForUpdate.Text = My.Language.strCheckForUpdate Text = Language.strMenuCheckForUpdates
lblChangeLogLabel.Text = My.Language.strLabelChangeLog TabText = Language.strMenuCheckForUpdates
btnDownload.Text = My.Language.strDownloadAndInstall btnCheckForUpdate.Text = Language.strCheckForUpdate
lblCurrentVersionLabel.Text = My.Language.strAvailableVersion & ":" btnDownload.Text = Language.strDownloadAndInstall
lblInstalledVersionLabel.Text = My.Language.strCurrentVersion & ":" lblChangeLogLabel.Text = Language.strLabelChangeLog
lblAvailableVersion.Text = My.Language.strVersion lblInstalledVersion.Text = Language.strVersion
lblCurrentVersion.Text = My.Language.strVersion lblInstalledVersionLabel.Text = String.Format("{0}:", Language.strCurrentVersion)
TabText = My.Language.strMenuCheckForUpdates lblLatestVersion.Text = Language.strVersion
Text = My.Language.strMenuCheckForUpdates lblLatestVersionLabel.Text = String.Format("{0}:", Language.strAvailableVersion)
End Sub End Sub
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckForUpdate.Click Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCheckForUpdate.Click
Me.CheckForUpdate() CheckForUpdate()
End Sub End Sub
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDownload.Click Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnDownload.Click
Me.DownloadUpdate() DownloadUpdate()
End Sub
Private Sub pbUpdateImage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles pbUpdateImage.Click
Dim linkUri As Uri = TryCast(pbUpdateImage.Tag, Uri)
If linkUri Is Nothing OrElse linkUri.IsFile Or linkUri.IsUnc Or linkUri.IsLoopback Then Return
Process.Start(linkUri.ToString())
End Sub
#End Region
#Region "Private Fields"
Private _appUpdate As App.Update
Private _isUpdateDownloadHandlerDeclared As Boolean = False
#End Region
#Region "Private Methods"
Private Sub CheckForUpdate()
If _appUpdate Is Nothing Then
_appUpdate = New App.Update
ElseIf _appUpdate.IsGetUpdateInfoRunning Then
Return
End If
lblStatus.Text = Language.strUpdateCheckingLabel
lblStatus.ForeColor = SystemColors.WindowText
lblLatestVersionLabel.Visible = False
lblInstalledVersion.Visible = False
lblInstalledVersionLabel.Visible = False
lblLatestVersion.Visible = False
btnCheckForUpdate.Visible = False
pnlUpdate.Visible = False
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
_appUpdate.GetUpdateInfoAsync()
End Sub
Private Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
lblInstalledVersion.Text = Application.Info.Version.ToString
lblInstalledVersion.Visible = True
lblInstalledVersionLabel.Visible = True
btnCheckForUpdate.Visible = True
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
If _appUpdate.IsUpdateAvailable() Then
lblStatus.Text = Language.strUpdateAvailable
lblStatus.ForeColor = Color.OrangeRed
pnlUpdate.Visible = True
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
lblLatestVersion.Text = updateInfo.Version.ToString
lblLatestVersionLabel.Visible = True
lblLatestVersion.Visible = True
If updateInfo.ImageAddress Is Nothing OrElse String.IsNullOrEmpty(updateInfo.ImageAddress.ToString()) Then
pbUpdateImage.Visible = False
Else
pbUpdateImage.ImageLocation = updateInfo.ImageAddress.ToString()
pbUpdateImage.Tag = updateInfo.ImageLinkAddress
pbUpdateImage.Visible = True
End If
AddHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
_appUpdate.GetChangeLogAsync()
btnDownload.Focus()
Else
lblStatus.Text = Language.strNoUpdateAvailable
lblStatus.ForeColor = Color.ForestGreen
If _appUpdate.CurrentUpdateInfo IsNot Nothing Then
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
If updateInfo.IsValid And updateInfo.Version IsNot Nothing Then
lblLatestVersion.Text = updateInfo.Version.ToString
lblLatestVersionLabel.Visible = True
lblLatestVersion.Visible = True
End If
End If
End If
Catch ex As Exception
lblStatus.Text = Language.strUpdateCheckFailedLabel
lblStatus.ForeColor = Color.OrangeRed
MessageCollector.AddExceptionMessage(Language.strUpdateCheckCompleteFailed, ex)
End Try
End Sub
Private Sub GetChangeLogCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetChangeLogCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
txtChangeLog.Text = _appUpdate.ChangeLog
Catch ex As Exception
MessageCollector.AddExceptionMessage(Language.strUpdateGetChangeLogFailed, ex)
End Try
End Sub End Sub
Private Sub DownloadUpdate() Private Sub DownloadUpdate()
Try Try
If uD.DownloadUpdate(uD.curUI.DownloadUrl) = True Then btnDownload.Enabled = False
Me.btnDownload.Enabled = False prgbDownload.Visible = True
prgbDownload.Value = 0
If Me.IsUpdateDownloadHandlerDeclared = False Then If _isUpdateDownloadHandlerDeclared = False Then
AddHandler uD.DownloadProgressChanged, AddressOf DLProgressChanged AddHandler _appUpdate.DownloadUpdateProgressChangedEvent, AddressOf DownloadUpdateProgressChanged
AddHandler uD.DownloadCompleted, AddressOf DLCompleted AddHandler _appUpdate.DownloadUpdateCompletedEvent, AddressOf DownloadUpdateCompleted
Me.IsUpdateDownloadHandlerDeclared = True _isUpdateDownloadHandlerDeclared = True
End If
End If End If
_appUpdate.DownloadUpdateAsync()
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed & vbNewLine & ex.Message, True) MessageCollector.AddExceptionMessage(Language.strUpdateDownloadFailed, ex)
End Try End Try
End Sub End Sub
#End Region #End Region
#Region "Events" #Region "Events"
Private Sub DLProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Private Sub DownloadUpdateProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs)
Me.prgbDownload.Value = e.ProgressPercentage prgbDownload.Value = e.ProgressPercentage
End Sub End Sub
Private Sub DLCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs, ByVal Success As Boolean) Private Sub DownloadUpdateCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Try Try
Me.btnDownload.Enabled = True btnDownload.Enabled = True
prgbDownload.Visible = False
If Success = True Then If e.Cancelled Then Return
If MessageBox.Show(My.Language.strUpdateDownloadComplete, My.Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then If e.Error IsNot Nothing Then Throw e.Error
Try
App.Runtime.Shutdown.BeforeQuit()
Process.Start(uD.curUI.UpdateLocation) If MessageBox.Show(Language.strUpdateDownloadComplete, Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
Catch ex As Exception Shutdown.BeforeQuit()
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateStartFailed & vbNewLine & ex.Message)
End Try
End Process.Start(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
Else System.Windows.Forms.Application.Exit()
Try Return
File.Delete(uD.curUI.UpdateLocation)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDeleteFailed & vbNewLine & ex.Message)
End Try
End If
Else Else
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed) File.Delete(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
End If End If
Catch ex As Exception Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadCompleteFailed & vbNewLine & ex.Message, True) MessageCollector.AddExceptionMessage(Language.strUpdateDownloadCompleteFailed, ex)
End Try End Try
End Sub End Sub
#End Region #End Region
Private Sub pbUpdateImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If pbUpdateImage.Tag IsNot Nothing Then
Process.Start(pbUpdateImage.Tag)
End If
End Sub
End Class End Class
End Namespace End Namespace
End Namespace End Namespace

View File

@@ -577,16 +577,37 @@
<setting name="PuttySavedSessionsPanel" serializeAs="String"> <setting name="PuttySavedSessionsPanel" serializeAs="String">
<value /> <value />
</setting> </setting>
<setting name="CompatibilityWarnLenovoAutoScrollUtility" serializeAs="String">
<value>True</value>
</setting>
<setting name="UpdateAddress" serializeAs="String">
<value>https://update.mremoteng.org/</value>
</setting>
<setting name="ConDefaultLoadBalanceInfo" serializeAs="String">
<value />
</setting>
<setting name="ConDefaultAutomaticResize" serializeAs="String">
<value>True</value>
</setting>
<setting name="InhDefaultLoadBalanceInfo" serializeAs="String">
<value>False</value>
</setting>
<setting name="InhDefaultAutomaticResize" serializeAs="String">
<value>False</value>
</setting>
</mRemoteNG.My.MySettings> </mRemoteNG.My.MySettings>
</userSettings> </userSettings>
<applicationSettings> <applicationSettings>
<mRemoteNG.My.MySettings> <mRemoteNG.My.MySettings>
<setting name="SupportedUICultures" serializeAs="String"> <setting name="SupportedUICultures" serializeAs="String">
<value>de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN</value> <value>de,en,en-US,es-AR,es,fr,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN</value>
</setting> </setting>
<setting name="UpdateChannel" serializeAs="String"> <setting name="UpdateChannel" serializeAs="String">
<value>release</value> <value>release</value>
</setting> </setting>
<setting name="AnnouncementAddress" serializeAs="String">
<value>https://update.mremoteng.org/announcement-beta.txt</value>
</setting>
</mRemoteNG.My.MySettings> </mRemoteNG.My.MySettings>
</applicationSettings> </applicationSettings>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration> <startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

View File

@@ -175,7 +175,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ApplicationEvents.vb" /> <Compile Include="ApplicationEvents.vb" />
<Compile Include="App\App.Announcement.vb" />
<Compile Include="App\App.Info.vb" /> <Compile Include="App\App.Info.vb" />
<Compile Include="App\App.Native.vb" /> <Compile Include="App\App.Native.vb" />
<Compile Include="App\App.Runtime.vb" /> <Compile Include="App\App.Runtime.vb" />
@@ -188,6 +187,10 @@
<Compile Include="Config\Config.Settings.Save.vb" /> <Compile Include="Config\Config.Settings.Save.vb" />
<Compile Include="Config\ConfirmClose.vb" /> <Compile Include="Config\ConfirmClose.vb" />
<Compile Include="Config\PuttySessions.vb" /> <Compile Include="Config\PuttySessions.vb" />
<Compile Include="Tools\Authenticode.vb" />
<Compile Include="Tools\EnumWindows.vb" />
<Compile Include="Tools\EnvironmentInfo.vb" />
<Compile Include="Tools\PropertyGridCommandSite.vb" />
<Compile Include="Connection\PuttySession.Info.vb" /> <Compile Include="Connection\PuttySession.Info.vb" />
<Compile Include="Root\PuttySessions.Info.vb" /> <Compile Include="Root\PuttySessions.Info.vb" />
<Compile Include="Themes\ThemeManager.vb" /> <Compile Include="Themes\ThemeManager.vb" />
@@ -270,6 +273,9 @@
<Compile Include="Security\Security.Crypt.vb" /> <Compile Include="Security\Security.Crypt.vb" />
<Compile Include="Security\Security.Impersonator.vb" /> <Compile Include="Security\Security.Impersonator.vb" />
<Compile Include="Security\Security.Save.vb" /> <Compile Include="Security\Security.Save.vb" />
<Compile Include="Tools\IeBrowserEmulation.vb" />
<Compile Include="Tools\ProcessController.vb" />
<Compile Include="Tools\PuttyProcessController.vb" />
<Compile Include="Tools\ReconnectGroup.Designer.vb"> <Compile Include="Tools\ReconnectGroup.Designer.vb">
<DependentUpon>ReconnectGroup.vb</DependentUpon> <DependentUpon>ReconnectGroup.vb</DependentUpon>
</Compile> </Compile>
@@ -291,7 +297,10 @@
<Compile Include="UI\UI.Window.ADImport.vb"> <Compile Include="UI\UI.Window.ADImport.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="UI\UI.Window.Announcment.vb"> <Compile Include="UI\UI.Window.Announcement.Designer.vb">
<DependentUpon>UI.Window.Announcement.vb</DependentUpon>
</Compile>
<Compile Include="UI\UI.Window.Announcement.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="UI\UI.Window.Base.vb"> <Compile Include="UI\UI.Window.Base.vb">
@@ -331,6 +340,9 @@
<Compile Include="UI\UI.Window.ScreenshotManager.vb"> <Compile Include="UI\UI.Window.ScreenshotManager.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="UI\UI.Window.Sessions.Designer.vb">
<DependentUpon>UI.Window.Sessions.vb</DependentUpon>
</Compile>
<Compile Include="UI\UI.Window.Sessions.vb"> <Compile Include="UI\UI.Window.Sessions.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -344,6 +356,9 @@
<Compile Include="UI\UI.Window.UltraVNCSC.vb"> <Compile Include="UI\UI.Window.UltraVNCSC.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="UI\UI.Window.Update.Designer.vb">
<DependentUpon>UI.Window.Update.vb</DependentUpon>
</Compile>
<Compile Include="UI\UI.Window.Update.vb"> <Compile Include="UI\UI.Window.Update.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
@@ -372,9 +387,11 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Language\Language.it.resx" /> <EmbeddedResource Include="Language\Language.it.resx" />
<EmbeddedResource Include="Language\Language.nb-NO.resx" />
<EmbeddedResource Include="Language\Language.nl.resx"> <EmbeddedResource Include="Language\Language.nl.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Language\Language.pt-BR.resx" />
<EmbeddedResource Include="Language\Language.pt.resx" /> <EmbeddedResource Include="Language\Language.pt.resx" />
<EmbeddedResource Include="Language\Language.resx"> <EmbeddedResource Include="Language\Language.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
@@ -413,8 +430,8 @@
<DependentUpon>UI.Window.ADImport.vb</DependentUpon> <DependentUpon>UI.Window.ADImport.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="UI\UI.Window.Announcment.resx"> <EmbeddedResource Include="UI\UI.Window.Announcement.resx">
<DependentUpon>UI.Window.Announcment.vb</DependentUpon> <DependentUpon>UI.Window.Announcement.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="UI\UI.Window.ComponentsCheck.resx"> <EmbeddedResource Include="UI\UI.Window.ComponentsCheck.resx">