Compare commits

...

75 Commits

Author SHA1 Message Date
Riley McArdle
3d64fbef49 Update CHANGELOG.TXT for 1.71 RC3. 2013-10-29 02:35:33 -05:00
Riley McArdle
869c2726bb Fix checking for updates even when disabled. 2013-10-27 06:04:54 -05:00
Riley McArdle
2e663df42a Fix issue MR-578 - Connections file is reset
Fix the wrong connections file opening on startup under certain conditions.
Improve error reporting when loading connections files.
Remove warning message when mRemoteNG is started for the first time about new connections file being created.
2013-10-27 05:46:11 -05:00
Riley McArdle
0a82828d2e Fix log file not showing operating system version on Windows XP and Windows Server 2003. 2013-10-25 00:57:21 -05:00
Riley McArdle
13c1d049fc Fix issue MR-574 - Crash when retrieving RDP session list if eolwtscom.dll is not registered 2013-10-25 00:56:28 -05:00
Riley McArdle
62feba1691 Update CHANGELOG.TXT for 1.71 RC2. 2013-10-16 17:08:10 -05:00
Riley McArdle
3cb8784996 Minor code cleanup. 2013-10-14 22:48:10 -05:00
Riley McArdle
81d150f80a Fix duplicated folders possibly being named "New Connection" instead of the original folder's name 2013-10-14 22:47:48 -05:00
Riley McArdle
9ebce266ec Fix issue MR-565 - Double Folder keep heritage on the initial Folder 2013-10-14 22:42:34 -05:00
Riley McArdle
42bcf8db31 Fix typo in Portuguese translation. 2013-10-14 18:31:31 -05:00
Riley McArdle
ff2bbcf650 Fix issue MR-566 - Typo in German UI Automatic Update Settings 2013-10-14 18:30:55 -05:00
Riley McArdle
ba55958327 Fix issue MR-560 - Cannot Auto-Update With Open Connections: Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32' 2013-10-02 14:38:58 -05:00
Riley McArdle
2a67f493f6 Always use debug update channel for debug builds. 2013-10-02 13:56:04 -05:00
Riley McArdle
06892deedf Update CHANGELOG.TXT for release. 2013-10-01 19:58:36 -05:00
Riley McArdle
d12ea40845 Add missing variable type. 2013-10-01 19:57:34 -05:00
Riley McArdle
3f21151331 Add new translations to project file. Add code signing of DLLs for new translations to BUILD.CMD. 2013-10-01 19:56:53 -05:00
Riley McArdle
c91f5e5cba Remove Beta VERSIONTAG from BUILD.CMD. Fix encoding of CHANGELOG.TXT. 2013-10-01 19:45:54 -05:00
Riley McArdle
9e90d17d80 Fix AnnouncementAddress for release version. 2013-10-01 19:41:16 -05:00
Riley McArdle
2e67bbf6a1 Add Chinese (Traditional) translation. Add partial Greek and Hungarian translations. 2013-10-01 19:17:21 -05:00
Riley McArdle
ceec9749b9 Update translations from Crowdin. 2013-10-01 19:16:31 -05:00
Riley McArdle
f674b5bfeb Fix issue MR-542 - Wrapped putty has security flaw
Update PuTTY to version 0.63.
2013-10-01 17:23:12 -05:00
Riley McArdle
b3e541c627 Add missing punctuation in CHANGELOG.TXT. 2013-09-30 22:09:43 -05:00
Riley McArdle
3389a152be Fix PuTTY Saved Sessions not showing after loading a new connections file 2013-09-30 22:09:04 -05:00
Riley McArdle
662fcfa318 Fix possible cross-thread operation exception when loading connections from SQL 2013-09-30 22:08:05 -05:00
Riley McArdle
06baec9c55 Fix issue MR-535 - SQL error saving Connections 2013-09-30 22:07:39 -05:00
Riley McArdle
270699c26b Fix issue MR-538 - RDP loses connection when hiding config or connections pane 2013-09-27 23:01:14 -05:00
Riley McArdle
bc699a04ec Fix issue MR-525 - Could not start on windows 7 64bit 2013-09-27 22:15:40 -05:00
Riley McArdle
3639e75f5b Fix issue MR-514 - Window Proxy test failed without close button 2013-09-27 21:04:26 -05:00
Riley McArdle
eef14ebc29 Fix issue MR-521 - Right-Clicking in "Sessions" panel crashes mRemoteNG 2013-09-27 01:39:43 -05:00
Riley McArdle
2568d2b750 Fix issue MR-495 - Having a negative range in port scan creates memory exhaustion.
Make minor improvements to the port scan functionality.
2013-09-27 01:29:35 -05:00
Riley McArdle
58a57d7a7d Improve reliability of BUILD.CMD. 2013-07-03 02:07:51 -05:00
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
78 changed files with 10693 additions and 2820 deletions

View File

@@ -8,7 +8,7 @@ set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat
set DEVENV="devenv.exe"
set MAKENSIS="%ProgramFiles(x86)%\NSIS\Unicode\makensis.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
set SIGCHECK="%ProgramFiles(x86)%\Sigcheck\sigcheck.exe"
@@ -18,6 +18,20 @@ call %VCVARSALL% x86
rmdir /s /q "%~dp0\mRemoteV1\bin" > nul 2>&1
rmdir /s /q "%~dp0\mRemoteV1\obj" > nul 2>&1
if exist "%~dp0\mRemoteV1\bin" goto ERROR_RMDIR
if exist "%~dp0\mRemoteV1\obj" goto ERROR_RMDIR
goto NOERROR_RMDIR
:ERROR_RMDIR
echo.
echo Could not clean output directories.
echo.
echo Build process failed.
echo.
goto END
:NOERROR_RMDIR
echo Building release version...
%DEVENV% "%~dp0\mRemoteV1.sln" /build "Release"
@@ -25,7 +39,58 @@ echo Building portable version...
%DEVENV% "%~dp0\mRemoteV1.sln" /build "Release Portable"
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\el\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\hu\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\zh-TW\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\el\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\hu\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\zh-TW\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" ^
rem Do not remove the two blank lines above this line.
mkdir "%~dp0\Release" > nul 2>&1
@@ -79,4 +144,6 @@ del /f /q %PORTABLEZIP% > nul 2>&1
echo.
echo Build process complete.
echo.
:END
pause

View File

@@ -1,3 +1,70 @@
1.71 (2013-10-29):
Fixed issue MR-574 - Crash when retrieving RDP session list if eolwtscom.dll is not registered
Fixed issue MR-578 - Connections file is reset
Fixed log file not showing operating system version on Windows XP and Windows Server 2003.
Fixed the wrong connections file opening on startup under certain conditions.
Fixed checking for updates even when disabled.
Improved error reporting when loading connections files.
Removed warning message when mRemoteNG is started for the first time about new connections file being created.
1.71 Release Candidate 2 (2013-10-16):
Fixed issue MR-560 - Cannot Auto-Update With Open Connections: Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32'
Fixed issue MR-565 - Double Folder keep heritage on the initial Folder
Fixed issue MR-566 - Typo in German UI Automatic Update Settings
Fixed duplicated folders possibly being named "New Connection" instead of the original folder's name.
1.71 Release Candidate 1 (2013-10-01):
Fixed issue MR-495 - Having a negative range in port scan creates memory exhaustion.
Fixed issue MR-514 - Window Proxy test failed without close button
Fixed issue MR-521 - Right-Clicking in "Sessions" panel crashes mRemoteNG
Fixed issue MR-525 - Could not start on windows 7 64bit
Fixed issue MR-535 - SQL error saving Connections
Fixed issue MR-538 - RDP loses connection when hiding config or connections pane
Fixed issue MR-542 - Wrapped putty has security flaw
Made minor improvements to the port scan functionality.
Fixed possible cross-thread operation exception when loading connections from SQL.
Fixed PuTTY Saved Sessions not showing after loading a new connections file.
Updated PuTTY to version 0.63.
Updated translations.
Added Chinese (Traditional) translation.
Added partial Greek and Hungarian translations.
1.71 Beta 5 (2013-06-09):
Fixed issue MR-491 - Could not start RDP Connection
Fixed issue MR-499 - TS Gateway is not working in latest release 1.71
Fixed typo in SQL queries.
1.71 Beta 4 (2013-05-28):
Added feature MR-435 - Add digital signature check to updater
Fixed issue MR-255 - The version of the RDP AX client should be updated to 7
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 (Bokmal) 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

Binary file not shown.

Binary file not shown.

View File

@@ -1,22 +1,22 @@
; Spanish installer translation
; Start mRemoteNG after installation
LangString LaunchMremoteNow ${LANG_SPANISH} "mRemoteNG run SPANISH message"
LangString LaunchMremoteNow ${LANG_SPANISH} "Iniciando de mRemoteNG"
; Installer Language
LangString InstallerLanguage ${LANG_SPANISH} "Installer Language"
LangString InstallerLanguage ${LANG_SPANISH} "Lenguaje de Instalación"
; 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
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
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
LangString CreditsLinkName ${LANG_SPANISH} "Credits"
LangString CopyingLinkName ${LANG_SPANISH} "License"
LangString UninstallLinkName ${LANG_SPANISH} "Uninstall"
LangString ChangeLogLinkName ${LANG_SPANISH} "Version History"
LangString CreditsLinkName ${LANG_SPANISH} "Créditos"
LangString CopyingLinkName ${LANG_SPANISH} "Licencia"
LangString UninstallLinkName ${LANG_SPANISH} "Desinstalar"
LangString ChangeLogLinkName ${LANG_SPANISH} "Historial de Versiones"

View File

@@ -16,7 +16,7 @@ mkdir %TEMP_FOLDER%
copy "%~dp0\mRemoteV1\Language\*.resx" %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
rmdir /s /q %TEMP_FOLDER%

View File

@@ -28,13 +28,17 @@ mkdir %TEMP_FOLDER%
%RAR% x -o+ %ZIP_FILE% *.* %TEMP_FOLDER%
%SORTRESX% %TEMP_FOLDER%\ar\Language.ar.resx "%~dp0\mRemoteV1\Language\Language.ar.resx"
%SORTRESX% %TEMP_FOLDER%\bg\Language.bg.resx "%~dp0\mRemoteV1\Language\Language.bg.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%\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%\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%\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%\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"
@@ -42,6 +46,7 @@ mkdir %TEMP_FOLDER%
%SORTRESX% %TEMP_FOLDER%\ru\Language.ru.resx "%~dp0\mRemoteV1\Language\Language.ru.resx"
%SORTRESX% %TEMP_FOLDER%\uk\Language.uk.resx "%~dp0\mRemoteV1\Language\Language.uk.resx"
%SORTRESX% %TEMP_FOLDER%\zh-CN\Language.zh.resx "%~dp0\mRemoteV1\Language\Language.zh-CN.resx"
%SORTRESX% %TEMP_FOLDER%\zh-TW\Language.zh.resx "%~dp0\mRemoteV1\Language\Language.zh-TW.resx"
rmdir /s /q %TEMP_FOLDER%

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.Threading
Namespace App
Namespace Info
@@ -7,10 +8,27 @@ Namespace App
Public Shared ReadOnly URLDonate As String = "http://donate.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 URLAnnouncement As String = "http://update.mremoteng.org/announcement.txt"
Public Shared ReadOnly HomePath As String = My.Application.Info.DirectoryPath
Public Shared EncryptionKey As String = "mR3m"
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
Public Class Settings
@@ -25,9 +43,11 @@ Namespace App
End Class
Public Class Update
Public Shared ReadOnly URL As String = "http://update.mremoteng.org/"
Public Shared ReadOnly Property File As String
Public Shared ReadOnly Property FileName As String
Get
#If DEBUG Then
Return "update-debug.txt"
#End If
Select Case My.Settings.UpdateChannel.ToLowerInvariant()
Case "beta"
Return "update-beta.txt"
@@ -44,7 +64,7 @@ Namespace App
Public Shared ReadOnly DefaultConnectionsPath As String = App.Info.Settings.SettingsPath
Public Shared ReadOnly DefaultConnectionsFile As String = "confCons.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
Public Class Credentials

View File

@@ -1,4 +1,6 @@
Imports log4net
Imports System.ComponentModel
Imports mRemoteNG.Config
Imports log4net
Imports mRemoteNG.Messages
Imports mRemoteNG.Connection
Imports mRemoteNG.Tools
@@ -20,6 +22,8 @@ Namespace App
End Sub
#Region "Public Properties"
Public Shared Property MainForm As frmMain
Private Shared _connectionList As Connection.List
Public Shared Property ConnectionList() As List
Get
@@ -131,26 +135,6 @@ Namespace App
End Set
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
Public Shared Property IsConnectionsFileLoaded() As Boolean
Get
@@ -519,54 +503,95 @@ Namespace App
#End If
Log.InfoFormat("Command Line: {0}", Environment.GetCommandLineArgs)
Dim osVersion As String = String.Empty
Dim servicePack As String = String.Empty
Try
Dim servicePack As Integer
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get()
servicePack = managementObject.GetPropertyValue("ServicePackMajorVersion")
If servicePack = 0 Then
Log.InfoFormat("{0} {1}", managementObject.GetPropertyValue("Caption").Trim, managementObject.GetPropertyValue("OSArchitecture"))
Else
Log.InfoFormat("{0} Service Pack {1} {2}", managementObject.GetPropertyValue("Caption").Trim, servicePack.ToString, managementObject.GetPropertyValue("OSArchitecture"))
End If
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem WHERE Primary=True").Get()
osVersion = managementObject.GetPropertyValue("Caption").Trim()
Dim servicePackNumber As Integer = managementObject.GetPropertyValue("ServicePackMajorVersion")
If Not servicePackNumber = 0 Then servicePack = String.Format("Service Pack {0}", servicePackNumber)
Next
Catch ex As Exception
Log.WarnFormat("Error retrieving operating system information from WMI. {0}", ex.Message)
End Try
Dim architecture As String = String.Empty
Try
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_Processor WHERE DeviceID='CPU0'").Get()
Dim addressWidth As Integer = managementObject.GetPropertyValue("AddressWidth")
architecture = String.Format("{0}-bit", addressWidth)
Next
Catch ex As Exception
Log.WarnFormat("Error retrieving operating system address width from WMI. {0}", ex.Message)
End Try
Log.InfoFormat(String.Join(" ", Array.FindAll(New String() {osVersion, servicePack, architecture}, Function(s) Not String.IsNullOrEmpty(s))))
Log.InfoFormat("Microsoft .NET CLR {0}", Version.ToString)
Log.InfoFormat("System Culture: {0}/{1}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.NativeName)
End If
End Sub
Public Shared Sub UpdateCheck()
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
If My.Settings.UpdatePending Or My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
frmMain.tmrShowUpdate.Enabled = True
Windows.updateForm.CheckForUpdate()
AddHandler Windows.updateForm.UpdateCheckCompleted, AddressOf UpdateCheckComplete
End If
Private Shared _appUpdate As Update
Public Shared Sub CheckForUpdate()
If _appUpdate Is Nothing Then
_appUpdate = New Update
ElseIf _appUpdate.IsGetUpdateInfoRunning Then
Return
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
Private Shared Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
My.Settings.CheckForUpdatesLastCheck = Date.Now
My.Settings.UpdatePending = UpdateAvailable
IsUpdateAvailable = UpdateAvailable
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
Private Shared Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If MainForm.InvokeRequired Then
MainForm.Invoke(New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted), New Object() {sender, e})
Return
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
Private Shared Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
My.Settings.CheckForUpdatesLastCheck = Date.Now
IsAnnouncementAvailable = AnnouncementAvailable
Public Shared Sub CheckForAnnouncement()
If _appUpdate Is Nothing Then
_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
Public Shared Sub ParseCommandLineArgs()
@@ -682,28 +707,48 @@ Namespace App
End Class
Public Class Shutdown
Public Shared Sub Quit()
Public Shared Sub Quit(Optional ByVal updateFilePath As String = Nothing)
_updateFilePath = updateFilePath
frmMain.Close()
End Sub
Public Shared Sub BeforeQuit()
Public Shared Sub Cleanup()
Try
If App.Runtime.NotificationAreaIcon IsNot Nothing Then
If App.Runtime.NotificationAreaIcon.Disposed = False Then
App.Runtime.NotificationAreaIcon.Dispose()
PuttySessions.StopWatcher()
If NotificationAreaIcon IsNot Nothing Then
If NotificationAreaIcon.Disposed = False Then
NotificationAreaIcon.Dispose()
End If
End If
If My.Settings.SaveConsOnExit Then
SaveConnections()
End If
If My.Settings.SaveConsOnExit Then SaveConnections()
Dim SettingsSave As New Config.Settings.Save()
SettingsSave.Save()
Dim saveSettings As New Settings.Save()
saveSettings.Save()
IeBrowserEmulation.Unregister()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
End Try
End Sub
Public Shared Sub StartUpdate()
If Not UpdatePending() Then Return
Try
Process.Start(_updateFilePath)
Catch ex As Exception
MessageCollector.AddMessage(MessageClass.ErrorMsg, "The update could not be started." & vbNewLine & ex.Message, True)
End Try
End Sub
Private Shared _updateFilePath As String = Nothing
Public Shared ReadOnly Property UpdatePending() As Boolean
Get
Return Not String.IsNullOrEmpty(_updateFilePath)
End Get
End Property
End Class
#End Region
@@ -726,10 +771,12 @@ Namespace App
My.Settings.ConDefaultPuttySession = .PuttySession
My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString
My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString
My.Settings.ConDefaultLoadBalanceInfo = .LoadBalanceInfo
My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession
My.Settings.ConDefaultUseCredSsp = .UseCredSsp
My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString
My.Settings.ConDefaultResolution = .Resolution.ToString
My.Settings.ConDefaultAutomaticResize = .AutomaticResize
My.Settings.ConDefaultColors = .Colors.ToString
My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps
My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper
@@ -792,7 +839,9 @@ Namespace App
My.Settings.InhDefaultRenderingEngine = .RenderingEngine
My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption
My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel
My.Settings.InhDefaultLoadBalanceInfo = .LoadBalanceInfo
My.Settings.InhDefaultResolution = .Resolution
My.Settings.InhDefaultAutomaticResize = .AutomaticResize
My.Settings.InhDefaultColors = .Colors
My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps
My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper
@@ -940,42 +989,54 @@ Namespace App
ConnectionList = New Connection.List
ContainerList = New Container.List
Dim conL As New Config.Connections.Load
Dim connectionsLoad As New Connections.Load
My.Settings.LoadConsFromCustomLocation = False
If filename = GetDefaultStartupConnectionFileName() Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = filename
End If
Directory.CreateDirectory(Path.GetDirectoryName(filename))
Dim xW As New XmlTextWriter(filename, System.Text.Encoding.UTF8)
xW.Formatting = Formatting.Indented
xW.Indentation = 4
xW.WriteStartDocument()
xW.WriteStartElement("Connections") ' Do not localize
xW.WriteAttributeString("Name", My.Language.strConnections)
xW.WriteAttributeString("Export", "", "False")
xW.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
xW.WriteAttributeString("ConfVersion", "", "2.4")
' Use File.Open with FileMode.CreateNew so that we don't overwrite an existing file
Using fileStream As FileStream = File.Open(filename, FileMode.CreateNew, FileAccess.Write, FileShare.None)
Using xmlTextWriter As New XmlTextWriter(fileStream, System.Text.Encoding.UTF8)
With xmlTextWriter
.Formatting = Formatting.Indented
.Indentation = 4
xW.WriteEndElement()
xW.WriteEndDocument()
.WriteStartDocument()
xW.Close()
.WriteStartElement("Connections") ' Do not localize
.WriteAttributeString("Name", My.Language.strConnections)
.WriteAttributeString("Export", "", "False")
.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
.WriteAttributeString("ConfVersion", "", "2.5")
conL.ConnectionList = ConnectionList
conL.ContainerList = ContainerList
conL.Import = False
.WriteEndElement()
.WriteEndDocument()
.Close()
End With
End Using
End Using
connectionsLoad.ConnectionList = ConnectionList
connectionsLoad.ContainerList = ContainerList
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
connectionsLoad.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
' Load config
conL.ConnectionFileName = filename
conL.Load()
connectionsLoad.ConnectionFileName = filename
connectionsLoad.Load(False)
Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode
Windows.treeForm.tvConnections.SelectedNode = connectionsLoad.RootTreeNode
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strCouldNotCreateNewConnectionsFile & vbNewLine & ex.Message)
MessageCollector.AddExceptionMessage(My.Language.strCouldNotCreateNewConnectionsFile, ex, MessageClass.ErrorMsg)
End Try
End Sub
@@ -994,8 +1055,8 @@ Namespace App
LoadConnections(_withDialog, _loadUpdate)
End Sub
Public Shared Sub LoadConnections(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
Dim conL As New Config.Connections.Load
Public Shared Sub LoadConnections(Optional ByVal withDialog As Boolean = False, Optional ByVal update As Boolean = False)
Dim connectionsLoad As New Connections.Load
Try
Dim tmrWasEnabled As Boolean
@@ -1015,68 +1076,55 @@ Namespace App
ConnectionList = New Connection.List
ContainerList = New Container.List
If My.Settings.UseSQLServer = False Then
If WithDialog Then
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
If Not My.Settings.UseSQLServer Then
If withDialog Then
Dim loadDialog As OpenFileDialog = Controls.ConnectionsLoadDialog
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
conL.ConnectionFileName = lD.FileName
If loadDialog.ShowDialog = System.Windows.Forms.DialogResult.OK Then
connectionsLoad.ConnectionFileName = loadDialog.FileName
Else
Exit Sub
End If
Else
conL.ConnectionFileName = GetStartupConnectionFileName()
connectionsLoad.ConnectionFileName = GetStartupConnectionFileName()
End If
If File.Exists(conL.ConnectionFileName) = False Then
If WithDialog Then
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, conL.ConnectionFileName))
Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoadedNew, conL.ConnectionFileName))
App.Runtime.NewConnections(conL.ConnectionFileName)
End If
Exit Sub
End If
CreateBackupFile(conL.ConnectionFileName)
CreateBackupFile(connectionsLoad.ConnectionFileName)
End If
conL.ConnectionList = ConnectionList
conL.ContainerList = ContainerList
connectionsLoad.ConnectionList = ConnectionList
connectionsLoad.ContainerList = ContainerList
If PreviousConnectionList IsNot Nothing And PreviousContainerList IsNot Nothing Then
conL.PreviousConnectionList = PreviousConnectionList
conL.PreviousContainerList = PreviousContainerList
connectionsLoad.PreviousConnectionList = PreviousConnectionList
connectionsLoad.PreviousContainerList = PreviousContainerList
End If
If Update = True Then
conL.PreviousSelected = LastSelected
If update = True Then
connectionsLoad.PreviousSelected = LastSelected
End If
conL.Import = False
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
connectionsLoad.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
conL.UseSQL = My.Settings.UseSQLServer
conL.SQLHost = My.Settings.SQLHost
conL.SQLDatabaseName = My.Settings.SQLDatabaseName
conL.SQLUsername = My.Settings.SQLUser
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
conL.SQLUpdate = Update
connectionsLoad.UseSQL = My.Settings.UseSQLServer
connectionsLoad.SQLHost = My.Settings.SQLHost
connectionsLoad.SQLDatabaseName = My.Settings.SQLDatabaseName
connectionsLoad.SQLUsername = My.Settings.SQLUser
connectionsLoad.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, Info.General.EncryptionKey)
connectionsLoad.SQLUpdate = update
conL.Load()
connectionsLoad.Load(False)
If My.Settings.UseSQLServer = True Then
LastSqlUpdate = Now
Else
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
If connectionsLoad.ConnectionFileName = GetDefaultStartupConnectionFileName() Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = conL.ConnectionFileName
My.Settings.CustomConsPath = connectionsLoad.ConnectionFileName
End If
End If
@@ -1084,14 +1132,37 @@ Namespace App
TimerSqlWatcher.Start()
End If
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 = False Then
If Not conL.ConnectionFileName = GetStartupConnectionFileName() Then
LoadConnections()
Exit Sub
If My.Settings.UseSQLServer 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
If TypeOf ex Is FileNotFoundException And Not withDialog Then
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoadedNew, connectionsLoad.ConnectionFileName), ex, MessageClass.InformationMsg)
NewConnections(connectionsLoad.ConnectionFileName)
Return
End If
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, connectionsLoad.ConnectionFileName), ex)
If Not connectionsLoad.ConnectionFileName = GetStartupConnectionFileName() Then
LoadConnections(withDialog, update)
Return
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()
Return
End If
End If
End Try
@@ -1106,7 +1177,7 @@ Namespace App
File.Copy(fileName, backupFileName)
PruneBackupFiles(fileName)
Catch ex As Exception
MessageCollector.AddMessage(MessageClass.WarningMsg, My.Language.strConnectionsFileBackupFailed & vbNewLine & vbNewLine & ex.Message)
MessageCollector.AddExceptionMessage(My.Language.strConnectionsFileBackupFailed, ex, MessageClass.WarningMsg)
Throw
End Try
End Sub
@@ -1130,26 +1201,23 @@ Namespace App
Next
End Sub
Protected Shared Function GetStartupConnectionFileName() As String
Dim fileName As New String("")
If My.Settings.LoadConsFromCustomLocation = False Then
Dim oldPath As String = GetFolderPath(SpecialFolder.LocalApplicationData) & "\" & My.Application.Info.ProductName & "\" & App.Info.Connections.DefaultConnectionsFile
Dim newPath As String = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
Public Shared Function GetDefaultStartupConnectionFileName() As String
Dim newPath As String = App.Info.Connections.DefaultConnectionsPath & "\" & Info.Connections.DefaultConnectionsFile
#If Not PORTABLE Then
If File.Exists(oldPath) Then
fileName = oldPath
Else
fileName = newPath
End If
#Else
fileName = newPath
#End If
Else
fileName = My.Settings.CustomConsPath
Dim oldPath As String = GetFolderPath(SpecialFolder.LocalApplicationData) & "\" & My.Application.Info.ProductName & "\" & Info.Connections.DefaultConnectionsFile
If File.Exists(oldPath) Then
Return oldPath
End If
#End If
Return newPath
End Function
Return fileName
Public Shared Function GetStartupConnectionFileName() As String
If My.Settings.LoadConsFromCustomLocation = False Then
Return GetDefaultStartupConnectionFileName()
Else
Return My.Settings.CustomConsPath
End If
End Function
Public Shared Sub ImportConnections()
@@ -1179,11 +1247,10 @@ Namespace App
Dim conL As New Config.Connections.Load
conL.ConnectionFileName = lD.FileNames(i)
conL.RootTreeNode = nNode
conL.Import = True
conL.ConnectionList = App.Runtime.ConnectionList
conL.ContainerList = App.Runtime.ContainerList
conL.Load()
conL.Load(True)
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
Next
@@ -1193,136 +1260,139 @@ Namespace App
End Try
End Sub
Public Shared Sub ImportConnectionsFromRDPFiles()
Public Shared Sub ImportConnectionsRdpFile()
Try
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsRDPImportDialog
lD.Multiselect = True
Dim openFileDialog As OpenFileDialog = Controls.ImportConnectionsRdpFileDialog
If Not openFileDialog.ShowDialog = DialogResult.OK Then Return
If lD.ShowDialog = DialogResult.OK Then
For i As Integer = 0 To lD.FileNames.Length - 1
Dim lines As String() = File.ReadAllLines(lD.FileNames(i))
For Each fileName As String In openFileDialog.FileNames
Dim lines As String() = File.ReadAllLines(fileName)
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()
nConI.Inherit = New Connection.Info.Inheritance(nConI)
Dim connectionInfo As New Connection.Info()
connectionInfo.Inherit = New Connection.Info.Inheritance(connectionInfo)
nConI.Name = nNode.Text
connectionInfo.Name = treeNode.Text
For Each l As String In lines
Dim pName As String = l.Substring(0, l.IndexOf(":"))
Dim pValue As String = l.Substring(l.LastIndexOf(":") + 1)
For Each line As String In lines
Dim parts() As String = line.Split(New Char() {":"}, 3)
If parts.Length < 3 Then Continue For
Select Case LCase(pName)
Case "full address"
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
Dim key As String = parts(0)
Dim value As String = parts(2)
nNode.Tag = nConI
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
nConI.Parent = nNode.Parent.Tag
End If
ConnectionList.Add(nConI)
Select Case LCase(key)
Case "full address"
Dim uri As New Uri("dummyscheme" + uri.SchemeDelimiter + value)
If Not String.IsNullOrEmpty(uri.Host) Then connectionInfo.Hostname = uri.Host
If Not uri.Port = -1 Then connectionInfo.Port = uri.Port
Case "server port"
connectionInfo.Port = value
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
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
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFileCouldNotBeImported & vbNewLine & vbNewLine & ex.Message)
MessageCollector.AddExceptionMessage(My.Language.strRdpFileCouldNotBeImported, ex)
End Try
End Sub
@@ -1432,12 +1502,8 @@ Namespace App
Dim conS As New Config.Connections.Save
If My.Settings.UseSQLServer = False Then
If My.Settings.LoadConsFromCustomLocation = False Then
conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
Else
conS.ConnectionFileName = My.Settings.CustomConsPath
End If
If Not My.Settings.UseSQLServer Then
conS.ConnectionFileName = GetStartupConnectionFileName()
End If
conS.ConnectionList = ConnectionList
@@ -1506,7 +1572,7 @@ Namespace App
Else
connectionsSave.SaveFormat = Config.Connections.Save.Format.mRXML
If connectionsSave.ConnectionFileName = Info.Connections.DefaultConnectionsPath & "\" & Info.Connections.DefaultConnectionsFile Then
If connectionsSave.ConnectionFileName = GetDefaultStartupConnectionFileName() Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True

View File

@@ -1,264 +1,431 @@
Imports System.IO
Imports System.Net
Imports mRemoteNG.App.Runtime
Imports System.ComponentModel
Imports System.Threading
Imports mRemoteNG.Tools
Imports System.Reflection
Namespace App
Public Class Update
Public Event DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
Public Event DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs, ByVal Success As Boolean)
#Region "Events"
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"
Private _curUI As Info
Public ReadOnly Property curUI() As Info
Private _currentUpdateInfo As UpdateInfo
Public ReadOnly Property CurrentUpdateInfo() As UpdateInfo
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 Property
#End Region
#Region "Private Properties"
Private wCl As WebClient
Private wPr As WebProxy
#End Region
#Region "Public Methods"
Public Function IsProxyOK() As Boolean
Try
Dim uI As Info = GetUpdateInfo()
Public Sub New()
SetProxySettings()
End Sub
Return uI.InfoOk
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "IsProxyOK (App.Update) failed" & vbNewLine & ex.Message, False)
Return False
End Try
End Function
Public Sub SetProxySettings()
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))
End Sub
Public Function IsUpdateAvailable() As Boolean
Try
Dim uI As Info = GetUpdateInfo()
If uI.InfoOk = False Then
Return False
End If
If uI.Version > My.Application.Info.Version Then
Return True
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)
If useProxy And Not String.IsNullOrEmpty(address) Then
If Not port = 0 Then
_webProxy = New WebProxy(address, port)
Else
Return False
_webProxy = New WebProxy(address)
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
Try
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
If useAuthentication Then
_webProxy.Credentials = New NetworkCredential(username, password)
Else
uI.InfoOk = False
_webProxy.Credentials = Nothing
End If
_curUI = uI
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
Else
_webProxy = Nothing
End If
End Sub
Private Function GetUpdateFile() As String
Try
CreateWebClient()
Public Function IsUpdateAvailable() As Boolean
If _currentUpdateInfo Is Nothing OrElse Not _currentUpdateInfo.IsValid Then Return False
Dim strTemp As String
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
Return _currentUpdateInfo.Version > My.Application.Info.Version
End Function
Private Sub DLProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
RaiseEvent DownloadProgressChanged(sender, e)
Public Function IsAnnouncementAvailable() As Boolean
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
Private Sub DLCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Try
Dim fInfo As New FileInfo(_curUI.UpdateLocation)
Public Sub GetChangeLogAsync()
If _currentUpdateInfo Is Nothing OrElse Not _currentUpdateInfo.IsValid Then
Throw New InvalidOperationException("CurrentUpdateInfo is not valid. GetUpdateInfoAsync() must be called before calling GetChangeLogAsync().")
End If
If fInfo.Length > 0 Then
RaiseEvent DownloadCompleted(sender, e, True)
Else
fInfo.Delete()
RaiseEvent DownloadCompleted(sender, e, False)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "DLCompleted failed" & vbNewLine & ex.Message, True)
End Try
If IsGetChangeLogRunning Then _getChangeLogThread.Abort()
_getChangeLogThread = New Thread(AddressOf GetChangeLog)
With _getChangeLogThread
.SetApartmentState(ApartmentState.STA)
.IsBackground = True
.Start()
End With
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 Region
Public Class Info
Private _Version As Version
Public Property Version() As Version
Get
Return _Version
End Get
Set(ByVal value As Version)
_Version = value
End Set
End Property
#Region "Private Properties"
Private _downloadUpdateWebClient As WebClient
Private ReadOnly Property DownloadUpdateWebClient() As WebClient
Get
If _downloadUpdateWebClient IsNot Nothing Then Return _downloadUpdateWebClient
Private _DownloadUrl As String
Public Property DownloadUrl() As String
Get
Return _DownloadUrl
End Get
Set(ByVal value As String)
_DownloadUrl = value
End Set
End Property
_downloadUpdateWebClient = CreateWebClient()
Private _UpdateLocation As String
Public Property UpdateLocation() As String
Get
Return _UpdateLocation
End Get
Set(ByVal value As String)
_UpdateLocation = value
End Set
End Property
AddHandler _downloadUpdateWebClient.DownloadProgressChanged, AddressOf DownloadUpdateProgressChanged
AddHandler _downloadUpdateWebClient.DownloadFileCompleted, AddressOf DownloadUpdateCompleted
Private _ChangeLog As String
Public Property ChangeLog() As String
Get
Return _ChangeLog
End Get
Set(ByVal value As String)
_ChangeLog = value
End Set
End Property
Return _downloadUpdateWebClient
End Get
End Property
#End Region
Private _ImageURL As String
Public Property ImageURL() As String
Get
Return _ImageURL
End Get
Set(ByVal value As String)
_ImageURL = value
End Set
End Property
#Region "Private Fields"
Private _webProxy As WebProxy
Private _getUpdateInfoThread As Thread
Private _getChangeLogThread As Thread
Private _getAnnouncementInfoThread As Thread
#End Region
Private _ImageURLLink As String
Public Property ImageURLLink() As String
Get
Return _ImageURLLink
End Get
Set(ByVal value As String)
_ImageURLLink = value
End Set
End Property
#Region "Private Methods"
Private Function CreateWebClient() As WebClient
Dim webClient As New WebClient
webClient.Headers.Add("user-agent", Info.General.UserAgent)
webClient.Proxy = _webProxy
Return webClient
End Function
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
Private Shared Function NewDownloadStringCompletedEventArgs(ByVal result As String, ByVal exception As Exception, ByVal cancelled As Boolean, ByVal userToken As Object) As DownloadStringCompletedEventArgs
Dim type As Type = GetType(DownloadStringCompletedEventArgs)
Const bindingFlags As BindingFlags = bindingFlags.NonPublic Or bindingFlags.Instance
Dim argumentTypes() As Type = {GetType(String), GetType(Exception), GetType(Boolean), GetType(Object)}
Dim constructor As ConstructorInfo = type.GetConstructor(bindingFlags, Nothing, argumentTypes, Nothing)
Dim arguments() As Object = {result, exception, cancelled, userToken}
Return constructor.Invoke(arguments)
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
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 Namespace

View File

@@ -113,16 +113,6 @@ Namespace Config
End Set
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
Public Property ConnectionList() As Connection.List
Get
@@ -165,23 +155,31 @@ Namespace Config
#End Region
#Region "Public Methods"
Public Sub Load()
Public Sub Load(ByVal import As Boolean)
If _UseSQL = True Then
LoadFromSQL()
SetMainFormText("SQL Server")
Else
Dim strCons As String = DecryptCompleteFile()
LoadFromXML(strCons)
LoadFromXML(strCons, import)
End If
If Import = False Then
If import = False Then
SetMainFormText(ConnectionFileName)
PuttySessions.AddSessionsToTree()
End If
End Sub
#End Region
#Region "SQL"
Private Delegate Sub LoadFromSqlDelegate()
Private Sub LoadFromSQL()
If Windows.treeForm Is Nothing OrElse Windows.treeForm.tvConnections Is Nothing Then Return
If Windows.treeForm.tvConnections.InvokeRequired Then
Windows.treeForm.tvConnections.Invoke(New LoadFromSqlDelegate(AddressOf LoadFromSQL))
Return
End If
Try
App.Runtime.IsConnectionsFileLoaded = False
@@ -208,7 +206,7 @@ Namespace Config
End If
confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture)
Const maxSupportedSchemaVersion As Double = 2.4
Const maxSupportedSchemaVersion As Double = 2.5
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)
Throw New Exception(String.Format("Incompatible database schema (schema version {0}).", confVersion))
@@ -276,7 +274,7 @@ Namespace Config
App.Runtime.IsConnectionsFileLoaded = True
'App.Runtime.Windows.treeForm.InitialRefresh()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strLoadFromSqlFailed & vbNewLine & ex.Message, True)
Throw
Finally
If sqlCon IsNot Nothing Then
sqlCon.Close()
@@ -405,7 +403,10 @@ Namespace Config
tNode.SelectedImageIndex = Images.Enums.TreeImage.Container
End If
If sqlRd.Item("ParentID") <> 0 Then
Dim parentId As String = sqlRd.Item("ParentID").ToString().Trim()
If String.IsNullOrEmpty(parentId) Or parentId = "0" Then
baseNode.Nodes.Add(tNode)
Else
Dim pNode As TreeNode = Tree.Node.GetNodeFromConstantID(sqlRd.Item("ParentID"))
If pNode IsNot Nothing Then
@@ -419,8 +420,6 @@ Namespace Config
Else
baseNode.Nodes.Add(tNode)
End If
Else
baseNode.Nodes.Add(tNode)
End If
'AddNodesFromSQL(tNode)
@@ -576,6 +575,13 @@ Namespace Config
conI.Inherit.UseCredSsp = .Item("InheritUseCredSsp")
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
conI.PleaseConnect = .Item("Connected")
End If
@@ -638,7 +644,7 @@ Namespace Config
Return ""
End Function
Private Sub LoadFromXML(Optional ByVal cons As String = "")
Private Sub LoadFromXML(ByVal cons As String, ByVal import As Boolean)
Try
App.Runtime.IsConnectionsFileLoaded = False
@@ -656,7 +662,7 @@ Namespace Config
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strOldConffile)
End If
Const maxSupportedConfVersion As Double = 2.4
Const maxSupportedConfVersion As Double = 2.5
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)
Throw New Exception(String.Format("Incompatible connection file format (file format version {0}).", confVersion))
@@ -690,31 +696,29 @@ Namespace Config
End If
End If
Dim imp As Boolean = False
If Me.confVersion > 0.9 Then '1.0
Dim isExportFile As Boolean = False
If confVersion >= 1.0 Then
If xDom.DocumentElement.Attributes("Export").Value = True Then
imp = True
isExportFile = True
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)
Exit Sub
Return
End If
If imp = False Then
Me._RootTreeNode.Text = rootNode.Text
Me._RootTreeNode.Tag = rootNode.Tag
Me._RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
Me._RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
If Not isExportFile Then
_RootTreeNode.Text = rootNode.Text
_RootTreeNode.Tag = rootNode.Tag
_RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
_RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
End If
Windows.treeForm.tvConnections.BeginUpdate()
' SECTION 3. Populate the TreeView with the DOM nodes.
AddNodeFromXML(xDom.DocumentElement, Me._RootTreeNode)
AddNodeFromXml(xDom.DocumentElement, _RootTreeNode)
Me._RootTreeNode.Expand()
@@ -1059,6 +1063,13 @@ Namespace Config
conI.UseCredSsp = .Attributes("UseCredSsp").Value
conI.Inherit.UseCredSsp = .Attributes("InheritUseCredSsp").Value
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
Catch ex As Exception
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 System.Data.SqlClient
Imports mRemoteNG.Tools.Misc
Imports mRemoteNG.My.Resources
Namespace Config
Namespace Connections
@@ -98,7 +97,14 @@ Namespace Config
databaseVersion = New Version(2, 4)
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
End If
@@ -173,7 +179,7 @@ Namespace Config
Dim curConI As Connection.Info
_sqlQuery = New SqlCommand("INSERT INTO tblCons (Name, Type, Expanded, Description, Icon, Panel, Username, " & _
"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, " & _
"RedirectPrinters, RedirectSmartCards, RedirectSound, RedirectKeys, " & _
"Connected, PreExtApp, PostExtApp, MacAddress, UserField, ExtApp, VNCCompression, VNCEncoding, VNCAuthMode, " & _
@@ -186,8 +192,8 @@ Namespace Config
"InheritIcon, InheritPanel, InheritPassword, InheritPort, " & _
"InheritProtocol, InheritPuttySession, InheritRedirectDiskDrives, " & _
"InheritRedirectKeys, InheritRedirectPorts, InheritRedirectPrinters, " & _
"InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, " & _
"InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, " & _
"InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, InheritAutomaticResize, " & _
"InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, InheritLoadBalanceInfo, " & _
"InheritPreExtApp, InheritPostExtApp, InheritMacAddress, InheritUserField, InheritExtApp, InheritVNCCompression, InheritVNCEncoding, " & _
"InheritVNCAuthMode, InheritVNCProxyType, InheritVNCProxyIP, InheritVNCProxyPort, " & _
"InheritVNCProxyUsername, InheritVNCProxyPassword, InheritVNCColors, " & _
@@ -260,8 +266,10 @@ Namespace Config
_sqlQuery.CommandText &= "'" & .RenderingEngine.ToString & "',"
_sqlQuery.CommandText &= "'" & .ICAEncryption.ToString & "',"
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel.ToString & "',"
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
_sqlQuery.CommandText &= "'" & .Colors.ToString & "',"
_sqlQuery.CommandText &= "'" & .Resolution.ToString & "',"
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
_sqlQuery.CommandText &= "'" & .DisplayWallpaper & "',"
_sqlQuery.CommandText &= "'" & .DisplayThemes & "',"
_sqlQuery.CommandText &= "'" & .EnableFontSmoothing & "',"
@@ -345,11 +353,13 @@ Namespace Config
_sqlQuery.CommandText &= "'" & .RedirectSmartCards & "',"
_sqlQuery.CommandText &= "'" & .RedirectSound & "',"
_sqlQuery.CommandText &= "'" & .Resolution & "',"
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
_sqlQuery.CommandText &= "'" & .UseConsoleSession & "',"
_sqlQuery.CommandText &= "'" & .RenderingEngine & "',"
_sqlQuery.CommandText &= "'" & .Username & "',"
_sqlQuery.CommandText &= "'" & .ICAEncryption & "',"
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel & "',"
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
_sqlQuery.CommandText &= "'" & .PreExtApp & "',"
_sqlQuery.CommandText &= "'" & .PostExtApp & "',"
_sqlQuery.CommandText &= "'" & .MacAddress & "',"
@@ -398,11 +408,15 @@ Namespace Config
_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 & "'," ' .LoadBalanceInfo
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "',"
_sqlQuery.CommandText &= "'" & False & "',"
@@ -446,7 +460,7 @@ Namespace Config
End If
End If
_sqlQuery.CommandText &= _currentNodeIndex & "," & _parentConstantId & "," & .ConstantID & ",'" & Tools.Misc.DBDate(Now) & "')"
_sqlQuery.CommandText &= _currentNodeIndex & ",'" & _parentConstantId & "','" & .ConstantID & "','" & Tools.Misc.DBDate(Now) & "')"
End With
End Sub
#End Region
@@ -597,10 +611,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("RDPAuthenticationLevel", "", curConI.RDPAuthenticationLevel.ToString)
_xmlTextWriter.WriteAttributeString("LoadBalanceInfo", "", curConI.LoadBalanceInfo)
_xmlTextWriter.WriteAttributeString("Colors", "", curConI.Colors.ToString)
_xmlTextWriter.WriteAttributeString("Resolution", "", curConI.Resolution.ToString)
_xmlTextWriter.WriteAttributeString("AutomaticResize", "", curConI.AutomaticResize)
_xmlTextWriter.WriteAttributeString("DisplayWallpaper", "", curConI.DisplayWallpaper)
_xmlTextWriter.WriteAttributeString("DisplayThemes", "", curConI.DisplayThemes)
@@ -692,12 +710,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", curConI.Inherit.RedirectSmartCards)
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", curConI.Inherit.RedirectSound)
_xmlTextWriter.WriteAttributeString("InheritResolution", "", curConI.Inherit.Resolution)
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", curConI.Inherit.AutomaticResize)
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", curConI.Inherit.UseConsoleSession)
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", curConI.Inherit.UseCredSsp)
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", curConI.Inherit.RenderingEngine)
_xmlTextWriter.WriteAttributeString("InheritUsername", "", curConI.Inherit.Username)
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", curConI.Inherit.ICAEncryption)
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", curConI.Inherit.RDPAuthenticationLevel)
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", curConI.Inherit.LoadBalanceInfo)
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", curConI.Inherit.PreExtApp)
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", curConI.Inherit.PostExtApp)
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", curConI.Inherit.MacAddress)
@@ -742,12 +762,14 @@ Namespace Config
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", False)
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", False)
_xmlTextWriter.WriteAttributeString("InheritResolution", "", False)
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", False)
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", False)
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", False)
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", False)
_xmlTextWriter.WriteAttributeString("InheritUsername", "", False)
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", False)
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", False)
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", False)
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", False)
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", False)
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", False)
@@ -809,10 +831,10 @@ Namespace Config
csvLn += "Domain;"
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
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
csvWr.WriteLine(csvLn)
@@ -863,10 +885,10 @@ Namespace Config
csvLn += con.Domain & ";"
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
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
csvWr.WriteLine(csvLn)
@@ -1040,7 +1062,7 @@ Namespace Config
'Smart Size
_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()
'SeparateResolutionX
@@ -1053,26 +1075,18 @@ Namespace Config
_xmlTextWriter.WriteValue("768")
_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
_xmlTextWriter.WriteStartElement("TabResolutionX")
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _
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.WriteValue(resolution.Width)
_xmlTextWriter.WriteEndElement()
'TabResolutionY
_xmlTextWriter.WriteStartElement("TabResolutionY")
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _
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.WriteValue(resolution.Height)
_xmlTextWriter.WriteEndElement()
'RDPColorDepth

View File

@@ -29,7 +29,11 @@ Namespace Config
With Me._MainForm
' Migrate settings from previous version
If My.Settings.DoUpgrade Then
My.Settings.Upgrade()
Try
My.Settings.Upgrade()
Catch ex As Exception
Log.Error("My.Settings.Upgrade() failed" & vbNewLine & ex.Message)
End Try
My.Settings.DoUpgrade = False
' Clear pending update flag
@@ -87,7 +91,7 @@ Namespace Config
If My.Settings.UseCustomPuttyPath Then
Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath
Else
Connection.Protocol.PuttyBase.PuttyPath = My.Application.Info.DirectoryPath & "\PuTTYNG.exe"
Connection.Protocol.PuttyBase.PuttyPath = App.Info.General.PuttyPath
End If
If My.Settings.ShowSystemTrayIcon Then

View File

@@ -1,16 +1,29 @@
Imports System.ComponentModel
Imports System.Management
Imports mRemoteNG.Messages
Imports Microsoft.Win32
Imports mRemoteNG.Connection.Protocol
Imports mRemoteNG.Tree
Imports mRemoteNG.My
Imports mRemoteNG.App.Runtime
Imports System.Security.Principal
Namespace Config
Public Class PuttySessions
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)
Dim savedSessions() As Connection.Info = LoadSessions()
If savedSessions Is Nothing OrElse savedSessions.Length = 0 Then Return
Private Delegate Sub AddSessionsToTreeDelegate()
Public Shared Sub AddSessionsToTree()
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()
If String.IsNullOrEmpty(My.Settings.PuttySavedSessionsName) Then
@@ -24,35 +37,75 @@ Namespace Config
puttyRootInfo.Panel = My.Settings.PuttySavedSessionsPanel
End If
Dim puttyRootNode As TreeNode = New TreeNode
puttyRootNode.Text = puttyRootInfo.Name
puttyRootNode.Tag = puttyRootInfo
puttyRootNode.ImageIndex = Images.Enums.TreeImage.PuttySessions
puttyRootNode.SelectedImageIndex = Images.Enums.TreeImage.PuttySessions
Dim inUpdate As Boolean = False
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
End If
treeView.BeginUpdate()
treeView.Nodes.Add(puttyRootNode)
If Not treeView.Nodes.Contains(_rootTreeNode) Then
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
treeView.Nodes.Add(_rootTreeNode)
End If
Dim newTreeNode As TreeNode
puttyRootInfo.TreeNode = _rootTreeNode
Dim newTreeNodes As New List(Of TreeNode)
For Each sessionInfo As Connection.PuttySession.Info In savedSessions
newTreeNode = Node.AddNode(Node.Type.PuttySession, sessionInfo.Name)
If newTreeNode Is Nothing Then Continue For
Dim treeNode As TreeNode
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.TreeNode = newTreeNode
sessionInfo.TreeNode = treeNode
sessionInfo.Inherit.TurnOffInheritanceCompletely()
newTreeNode.Tag = sessionInfo
newTreeNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
newTreeNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
treeNode.Tag = sessionInfo
puttyRootNode.Nodes.Add(newTreeNode)
If isNewNode Then newTreeNodes.Add(treeNode)
Next
puttyRootNode.Expand()
treeView.EndUpdate()
For Each treeNode As TreeNode In _rootTreeNode.Nodes
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
Protected Shared Function GetSessionNames(Optional ByVal raw As Boolean = False) As String()
@@ -60,14 +113,24 @@ Namespace Config
If sessionsKey Is Nothing Then Return New String() {}
Dim sessionNames As New List(Of String)
If Not raw Then sessionNames.Add("Default Settings") ' Do not localize
For Each sessionName As String In sessionsKey.GetSubKeyNames()
If raw Then
sessionNames.Add(sessionName)
Else
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName))
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B")))
End If
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()
End Function
@@ -76,7 +139,7 @@ Namespace Config
Dim sessionInfo As Connection.Info
For Each sessionName As String In GetSessionNames(True)
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)
Next
Return sessionList.ToArray()
@@ -89,7 +152,7 @@ Namespace Config
Dim sessionKey As RegistryKey = sessionsKey.OpenSubKey(sessionName)
If sessionKey Is Nothing Then Return Nothing
sessionName = Web.HttpUtility.UrlDecode(sessionName)
sessionName = Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B"))
Dim sessionInfo As New Connection.PuttySession.Info
With sessionInfo
@@ -98,6 +161,7 @@ Namespace Config
.Hostname = sessionKey.GetValue("HostName")
.Username = sessionKey.GetValue("UserName")
Dim protocol As String = sessionKey.GetValue("Protocol")
If protocol Is Nothing Then protocol = "ssh"
Select Case protocol.ToLowerInvariant()
Case "raw"
.Protocol = Protocols.RAW
@@ -106,11 +170,16 @@ Namespace Config
Case "serial"
Return Nothing
Case "ssh"
Dim sshVersion As Integer = sessionKey.GetValue("SshProt")
If sshVersion >= 2 Then
.Protocol = Protocols.SSH2
Dim sshVersionObject As Object = sessionKey.GetValue("SshProt")
If sshVersionObject IsNot Nothing Then
Dim sshVersion As Integer = CType(sshVersionObject, Integer)
If sshVersion >= 2 Then
.Protocol = Protocols.SSH2
Else
.Protocol = Protocols.SSH1
End If
Else
.Protocol = Protocols.SSH1
.Protocol = Protocols.SSH2
End If
Case "telnet"
.Protocol = Protocols.Telnet
@@ -123,6 +192,32 @@ Namespace Config
Return sessionInfo
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
Inherits StringConverter

View File

@@ -8,17 +8,17 @@ Namespace Connection
Public Class Info
#Region "Properties"
#Region "1 Display"
Private _Name As String = My.Language.strNewConnection
Private _name As String = My.Language.strNewConnection
<LocalizedCategory("strCategoryDisplay", 1), _
Browsable(True), _
LocalizedDisplayName("strPropertyNameName"), _
LocalizedDescription("strPropertyDescriptionName")> _
Public Overridable Property Name() As String
Get
Return Me._Name
Return _name
End Get
Set(ByVal value As String)
Me._Name = value
_name = value
End Set
End Property
@@ -102,17 +102,18 @@ Namespace Connection
End Property
#End Region
#Region "2 Connection"
Private _Hostname As String = ""
Private _hostname As String = ""
<LocalizedCategory("strCategoryConnection", 2), _
Browsable(True), _
LocalizedDisplayName("strPropertyNameAddress"), _
LocalizedDescription("strPropertyDescriptionAddress")> _
Public Overridable Property Hostname() As String
Get
Return Me._Hostname.Trim()
Return _hostname.Trim()
End Get
Set(ByVal value As String)
Me._Hostname = value.Trim()
If String.IsNullOrEmpty(value) Then _hostname = ""
_hostname = value.Trim()
End Set
End Property
@@ -384,6 +385,32 @@ Namespace Connection
End Set
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)
<LocalizedCategory("strCategoryProtocol", 3), _
Browsable(True), _
@@ -626,6 +653,33 @@ Namespace Connection
End Set
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)
<LocalizedCategory("strCategoryAppearance", 5), _
Browsable(True), _
@@ -1477,9 +1531,10 @@ Namespace Connection
#End Region
#Region "Methods"
Public Function Copy() As Connection.Info
Dim newConnectionInfo As Connection.Info = MemberwiseClone()
newConnectionInfo._OpenConnections = New Connection.Protocol.List
Public Function Copy() As Info
Dim newConnectionInfo As Info = MemberwiseClone()
newConnectionInfo.ConstantID = Tools.Misc.CreateConstantID()
newConnectionInfo._OpenConnections = New Protocol.List
Return newConnectionInfo
End Function
@@ -1543,8 +1598,8 @@ Namespace Connection
End If
End Sub
Public Function Copy() As Connection.Info.Inheritance
Return Me.MemberwiseClone
Public Function Copy() As Inheritance
Return MemberwiseClone()
End Function
Public Sub TurnOnInheritanceCompletely()
@@ -1848,6 +1903,21 @@ Namespace Connection
End Set
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
<LocalizedCategory("strCategoryProtocol", 4), _
Browsable(True), _
@@ -2000,6 +2070,21 @@ Namespace Connection
End Set
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
<LocalizedCategory("strCategoryAppearance", 6), _
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.FullScreenWindow()
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
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strIcaSetResolutionFailed & vbNewLine & ex.Message, True)

View File

@@ -73,18 +73,6 @@ Namespace Connection
End Set
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
Get
If GetForegroundWindow() = PuttyHandle Then
@@ -120,38 +108,45 @@ Namespace Connection
arguments.EscapeForShell = False
arguments.Add("-load", InterfaceControl.Info.PuttySession)
arguments.Add("-" & _PuttyProtocol.ToString)
If _PuttyProtocol = Putty_Protocol.ssh Then
Dim username As String = ""
Dim password As String = ""
If Not TypeOf InterfaceControl.Info Is PuttySession.Info Then
arguments.Add("-" & _PuttyProtocol.ToString)
If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then
username = InterfaceControl.Info.Username
Else
If My.Settings.EmptyCredentials = "windows" Then
username = Environment.UserName
ElseIf My.Settings.EmptyCredentials = "custom" Then
username = My.Settings.DefaultUsername
If _PuttyProtocol = Putty_Protocol.ssh Then
Dim username As String = ""
Dim password As String = ""
If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then
username = InterfaceControl.Info.Username
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
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)
arguments.Add("-l", username)
arguments.Add("-pw", password)
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
arguments.Add(InterfaceControl.Info.Hostname)
End If
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
arguments.Add(InterfaceControl.Info.Hostname)
If _isPuttyNg Then
arguments.Add("-hwndparent", InterfaceControl.Handle.ToString())
End If
@@ -252,19 +247,6 @@ Namespace Connection
End Try
Return isPuttyNg
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
#Region "Enums"

View File

@@ -3,31 +3,32 @@ Imports System.Threading
Imports AxMSTSCLib
Imports EOLWTSCOM
Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Tools.LocalizedAttributes
Imports MSTSCLib
Namespace Connection
Namespace Protocol
Public Class RDP
Inherits Connection.Protocol.Base
Inherits Base
#Region "Properties"
Public Property SmartSize() As Boolean
Get
Return RDP.AdvancedSettings4.SmartSizing
Return _rdpClient.AdvancedSettings2.SmartSizing
End Get
Set(ByVal value As Boolean)
RDP.AdvancedSettings4.SmartSizing = value
_rdpClient.AdvancedSettings2.SmartSizing = value
ReconnectForResize()
End Set
End Property
Public Property Fullscreen() As Boolean
Get
Return RDP.FullScreen
Return _rdpClient.FullScreen
End Get
Set(ByVal value As Boolean)
RDP.FullScreen = value
_rdpClient.FullScreen = value
ReconnectForResize()
End Set
End Property
@@ -42,8 +43,8 @@ Namespace Connection
Try
If Not _redirectKeys Then Return
Debug.Assert(RDP.SecuredSettingsEnabled)
Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = RDP.SecuredSettings2
Debug.Assert(_rdpClient.SecuredSettingsEnabled)
Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = _rdpClient.SecuredSettings2
msRdpClientSecuredSettings.KeyboardHookMode = 1 ' Apply key combinations at the remote server.
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectKeysFailed & vbNewLine & ex.Message, True)
@@ -53,69 +54,73 @@ Namespace Connection
#End Region
#Region "Private Declarations"
Private RDP As AxMsRdpClient6NotSafeForScripting
Private Info As Connection.Info
Private RDPVersion As Version
Private _rdpClient As MsRdpClient5NotSafeForScripting
Private _rdpVersion As Version
Private _connectionInfo As Info
Private _loginComplete As Boolean
#End Region
#Region "Public Methods"
Public Sub New()
Me.Control = New AxMsRdpClient6NotSafeForScripting
Control = New AxMsRdpClient5NotSafeForScripting
End Sub
Public Overrides Function SetProps() As Boolean
MyBase.SetProps()
Try
RDP = Me.Control
Info = Me.InterfaceControl.Info
Control.CreateControl()
_connectionInfo = InterfaceControl.Info
Try
RDP.CreateControl()
Do Until Me.RDP.Created
Thread.Sleep(10)
Do Until Control.Created
Thread.Sleep(0)
System.Windows.Forms.Application.DoEvents()
Loop
Catch comEx As System.Runtime.InteropServices.COMException
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpControlCreationFailed & vbNewLine & vbNewLine & comEx.Message)
RDP.Dispose()
_rdpClient = CType(Control, AxMsRdpClient5NotSafeForScripting).GetOcx()
Catch ex As Runtime.InteropServices.COMException
MessageCollector.AddExceptionMessage(My.Language.strRdpControlCreationFailed, ex)
Control.Dispose()
Return False
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.SetResolution()
Me.RDP.FullScreenTitle = Me.Info.Name
Me._rdpClient.FullScreenTitle = Me._connectionInfo.Name
'not user changeable
RDP.AdvancedSettings2.GrabFocusOnConnect = True
RDP.AdvancedSettings3.EnableAutoReconnect = True
RDP.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount
RDP.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds)
RDP.AdvancedSettings5.AuthenticationLevel = 0
RDP.AdvancedSettings2.EncryptionEnabled = 1
_rdpClient.AdvancedSettings2.GrabFocusOnConnect = True
_rdpClient.AdvancedSettings3.EnableAutoReconnect = True
_rdpClient.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount
_rdpClient.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds)
_rdpClient.AdvancedSettings5.AuthenticationLevel = 0
_rdpClient.AdvancedSettings2.EncryptionEnabled = 1
RDP.AdvancedSettings2.overallConnectionTimeout = 20
_rdpClient.AdvancedSettings2.overallConnectionTimeout = 20
RDP.AdvancedSettings2.BitmapPeristence = Me.Info.CacheBitmaps
RDP.AdvancedSettings7.EnableCredSspSupport = Info.UseCredSsp
_rdpClient.AdvancedSettings2.BitmapPeristence = Me._connectionInfo.CacheBitmaps
If _rdpVersion >= Versions.RDC61 Then
_rdpClient.AdvancedSettings7.EnableCredSspSupport = _connectionInfo.UseCredSsp
End If
Me.SetUseConsoleSession()
Me.SetPort()
RedirectKeys = Info.RedirectKeys
RedirectKeys = _connectionInfo.RedirectKeys
Me.SetRedirection()
Me.SetAuthenticationLevel()
Me.SetRDGateway()
SetLoadBalanceInfo()
Me.SetRdGateway()
RDP.ColorDepth = Int(Me.Info.Colors)
_rdpClient.ColorDepth = Int(Me._connectionInfo.Colors)
Me.SetPerformanceFlags()
RDP.ConnectingText = My.Language.strConnecting
_rdpClient.ConnectingText = My.Language.strConnecting
Control.Anchor = AnchorStyles.None
@@ -127,10 +132,11 @@ Namespace Connection
End Function
Public Overrides Function Connect() As Boolean
Me.SetEventHandlers()
_loginComplete = False
SetEventHandlers()
Try
RDP.Connect()
_rdpClient.Connect()
MyBase.Connect()
Return True
Catch ex As Exception
@@ -142,7 +148,7 @@ Namespace Connection
Public Overrides Sub Disconnect()
Try
RDP.Disconnect()
_rdpClient.Disconnect()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpDisconnectFailed & vbNewLine & ex.Message, True)
MyBase.Close()
@@ -167,8 +173,8 @@ Namespace Connection
Public Overrides Sub Focus()
Try
If RDP.ContainsFocus = False Then
RDP.Focus()
If Control.ContainsFocus = False Then
Control.Focus()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFocusFailed & vbNewLine & ex.Message, True)
@@ -208,11 +214,16 @@ Namespace Connection
End Function
Private Sub ReconnectForResize()
If RDPVersion < Versions.RDC80 Then Return
If _rdpVersion < Versions.RDC80 Then Return
If Not _loginComplete Then Return
If Not InterfaceControl.Info.AutomaticResize Then Return
If Not (InterfaceControl.Info.Resolution = RDPResolutions.FitToWindow Or _
InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Or _
SmartSize Then Return
InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Then Return
If SmartSize Then Return
Dim size As Size
If Not Fullscreen Then
@@ -221,109 +232,104 @@ Namespace Connection
size = Screen.FromControl(Control).Bounds.Size
End If
Dim msRdpClient8 As MSTSCLib.IMsRdpClient8 = RDP.GetOcx()
Dim msRdpClient8 As IMsRdpClient8 = _rdpClient
msRdpClient8.Reconnect(size.Width, size.Height)
End Sub
Private Sub SetRDGateway()
Private Sub SetRdGateway()
Try
If RDP.TransportSettings.GatewayIsSupported = 1 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True)
If Info.RDGatewayUsageMethod <> RDGatewayUsageMethod.Never Then
RDP.TransportSettings2.GatewayProfileUsageMethod = 1
RDP.TransportSettings.GatewayUsageMethod = Info.RDGatewayUsageMethod
RDP.TransportSettings.GatewayHostname = Info.RDGatewayHostname
If Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then
RDP.TransportSettings.GatewayUsername = Info.Username
RDP.TransportSettings.GatewayPassword = Info.Password
RDP.TransportSettings.GatewayDomain = Info.Domain
ElseIf Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
RDP.TransportSettings2.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD
RDP.TransportSettings2.GatewayCredSharing = 0
If _rdpClient.TransportSettings.GatewayIsSupported = 0 Then Return
MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True)
If Not _connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Never Then
_rdpClient.TransportSettings.GatewayUsageMethod = _connectionInfo.RDGatewayUsageMethod
_rdpClient.TransportSettings.GatewayHostname = _connectionInfo.RDGatewayHostname
_rdpClient.TransportSettings.GatewayProfileUsageMethod = 1 ' TSC_PROXY_PROFILE_MODE_EXPLICIT
If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
_rdpClient.TransportSettings.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD
End If
If _rdpVersion >= Versions.RDC61 Then
If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then
_rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.Username
_rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.Password
_rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.Domain
ElseIf _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
_rdpClient.TransportSettings2.GatewayCredSharing = 0
Else
RDP.TransportSettings.GatewayUsername = Info.RDGatewayUsername
RDP.TransportSettings.GatewayPassword = Info.RDGatewayPassword
RDP.TransportSettings.GatewayDomain = Info.RDGatewayDomain
RDP.TransportSettings2.GatewayCredSharing = 0
_rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.RDGatewayUsername
_rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.RDGatewayPassword
_rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.RDGatewayDomain
_rdpClient.TransportSettings2.GatewayCredSharing = 0
End If
End If
Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True)
MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True)
End If
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 Sub
Private Sub SetUseConsoleSession()
Try
If (Me.Force And Connection.Info.Force.UseConsoleSession) = Connection.Info.Force.UseConsoleSession Then
If RDPVersion < Versions.RDC61 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
RDP.AdvancedSettings2.ConnectToServerConsole = True
Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
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
Dim value As Boolean
If (Force And Info.Force.UseConsoleSession) = Info.Force.UseConsoleSession Then
value = True
ElseIf (Force And Info.Force.DontUseConsoleSession) = Info.Force.DontUseConsoleSession Then
value = False
Else
If RDPVersion < Versions.RDC61 Then
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
RDP.AdvancedSettings2.ConnectToServerConsole = Me.Info.UseConsoleSession
Else
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
RDP.AdvancedSettings6.ConnectToAdministerServer = Me.Info.UseConsoleSession
End If
value = _connectionInfo.UseConsoleSession
End If
If _rdpVersion >= Versions.RDC61 Then
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
_rdpClient.AdvancedSettings7.ConnectToAdministerServer = value
Else
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
_rdpClient.AdvancedSettings2.ConnectToServerConsole = value
End If
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 Sub
Private Sub SetCredentials()
Try
Dim _user As String = Me.Info.Username
Dim _pass As String = Me.Info.Password
Dim _dom As String = Me.Info.Domain
Dim userName As String = _connectionInfo.Username
Dim password As String = _connectionInfo.Password
Dim domain As String = _connectionInfo.Domain
If _user = "" Then
If userName = "" Then
Select Case My.Settings.EmptyCredentials
Case "windows"
RDP.UserName = Environment.UserName
_rdpClient.UserName = Environment.UserName
Case "custom"
RDP.UserName = My.Settings.DefaultUsername
_rdpClient.UserName = My.Settings.DefaultUsername
End Select
Else
RDP.UserName = _user
_rdpClient.UserName = userName
End If
If _pass = "" Then
If password = "" Then
Select Case My.Settings.EmptyCredentials
Case "custom"
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 Select
Else
RDP.AdvancedSettings2.ClearTextPassword = _pass
_rdpClient.AdvancedSettings2.ClearTextPassword = password
End If
If _dom = "" Then
If domain = "" Then
Select Case My.Settings.EmptyCredentials
Case "windows"
RDP.Domain = Environment.UserDomainName
_rdpClient.Domain = Environment.UserDomainName
Case "custom"
RDP.Domain = My.Settings.DefaultDomain
_rdpClient.Domain = My.Settings.DefaultDomain
End Select
Else
RDP.Domain = _dom
_rdpClient.Domain = domain
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetCredentialsFailed & vbNewLine & ex.Message, True)
@@ -333,28 +339,25 @@ Namespace Connection
Private Sub SetResolution()
Try
If (Me.Force And Connection.Info.Force.Fullscreen) = Connection.Info.Force.Fullscreen Then
RDP.FullScreen = True
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
_rdpClient.FullScreen = True
_rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
_rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
Exit Sub
End If
Select Case Me.InterfaceControl.Info.Resolution
Case RDPResolutions.FitToWindow
RDP.DesktopWidth = Me.InterfaceControl.Size.Width
RDP.DesktopHeight = Me.InterfaceControl.Size.Height
Case RDPResolutions.SmartSize
RDP.AdvancedSettings.SmartSizing = True
RDP.DesktopWidth = Me.InterfaceControl.Size.Width
RDP.DesktopHeight = Me.InterfaceControl.Size.Height
Case RDPResolutions.FitToWindow, RDPResolutions.SmartSize
_rdpClient.DesktopWidth = InterfaceControl.Size.Width
_rdpClient.DesktopHeight = InterfaceControl.Size.Height
Case RDPResolutions.Fullscreen
RDP.FullScreen = True
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
_rdpClient.FullScreen = True
_rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
_rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
Case Else
RDP.DesktopWidth = Resolutions.Items(Int(Me.Info.Resolution)).Width
RDP.DesktopHeight = Resolutions.Items(Int(Me.Info.Resolution)).Height
Dim resolution As Rectangle = GetResolutionRectangle(_connectionInfo.Resolution)
_rdpClient.DesktopWidth = resolution.Width
_rdpClient.DesktopHeight = resolution.Height
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetResolutionFailed & vbNewLine & ex.Message, True)
@@ -363,8 +366,8 @@ Namespace Connection
Private Sub SetPort()
Try
If Me.Info.Port <> Connection.Protocol.RDP.Defaults.Port Then
RDP.AdvancedSettings2.RDPPort = Me.Info.Port
If _connectionInfo.Port <> Defaults.Port Then
_rdpClient.AdvancedSettings2.RDPPort = _connectionInfo.Port
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPortFailed & vbNewLine & ex.Message, True)
@@ -373,11 +376,11 @@ Namespace Connection
Private Sub SetRedirection()
Try
RDP.AdvancedSettings2.RedirectDrives = Me.Info.RedirectDiskDrives
RDP.AdvancedSettings2.RedirectPorts = Me.Info.RedirectPorts
RDP.AdvancedSettings2.RedirectPrinters = Me.Info.RedirectPrinters
RDP.AdvancedSettings2.RedirectSmartCards = Me.Info.RedirectSmartCards
RDP.SecuredSettings2.AudioRedirectionMode = Int(Me.Info.RedirectSound)
_rdpClient.AdvancedSettings2.RedirectDrives = Me._connectionInfo.RedirectDiskDrives
_rdpClient.AdvancedSettings2.RedirectPorts = Me._connectionInfo.RedirectPorts
_rdpClient.AdvancedSettings2.RedirectPrinters = Me._connectionInfo.RedirectPrinters
_rdpClient.AdvancedSettings2.RedirectSmartCards = Me._connectionInfo.RedirectSmartCards
_rdpClient.SecuredSettings2.AudioRedirectionMode = Int(Me._connectionInfo.RedirectSound)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectionFailed & vbNewLine & ex.Message, True)
End Try
@@ -386,23 +389,23 @@ Namespace Connection
Private Sub SetPerformanceFlags()
Try
Dim pFlags As Integer
If Me.Info.DisplayThemes = False Then
If Me._connectionInfo.DisplayThemes = False Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableThemes)
End If
If Me.Info.DisplayWallpaper = False Then
If Me._connectionInfo.DisplayWallpaper = False Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableWallpaper)
End If
If Me.Info.EnableFontSmoothing Then
If Me._connectionInfo.EnableFontSmoothing Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableFontSmoothing)
End If
If Me.Info.EnableDesktopComposition Then
If Me._connectionInfo.EnableDesktopComposition Then
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableDesktopComposition)
End If
RDP.AdvancedSettings.PerformanceFlags = pFlags
_rdpClient.AdvancedSettings2.PerformanceFlags = pFlags
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPerformanceFlagsFailed & vbNewLine & ex.Message, True)
End Try
@@ -410,19 +413,29 @@ Namespace Connection
Private Sub SetAuthenticationLevel()
Try
RDP.AdvancedSettings5.AuthenticationLevel = Me.Info.RDPAuthenticationLevel
_rdpClient.AdvancedSettings5.AuthenticationLevel = Me._connectionInfo.RDPAuthenticationLevel
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetAuthenticationLevelFailed & vbNewLine & ex.Message, True)
End Try
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()
Try
AddHandler RDP.OnConnecting, AddressOf RDPEvent_OnConnecting
AddHandler RDP.OnConnected, AddressOf RDPEvent_OnConnected
AddHandler RDP.OnFatalError, AddressOf RDPEvent_OnFatalError
AddHandler RDP.OnDisconnected, AddressOf RDPEvent_OnDisconnected
AddHandler RDP.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode
AddHandler _rdpClient.OnConnecting, AddressOf RDPEvent_OnConnecting
AddHandler _rdpClient.OnConnected, AddressOf RDPEvent_OnConnected
AddHandler _rdpClient.OnLoginComplete, AddressOf RDPEvent_OnLoginComplete
AddHandler _rdpClient.OnFatalError, AddressOf RDPEvent_OnFatalError
AddHandler _rdpClient.OnDisconnected, AddressOf RDPEvent_OnDisconnected
AddHandler _rdpClient.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetEventHandlersFailed & vbNewLine & ex.Message, True)
End Try
@@ -430,15 +443,15 @@ Namespace Connection
#End Region
#Region "Private Events & Handlers"
Private Sub RDPEvent_OnFatalError(ByVal sender As Object, ByVal e As AxMSTSCLib.IMsTscAxEvents_OnFatalErrorEvent)
MyBase.Event_ErrorOccured(Me, e.errorCode)
Private Sub RDPEvent_OnFatalError(ByVal errorCode As Integer)
Event_ErrorOccured(Me, errorCode)
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
If Not e.discReason = UI_ERR_NORMAL_DISCONNECT Then
Dim reason As String = RDP.GetErrorDescription(e.discReason, RDP.ExtendedDisconnectReason)
Event_Disconnected(Me, e.discReason & vbCrLf & reason)
If Not discReason = UI_ERR_NORMAL_DISCONNECT Then
Dim reason As String = _rdpClient.GetErrorDescription(discReason, _rdpClient.ExtendedDisconnectReason)
Event_Disconnected(Me, discReason & vbCrLf & reason)
End If
If My.Settings.ReconnectOnDisconnect Then
@@ -453,17 +466,21 @@ Namespace Connection
End If
End Sub
Private Sub RDPEvent_OnConnecting(ByVal sender As Object, ByVal e As System.EventArgs)
MyBase.Event_Connecting(Me)
Private Sub RDPEvent_OnConnecting()
Event_Connecting(Me)
End Sub
Private Sub RDPEvent_OnConnected(ByVal sender As Object, ByVal e As System.EventArgs)
MyBase.Event_Connected(Me)
Private Sub RDPEvent_OnConnected()
Event_Connected(Me)
End Sub
Private Sub RDPEvent_OnLeaveFullscreenMode(ByVal sender As Object, ByVal e As System.EventArgs)
Private Sub RDPEvent_OnLoginComplete()
_loginComplete = True
End Sub
Private Sub RDPEvent_OnLeaveFullscreenMode()
Fullscreen = False
RaiseEvent LeaveFullscreen(Me, e)
RaiseEvent LeaveFullscreen(Me, New EventArgs())
End Sub
#End Region
@@ -594,82 +611,19 @@ Namespace Connection
#End Region
#Region "Resolution"
Public Class Resolution
Private _Width As Integer
Public Property Width() As Integer
Get
Return Me._Width
End Get
Set(ByVal value As Integer)
Me._Width = value
End Set
End Property
Private _Height As Integer
Public Property Height() As Integer
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
Public Shared Function GetResolutionRectangle(ByVal resolution As RDPResolutions) As Rectangle
Dim resolutionParts() As String = Nothing
If Not resolution = RDPResolutions.FitToWindow And _
Not resolution = RDPResolutions.Fullscreen And _
Not resolution = RDPResolutions.SmartSize Then
resolutionParts = resolution.ToString.Replace("Res", "").Split("x")
End If
If resolutionParts Is Nothing OrElse Not resolutionParts.Length = 2 Then
Return New Rectangle(0, 0, 0, 0)
Else
Return New Rectangle(0, 0, resolutionParts(0), resolutionParts(1))
End If
End Function
#End Region
Public Class Versions
@@ -681,77 +635,91 @@ Namespace Connection
#Region "Terminal Sessions"
Public Class TerminalSessions
Dim oWTSCOM As New WTSCOM
Dim oWTSSessions As New WTSSessions
Dim oWTSSession As New WTSSession
Public ServerHandle As Long
Private ReadOnly _wtsCom As WTSCOM
Public Function OpenConnection(ByVal SrvName As String) As Boolean
Public Sub New()
Try
ServerHandle = oWTSCOM.WTSOpenServer(SrvName)
If ServerHandle <> 0 Then
Return True
End If
_wtsCom = New WTSCOM
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpOpenConnectionFailed & vbNewLine & ex.Message, True)
End Try
Return False
End Function
Public Sub CloseConnection(ByVal SrvHandle As Long)
Try
oWTSCOM.WTSCloseServer(ServerHandle)
ServerHandle = 0
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpCloseConnectionFailed & vbNewLine & ex.Message, True)
MessageCollector.AddExceptionMessage("TerminalSessions.New() failed.", ex, MessageClass.ErrorMsg, True)
End Try
End Sub
Public Function GetSessions() As Sessions
Dim colSessions As New Sessions
Public Function OpenConnection(ByVal hostname As String) As Long
If _wtsCom Is Nothing Then Return 0
Try
oWTSSessions = oWTSCOM.WTSEnumerateSessions(ServerHandle)
Return _wtsCom.WTSOpenServer(hostname)
Catch ex As Exception
MessageCollector.AddExceptionMessage(My.Language.strRdpOpenConnectionFailed, ex, MessageClass.ErrorMsg, True)
End Try
End Function
Dim SessionID As Long
Dim SessionUser As String
Dim SessionState As Long
Dim SessionName As String
Public Sub CloseConnection(ByVal serverHandle As Long)
If _wtsCom Is Nothing Then Return
For Each oWTSSession In oWTSSessions
SessionID = oWTSSession.SessionId
SessionUser = oWTSCOM.WTSQuerySessionInformation(ServerHandle, oWTSSession.SessionId, 5) 'WFUsername = 5
SessionState = oWTSSession.State & vbCrLf
SessionName = oWTSSession.WinStationName & vbCrLf
Try
_wtsCom.WTSCloseServer(serverHandle)
Catch ex As Exception
MessageCollector.AddExceptionMessage(My.Language.strRdpCloseConnectionFailed, ex, MessageClass.ErrorMsg, True)
End Try
End Sub
If SessionUser <> "" Then
If SessionState = 0 Then
colSessions.Add(SessionID, My.Language.strActive, SessionUser, SessionName)
Public Function GetSessions(ByVal serverHandle As Long) As SessionsCollection
If _wtsCom Is Nothing Then Return New SessionsCollection()
Dim sessions As New SessionsCollection()
Try
Dim wtsSessions As WTSSessions = _wtsCom.WTSEnumerateSessions(serverHandle)
Dim sessionId As Long
Dim sessionUser As String
Dim sessionState As Long
Dim sessionName As String
For Each wtsSession As WTSSession In wtsSessions
sessionId = wtsSession.SessionId
sessionUser = _wtsCom.WTSQuerySessionInformation(serverHandle, wtsSession.SessionId, 5) ' WFUsername = 5
sessionState = wtsSession.State & vbCrLf
sessionName = wtsSession.WinStationName & vbCrLf
If Not String.IsNullOrEmpty(sessionUser) Then
If sessionState = 0 Then
sessions.Add(sessionId, My.Language.strActive, sessionUser, sessionName)
Else
colSessions.Add(SessionID, My.Language.strInactive, SessionUser, SessionName)
sessions.Add(sessionId, My.Language.strInactive, sessionUser, sessionName)
End If
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpGetSessionsFailed & vbNewLine & ex.Message, True)
MessageCollector.AddExceptionMessage(My.Language.strRdpGetSessionsFailed, ex, MessageClass.ErrorMsg, True)
End Try
Return colSessions
Return sessions
End Function
Public Function KillSession(ByVal SessionID As Long) As Boolean
Return oWTSCOM.WTSLogoffSession(ServerHandle, SessionID, True)
Public Function KillSession(ByVal serverHandle As Long, ByVal sessionId As Long) As Boolean
If _wtsCom Is Nothing Then Return False
Dim result As Boolean = False
Try
result = _wtsCom.WTSLogoffSession(serverHandle, sessionId, True)
Catch ex As Exception
MessageCollector.AddExceptionMessage("TerminalSessions.KillSession() failed.", ex, MessageClass.ErrorMsg, True)
End Try
Return result
End Function
End Class
Public Class Sessions
Public Class SessionsCollection
Inherits CollectionBase
Default Public ReadOnly Property Items(ByVal Index As Integer) As Session
Default Public ReadOnly Property Items(ByVal index As Integer) As Session
Get
Return CType(List.Item(Index), Session)
Return CType(List.Item(index), Session)
End Get
End Property
@@ -761,23 +729,23 @@ Namespace Connection
End Get
End Property
Public Function Add(ByVal SessionID As Long, ByVal SessionState As String, ByVal SessionUser As String, ByVal SessionName As String) As Session
Dim newSes As New Session
Public Overloads Function Add(ByVal sessionId As Long, ByVal sessionState As String, ByVal sessionUser As String, ByVal sessionName As String) As Session
Dim newSession As New Session
Try
With newSes
.SessionID = SessionID
.SessionState = SessionState
.SessionUser = SessionUser
.SessionName = SessionName
With newSession
.SessionId = sessionId
.SessionState = sessionState
.SessionUser = sessionUser
.SessionName = sessionName
End With
List.Add(newSes)
List.Add(newSession)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddSessionFailed & vbNewLine & ex.Message, True)
MessageCollector.AddExceptionMessage(My.Language.strRdpAddSessionFailed, ex, MessageClass.ErrorMsg, True)
End Try
Return newSes
Return newSession
End Function
Public Sub ClearSessions()
@@ -788,45 +756,10 @@ Namespace Connection
Public Class Session
Inherits CollectionBase
Private lngSessionID As Long
Public Property SessionID() As Long
Get
Return lngSessionID
End Get
Set(ByVal Value As Long)
lngSessionID = Value
End Set
End Property
Private lngSessionState As String
Public Property SessionId() As Long
Public Property SessionState() As String
Get
Return lngSessionState
End Get
Set(ByVal Value As String)
lngSessionState = Value
End Set
End Property
Private strSessionUser As String
Public Property SessionUser() As String
Get
Return strSessionUser
End Get
Set(ByVal Value As String)
strSessionUser = Value
End Set
End Property
Private strSessionName As String
Public Property SessionName() As String
Get
Return strSessionName
End Get
Set(ByVal Value As String)
strSessionName = Value
End Set
End Property
End Class
#End Region
@@ -857,7 +790,7 @@ Namespace Connection
#Region "Reconnect Stuff"
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
@@ -865,7 +798,7 @@ Namespace Connection
tmrReconnect.Enabled = False
ReconnectGroup.DisposeReconnectGroup()
'SetProps()
RDP.Connect()
_rdpClient.Connect()
End If
End Sub
#End Region

View File

@@ -1,10 +1,36 @@
Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.Tools.LocalizedAttributes
Imports mRemoteNG.My
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Tools
Namespace Connection
Namespace PuttySession
Public Class 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)> _
Public Property RootPuttySessionsInfo() As Root.PuttySessions.Info
@@ -71,6 +97,24 @@ Namespace Connection
<[ReadOnly](True), _
Browsable(False)> _
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 Namespace
End Namespace

View File

@@ -6,7 +6,6 @@ Namespace Container
<DefaultProperty("Name")> _
Public Class Info
#Region "Properties"
Private _Name As String = "New Container"
<LocalizedCategory("strCategoryDisplay", 1), _
Browsable(True), _
[ReadOnly](False), _
@@ -18,10 +17,10 @@ Namespace Container
Attributes.Container()> _
Public Property Name() As String
Get
Return Me._ConnectionInfo.Name
Return ConnectionInfo.Name
End Get
Set(ByVal value As String)
Me._ConnectionInfo.Name = value
ConnectionInfo.Name = value
End Set
End Property

View File

@@ -120,7 +120,6 @@ Partial Class frmMain
Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton
Me.ToolStripMenuItem1 = 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.msMain.SuspendLayout()
Me.tsContainer.ContentPanel.SuspendLayout()
@@ -793,11 +792,6 @@ Partial Class frmMain
Me.ToolStripMenuItem2.Size = New System.Drawing.Size(135, 22)
Me.ToolStripMenuItem2.Text = "Ctrl-Esc"
'
'tmrShowUpdate
'
Me.tmrShowUpdate.Enabled = True
Me.tmrShowUpdate.Interval = 5000
'
'tmrAutoSave
'
Me.tmrAutoSave.Interval = 10000
@@ -860,7 +854,6 @@ Partial Class frmMain
Friend WithEvents mMenViewFullscreen As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents mMenToolsSSHTransfer As System.Windows.Forms.ToolStripMenuItem
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 tmrAutoSave As System.Windows.Forms.Timer
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">
<value>184, 56</value>
</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">
<value>252, 17</value>
</metadata>

View File

@@ -1,4 +1,3 @@
Imports System.IO
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Imports System.Reflection
@@ -23,16 +22,18 @@ Public Class frmMain
Private fpChainedWindowHandle As IntPtr
#Region "Properties"
Private _IsClosing As Boolean = False
Private _isClosing As Boolean = False
Public ReadOnly Property IsClosing() As Boolean
Get
Return _IsClosing
Return _isClosing
End Get
End Property
#End Region
#Region "Startup & Shutdown"
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MainForm = Me
Startup.CheckCompatibility()
Startup.CreateLogger()
@@ -56,17 +57,22 @@ Public Class frmMain
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
Tools.IeBrowserEmulation.Register()
Startup.GetConnectionIcons()
App.Runtime.GetExtApps()
GetExtApps()
Windows.treePanel.Focus()
Tree.Node.TreeView = Windows.treeForm.tvConnections
If My.Settings.FirstStart And _
Not My.Settings.LoadConsFromCustomLocation And _
Not IO.File.Exists(GetStartupConnectionFileName()) Then
NewConnections(GetStartupConnectionFileName())
End If
'LoadCredentials()
LoadConnections()
If Not IsConnectionsFileLoaded Then
@@ -74,27 +80,13 @@ Public Class frmMain
Return
End If
PuttySessions.AddSessionsToTree(Tree.Node.TreeView)
PuttySessions.StartWatcher()
If My.Settings.StartupComponentsCheck Then
Windows.Show(UI.Window.Type.ComponentsCheck)
End If
#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
Startup.UpdateCheck()
Startup.AnnouncementCheck()
#Else
#If PORTABLE Then
mMenInfoAnnouncements.Visible = False
mMenToolsUpdate.Visible = False
mMenInfoSep2.Visible = False
@@ -198,7 +190,7 @@ Public Class frmMain
End With
End Sub
Private Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
Private Shared Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
With ThemeManager.ActiveTheme
Dim menuItem As ToolStripMenuItem
For Each item As ToolStripItem In itemCollection
@@ -213,6 +205,32 @@ Public Class frmMain
End With
End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown
#If PORTABLE Then
Return
#End If
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
Return
End If
If Not My.Settings.CheckForUpdatesOnStartup Then Return
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 Sub
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
Dim connectionWindow As UI.Window.Connection
@@ -234,14 +252,14 @@ Public Class frmMain
End If
If result = DialogResult.No Then
e.Cancel = True
Exit Sub
Return
End If
End If
End If
Shutdown.BeforeQuit()
Shutdown.Cleanup()
_IsClosing = True
_isClosing = True
If WindowList IsNot Nothing Then
For Each window As UI.Window.Base In WindowList
@@ -249,30 +267,13 @@ Public Class frmMain
Next
End If
Shutdown.StartUpdate()
Debug.Print("[END] - " & Now)
End Sub
#End Region
#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
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Doing AutoSave", True)
App.Runtime.SaveConnections()
@@ -738,7 +739,7 @@ Public Class frmMain
Next
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
For Each tNode As TreeNode In tnc
Dim tMenItem As New ToolStripMenuItem()
@@ -759,16 +760,16 @@ Public Class frmMain
menToolStrip.DropDownItems.Add(tMenItem)
End If
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown
AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
End Try
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 TypeOf sender.Tag Is mRemoteNG.Connection.Info Then
If TypeOf sender.Tag Is Connection.Info Then
App.Runtime.OpenConnection(sender.Tag)
End If
End If

View File

@@ -1,6 +1,9 @@
Imports System.IO
Imports System.ComponentModel
Imports mRemoteNG.Messages
Imports mRemoteNG.My
Imports mRemoteNG.Tools
Imports PSTaskDialog
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Themes
@@ -1647,10 +1650,12 @@ Public Class frmOptions
Me.chkAutomaticallyGetSessionInfo.Checked = My.Settings.AutomaticallyGetSessionInfo
Me.chkAutomaticReconnect.Checked = My.Settings.ReconnectOnDisconnect
Me.chkSingleInstance.Checked = My.Settings.SingleInstance
Me.chkUseCustomPuttyPath.Checked = My.Settings.UseCustomPuttyPath
Me.txtCustomPuttyPath.Text = My.Settings.CustomPuttyPath
Me.numPuttyWaitTime.Value = My.Settings.MaxPuttyWaitTime
chkUseCustomPuttyPath.Checked = Settings.UseCustomPuttyPath
txtCustomPuttyPath.Text = Settings.CustomPuttyPath
SetPuttyLaunchButtonEnabled()
Me.chkUseProxyForAutomaticUpdates.Checked = My.Settings.UpdateUseProxy
Me.btnTestProxy.Enabled = My.Settings.UpdateUseProxy
Me.pnlProxyBasic.Enabled = My.Settings.UpdateUseProxy
@@ -1780,10 +1785,10 @@ Public Class frmOptions
My.Settings.UseCustomPuttyPath = Me.chkUseCustomPuttyPath.Checked
My.Settings.CustomPuttyPath = Me.txtCustomPuttyPath.Text
If My.Settings.UseCustomPuttyPath Then
mRemoteNG.Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath
If Settings.UseCustomPuttyPath Then
Connection.Protocol.PuttyBase.PuttyPath = Settings.CustomPuttyPath
Else
mRemoteNG.Connection.Protocol.PuttyBase.PuttyPath = My.Application.Info.DirectoryPath & "\PuTTYNG.exe"
Connection.Protocol.PuttyBase.PuttyPath = App.Info.General.PuttyPath
End If
My.Settings.MaxPuttyWaitTime = Me.numPuttyWaitTime.Value
@@ -1805,11 +1810,7 @@ Public Class frmOptions
ThemeManager.SaveThemes(_themeList)
Settings.ThemeName = ThemeManager.ActiveTheme.Name
If My.Settings.LoadConsFromCustomLocation = False Then
App.Runtime.SetMainFormText(App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile)
Else
App.Runtime.SetMainFormText(My.Settings.CustomConsPath)
End If
SetMainFormText(GetStartupConnectionFileName())
App.Runtime.Startup.DestroySQLUpdateHandlerAndStopTimer()
@@ -1823,8 +1824,9 @@ Public Class frmOptions
End Sub
#End Region
#Region "Private Variables"
#Region "Private Fields"
Private _initialTab As Integer = 0
Private _appUpdate As App.Update
Private _themeList As BindingList(Of ThemeInfo)
Private _originalTheme As ThemeInfo
#End Region
@@ -2006,26 +2008,70 @@ Public Class frmOptions
End Sub
Private Sub chkUseCustomPuttyPath_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseCustomPuttyPath.CheckedChanged
Me.txtCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked
Me.btnBrowseCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked
txtCustomPuttyPath.Enabled = 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
Private Sub btnLaunchPutty_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaunchPutty.Click
mRemoteNG.Connection.Protocol.PuttyBase.StartPutty()
End Sub
Private Sub btnBrowseCustomPuttyPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseCustomPuttyPath.Click
Dim oDlg As New OpenFileDialog()
oDlg.Filter = My.Language.strFilterApplication & "|*.exe|" & My.Language.strFilterAll & "|*.*"
oDlg.FileName = "PuTTYNG.exe"
oDlg.CheckFileExists = True
oDlg.Multiselect = False
If oDlg.ShowDialog = System.Windows.Forms.DialogResult.OK Then
Me.txtCustomPuttyPath.Text = oDlg.FileName
End If
oDlg.Dispose()
Try
Dim puttyProcess As New PuttyProcessController
Dim fileName As String
If chkUseCustomPuttyPath.Checked Then
fileName = txtCustomPuttyPath.Text
Else
fileName = App.Info.General.PuttyPath
End If
puttyProcess.Start(fileName)
puttyProcess.SetControlText("Button", "&Cancel", "&Close")
puttyProcess.SetControlVisible("Button", "&Open", False)
puttyProcess.WaitForExit()
Catch ex As Exception
cTaskDialog.MessageBox(Application.Info.ProductName, Language.strErrorCouldNotLaunchPutty, "", ex.Message, "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
End Try
End Sub
Private Sub btnBrowseXulRunnerPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseXulRunnerPath.Click
@@ -2064,14 +2110,41 @@ Public Class frmOptions
End Sub
Private Sub btnTestProxy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestProxy.Click
SaveOptions()
Dim ud As New App.Update()
If ud.IsProxyOK Then
MsgBox(My.Language.strProxyTestSucceeded, MsgBoxStyle.Information)
Else
MsgBox(My.Language.strProxyTestFailed, MsgBoxStyle.Exclamation)
If _appUpdate IsNot Nothing Then
If _appUpdate.IsGetUpdateInfoRunning Then Return
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), "", "", "", Language.strButtonOK, False, eSysIcons.Error, 0)
End Try
End Sub
Private Sub chkUseProxyAuthentication_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseProxyAuthentication.CheckedChanged

View File

@@ -118,7 +118,11 @@ CREATE TABLE [dbo].[tblCons] (
[InheritRDGatewayUseConnectionCredentials] [bit] NOT NULL ,
[InheritRDGatewayUsername] [bit] NOT NULL ,
[InheritRDGatewayPassword] [bit] NOT NULL ,
[InheritRDGatewayDomain] [bit] NOT NULL
[InheritRDGatewayDomain] [bit] NOT NULL ,
[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
) ON [PRIMARY]
GO
@@ -131,7 +135,7 @@ CREATE TABLE [dbo].[tblRoot] (
GO
CREATE TABLE [dbo].[tblUpdate] (
[LastUpdate] [datetime] NULL
[LastUpdate] [datetime] NULL
) ON [PRIMARY]
GO

View File

@@ -263,7 +263,7 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Current Version.
''' Looks up a localized string similar to Latest version.
'''</summary>
Friend Shared ReadOnly Property strAvailableVersion() As String
Get
@@ -561,10 +561,10 @@ Namespace My
End Property
'''<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.
'''mRemoteNG ships with this component but will not register it automatically unless you run the setup package.
'''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).
'''If you are still not able to pass this check or use the (RDP) Session [rest of string was truncated]&quot;;.
''' 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 it is not registered automatically if you do not use the mRemoteNG Installer.
'''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 this check still fails or you are unable to use the (RDP) Sessions feat [rest of string was truncated]&quot;;.
'''</summary>
Friend Shared ReadOnly Property strCcEOLFailed() As String
Get
@@ -652,9 +652,8 @@ Namespace My
End Property
'''<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
'''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 you still have trouble getting RDP to work please consult the mRemoteNG Forum at ht [rest of string was truncated]&quot;;.
''' 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 this check still fails or you are unable to use RDP, please consult the mRemoteNG Forum at http://forum.mremoteng.org/..
'''</summary>
Friend Shared ReadOnly Property strCcRDPFailed() As String
Get
@@ -918,6 +917,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Couldn&apos;t parse command line args!.
'''</summary>
@@ -927,6 +935,24 @@ Namespace My
End Get
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>
@@ -1542,6 +1568,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Decryption failed. {0}.
'''</summary>
@@ -2384,7 +2419,7 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Load From SQL failed!.
''' Looks up a localized string similar to Load from SQL failed.
'''</summary>
Friend Shared ReadOnly Property strLoadFromSqlFailed() As String
Get
@@ -2392,6 +2427,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Load From XML failed!.
'''</summary>
@@ -2968,6 +3012,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Sessions.
'''</summary>
@@ -3275,6 +3328,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Theme.
'''</summary>
@@ -3383,6 +3445,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Select whether to use bitmap caching or not..
'''</summary>
@@ -3518,6 +3589,15 @@ Namespace My
End Get
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>
''' 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>
@@ -3833,6 +3913,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Cache Bitmaps.
'''</summary>
@@ -3968,6 +4057,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to MAC Address.
'''</summary>
@@ -4385,6 +4483,15 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to PuTTY Settings.
'''</summary>
@@ -4854,7 +4961,7 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Open RDP Connectin failed!.
''' Looks up a localized string similar to Open RDP Connection failed!.
'''</summary>
Friend Shared ReadOnly Property strRdpOpenConnectionFailed() As String
Get
@@ -5421,7 +5528,7 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Transfer.
''' Looks up a localized string similar to SSH transfer failed..
'''</summary>
Friend Shared ReadOnly Property strSSHTransferFailed() As String
Get
@@ -5997,7 +6104,7 @@ Namespace My
End Property
'''<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>
Friend Shared ReadOnly Property strUpdateCheckCompleteFailed() As String
Get
@@ -6006,11 +6113,20 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Check For Update failed!.
''' Looks up a localized string similar to Check failed.
'''</summary>
Friend Shared ReadOnly Property strUpdateCheckFailed() As String
Friend Shared ReadOnly Property strUpdateCheckFailedLabel() As String
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 Property
@@ -6023,15 +6139,6 @@ Namespace My
End Get
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>
''' Looks up a localized string similar to Download complete!
'''mRemoteNG will now quit and begin with the installation..
@@ -6043,7 +6150,7 @@ Namespace My
End Property
'''<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>
Friend Shared ReadOnly Property strUpdateDownloadCompleteFailed() As String
Get
@@ -6052,7 +6159,7 @@ Namespace My
End Property
'''<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>
Friend Shared ReadOnly Property strUpdateDownloadFailed() As String
Get
@@ -6097,11 +6204,20 @@ Namespace My
End Property
'''<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>
Friend Shared ReadOnly Property strUpdateStartFailed() As String
Friend Shared ReadOnly Property strUpdateGetAnnouncementInfoFailed() As String
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 Property

View File

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Panel Auswahl Dialog immer anzeigen</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Palettenregister immer anzeigen</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>System Tray Icon immer anzeigen</value>
</data>
@@ -160,7 +163,7 @@
<value>Einstellungen jetzt anpassen</value>
</data>
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
<value>Verwende die empflohlenen Einstellungen</value>
<value>Verwende die empfohlenen Einstellungen</value>
</data>
<data name="strAskUpdatesContent" xml:space="preserve">
<value>{0} kann automatisch nach Updates suchen die neue Funktionen und Bug Fixes enthalten können. Es wird empfohlen, dass Sie {0} erlauben wöchentlich nach Updates zu suchen.</value>
@@ -414,6 +417,12 @@ VncSharpNG Control Version {0}</value>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Die Kommandozeilen Parameter kontnen nicht ausgewertet werden!</value>
</data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<value>{0} hat festgestellt, dass das Lenovo Auto Scroll Utility auf diesem Computer ausgeführt wird. Dieses Dienstprogramm ist dafür bekannt, dass es Probleme mit {0} verursacht. Es wird empfohlen, dass Sie es deaktivieren oder deinstallieren.</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Kompatibilitätsproblem entdeckt</value>
</data>
<data name="strComponentsCheck" xml:space="preserve">
<value>Komponenten Überprüfung</value>
</data>
@@ -442,7 +451,7 @@ VncSharpNG Control Version {0}</value>
<value>Möchten Sie die Verbindung "{0}" schließen?</value>
</data>
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
<value>Sind sie sicher, dass Sie das Panel "{0}" schließen möchten? Alle Verbindung , die es enthält, werden ebenfalls geschlossen.</value>
<value>Sind sie sicher, dass Sie das Panel "{0}" schließen möchten? Alle Verbindungen, die es enthält, werden ebenfalls geschlossen.</value>
</data>
<data name="strConfirmDeleteExternalTool" xml:space="preserve">
<value>Sind Sie sicher dass Sie das extene Programm "{0}" entfernen möchten?</value>
@@ -543,9 +552,15 @@ Starte mit neuer Datei.</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Kann keine neue Verbindungsdatei erstellen!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Das ToolStrip-Steuerelement konnte in FilteredPropertyGrid nicht gefunden werden.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Aktuelle Version</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Standard-Aussehen</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Erkennen</value>
</data>
@@ -616,7 +631,7 @@ Starte mit neuer Datei.</value>
<value>Verschlüsselung fehlgeschlagen. {0}</value>
</data>
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
<value>Die Sicherheitseinstellung von Windows "Systemkryptografie: Verwenden sie FIPS-konformen Algorithmus für Verschlüsselung, hashing und Signatur", ist aktiviert. Diese Einstellung ist nicht kompatibel mit {0}. Weitere Informationen finden sie im Microsoft Support-Artikel unter http://support.microsoft.com/kb/811833 . {0} wird jetzt beendet.</value>
<value>Die Sicherheitseinstellung von Windows "Systemkryptografie: Verwenden sie FIPS-konformen Algorithmus für Verschlüsselung, Hashing und Signatur" ist aktiviert. Diese Einstellung ist nicht kompatibel mit {0}. Weitere Informationen finden sie im Microsoft Support-Artikel unter http://support.microsoft.com/kb/811833. {0} wird jetzt beendet.</value>
</data>
<data name="strErrors" xml:space="preserve">
<value>Fehler</value>
@@ -682,7 +697,7 @@ Starte mit neuer Datei.</value>
<value>Verbindungs Daten von SQL laden ist fehlgeschlagen!</value>
</data>
<data name="strGetConnectionInfoFromXmlFailed" xml:space="preserve">
<value>Fehler beim Laden des Verbindungseintrag für "{0}" von "{1}". {2}</value>
<value>Fehler beim Laden des Verbindungseintrags für "{0}" von "{1}". {2}</value>
</data>
<data name="strGroupboxAutomaticReconnect" xml:space="preserve">
<value>Automatisches wiederverbinden</value>
@@ -705,6 +720,9 @@ Starte mit neuer Datei.</value>
<data name="strHttpConnectionFailed" xml:space="preserve">
<value>Erstellen der HTTP Verbindung fehlgeschlagen!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Fehler beim Ändern des HTTP-Dokumentfensters!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Setzen der HTTP Parameter fehlgeschlagen!</value>
</data>
@@ -726,6 +744,9 @@ Starte mit neuer Datei.</value>
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>Setzen der Auflösung fehlgschlagen!</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Quick connect Registerkarten identifizieren, indem das Präfix "Quick:" benutzt wird</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Aus Active Directory importieren</value>
</data>
@@ -792,6 +813,9 @@ Starte mit neuer Datei.</value>
<data name="strLabelChangeLog" xml:space="preserve">
<value>Veränderungsprotokoll:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Beim Schliessen der Verbindungen:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Direkt Verbinden:</value>
</data>
@@ -838,7 +862,7 @@ Starte mit neuer Datei.</value>
<value>Wählen Sie ein Panel aus der Liste oder klicken Sie auf Neu um ein neues zu erstellen. Klickeen Sie OK um fortzufahren.</value>
</data>
<data name="strLabelServerStatus" xml:space="preserve">
<value>Server Status:</value>
<value>Serverstatus:</value>
</data>
<data name="strLabelSQLDatabaseName" xml:space="preserve">
<value>Datenbank:</value>
@@ -990,6 +1014,15 @@ Starte mit neuer Datei.</value>
<data name="strMenuNotifications" xml:space="preserve">
<value>Meldungen</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Alle Kopieren</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Löschen</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Alle Löschen</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Konfigurations Datei öffnen...</value>
</data>
@@ -1000,7 +1033,7 @@ Starte mit neuer Datei.</value>
<value>Einfügen</value>
</data>
<data name="strMenuPortScan" xml:space="preserve">
<value>Port Scan</value>
<value>Port-Scan</value>
</data>
<data name="strMenuQuickConnectToolbar" xml:space="preserve">
<value>Direkt Verbinden Symbolleiste</value>
@@ -1050,6 +1083,9 @@ Starte mit neuer Datei.</value>
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sitzungen and Bildschirmschnappschüsse</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Hilfetext anzeigen</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Text anzeigen</value>
</data>
@@ -1144,6 +1180,15 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strOpenPorts" xml:space="preserve">
<value>Offene Ports</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Aussehen</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Löschen</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Neu</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Panel Name</value>
</data>
@@ -1282,6 +1327,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>Zur Konsolen Sitzung des entfernten Hosts verbinden.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Verwenden Sie den Anmeldeinformationen Security Support Provider (CredSSP) für die Authentifizierung, wenn er verfügbar ist.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>Dieses Feld ist frei beschreibbar.</value>
</data>
@@ -1432,6 +1480,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Verwende Konsole</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Verwenden Sie CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Benutzer Feld</value>
</data>
@@ -1448,7 +1499,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<value>Proxy Passwort</value>
</data>
<data name="strPropertyNameVNCProxyPort" xml:space="preserve">
<value>Proxy Port</value>
<value>Proxy-Port</value>
</data>
<data name="strPropertyNameVNCProxyType" xml:space="preserve">
<value>Proxy Typ</value>
@@ -1497,6 +1548,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Ändern der Größe fehlgschlagen!</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY gespeicherte Sitzungen</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>PuTTY Einstellungen</value>
</data>
@@ -1527,6 +1581,18 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Prüfung auf Direkt Verbindungs Historie fehlgeschlagen!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Warnen wenn Verbindungen beendet werden</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Warne mich nur beim B&amp;eenden von mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Nur beim Beenden &amp;mehrerer Verbindungen warnen</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>Nicht warnen, wenn Verbindungen beendet werden</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>Rohdaten (RAW)</value>
</data>
@@ -1743,6 +1809,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strScreenshots" xml:space="preserve">
<value>Bilschirmschnappschüsse</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Suche</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Senden an...</value>
</data>
@@ -1828,7 +1897,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<value>SSH Abschluss der Übertragung fehlgeschlagen!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Übertragung fehlgeschlagen!</value>
<value>SSH-Übertragung fehlgeschlagen.</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Anfangs IP</value>
@@ -1863,6 +1932,117 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strTheFollowing" xml:space="preserve">
<value>die folgenden:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Config-Panel</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Connections Panel</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Allgemein</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe des Config panels.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>Die Farbe des Textes im Bedienfeld "Config".</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>Die Farbe der Rasterlinien im Configpanel</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe des Bereichs Hilfe des Configpanel.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>Die Farbe des Textes auf den Link "Hilfe" des Bereichs Config.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>Die Farbe des Textes im Configpanel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe des Fensters Verbindungen.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>Die Farbe des Textes im Bereich Verbindungen.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Die Farbe der Strukturlinien im Bereich Verbindungen.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe der Menüs.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>Die Farbe des Textes in den Menüs.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe des Suchfelds.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>Die Farbe des Textes in das Suchfeld.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>Die Farbe des Textes der Eingabeaufforderung in das Suchfeld.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe der Symbolleisten.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>Die Farbe des Textes in den Symbolleisten.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>Die Hintergrundfarbe des Hauptfensters.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Config-Panel-Hintergrundfarbe</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Config-Panel Kategorie Textfarbe</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Config-Panel-Grid-Linienfarbe</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Config-Panel Hilfe Hintergrundfarbe</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Config-Panel Hilfe Textfarbe</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Config-Panel-Textfarbe</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Verbindungen-Panel-Hintergrund-Farbe</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Verbindungen-Panel-Textfarbe</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Verbindungen Panel Baumgrenze Farbe</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Menü-Hintergrund-Farbe</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Menü-Textfarbe</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Suchfeld Hintergrundfarbe</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Suchfeld Textfarbe</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Suchfeld Prompt Textfarbe</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Symbolleiste-Hintergrundfarbe</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Symbolleiste Textfarbe</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Fenster-Hintergrundfarbe</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Fehler ({0})</value>
</data>
@@ -1899,6 +2079,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strUncheckProperties" xml:space="preserve">
<value>Deaktivieren Sie alle Eigenschaften die nicht gespeichert werden sollen.</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Unbenanntes Aussehen</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG Update verfügbar!</value>
</data>

View File

@@ -0,0 +1,348 @@
<?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>Σχετικά με</value>
</data>
<data name="strActive" xml:space="preserve">
<value>Ενεργό</value>
</data>
<data name="strActivity" xml:space="preserve">
<value>Δραστηριότητα</value>
</data>
<data name="strAddConnection" xml:space="preserve">
<value>Νέα σύνδεση</value>
</data>
<data name="strAddFolder" xml:space="preserve">
<value>Νέος φάκελος</value>
</data>
<data name="strAddNodeFromXmlFailed" xml:space="preserve">
<value>AddNodeFromXML απέτυχε!</value>
</data>
<data name="strAddNodesFromSqlFailed" xml:space="preserve">
<value>AddNodesFromSQL απέτυχε!</value>
</data>
<data name="strAllowOnlySingleInstance" xml:space="preserve">
<value>Επιτρέπετε μόνο ένα μόνο παράδειγμα της εφαρμογής (απαιτείται επανεκκίνηση του mRemoteNG)</value>
</data>
<data name="strAlways" xml:space="preserve">
<value>Πάντα</value>
</data>
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
<value>Πάντοτε να συνδεθεί, ακόμη και αν ο έλεγχος ταυτότητας αποτυγχάνει</value>
</data>
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Πάντα Εμφάνιση πίνακα διαλόγου επιλογής κατά το άνοιγμα συνδέσεων</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Να εμφανίζονται πάντα γνωστοποίησης περιοχων εικόνας</value>
</data>
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
<value>Ρωτήστε με ξανά αργότερα</value>
</data>
<data name="strAskUpdatesCommandCustom" xml:space="preserve">
<value>Προσαρμογή των ρυθμίσεων τώρα</value>
</data>
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
<value>Χρήση των προτεινόμενων ρυθμίσεων</value>
</data>
<data name="strAskUpdatesContent" xml:space="preserve">
<value>{0} μπορεί να ελέγχει αυτόματα ενημερώσεις που μπορούν να παρέχουν νέα χαρακτηριστικά και διορθώσεις σφαλμάτων. Συνιστάται να επιτρέψετε {0} να ελέγξει για ενημερώσεις σε εβδομαδιαία βάση.</value>
</data>
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
<value>Ρυθμίσεις αυτόματης ενημέρωσης</value>
</data>
<data name="strAspect" xml:space="preserve">
<value>Πτυχή</value>
</data>
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
<value>Αυτόματη λήψη πληροφοριών περιόδου</value>
</data>
<data name="strAutoSaveEvery" xml:space="preserve">
<value>Αυτόματη αποθήκευση κάθε:</value>
</data>
<data name="strAutoSaveMins" xml:space="preserve">
<value>Λεπτά (0 σημαίνει απενεργοποιημένο)</value>
</data>
<data name="strAvailableVersion" xml:space="preserve">
<value>Τρέχουσα έκδοση</value>
</data>
<data name="strButtonBrowse" xml:space="preserve">
<value>&amp;Αναζήτηση...</value>
</data>
<data name="strButtonCancel" xml:space="preserve">
<value>&amp;Ακύρωση</value>
</data>
<data name="strButtonChange" xml:space="preserve">
<value>Αλλαγή</value>
</data>
<data name="strButtonClose" xml:space="preserve">
<value>&amp;Κλείσιμο</value>
</data>
<data name="strButtonDefaultInheritance" xml:space="preserve">
<value>Προεπιλογή κληρονομικότητας</value>
</data>
<data name="strButtonDefaultProperties" xml:space="preserve">
<value>Προεπιλεγμένες ιδιότητες</value>
</data>
<data name="strButtonDisconnect" xml:space="preserve">
<value>Αποσύνδεση</value>
</data>
<data name="strButtonIcon" xml:space="preserve">
<value>Εικονίδιο</value>
</data>
<data name="strButtonImport" xml:space="preserve">
<value>&amp;Εισαγωγή</value>
</data>
<data name="strButtonInheritance" xml:space="preserve">
<value>Κληρονομιά</value>
</data>
<data name="strButtonLaunchPutty" xml:space="preserve">
<value>Εκκίνηση του PuTTY</value>
</data>
<data name="strButtonNew" xml:space="preserve">
<value>&amp; Νέο</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp;ΟΚ</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Ιδιότητες</value>
</data>
<data name="strButtonScan" xml:space="preserve">
<value>&amp;Σάρωση</value>
</data>
<data name="strButtonStop" xml:space="preserve">
<value>&amp;Διακοπή</value>
</data>
<data name="strButtonTestProxy" xml:space="preserve">
<value>Δοκιμή διακομιστή μεσολάβησης</value>
</data>
<data name="strCannotImportNormalSessionFile" xml:space="preserve">
<value>Δεν μπορείτε να εισαγάγετε ένα κανονικό αρχείο σύνδεσης.
Παρακαλούμε χρησιμοποιήστε Αρχείο - Συνδέσεις φορτίου για τα κανονικά αρχεία σύνδεσης!</value>
</data>
<data name="strCannotStartPortScan" xml:space="preserve">
<value>Δεν είναι δυνατή η εκκίνηση της σάρωσης υποδοχων, εσφαλμένη μορφή IP!</value>
</data>
<data name="strCategoryAppearance" xml:space="preserve">
<value>Εμφάνιση</value>
</data>
<data name="strCategoryConnection" xml:space="preserve">
<value>Σύνδεση</value>
</data>
<data name="strCategoryCredentials" xml:space="preserve">
<value>Πιστοποιήσεις</value>
</data>
<data name="strCategoryDisplay" xml:space="preserve">
<value>Οθόνη</value>
</data>
<data name="strCategoryGateway" xml:space="preserve">
<value>Πύλη</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>Γενική</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Διάφορα</value>
</data>
<data name="strCategoryProtocol" xml:space="preserve">
<value>Πρωτόκολλο</value>
</data>
<data name="strCategoryRedirect" xml:space="preserve">
<value>Ανακατεύθυνση</value>
</data>
<data name="strCcAlwaysShowScreen" xml:space="preserve">
<value>Πάντα εμφάνιση αυτής της οθόνης κατά την εκκίνηση</value>
</data>
<data name="strCcCheckAgain" xml:space="preserve">
<value>Ανανέωση</value>
</data>
<data name="strCcCheckFailed" xml:space="preserve">
<value>Ο ελέγχος απέτυχε!</value>
</data>
<data name="strCcCheckSucceeded" xml:space="preserve">
<value>Ο ελεγχος πέτυχε!</value>
</data>
<data name="strCcEOLFailed" xml:space="preserve">
<value>Η δυνατότητα (RDP) συνεδρίες προϋποθέτει ότι έχετε μια εγγεγραμμένο αντίγραφο του eolwtscom.dll στο σύστημά σας. mRemoteNG πλοία με αυτό το στοιχείο αλλά θα δεν εγγραφείτε αυτόματα εκτός αν η εκτέλεση του πακέτου εγκατάστασης. Να εγγραφείτε δεν με μη αυτόματο τρόπο αυτό: Ανοίξτε στο τρέχω διάλογος (έναρξη - Run) και πληκτρολογήστε τα παρακάτω: regsvr32 "c:\Program Files\mRemoteNG\eolwtscom.dll" (όπου c:\Program Files\mRemoteNG\ είναι η διαδρομή προς την εγκατάσταση mRemoteNG). Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή να χρησιμοποιήσετε τη δυνατότητα συνεδρίες (RDP) στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/</value>
</data>
<data name="strCcEOLOK" xml:space="preserve">
<value>Το EOLWTSCOM βρέθηκε και φαίνεται να έχει καταχωρηθεί σωστά.</value>
</data>
<data name="strCcGeckoFailed" xml:space="preserve">
<value>Για να χρησιμοποιήσετε το μηχανισμό απόδοσης Gecko πρέπει να έχετε XULrunner 1.8.1.x και ο δρόμος για την εγκατάσταση ορίστε στις επιλογές σας. Μπορείτε να κατεβάσετε XULrunner 1.8.1.3 εδώ: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ όταν ολοκληρώσετε τη λήψη κάντε εξαγωγή του πακέτου για την πορεία της επιλογής σας. Στη συνέχεια, στο mRemoteNG πηγαίνετε στο εργαλεία - επιλογές - προηγμένες και πληκτρολογήσει τη σωστή διαδρομή στο πεδίο διαδρομή XULrunner. Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή χρησιμοποιούν την μηχανή Gecko στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>Το XULrunner βρέθηκε και φαίνεται να έχει εγκατασταθεί σωστά.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA απαιτεί ότι είναι εγκατεστημένο το XenDesktop Online Plugin και ότι καταχωρείται η βιβλιοθήκη wfica.ocx. Μπορείτε να κατεβάσετε τον πελάτη εδώ: http://www.citrix.com/download/ αν έχετε το XenDesktop Online Plugin εγκατασταθεί και ο έλεγχος συνεχίσει να αποτυγχάνει, προσπαθήστε να εγγραφείτε wfica.ocx με μη αυτόματο τρόπο. Να κάνει αυτό ανοίγω πάνω στο τρέχω διάλογος (έναρξη - Run) και πληκτρολογήστε τα παρακάτω: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (όπου c:\Program Files\Citrix\ICA Client\ είναι η διαδρομή στην εγκατάσταση XenDesktop Online Plugin). Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή να χρησιμοποιήσετε ICA στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/"</value>
</data>
<data name="strCcICAOK" xml:space="preserve">
<value>Όλα τα συστατικά ICA βρέθηκαν και φαίνεται να καταχωρηθηκαν σωστά. Πρόγραμμα-πελάτη Citrix ICA ελέγχου έκδοση {0}</value>
</data>
<data name="strCcNotInstalledProperly" xml:space="preserve">
<value>δεν έχει εγκατασταθεί σωστά</value>
</data>
<data name="strConnectInFullscreen" xml:space="preserve">
<value>Σύνδεση σε λειτουργία πλήρους οθόνης</value>
</data>
<data name="strConnecting" xml:space="preserve">
<value>Σύνδεση...</value>
</data>
<data name="strConnectionEventConnected" xml:space="preserve">
<value>Πρωτόκολλο γεγονός που συνδέεται</value>
</data>
<data name="strConnectionEventConnectedDetail" xml:space="preserve">
<value>Σύνδεση με "{0}" μέσω "{1}" από το χρήστη "{2}" (Περιγραφή: «{3}»? Χρήστη το πεδίο: «{4}")</value>
</data>
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
<value>Η συνδεση απέτυχε!</value>
</data>
<data name="strConnectionEventErrorOccured" xml:space="preserve">
<value>Πρωτόκολλο ErrorOccured εκδήλωση</value>
</data>
<data name="strConnectionOpenFailed" xml:space="preserve">
<value>Άνοιγμα σύνδεσης απέτυχε!</value>
</data>
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
<value>Δεν μπορεί να ανοίχθει η σύνδεση: Το όνομα του κεντρικού υπολογιστή δεν ειναι καθορισμένο!</value>
</data>
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
<value>RDP λάθος!
Κωδικός σφάλματος: {0}
Περιγραφή σφάλματος: {1}</value>
</data>
<data name="strConnections" xml:space="preserve">
<value>Συνδέσεις</value>
</data>
<data name="strConnectionSetDefaultPortFailed" xml:space="preserve">
<value>Αδυναμία ορισμού προεπιλεγμένης θύρας!</value>
</data>
<data name="strConnectionsFileBackupFailed" xml:space="preserve">
<value>Δεν ήταν δυνατή η δημιουργία αντιγράφων ασφαλείας των συνδέσεων αρχείου!</value>
</data>
<data name="strConnectionsFileCouldNotBeImported" xml:space="preserve">
<value>Δεν ήταν δυνατή η εισαγωγή συνδέσεων αρχείου!</value>
</data>
<data name="strConnectionsFileCouldNotBeLoaded" xml:space="preserve">
<value>Το αρχείο συνδέσεων "{0}" δεν μπορεί να φορτωθεί!</value>
</data>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -59,7 +59,7 @@
: using a System.ComponentModel.TypeConverter
: 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:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
@@ -105,15 +105,15 @@
</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="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>

View File

@@ -416,12 +416,30 @@ Versión de Control {0} de VNCSharpNG</value>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>¡No se pudieron procesar los argumentos de línea de comandos!</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Detectado problema de compatibilidad</value>
</data>
<data name="strComponentsCheck" xml:space="preserve">
<value>Comprobación de Componentes</value>
</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">
<value>No se pudo definir el estado del host!</value>
</data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>¡Fallo en pGrid_PopertyValueChanged!</value>
</data>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Error al Cargar la Interfaz de Configuración de Usuario</value>
</data>
@@ -521,6 +539,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
</data>
<data name="strConnenctionCloseEvent" xml:space="preserve">
<value>Evento de conexión cerrado</value>
</data>
<data name="strConnenctionCloseEventFailed" xml:space="preserve">
<value>¡Ha fallado el evento Closed en Connection!</value>
</data>
@@ -572,6 +593,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strEndPort" xml:space="preserve">
<value>Puerto Final</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>Fallo al AddExternalToolsToToolBar (frmMain). {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve">
<value>Añadir Carpeta (UI.Window.Tree) fallida. {0}</value>
</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">
<value>¡No se pudo crear una nueva conexión HTTP!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>¡Fallo al cambiar el azulejo del documento HTTP!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>¡Asignación de Propiedades HTTP fallida!</value>
</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">
<value>¡No se pudo centrar el foco en Int App!</value>
</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">
<value>Título Int App: {0}</value>
</data>
@@ -964,10 +1006,10 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<value>Copiar todo</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Eliminar</value>
<value>Borrar</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Eliminar todo</value>
<value>Borrar todo</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<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">
<value>Sesiones y Capturas de Pantalla</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Mostrar texto de ayuda</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Mostar Texto</value>
</data>
<data name="strMenuSmartSize" xml:space="preserve">
<value>SmartSize (RDP/VNC)</value>
</data>
<data name="strMenuSSHFileTransfer" xml:space="preserve">
<value>Tranferencia de Archivos por SSH</value>
</data>
@@ -1467,12 +1515,21 @@ Mensaje:
<data name="strPuttyGetSessionsFailed" xml:space="preserve">
<value>¡Fallo en la carga de las Sesiones de Putty!</value>
</data>
<data name="strPuttyHandle" xml:space="preserve">
<value>Manejar Putty: {0}</value>
</data>
<data name="strPuttyKillFailed" xml:space="preserve">
<value>¡Kill del Proceso Putty fallido!</value>
</data>
<data name="strPuttyParentHandle" xml:space="preserve">
<value>Manejar el panel: {0}</value>
</data>
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>¡Redimensionamiento de Putty fallido!</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>Sesiones guardadas de PuTTY</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>Opciones de PuTTY</value>
</data>
@@ -1482,6 +1539,12 @@ Mensaje:
<data name="strPuttyStartFailed" xml:space="preserve">
<value>¡Fallo en el arranque de Putty!</value>
</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">
<value>Conexión Rápida</value>
</data>
@@ -1794,9 +1857,6 @@ Mensaje:
<data name="strSSHTransferEndFailed" xml:space="preserve">
<value>¡Final de Transferencia SSH (UI.Window.SSHTransfer) fallida!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Tranferencia</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>IP Inicial</value>
</data>
@@ -1845,15 +1905,30 @@ Mensaje:
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Color de fondo del panel de configuración</value>
</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">
<value>Color del texto del menú</value>
</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">
<value>Color de fondo de la barra de herramientas</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Color del texto de la barra de herramientas</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Color de fondo de la ventana</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Error ({0})</value>
</data>

View File

@@ -148,7 +148,7 @@
<value>Toujours se connecter, même si l'authentification échoue</value>
</data>
<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 name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Toujours afficher les onglets du panneau</value>
@@ -401,7 +401,13 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
<value>Attendre avant de quitter</value>
</data>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Impossible de parcourir les arguments de la ligne de commande !</value>
<value>Impossible de convertir les arguments de la ligne de commande !</value>
</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">
<value>Vérifiez les composants</value>
@@ -603,7 +609,7 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
</data>
<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}.
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>
</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>
</data>
<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 name="strImportAD" xml:space="preserve">
<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>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value>
<value>CTRL-Echap</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Adresse:</value>
@@ -989,7 +995,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<value>Notifications</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copiez tout</value>
<value>Tout copier</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Supprimer</value>
@@ -1522,6 +1528,9 @@ Message:
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Échec du redimensionnement de Putty !</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>Sessions PuTTY sauvegardées</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>Paramètres PuTTY</value>
</data>
@@ -1868,7 +1877,7 @@ Message:
<value>Échec de SSH Transfer End (UI.Window.SSHTransfer)!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Transfert</value>
<value>Echec du transfert SSH échoué.</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>IP de début</value>
@@ -1964,7 +1973,7 @@ Message:
<value>La couleur d'arrière-plan de la fenêtre principale.</value>
</data>
<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 name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<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>
</data>
<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 name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Couleur du Texte de la Boîte de Recherche</value>
</data>
<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 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 name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Couleur de fond de la fenêtre</value>

View File

@@ -0,0 +1,438 @@
<?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>Névjegy</value>
</data>
<data name="strActive" xml:space="preserve">
<value>Aktív</value>
</data>
<data name="strActivity" xml:space="preserve">
<value>Tevékenység</value>
</data>
<data name="strAddConnection" xml:space="preserve">
<value>Új kapcsolat</value>
</data>
<data name="strAddFolder" xml:space="preserve">
<value>Új mappa</value>
</data>
<data name="strAlways" xml:space="preserve">
<value>Mindig</value>
</data>
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
<value>Kapcsolódj mindig, sikertelen hitelesítés esetén is</value>
</data>
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
<value>Kérdezz rá később</value>
</data>
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
<value>Javasolt beállítások használata</value>
</data>
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
<value>Automatikus frissítés beállításai</value>
</data>
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
<value>Munkamenet információk automatikus megszerzése</value>
</data>
<data name="strAutoSaveEvery" xml:space="preserve">
<value>Automatikus mentés minden:</value>
</data>
<data name="strAutoSaveMins" xml:space="preserve">
<value>Perc (0 - kikapcsolva)</value>
</data>
<data name="strAvailableVersion" xml:space="preserve">
<value>Aktuális verzió</value>
</data>
<data name="strButtonBrowse" xml:space="preserve">
<value>&amp;Böngészés...</value>
</data>
<data name="strButtonCancel" xml:space="preserve">
<value>&amp;Mégsem</value>
</data>
<data name="strButtonChange" xml:space="preserve">
<value>Módosít</value>
</data>
<data name="strButtonClose" xml:space="preserve">
<value>Be&amp;zár</value>
</data>
<data name="strButtonDisconnect" xml:space="preserve">
<value>Kapcsolat bontása</value>
</data>
<data name="strButtonIcon" xml:space="preserve">
<value>Ikon</value>
</data>
<data name="strButtonImport" xml:space="preserve">
<value>&amp;Improtálás</value>
</data>
<data name="strButtonLaunchPutty" xml:space="preserve">
<value>PuTTY indítása</value>
</data>
<data name="strButtonNew" xml:space="preserve">
<value>&amp;Új</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Tulajdonságok</value>
</data>
<data name="strCannotStartPortScan" xml:space="preserve">
<value>Helytelen IP cím, a port szkennelés nem indítható!</value>
</data>
<data name="strCategoryAppearance" xml:space="preserve">
<value>Megjelenés</value>
</data>
<data name="strCategoryConnection" xml:space="preserve">
<value>Kapcsolat</value>
</data>
<data name="strCategoryCredentials" xml:space="preserve">
<value>Hitelesítés</value>
</data>
<data name="strCategoryDisplay" xml:space="preserve">
<value>Képernyő</value>
</data>
<data name="strCategoryGateway" xml:space="preserve">
<value>Átjáró</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>Általános</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Egyéb</value>
</data>
<data name="strCategoryProtocol" xml:space="preserve">
<value>Protokoll</value>
</data>
<data name="strCategoryRedirect" xml:space="preserve">
<value>Átirányítás</value>
</data>
<data name="strCcCheckFailed" xml:space="preserve">
<value>Az ellenőrzés sikertelen!</value>
</data>
<data name="strCcCheckSucceeded" xml:space="preserve">
<value>Az ellenőrzés sikeres!</value>
</data>
<data name="strCheckboxDomain" xml:space="preserve">
<value>Tartomány</value>
</data>
<data name="strCheckboxDoNotShowThisMessageAgain" xml:space="preserve">
<value>Többé ne mutasd ezt az üzenetet.</value>
</data>
<data name="strColumnFilename" xml:space="preserve">
<value>Fájlnév</value>
</data>
<data name="strColumnHostnameIP" xml:space="preserve">
<value>Kiszolgálónév/IP cím</value>
</data>
<data name="strColumnMessage" xml:space="preserve">
<value>Üzenet</value>
</data>
<data name="strColumnUsername" xml:space="preserve">
<value>Felhasználónév</value>
</data>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Nem értelmezhető parancssori argumentum!</value>
</data>
<data name="strConnecting" xml:space="preserve">
<value>Kapcsolódás...</value>
</data>
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
<value>Sikertelen kapcsolódás!</value>
</data>
<data name="strConnections" xml:space="preserve">
<value>Kapcsolatok</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Telepített verzió</value>
</data>
<data name="strDontConnectWhenAuthFails" xml:space="preserve">
<value>Ne kapcsolódj sikertelen hitelesítéskor</value>
</data>
<data name="strDoubleClickTabClosesIt" xml:space="preserve">
<value>Duplaklikk a fülön bezárja azt</value>
</data>
<data name="strExperimental" xml:space="preserve">
<value>Kísérleti</value>
</data>
<data name="strFullscreen" xml:space="preserve">
<value>Teljes képernyő</value>
</data>
<data name="strGeneral" xml:space="preserve">
<value>Általános</value>
</data>
<data name="strGroupboxFiles" xml:space="preserve">
<value>Fájlok</value>
</data>
<data name="strHttpConnectFailed" xml:space="preserve">
<value>A HTTP csatlakozás nem sikerült!</value>
</data>
<data name="strImportExport" xml:space="preserve">
<value>Importálás/Exportálás</value>
</data>
<data name="strKeysCtrlAltDel" xml:space="preserve">
<value>CTRL-ALT-DEL</value>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CONTROL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Cím:</value>
</data>
<data name="strLabelDisplayName" xml:space="preserve">
<value>Megjelenítendő név</value>
</data>
<data name="strLabelDomain" xml:space="preserve">
<value>Tartomány:</value>
</data>
<data name="strLabelFilename" xml:space="preserve">
<value>Fájlnév:</value>
</data>
<data name="strLabelHostname" xml:space="preserve">
<value>Hosztnév:</value>
</data>
<data name="strLabelOptions" xml:space="preserve">
<value>Opciók:</value>
</data>
<data name="strLabelPassword" xml:space="preserve">
<value>Jelszó:</value>
</data>
<data name="strLabelPort" xml:space="preserve">
<value>Port:</value>
</data>
<data name="strLabelPortableEdition" xml:space="preserve">
<value>Hordozható kiadás</value>
</data>
<data name="strLabelProtocol" xml:space="preserve">
<value>Protokoll:</value>
</data>
<data name="strLabelServerStatus" xml:space="preserve">
<value>Szerver állapot:</value>
</data>
<data name="strLabelSQLDatabaseName" xml:space="preserve">
<value>Adatbázis:</value>
</data>
<data name="strLabelSQLServerDatabaseName" xml:space="preserve">
<value>Adatbázis:</value>
</data>
<data name="strLabelUsername" xml:space="preserve">
<value>Felhasználónév:</value>
</data>
<data name="strLabelVerify" xml:space="preserve">
<value>Ellenőrzés:</value>
</data>
<data name="strLanguage" xml:space="preserve">
<value>Nyelv</value>
</data>
<data name="strLanguageDefault" xml:space="preserve">
<value>(Automatikus észlelés)</value>
</data>
<data name="strMenuAbout" xml:space="preserve">
<value>Névjegy</value>
</data>
<data name="strMenuCheckForUpdates" xml:space="preserve">
<value>Frissítés keresése</value>
</data>
<data name="strMenuJumpTo" xml:space="preserve">
<value>Ugrás</value>
</data>
<data name="strMenuLaunchExternalTool" xml:space="preserve">
<value>Külső eszköz indítása</value>
</data>
<data name="strMenuNewConnectionFile" xml:space="preserve">
<value>Új kapcsolatfájl</value>
</data>
<data name="strMenuNewExternalTool" xml:space="preserve">
<value>Új külső eszköz</value>
</data>
<data name="strMenuNotifications" xml:space="preserve">
<value>Értesítések</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Kapcsolatfájl megnyitása...</value>
</data>
<data name="strMenuOptions" xml:space="preserve">
<value>Opciók</value>
</data>
<data name="strMenuReconnect" xml:space="preserve">
<value>Újrakapcsolódás</value>
</data>
<data name="strMenuRename" xml:space="preserve">
<value>Átnevezés</value>
</data>
<data name="strMenuRenameConnection" xml:space="preserve">
<value>Kapcsolat átnevezése</value>
</data>
<data name="strMenuRenameFolder" xml:space="preserve">
<value>Könyvtár átnevezése</value>
</data>
<data name="strMenuRenameTab" xml:space="preserve">
<value>Fül átnevezése</value>
</data>
<data name="strMenuReportBug" xml:space="preserve">
<value>Hibabejelentés</value>
</data>
<data name="strMenuResetLayout" xml:space="preserve">
<value>Elrendezés alaphelyzetbe állítása</value>
</data>
<data name="strMenuSaveConnectionFile" xml:space="preserve">
<value>Kapcsolatfájl mentése</value>
</data>
<data name="strMenuSaveConnectionFileAs" xml:space="preserve">
<value>Kapcsolatfájl mentése, mint...</value>
</data>
<data name="strMenuScreenshot" xml:space="preserve">
<value>Képernyőmentés</value>
</data>
<data name="strMenuScreenshotManager" xml:space="preserve">
<value>Képernyőmentés kezelő</value>
</data>
<data name="strMenuSessions" xml:space="preserve">
<value>Munkamenetek</value>
</data>
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Munkamanetek és képernyőmentések</value>
</data>
<data name="strMenuWebsite" xml:space="preserve">
<value>Honlap</value>
</data>
<data name="strNever" xml:space="preserve">
<value>Soha</value>
</data>
<data name="strNewConnection" xml:space="preserve">
<value>Új kapcsolat</value>
</data>
<data name="strNewFolder" xml:space="preserve">
<value>Új mappa</value>
</data>
<data name="strNewPanel" xml:space="preserve">
<value>Új panel</value>
</data>
<data name="strNewRoot" xml:space="preserve">
<value>Új gyökérelem</value>
</data>
<data name="strNewTitle" xml:space="preserve">
<value>Új cím</value>
</data>
<data name="strNo" xml:space="preserve">
<value>Nem</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>SQL szerver használata a kapcsolatok kezelésére</value>
</data>
</root>

View File

@@ -1876,9 +1876,6 @@ Messaggio:
<data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH Transfer End (UI.Window.SSHTransfer) fallito!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Trasferimento</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>IP iniziale</value>
</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">
<value>Kan opdrachtprompt argumenten niet parsen!</value>
</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">
<value>Controle Componenten</value>
</data>
@@ -1541,6 +1547,9 @@ Bericht:
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>PuTTy Formaat Wijzigen Mislukt!</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY opgeslagen sessies</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>PuTTY Instellingen</value>
</data>
@@ -1887,7 +1896,7 @@ Bericht:
<value>SSH Overdracht (UI.Window.SSHTransfer) mislukt!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Overdracht</value>
<value>SSH overdracht heeft gefaald.</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Start IP</value>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,490 @@
<?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 (É necessário reiniciar o mRemoteNG)</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="strCategoryGateway" xml:space="preserve">
<value>Gateway</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="strCcEOLFailed" xml:space="preserve">
<value>O recurso de sessões (RDP) requer que você tenha uma cópia registrada do eolwtscom.dll no seu sistema.
mRemoteNG vem com este componente mas não o registra automaticamente a menos que você instale o pacote.
Para registrá-lo manualmente faça isso: Abra a caixa de diálogo Executar (Iniciar - Executar) e digite o seguinte: regsvr32 "c:\Program Files\mRemoteNG\eolwtscom.dll" (onde c:\Program Files\mRemoteNG\ é o caminho para a instalação de mRemoteNG).
Se você ainda não conseguir passar por esta verificação ou não conseguir usar o recurso de sessões (RDP) no mRemoteNG, por favor, consulte o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
</data>
<data name="strCcEOLOK" xml:space="preserve">
<value>EOLWTSCOM foi encontrada e parece ser registrado corretamente.</value>
</data>
<data name="strCcGeckoFailed" xml:space="preserve">
<value>Para usar o motor de renderização Gecko, você precisa ter o XULrunner 1.8.1.x e o caminho para a instalação do conjunto em suas opções.
Você pode baixar o XULrunner 1.8.1.3 em: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/
Quando terminar de baixar o pacote, extraia o pacote para um caminho de sua escolha.
Em seguida, emtre no mRemoteNG e vá em ferramentas - opções - avançadas e digite o caminho correto no campo caminho XULrunner.
Se ainda não conseguir passar esta verificação ou usar o motor Gecko em mRemoteNG por favor consultar o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
</data>
<data name="strCcGeckoOK" xml:space="preserve">
<value>XULrunner foi encontrado e aparenta estar instalado corretamente.</value>
</data>
<data name="strCcICAFailed" xml:space="preserve">
<value>ICA requer que o XenDesktop Online Plugin esteja instalado e a biblioteca wfica.ocs registrada. Você pode baixar o cliente aqui: http://www.citrix.com/download/
Se você tiver o Plugin Online XenDesktop instalado e a verificação ainda falhar, tente registrar manualmente o wfica.ocx
Para fazer isso abra a caixa de diálogo Executar (Iniciar - Executar) e digite o seguinte: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (onde c:\Program Files\Citrix\ICA Client\ é o caminho para a instalação do Plugin Online do XenDesktop).
Se você ainda não puder passar por esta verificação ou usar ICA em mRemoteNG, por favor, consulte o fórum de mRemoteNG no http://forum.mremoteng.org/"</value>
</data>
<data name="strCcICAOK" xml:space="preserve">
<value>Todos os componentes de ICA, foram encontrados e parecem ser registrado corretamente. Citrix ICA cliente controle versão {0}</value>
</data>
<data name="strCcNotInstalledProperly" xml:space="preserve">
<value>não instalado corretamente</value>
</data>
<data name="strCcPuttyFailed" xml:space="preserve">
<value>O SSH, Telnet, Rlogin e protocolos RAW precisam PuTTY para trabalhar. PuTTY vem com cada pacote de mRemoteNG e está localizado no caminho de instalação.
Por favor, certifique-se de que você tem o Putty.exe em seu diretório mRemoteNG (padrão: c:\Program Files\mRemoteNG\) ou que você tenha especificado um caminho válido para seu executável PuTTY nas opções (ferramentas - opções - avançadas - caminho personalizado PuTTY)</value>
</data>
<data name="strCcPuttyOK" xml:space="preserve">
<value>O executável PuTTY foi encontrado e está pronto para usar.</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>Verificar 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="strComponentsCheck" xml:space="preserve">
<value>Validação de componentes</value>
</data>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>btnIcon_Click falhou!</value>
</data>
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
<value>ShowHideGridItems falhou!</value>
</data>
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
<value>IconMenu_Click falhou!</value>
</data>
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
<value>Propriedade do Objeto de grade falhou!</value>
</data>
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
<value>SetHostStatus falhou!</value>
</data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>pGrid_PopertyValueChanged falhou!</value>
</data>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Config UI carregamento falhou!</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Você quer fechar a conexão, "{0}"?</value>
</data>
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
<value>Tem certeza que deseja fechar o painel, "{0}"? Todas as ligações ativas serão fechadas.</value>
</data>
<data name="strConfirmDeleteExternalTool" xml:space="preserve">
<value>Tem certeza que deseja excluir a ferramenta externa, "{0}"?</value>
</data>
<data name="strConfirmDeleteExternalToolMultiple" xml:space="preserve">
<value>Tem certeza que deseja excluir as ferramentas externas {0} selecionadas?</value>
</data>
<data name="strConfirmDeleteNodeConnection" xml:space="preserve">
<value>Tem certeza que deseja excluir a ligação, "{0}"?</value>
</data>
<data name="strConfirmDeleteNodeFolder" xml:space="preserve">
<value>Tem certeza que deseja excluir a pasta vazia, "{0}"?</value>
</data>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Tem certeza que deseja excluir a pasta, "{0}"? Pastas ou ligações que ele contém também serão excluídas.</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Você quer fechar todas as conexões abertas?</value>
</data>
<data name="strConfirmResetLayout" xml:space="preserve">
<value>Tem certeza de que deseja redefinir os painéis para o layout padrão?</value>
</data>
<data name="strConnect" xml:space="preserve">
<value>Conectar-se</value>
</data>
<data name="strConnectInFullscreen" xml:space="preserve">
<value>Se conectar em modo fullscreen</value>
</data>
<data name="strConnecting" xml:space="preserve">
<value>Conectando...</value>
</data>
<data name="strConnectionEventConnected" xml:space="preserve">
<value>Protocolo evento conectado</value>
</data>
<data name="strConnectionEventConnectedDetail" xml:space="preserve">
<value>Conexão para "{0}" via "{1}" estabelecido pelo usuário "{2}" (Descrição: "{3}"; Campo usuário: "{4}")</value>
</data>
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
<value>Conexão falhou!</value>
</data>
<data name="strConnectionEventErrorOccured" xml:space="preserve">
<value>Erro no evento de protocolo</value>
</data>
<data name="strConnectionOpenFailed" xml:space="preserve">
<value>Abrir conexão falhou!</value>
</data>
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
<value>Não é possível abrir a conexão: nenhum nome de host especificado!</value>
</data>
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
<value>Erro RDP!
Código de erro: {0}
Descrição do erro: {1}</value>
</data>
<data name="strConnections" xml:space="preserve">
<value>Conexões</value>
</data>
<data name="strConnectionSetDefaultPortFailed" xml:space="preserve">
<value>Impossível definir porta padrão!</value>
</data>
<data name="strConnectionsFileBackupFailed" xml:space="preserve">
<value>Não foi possível criar o backup do arquivo de conexões!</value>
</data>
<data name="strConnectionsFileCouldNotBeImported" xml:space="preserve">
<value>Falha na importação do arquivo de conexões!</value>
</data>
<data name="strConnectionsFileCouldNotBeLoaded" xml:space="preserve">
<value>Arquivo de conexões "{0}" não pôde ser carregado!</value>
</data>
<data name="strConnectionsFileCouldNotBeLoadedNew" xml:space="preserve">
<value>Arquivo de conexões "{0}" não pôde ser carregado! Começando com o novo arquivo de conexões.</value>
</data>
<data name="strConnectionsFileCouldNotBeSaved" xml:space="preserve">
<value>Não consegui salvar o arquivo de conexões!</value>
</data>
</root>

View File

@@ -606,7 +606,7 @@ Descrição do erro: {1}</value>
<value>Erros</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>O arquivo de inicialização de ligação não pôde ser carregado.{0}{0}(2){0}{3}{0}{0}A fim de evitar perda de dados, {1} vai sair agora.</value>
<value>O arquivo de inicialização de ligação não pôde ser carregado.{0}{0}{2}{0}{3}{0}{0}A fim de evitar perda de dados, {1} vai sair agora.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>VerifyDatabaseVersion (Config.Connections.Save) falhou. {0}</value>
@@ -1856,9 +1856,6 @@ Descrição do erro: {1}</value>
<data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH transferência final (interface do usuário.Window.SSHTransfer) falhou!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Transferência</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>IP de início</value>
</data>

View File

@@ -105,15 +105,15 @@
</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="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Always show panel selection dialog when opening connections</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Always show panel tabs</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Always show notification area icon</value>
</data>
@@ -181,7 +184,7 @@
<value>Minutes (0 means disabled)</value>
</data>
<data name="strAvailableVersion" xml:space="preserve">
<value>Current Version</value>
<value>Latest version</value>
</data>
<data name="strButtonBrowse" xml:space="preserve">
<value>&amp;Browse...</value>
@@ -281,10 +284,10 @@ Please use File - Load Connections for normal connection files!</value>
<value>Check succeeded!</value>
</data>
<data name="strCcEOLFailed" xml:space="preserve">
<value>The (RDP) Sessions feature requires that you have a registered copy of eolwtscom.dll on your system.
mRemoteNG ships with this component but will not register it automatically unless you run the setup package.
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).
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>
<value>The (RDP) Sessions feature requires that you have a copy of eolwtscom.dll registered on your system.
mRemoteNG ships with this component but it is not registered automatically if you do not use the mRemoteNG Installer.
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 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 name="strCcEOLOK" xml:space="preserve">
<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>
</data>
<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
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 you still have trouble getting RDP to work please consult the mRemoteNG Forum at http://forum.mremoteng.org/</value>
<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 this check still fails or you are unable to use RDP, please consult the mRemoteNG Forum at http://forum.mremoteng.org/.</value>
</data>
<data name="strCcRDPOK" xml:space="preserve">
<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">
<value>Wait For Exit</value>
</data>
<data name="strCommandExitProgram" xml:space="preserve">
<value>E&amp;xit {0}</value>
</data>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>Couldn't parse command line args!</value>
</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">
<value>Components Check</value>
</data>
@@ -543,9 +560,15 @@ Starting with new connections file.</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Couldn't create new connections file!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Installed version</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Default Theme</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detect</value>
</data>
@@ -609,6 +632,9 @@ Starting with new connections file.</value>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>The connection list could not be saved.</value>
</data>
<data name="strErrorCouldNotLaunchPutty" xml:space="preserve">
<value>PuTTY could not be launched.</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve">
<value>Decryption failed. {0}</value>
</data>
@@ -751,6 +777,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>ICA Set Resolution Failed!</value>
</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">
<value>Import from Active Directory</value>
</data>
@@ -817,6 +846,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strLabelChangeLog" xml:space="preserve">
<value>Change Log:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>When closing connections:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Connect:</value>
</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>
</data>
<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 name="strLoadFromXmlFailed" xml:space="preserve">
<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">
<value>Notifications</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="strMenuOpenConnectionFile" xml:space="preserve">
<value>Open Connection File...</value>
</data>
@@ -1072,12 +1116,18 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<data name="strMenuSendSpecialKeys" xml:space="preserve">
<value>Send Special Keys (VNC)</value>
</data>
<data name="strMenuSessionRetrieve" xml:space="preserve">
<value>Retrieve</value>
</data>
<data name="strMenuSessions" xml:space="preserve">
<value>Sessions</value>
</data>
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sessions and Screenshots</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Show Help Text</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Show Text</value>
</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">
<value>Open Ports</value>
</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">
<value>Panel Name</value>
</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">
<value>Select how you want to authenticate against the VNC server.</value>
</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">
<value>Select whether to use bitmap caching or not.</value>
</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">
<value>Choose a icon that will be displayed when connected to the host.</value>
</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">
<value>Enter the MAC address of the remote host if you wish to use it in an external tool.</value>
</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">
<value>Authentication Mode</value>
</data>
<data name="strPropertyNameAutomaticResize" xml:space="preserve">
<value>Automatic Resize</value>
</data>
<data name="strPropertyNameCacheBitmaps" xml:space="preserve">
<value>Cache Bitmaps</value>
</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">
<value>Icon</value>
</data>
<data name="strPropertyNameLoadBalanceInfo" xml:space="preserve">
<value>Load Balance Info</value>
</data>
<data name="strPropertyNameMACAddress" xml:space="preserve">
<value>MAC Address</value>
</data>
@@ -1532,6 +1606,12 @@ Message:
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Putty Resize Failed!</value>
</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">
<value>PuTTY Settings</value>
</data>
@@ -1562,6 +1642,18 @@ Message:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Quick Connect History Exists Failed!</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="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1677,7 +1769,7 @@ Message:
<value>GetSessions failed!</value>
</data>
<data name="strRdpOpenConnectionFailed" xml:space="preserve">
<value>Open RDP Connectin failed!</value>
<value>Open RDP Connection failed!</value>
</data>
<data name="strRdpReconnectCount" xml:space="preserve">
<value>RDP reconnection count:</value>
@@ -1778,6 +1870,9 @@ Message:
<data name="strScreenshots" xml:space="preserve">
<value>Screenshots</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Search</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Send To...</value>
</data>
@@ -1863,7 +1958,7 @@ Message:
<value>SSH Transfer End (UI.Window.SSHTransfer) failed!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Transfer</value>
<value>SSH transfer failed.</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Start IP</value>
@@ -1898,216 +1993,14 @@ Message:
<data name="strTheFollowing" xml:space="preserve">
<value>The following:</value>
</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">
<value>Config Panel</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Connections Panel</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Default Theme</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 name="strThemeCategoryGeneral" xml:space="preserve">
<value>General</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>The background colour of the config panel.</value>
@@ -2211,16 +2104,161 @@ mRemoteNG will now quit and begin with the installation.</value>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Window Background Colour</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Show Help Text</value>
<data name="strTitleError" xml:space="preserve">
<value>Error ({0})</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY Saved Sessions</value>
<data name="strTitleInformation" xml:space="preserve">
<value>Information ({0})</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>Compatibility problem detected</value>
<data name="strTitlePassword" xml:space="preserve">
<value>Password</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 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>
</root>

View File

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

View File

@@ -1139,6 +1139,9 @@ VncSharpNG Control Version {0}</value>
<data name="strOpenPorts" xml:space="preserve">
<value>Відкриті порти</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Тема</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Назва групи</value>
</data>
@@ -1815,7 +1818,7 @@ VncSharpNG Control Version {0}</value>
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Передача</value>
<value>Помилка передавання SSH.</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Початковий IP</value>

View File

@@ -412,6 +412,12 @@ VncSharpNG 版本 {0}</value>
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
<value>无法解析命令行参数!</value>
</data>
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
<value>{0} 检测到联想Auto Scroll程序在本机上运行。该程序程序明确会导致问题 {0} 的出现。建议您禁用或卸载该程序。</value>
</data>
<data name="strCompatibilityProblemDetected" xml:space="preserve">
<value>检测到系统存在兼容性问题</value>
</data>
<data name="strComponentsCheck" xml:space="preserve">
<value>组件检查</value>
</data>
@@ -541,6 +547,9 @@ VncSharpNG 版本 {0}</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>无法新建连接配置文件!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>在 FilteredPropertyGrid 中找不到 ToolStrip 控件。</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>已安装版本</value>
</data>
@@ -702,6 +711,9 @@ VncSharpNG 版本 {0}</value>
<data name="strHttpConnectionFailed" xml:space="preserve">
<value>无法创建新的 HTTP 连接!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>更改HTTP文档标题失败</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>设置 HTTP 属性失败!</value>
</data>
@@ -1452,6 +1464,9 @@ VncSharpNG 版本 {0}</value>
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>使用控制台会话。</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>使用CredSSP方式</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>自定义信息</value>
</data>
@@ -1518,6 +1533,9 @@ VncSharpNG 版本 {0}</value>
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Putty 窗口大小调整失败!</value>
</data>
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
<value>PuTTY 会话已保存</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>PuTTY 设置</value>
</data>
@@ -1864,7 +1882,7 @@ VncSharpNG 版本 {0}</value>
<value>SSH 传输结束(UI.Window.SSHTransfer失败</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>传输</value>
<value>SSH 传输失败。</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>起始IP</value>

File diff suppressed because it is too large Load Diff

View File

@@ -113,6 +113,10 @@ Namespace Messages
AddToList(lvItem)
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)
Me.SwitchToMessage()
Me.ECTimer.Enabled = False

View File

@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.296
' Runtime Version:4.0.30319.1008
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -2080,7 +2080,7 @@ Namespace My
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
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,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW")> _
Public ReadOnly Property SupportedUICultures() As String
Get
Return CType(Me("SupportedUICultures"),String)
@@ -2397,6 +2397,81 @@ Namespace My
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.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 Namespace

View File

@@ -471,7 +471,7 @@
<Value Profile="(Default)" />
</Setting>
<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,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW</Value>
</Setting>
<Setting Name="ConDefaultRDGatewayHostname" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
@@ -545,5 +545,23 @@
<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.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>
</SettingsFile>

Binary file not shown.

Binary file not shown.

View File

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

View File

@@ -70,19 +70,25 @@ Namespace Themes
Private Shared _activeThemeHandlerSet As Boolean = False
Public Shared Property ActiveTheme As ThemeInfo
Get
If _activeTheme Is Nothing Then Return DefaultTheme
Return _activeTheme
End Get
Set(value As ThemeInfo)
If _activeTheme Is Nothing OrElse Not _activeTheme.Equals(value) Then
If _activeThemeHandlerSet Then RemoveHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
_activeTheme = value
AddHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
_activeThemeHandlerSet = True
NotifyThemeChanged(_activeTheme, New PropertyChangedEventArgs(""))
' We need to set ActiveTheme to the new theme to make sure it references the right object.
' However, if both themes have the same properties, we don't need to raise a notification event.
Dim needNotify As Boolean = True
If _activeTheme IsNot Nothing Then
If _activeTheme.Equals(value) Then needNotify = False
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 Property
#End Region

View File

@@ -39,7 +39,7 @@ Namespace Themes
color = propertyInfo.GetValue(themeInfo, Nothing)
xmlTextWriter.WriteStartElement("Color")
xmlTextWriter.WriteAttributeString("Name", propertyInfo.Name)
xmlTextWriter.WriteAttributeString("Value", color.Name)
xmlTextWriter.WriteAttributeString("Value", EncodeColorName(color))
xmlTextWriter.WriteEndElement() ' Color
Next
@@ -91,12 +91,29 @@ Namespace Themes
colorValue = colorNode.Attributes("Value").Value
propertyInfo = themeType.GetProperty(colorName)
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
themes.Add(themeInfo)
Next
Return themes
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 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)
AddNodeToMenu(tNode.Nodes, tMenItem)
Else
tMenItem.Image = My.Resources.Play
ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Or _
Tree.Node.GetNodeType(tNode) = Tree.Node.Type.PuttySession Then
tMenItem.Image = Windows.treeForm.imgListTree.Images(tNode.ImageIndex)
tMenItem.Tag = tNode.Tag
menToolStrip.DropDownItems.Add(tMenItem)
End If
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown
AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
@@ -162,12 +163,10 @@ Namespace Tools
frmMain.PreviousWindowState = frmMain.WindowState
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 TypeOf sender.Tag Is mRemoteNG.Connection.Info Then
If frmMain.Visible = False Then
ShowForm()
End If
If TypeOf sender.Tag Is Connection.Info Then
If frmMain.Visible = False Then ShowForm()
App.Runtime.OpenConnection(sender.Tag)
End If
End If
@@ -211,13 +210,13 @@ Namespace Tools
Return lDlg
End Function
Public Shared Function ConnectionsRDPImportDialog() As OpenFileDialog
Dim lDlg As New OpenFileDialog()
lDlg.CheckFileExists = True
'lDlg.InitialDirectory = App.Info.Connections.DefaultConnectionsPath
lDlg.Filter = My.Language.strFilterRDP & "|*.rdp|" & My.Language.strFilterAll & "|*.*"
Return lDlg
Public Shared Function ImportConnectionsRdpFileDialog() As OpenFileDialog
Dim openFileDialog As New OpenFileDialog()
openFileDialog.CheckFileExists = True
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
openFileDialog.Filter = String.Join("|", {My.Language.strFilterRDP, "*.rdp", My.Language.strFilterAll, "*.*"})
openFileDialog.Multiselect = True
Return openFileDialog
End Function
Public Class TreeNodeSorter

View File

@@ -116,25 +116,8 @@ Namespace Tools
End If
End Function
Private Shared rndNums As New ArrayList
Public Shared Function CreateConstantID() As String
Dim cID As String
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
Return Guid.NewGuid().ToString()
End Function
Public Shared Function LeadingZero(ByVal Number As String) As String
@@ -167,15 +150,16 @@ Namespace Tools
End Function
Public Shared Function StringToEnum(ByVal t As Type, ByVal value As String) As Object
For Each fI As FieldInfo In t.GetFields
If fI.Name = value Then
Return fI.GetValue(vbNull)
End If
Next
Return [Enum].Parse(t, value)
End Function
Dim ex As New Exception(String.Format("Can't convert {0} to {1}", value, t.ToString))
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "StringToEnum failed" & vbNewLine & ex.Message, True)
Throw ex
Public Shared Function GetExceptionMessageRecursive(ByVal ex As Exception, Optional ByVal separator As String = vbNewLine) As String
Dim message As String = ex.Message
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
Public Shared Function TakeScreenshot(ByVal sender As UI.Window.Connection) As Image

View File

@@ -1,6 +1,7 @@
Imports System.Threading
Imports mRemoteNG.App.Runtime
Imports System.Net.NetworkInformation
Imports System.Net
Namespace Tools
Namespace PortScan
@@ -81,47 +82,34 @@ Namespace Tools
End Set
End Property
Private _HostName As String
Private _hostName As String = ""
Public Property HostName() As String
Get
Return _HostName
Return _hostName
End Get
Set(ByVal value As String)
_HostName = value
_hostName = value
End Set
End Property
Public ReadOnly Property HostNameWithoutDomain() As String
Get
If _HostName <> _HostIP Then
If _HostName IsNot Nothing Then
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
If String.IsNullOrEmpty(HostName) OrElse HostName = HostIp Then Return HostIp
Return HostName.Split(".")(0)
End Get
End Property
Private _HostIP As String
Public Property HostIP() As String
Private _hostIp As String
Public Property HostIp() As String
Get
Return _HostIP
Return _hostIp
End Get
Set(ByVal value As String)
_HostIP = value
_hostIp = value
End Set
End Property
Private _OpenPorts As New ArrayList
Private _openPorts As New ArrayList
Public Property OpenPorts() As ArrayList
Get
Return _OpenPorts
@@ -131,7 +119,7 @@ Namespace Tools
End Set
End Property
Private _ClosedPorts As ArrayList
Private _closedPorts As ArrayList
Public Property ClosedPorts() As ArrayList
Get
Return _ClosedPorts
@@ -214,7 +202,7 @@ Namespace Tools
#Region "Methods"
Public Sub New(ByVal host As String)
_HostIP = host
_hostIp = host
_OpenPorts = New ArrayList
_ClosedPorts = New ArrayList
End Sub
@@ -228,14 +216,14 @@ Namespace Tools
End Try
End Function
Public Function ToListViewItem(ByVal Mode As PortScanMode) As ListViewItem
Public Function ToListViewItem(ByVal mode As PortScanMode) As ListViewItem
Try
Dim lvI As New ListViewItem
lvI.Tag = Me
If _HostName <> "" Then
lvI.Text = _HostName
If _hostName <> "" Then
lvI.Text = _hostName
Else
lvI.Text = _HostIP
lvI.Text = _hostIp
End If
If Mode = PortScanMode.Import Then
@@ -250,11 +238,11 @@ Namespace Tools
Dim strOpen As String = ""
Dim strClosed As String = ""
For Each p As Integer In _OpenPorts
For Each p As Integer In _openPorts
strOpen &= p & ", "
Next
For Each p As Integer In _ClosedPorts
For Each p As Integer In _closedPorts
strClosed &= p & ", "
Next
@@ -269,225 +257,159 @@ Namespace Tools
End Try
End Function
Private Function BoolToYesNo(ByVal Bool As Boolean) As String
If Bool = True Then
Private Function BoolToYesNo(ByVal value As Boolean) As String
If value Then
Return My.Language.strYes
Else
Return My.Language.strNo
End If
End Function
Public Sub SetAllProtocols(ByVal Open As Boolean)
_VNC = False
_Telnet = False
_SSH = False
_Rlogin = False
_RDP = False
_HTTPS = False
_HTTP = False
Public Sub SetAllProtocols(ByVal value As Boolean)
_VNC = value
_Telnet = value
_SSH = value
_Rlogin = value
_RDP = value
_HTTPS = value
_HTTP = value
End Sub
#End Region
End Class
Public Class Scanner
#Region "Properties"
Private _StartIP As String
Public Property StartIP() As String
Get
Return _StartIP
End Get
Set(ByVal value As String)
_StartIP = value
End Set
End Property
#Region "Private Members"
Private ReadOnly _ipAddresses As New List(Of IPAddress)
Private ReadOnly _ports As New List(Of Integer)
Private _EndIP As String
Public Property EndIP() As String
Get
Return _EndIP
End Get
Set(ByVal value As String)
_EndIP = value
End Set
End Property
Private _StartPort As Integer
Public Property StartPort() As Integer
Get
Return _StartPort
End Get
Set(ByVal value As Integer)
_StartPort = value
End Set
End Property
Private _EndPort As Integer
Public Property EndPort() As Integer
Get
Return _EndPort
End Get
Set(ByVal value As Integer)
_EndPort = value
End Set
End Property
Private _ScannedHosts As ArrayList
Public Property ScannedHosts() As ArrayList
Get
Return _ScannedHosts
End Get
Set(ByVal value As ArrayList)
_ScannedHosts = value
End Set
End Property
Private _scanThread As Thread
Private ReadOnly _scannedHosts As New List(Of ScanHost)
#End Region
#Region "Methods"
Public Sub New(ByVal startIP As String, ByVal endIP As String)
Mode = PortScanMode.Import
#Region "Public Methods"
Public Sub New(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress)
Dim ipAddressStart As IPAddress = IpAddressMin(ipAddress1, ipAddress2)
Dim ipAddressEnd As IPAddress = IpAddressMax(ipAddress1, ipAddress2)
_StartIP = startIP
_EndIP = endIP
Ports = New ArrayList()
Ports.AddRange(New Integer() {ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, _
_ports.Clear()
_ports.AddRange(New Integer() {ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, _
ScanHost.HTTPSPort, ScanHost.RloginPort, ScanHost.RDPPort, _
ScanHost.VNCPort})
Hosts = GetIPRange(_StartIP, _EndIP)
_ipAddresses.Clear()
_ipAddresses.AddRange(IpAddressArrayFromRange(ipAddressStart, ipAddressEnd))
_ScannedHosts = New ArrayList()
_scannedHosts.Clear()
End Sub
Public Sub New(ByVal startIP As String, ByVal endIP As String, ByVal startPort As String, ByVal endPort As String)
Mode = PortScanMode.Normal
Public Sub New(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress, ByVal port1 As Integer, ByVal port2 As Integer)
Me.New(ipAddress1, ipAddress2)
_StartIP = startIP
_EndIP = endIP
Dim portStart As Integer = Math.Min(port1, port2)
Dim portEnd As Integer= Math.Max(port1, port2)
_StartPort = startPort
_EndPort = endPort
Ports = New ArrayList()
For p As Integer = startPort To endPort
Ports.Add(p)
_ports.Clear()
For port As Integer = portStart To portEnd
_ports.Add(port)
Next
Hosts = GetIPRange(_StartIP, _EndIP)
_ScannedHosts = New ArrayList()
End Sub
Public Event BeginHostScan(ByVal Host As String)
Public Event HostScanned(ByVal SHost As ScanHost, ByVal HostsAlreadyScanned As Integer, ByVal HostsToBeScanned As Integer)
Public Event ScanComplete(ByVal Hosts As ArrayList)
Private Hosts As ArrayList
Private Ports As ArrayList
Private Mode As PortScanMode
Private sThread As Thread
Public Sub StartScan()
sThread = New Thread(AddressOf StartScanBG)
sThread.SetApartmentState(Threading.ApartmentState.STA)
sThread.IsBackground = True
sThread.Start()
_scanThread = New Thread(AddressOf ScanAsync)
_scanThread.SetApartmentState(ApartmentState.STA)
_scanThread.IsBackground = True
_scanThread.Start()
End Sub
Public Sub StopScan()
sThread.Abort()
_scanThread.Abort()
End Sub
Public Shared Function IsPortOpen(ByVal Hostname As String, ByVal Port As String) As Boolean
Public Shared Function IsPortOpen(ByVal hostname As String, ByVal port As String) As Boolean
Try
Dim tcpClient As New System.Net.Sockets.TcpClient(Hostname, Port)
' ReSharper disable UnusedVariable
Dim tcpClient As New Sockets.TcpClient(hostname, port)
' ReSharper restore UnusedVariable
Return True
Catch ex As Exception
Return False
End Try
End Function
#End Region
Private Sub StartScanBG()
#Region "Private Methods"
Private Sub ScanAsync()
Try
Dim hCount As Integer = 0
Dim hostCount As Integer = 0
For Each Host As String In Hosts
RaiseEvent BeginHostScan(Host)
For Each ipAddress As IPAddress In _ipAddresses
RaiseEvent BeginHostScan(ipAddress.ToString())
Dim sHost As New ScanHost(Host)
hCount += 1
Dim scanHost As New ScanHost(ipAddress.ToString())
hostCount += 1
Dim HostAlive As Boolean = False
HostAlive = IsHostAlive(Host)
If HostAlive = False Then
sHost.ClosedPorts.AddRange(Ports)
sHost.SetAllProtocols(False)
If Not IsHostAlive(ipAddress) Then
scanHost.ClosedPorts.AddRange(_ports)
scanHost.SetAllProtocols(False)
Else
For Each Port As Integer In Ports
Dim err As Boolean = False
For Each port As Integer In _ports
Dim isPortOpen As Boolean
Try
Dim tcpClient As New System.Net.Sockets.TcpClient(Host, Port)
' ReSharper disable UnusedVariable
Dim tcpClient As New Sockets.TcpClient(ipAddress.ToString, port)
' ReSharper restore UnusedVariable
err = False
sHost.OpenPorts.Add(Port)
isPortOpen = True
scanHost.OpenPorts.Add(port)
Catch ex As Exception
err = True
sHost.ClosedPorts.Add(Port)
isPortOpen = False
scanHost.ClosedPorts.Add(port)
End Try
Select Case Port
Select Case port
Case ScanHost.SSHPort
sHost.SSH = Not err
scanHost.SSH = isPortOpen
Case ScanHost.TelnetPort
sHost.Telnet = Not err
scanHost.Telnet = isPortOpen
Case ScanHost.HTTPPort
sHost.HTTP = Not err
scanHost.HTTP = isPortOpen
Case ScanHost.HTTPSPort
sHost.HTTPS = Not err
scanHost.HTTPS = isPortOpen
Case ScanHost.RloginPort
sHost.Rlogin = Not err
scanHost.Rlogin = isPortOpen
Case ScanHost.RDPPort
sHost.RDP = Not err
scanHost.RDP = isPortOpen
Case ScanHost.VNCPort
sHost.VNC = Not err
scanHost.VNC = isPortOpen
End Select
Next
End If
If HostAlive = True Then
Try
sHost.HostName = Net.Dns.GetHostEntry(sHost.HostIP).HostName
Catch ex As Exception
End Try
End If
Try
scanHost.HostName = Dns.GetHostEntry(scanHost.HostIp).HostName
Catch ex As Exception
End Try
If String.IsNullOrEmpty(scanHost.HostName) Then scanHost.HostName = scanHost.HostIp
_ScannedHosts.Add(sHost)
RaiseEvent HostScanned(sHost, hCount, Hosts.Count)
_scannedHosts.Add(scanHost)
RaiseEvent HostScanned(scanHost, hostCount, _ipAddresses.Count)
Next
RaiseEvent ScanComplete(_ScannedHosts)
RaiseEvent ScanComplete(_scannedHosts)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "StartScanBG failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Function IsHostAlive(ByVal Host As String) As Boolean
Private Shared Function IsHostAlive(ByVal ipAddress As IPAddress) As Boolean
Dim pingSender As New Ping
Dim pReply As PingReply
Dim pingReply As PingReply
Try
pReply = pingSender.Send(Host)
pingReply = pingSender.Send(ipAddress)
If pReply.Status = IPStatus.Success Then
If pingReply.Status = IPStatus.Success Then
Return True
Else
Return False
@@ -497,60 +419,67 @@ Namespace Tools
End Try
End Function
Private Shared Function IpAddressArrayFromRange(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress()
Dim startIpAddress As IPAddress = IpAddressMin(ipAddress1, ipAddress2)
Dim endIpAddress As IPAddress = IpAddressMax(ipAddress1, ipAddress2)
Private Function GetIPRange(ByVal fromIP As String, ByVal toIP As String) As ArrayList
Try
Dim arrIPs As New ArrayList
Dim startAddress As Int32 = IpAddressToInt32(startIpAddress)
Dim endAddress As Int32 = IpAddressToInt32(endIpAddress)
Dim addressCount As Integer = endAddress - startAddress
Dim ipFrom As String() = fromIP.Split(".")
Dim ipTo As String() = toIP.Split(".")
Dim addressArray(addressCount) As IPAddress
Dim index As Integer = 0
For address As Int32 = startAddress To endAddress
addressArray(index) = IpAddressFromInt32(address)
index = index + 1
Next
While Not matchIP(ipFrom, ipTo)
arrIPs.Add(String.Format("{0}.{1}.{2}.{3}", ipFrom(0), ipFrom(1), ipFrom(2), ipFrom(3)))
ipFrom(3) += 1
If ipFrom(3) > 255 Then
ipFrom(3) = 0
ipFrom(2) += 1
If ipFrom(2) > 255 Then
ipFrom(2) = 0
ipFrom(1) += 1
If ipFrom(1) > 255 Then
ipFrom(1) = 0
ipFrom(0) += 1
If ipFrom(0) > 255 Then
ipFrom(0) = 0
End If
End If
End If
End If
End While
Return arrIPs
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "GetIPRange failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
Return Nothing
End Try
Return addressArray
End Function
Private Function matchIP(ByVal fromIP As String(), ByVal toIP As String()) As Boolean
Try
For c As Integer = 0 To fromIP.Length - 1
If c = fromIP.Length - 1 Then
If Not fromIP(c) = toIP(c) + 1 Then
Return False
End If
Else
If Not fromIP(c) = toIP(c) Then
Return False
End If
End If
Next
Return True
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "matchIP failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
Return False
End Try
Private Shared Function IpAddressMin(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress
If (IpAddressCompare(ipAddress1, ipAddress2) < 0) Then ' ipAddress1 < ipAddress2
Return ipAddress1
Else
Return ipAddress2
End If
End Function
Private Shared Function IpAddressMax(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress
If (IpAddressCompare(ipAddress1, ipAddress2) > 0) Then ' ipAddress1 > ipAddress2
Return ipAddress1
Else
Return ipAddress2
End If
End Function
Private Shared Function IpAddressCompare(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As Integer
Return IpAddressToInt32(ipAddress1) - IpAddressToInt32(ipAddress2)
End Function
Private Shared Function IpAddressToInt32(ByVal ipAddress As IPAddress) As Int32
If Not ipAddress.AddressFamily = Sockets.AddressFamily.InterNetwork Then Throw New ArgumentException("ipAddress")
Dim addressBytes As Byte() = ipAddress.GetAddressBytes() ' in network order (big-endian)
If BitConverter.IsLittleEndian Then Array.Reverse(addressBytes) ' to host order (little-endian)
Debug.Assert(addressBytes.Length = 4)
Return BitConverter.ToInt32(addressBytes, 0)
End Function
Private Shared Function IpAddressFromInt32(ByVal ipAddress As Int32) As IPAddress
Dim addressBytes As Byte() = BitConverter.GetBytes(ipAddress) ' in host order
If BitConverter.IsLittleEndian Then Array.Reverse(addressBytes) ' to network order (big-endian)
Debug.Assert(addressBytes.Length = 4)
Return New IPAddress(addressBytes)
End Function
#End Region
#Region "Events"
Public Event BeginHostScan(ByVal host As String)
Public Event HostScanned(ByVal scanHost As ScanHost, ByVal scannedHostCount As Integer, ByVal totalHostCount As Integer)
Public Event ScanComplete(ByVal hosts As List(Of ScanHost))
#End Region
End Class
End Namespace

View File

@@ -305,9 +305,9 @@ Namespace Tree
Public Shared Sub CloneNode(ByVal oldTreeNode As TreeNode, Optional ByVal parentNode As TreeNode = Nothing)
Try
If GetNodeType(oldTreeNode) = Type.Connection Then
Dim oldConnectionInfo As Connection.Info = oldTreeNode.Tag
Dim oldConnectionInfo As Connection.Info = DirectCast(oldTreeNode.Tag, Connection.Info)
Dim newConnectionInfo As Connection.Info = oldConnectionInfo.Copy
Dim newConnectionInfo As Connection.Info = oldConnectionInfo.Copy()
Dim newInheritance As Connection.Info.Inheritance = oldConnectionInfo.Inherit.Copy()
newInheritance.Parent = newConnectionInfo
newConnectionInfo.Inherit = newInheritance
@@ -332,8 +332,10 @@ Namespace Tree
parentNode.Nodes.Add(newTreeNode)
End If
ElseIf GetNodeType(oldTreeNode) = Type.Container Then
Dim newContainerInfo As Container.Info = TryCast(oldTreeNode.Tag, Container.Info).Copy
Dim newConnectionInfo As Connection.Info = TryCast(oldTreeNode.Tag, Container.Info).ConnectionInfo.Copy
Dim oldContainerInfo As Container.Info = DirectCast(oldTreeNode.Tag, Container.Info)
Dim newContainerInfo As Container.Info = oldContainerInfo.Copy()
Dim newConnectionInfo As Connection.Info = oldContainerInfo.ConnectionInfo.Copy()
newContainerInfo.ConnectionInfo = newConnectionInfo
Dim newTreeNode As New TreeNode(newContainerInfo.Name)

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
Dim RDP As AxMSTSCLib.AxMsRdpClient6NotSafeForScripting = Nothing
Dim rdpClient As AxMSTSCLib.AxMsRdpClient5NotSafeForScripting = Nothing
Try
RDP = New AxMSTSCLib.AxMsRdpClient6NotSafeForScripting
RDP.CreateControl()
rdpClient = New AxMSTSCLib.AxMsRdpClient5NotSafeForScripting
rdpClient.CreateControl()
Do Until RDP.Created
Thread.Sleep(10)
Do Until rdpClient.Created
Thread.Sleep(0)
System.Windows.Forms.Application.DoEvents()
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
lblCheck1.ForeColor = Color.DarkOliveGreen
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
pbCheck1.Image = My.Resources.Bad_Symbol
lblCheck1.ForeColor = Color.Firebrick
@@ -514,7 +518,7 @@ Namespace UI
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, ex.Message, True)
End Try
If RDP IsNot Nothing Then RDP.Dispose()
If rdpClient IsNot Nothing Then rdpClient.Dispose()
Dim VNC As VncSharp.RemoteDesktop = Nothing

View File

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

View File

@@ -38,34 +38,34 @@ Namespace UI
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(PortScan))
Me.ipStart = New IPTextBox.IPTextBox
Me.ipEnd = New IPTextBox.IPTextBox
Me.lblStartIP = New System.Windows.Forms.Label
Me.lblEndIP = New System.Windows.Forms.Label
Me.btnScan = New System.Windows.Forms.Button
Me.pnlDivider = New System.Windows.Forms.Panel
Me.splContainer = New System.Windows.Forms.SplitContainer
Me.lvHosts = New System.Windows.Forms.ListView
Me.btnCancel = New System.Windows.Forms.Button
Me.btnImport = New System.Windows.Forms.Button
Me.cbProtocol = New System.Windows.Forms.ComboBox
Me.lblOnlyImport = New System.Windows.Forms.Label
Me.clmHost = New System.Windows.Forms.ColumnHeader
Me.clmSSH = New System.Windows.Forms.ColumnHeader
Me.clmTelnet = New System.Windows.Forms.ColumnHeader
Me.clmHTTP = New System.Windows.Forms.ColumnHeader
Me.clmHTTPS = New System.Windows.Forms.ColumnHeader
Me.clmRlogin = New System.Windows.Forms.ColumnHeader
Me.clmRDP = New System.Windows.Forms.ColumnHeader
Me.clmVNC = New System.Windows.Forms.ColumnHeader
Me.clmOpenPorts = New System.Windows.Forms.ColumnHeader
Me.clmClosedPorts = New System.Windows.Forms.ColumnHeader
Me.prgBar = New System.Windows.Forms.ProgressBar
Me.pnlPorts = New System.Windows.Forms.Panel
Me.portEnd = New System.Windows.Forms.NumericUpDown
Me.portStart = New System.Windows.Forms.NumericUpDown
Me.Label2 = New System.Windows.Forms.Label
Me.Label1 = New System.Windows.Forms.Label
Me.ipStart = New IPTextBox.IPTextBox()
Me.ipEnd = New IPTextBox.IPTextBox()
Me.lblStartIP = New System.Windows.Forms.Label()
Me.lblEndIP = New System.Windows.Forms.Label()
Me.btnScan = New System.Windows.Forms.Button()
Me.pnlDivider = New System.Windows.Forms.Panel()
Me.splContainer = New System.Windows.Forms.SplitContainer()
Me.lvHosts = New System.Windows.Forms.ListView()
Me.btnCancel = New System.Windows.Forms.Button()
Me.btnImport = New System.Windows.Forms.Button()
Me.cbProtocol = New System.Windows.Forms.ComboBox()
Me.lblOnlyImport = New System.Windows.Forms.Label()
Me.clmHost = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmSSH = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmTelnet = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmHTTP = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmHTTPS = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmRlogin = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmRDP = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmVNC = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmOpenPorts = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.clmClosedPorts = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.prgBar = New System.Windows.Forms.ProgressBar()
Me.pnlPorts = New System.Windows.Forms.Panel()
Me.portEnd = New System.Windows.Forms.NumericUpDown()
Me.portStart = New System.Windows.Forms.NumericUpDown()
Me.Label2 = New System.Windows.Forms.Label()
Me.Label1 = New System.Windows.Forms.Label()
Me.splContainer.Panel1.SuspendLayout()
Me.splContainer.Panel2.SuspendLayout()
Me.splContainer.SuspendLayout()
@@ -125,7 +125,7 @@ Namespace UI
'pnlDivider
'
Me.pnlDivider.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pnlDivider.BackColor = System.Drawing.Color.DimGray
Me.pnlDivider.Location = New System.Drawing.Point(0, 0)
Me.pnlDivider.Name = "pnlDivider"
@@ -135,8 +135,8 @@ Namespace UI
'splContainer
'
Me.splContainer.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)
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.splContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2
Me.splContainer.IsSplitterFixed = True
Me.splContainer.Location = New System.Drawing.Point(0, 74)
@@ -161,8 +161,8 @@ Namespace UI
'lvHosts
'
Me.lvHosts.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)
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lvHosts.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.lvHosts.FullRowSelect = True
Me.lvHosts.GridLines = True
@@ -271,7 +271,7 @@ Namespace UI
'prgBar
'
Me.prgBar.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.prgBar.Location = New System.Drawing.Point(7, 50)
Me.prgBar.Name = "prgBar"
Me.prgBar.Size = New System.Drawing.Size(432, 16)
@@ -338,6 +338,7 @@ Namespace UI
Me.Controls.Add(Me.lblStartIP)
Me.Controls.Add(Me.ipEnd)
Me.Controls.Add(Me.ipStart)
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "PortScan"
Me.TabText = "Port Scan"
@@ -460,6 +461,7 @@ Namespace UI
Else
btnScan.Text = My.Language.strButtonScan
End If
SetPrgBar(0, 100)
End If
End Sub
@@ -480,13 +482,15 @@ Namespace UI
Try
scanning = True
SwitchButtonText()
SetPrgBar(0, 100)
lvHosts.Items.Clear()
Dim ipAddressStart As Net.IPAddress = Net.IPAddress.Parse(ipStart.Text)
Dim ipAddressEnd As Net.IPAddress = Net.IPAddress.Parse(ipEnd.Text)
If psMode = Tools.PortScan.PortScanMode.Import Then
pScanner = New Tools.PortScan.Scanner(ipStart.Text, ipEnd.Text)
pScanner = New Tools.PortScan.Scanner(ipAddressStart, ipAddressEnd)
Else
pScanner = New Tools.PortScan.Scanner(ipStart.Text, ipEnd.Text, portStart.Value, portEnd.Value)
pScanner = New Tools.PortScan.Scanner(ipAddressStart, ipAddressEnd, portStart.Value, portEnd.Value)
End If
AddHandler pScanner.BeginHostScan, AddressOf Event_BeginHostScan
@@ -500,7 +504,7 @@ Namespace UI
End Sub
Private Sub StopScan()
pScanner.StopScan()
If pScanner IsNot Nothing Then pScanner.StopScan()
scanning = False
SwitchButtonText()
End Sub
@@ -534,11 +538,19 @@ Namespace UI
SetPrgBar(AlreadyScanned, ToBeScanned)
End Sub
Private Sub Event_ScanComplete(ByVal Hosts As ArrayList)
Private Sub Event_ScanComplete(ByVal hosts As List(Of Tools.PortScan.ScanHost))
scanning = False
SwitchButtonText()
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Scan complete!")
End Sub
Private Sub portStart_Enter(sender As System.Object, e As EventArgs) Handles portStart.Enter
portStart.Select(0, portStart.Text.Length)
End Sub
Private Sub portEnd_Enter(sender As System.Object, e As System.EventArgs) Handles portEnd.Enter
portEnd.Select(0, portEnd.Text.Length)
End Sub
#End Region
End Class
End Namespace

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">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</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>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View File

@@ -1,412 +1,274 @@
Imports WeifenLuo.WinFormsUI.Docking
Imports System.Threading
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Sessions
Inherits UI.Window.Base
#Region "Form Init"
Friend WithEvents clmSesType As System.Windows.Forms.ColumnHeader
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
Inherits Base
#Region "Private Fields"
Private _getSessionsThread As Thread
Private _retrieved As Boolean = False
#End Region
#Region "Public Methods"
Public Sub New(ByVal Panel As DockContent)
Me.WindowType = Type.Sessions
Me.DockPnl = Panel
Me.InitializeComponent()
Public Sub New(ByVal panel As DockContent)
WindowType = Type.Sessions
DockPnl = panel
InitializeComponent()
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
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
nowHost = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info).Hostname
Else
Me.ClearList()
Exit Sub
End If
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA) Then Return
If My.Settings.AutomaticallyGetSessionInfo And Me._CurrentHost = nowHost Then
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
Dim data As New BackgroundData
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
'continue
Else
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
If Settings.EmptyCredentials = "custom" Then
If .Username = "" Then
.Username = Settings.DefaultUsername
End If
If sPass = "" Then
sPass = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
If .Password = "" Then
.Password = Security.Crypt.Decrypt(Settings.DefaultPassword, App.Info.General.EncryptionKey)
End If
If sDom = "" Then
sDom = My.Settings.DefaultDomain
If .Domain = "" Then
.Domain = Settings.DefaultDomain
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
_getSessionsThread = New Thread(AddressOf GetSessionsBackground)
_getSessionsThread.SetApartmentState(ApartmentState.STA)
_getSessionsThread.IsBackground = True
_getSessionsThread.Start(data)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GetSessionsAuto (UI.Window.Sessions) 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)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Sessions.GetSessions() failed." & vbNewLine & ex.Message, True)
End Try
End Sub
Public Sub KillSession()
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
'continue
Else
Exit Sub
End If
If sessionList.SelectedItems.Count = 0 Then Return
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
'continue
Else
Exit Sub
End If
If Not connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then Return
If Me.lvSessions.SelectedItems.Count > 0 Then
'continue
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)
For Each lvItem As ListViewItem In sessionList.SelectedItems
KillSession(connectionInfo.Hostname, connectionInfo.Username, connectionInfo.Password, connectionInfo.Domain, lvItem.Tag)
Next
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
tServerName = ServerName
tUserName = Username
tPassword = Password
tDomain = Domain
tSessionID = SessionID
Dim data As New BackgroundData
With data
.Hostname = hostname
.Username = username
.Password = password
.Domain = domain
.SessionId = sessionId
End With
threadSessions = New Threading.Thread(AddressOf KillSessionBG)
threadSessions.SetApartmentState(Threading.ApartmentState.STA)
threadSessions.IsBackground = True
threadSessions.Start()
Dim thread As New Thread(AddressOf KillSessionBackground)
thread.SetApartmentState(ApartmentState.STA)
thread.IsBackground = True
thread.Start(data)
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 Sub
#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)
serverHandle = terminalSessions.OpenConnection(.Hostname)
If serverHandle = 0 Then Return
GetSessions(terminalSessions, serverHandle)
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, ByVal serverHandle As Long)
Dim rdpSessions As mRemoteNG.Connection.Protocol.RDP.SessionsCollection = terminalSessions.GetSessions(serverHandle)
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)
serverHandle = terminalSessions.OpenConnection(.Hostname)
If Not serverHandle = 0 Then
terminalSessions.KillSession(serverHandle, .SessionId)
End If
ClearList()
GetSessions(terminalSessions, serverHandle)
_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
If (mRemoteNG.Tree.Node.TreeView Is Nothing OrElse mRemoteNG.Tree.Node.SelectedNode Is Nothing) Then
connectionInfo = Nothing
Else
connectionInfo = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
End If
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 Namespace
End Namespace

View File

@@ -589,7 +589,6 @@ Namespace UI
Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node)
Case mRemoteNG.Tree.Node.Type.Connection, mRemoteNG.Tree.Node.Type.PuttySession
Windows.configForm.SetPropertyGridObject(e.Node.Tag)
Windows.sessionsForm.CurrentHost = TryCast(e.Node.Tag, mRemoteNG.Connection.Info).Hostname
Case mRemoteNG.Tree.Node.Type.Container
Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo)
Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot
@@ -600,7 +599,7 @@ Namespace UI
Windows.configForm.pGrid_SelectedObjectChanged()
ShowHideTreeContextMenuItems(e.Node)
Windows.sessionsForm.GetSessionsAuto()
Windows.sessionsForm.GetSessions(True)
LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
Catch ex As Exception
@@ -1089,6 +1088,7 @@ Namespace UI
End If
newContainerInfo.ConnectionInfo = New mRemoteNG.Connection.Info(newContainerInfo)
newContainerInfo.ConnectionInfo.Name = newNode.Text
' We can only inherit from a container node, not the root node or connection nodes
If mRemoteNG.Tree.Node.GetNodeType(parentNode) = mRemoteNG.Tree.Node.Type.Container Then
@@ -1183,7 +1183,7 @@ Namespace UI
Private Sub ImportFromRDPFiles()
Try
App.Runtime.ImportConnectionsFromRDPFiles()
App.Runtime.ImportConnectionsRdpFile()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromRDPFiles (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
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,205 @@
Imports System.ComponentModel
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports System.Threading
Imports System.IO
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Update
Inherits UI.Window.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
Inherits Base
#Region "Public Methods"
Public Sub New(ByVal Panel As DockContent)
Me.WindowType = Type.Update
Me.DockPnl = Panel
Me.InitializeComponent()
App.Runtime.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
Public Sub New(ByVal panel As DockContent)
WindowType = Type.Update
DockPnl = panel
InitializeComponent()
FontOverride(Me)
End Sub
#End Region
#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()
Me.CheckForUpdate()
CheckForUpdate()
End Sub
Private Sub ApplyLanguage()
btnCheckForUpdate.Text = My.Language.strCheckForUpdate
lblChangeLogLabel.Text = My.Language.strLabelChangeLog
btnDownload.Text = My.Language.strDownloadAndInstall
lblCurrentVersionLabel.Text = My.Language.strAvailableVersion & ":"
lblInstalledVersionLabel.Text = My.Language.strCurrentVersion & ":"
lblAvailableVersion.Text = My.Language.strVersion
lblCurrentVersion.Text = My.Language.strVersion
TabText = My.Language.strMenuCheckForUpdates
Text = My.Language.strMenuCheckForUpdates
Text = Language.strMenuCheckForUpdates
TabText = Language.strMenuCheckForUpdates
btnCheckForUpdate.Text = Language.strCheckForUpdate
btnDownload.Text = Language.strDownloadAndInstall
lblChangeLogLabel.Text = Language.strLabelChangeLog
lblInstalledVersion.Text = Language.strVersion
lblInstalledVersionLabel.Text = String.Format("{0}:", Language.strCurrentVersion)
lblLatestVersion.Text = Language.strVersion
lblLatestVersionLabel.Text = String.Format("{0}:", Language.strAvailableVersion)
End Sub
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckForUpdate.Click
Me.CheckForUpdate()
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCheckForUpdate.Click
CheckForUpdate()
End Sub
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDownload.Click
Me.DownloadUpdate()
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnDownload.Click
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
Private Sub DownloadUpdate()
Try
If uD.DownloadUpdate(uD.curUI.DownloadUrl) = True Then
Me.btnDownload.Enabled = False
btnDownload.Enabled = False
prgbDownload.Visible = True
prgbDownload.Value = 0
If Me.IsUpdateDownloadHandlerDeclared = False Then
AddHandler uD.DownloadProgressChanged, AddressOf DLProgressChanged
AddHandler uD.DownloadCompleted, AddressOf DLCompleted
Me.IsUpdateDownloadHandlerDeclared = True
End If
If _isUpdateDownloadHandlerDeclared = False Then
AddHandler _appUpdate.DownloadUpdateProgressChangedEvent, AddressOf DownloadUpdateProgressChanged
AddHandler _appUpdate.DownloadUpdateCompletedEvent, AddressOf DownloadUpdateCompleted
_isUpdateDownloadHandlerDeclared = True
End If
_appUpdate.DownloadUpdateAsync()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed & vbNewLine & ex.Message, True)
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadFailed, ex)
End Try
End Sub
#End Region
#Region "Events"
Private Sub DLProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
Me.prgbDownload.Value = e.ProgressPercentage
Private Sub DownloadUpdateProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs)
prgbDownload.Value = e.ProgressPercentage
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
Me.btnDownload.Enabled = True
btnDownload.Enabled = True
prgbDownload.Visible = False
If Success = True Then
If MessageBox.Show(My.Language.strUpdateDownloadComplete, My.Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
Try
App.Runtime.Shutdown.BeforeQuit()
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
Process.Start(uD.curUI.UpdateLocation)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateStartFailed & vbNewLine & ex.Message)
End Try
End
Else
Try
File.Delete(uD.curUI.UpdateLocation)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDeleteFailed & vbNewLine & ex.Message)
End Try
End If
If MessageBox.Show(Language.strUpdateDownloadComplete, Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
Shutdown.Quit(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
Return
Else
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed)
File.Delete(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadCompleteFailed & vbNewLine & ex.Message, True)
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadCompleteFailed, ex)
End Try
End Sub
#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 Namespace
End Namespace

View File

@@ -580,16 +580,34 @@
<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>
</userSettings>
<applicationSettings>
<mRemoteNG.My.MySettings>
<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,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW</value>
</setting>
<setting name="UpdateChannel" serializeAs="String">
<value>release</value>
</setting>
<setting name="AnnouncementAddress" serializeAs="String">
<value>https://update.mremoteng.org/announcement.txt</value>
</setting>
</mRemoteNG.My.MySettings>
</applicationSettings>
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

View File

@@ -175,7 +175,6 @@
</ItemGroup>
<ItemGroup>
<Compile Include="ApplicationEvents.vb" />
<Compile Include="App\App.Announcement.vb" />
<Compile Include="App\App.Info.vb" />
<Compile Include="App\App.Native.vb" />
<Compile Include="App\App.Runtime.vb" />
@@ -188,6 +187,10 @@
<Compile Include="Config\Config.Settings.Save.vb" />
<Compile Include="Config\ConfirmClose.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="Root\PuttySessions.Info.vb" />
<Compile Include="Themes\ThemeManager.vb" />
@@ -270,6 +273,9 @@
<Compile Include="Security\Security.Crypt.vb" />
<Compile Include="Security\Security.Impersonator.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">
<DependentUpon>ReconnectGroup.vb</DependentUpon>
</Compile>
@@ -291,7 +297,10 @@
<Compile Include="UI\UI.Window.ADImport.vb">
<SubType>Form</SubType>
</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>
</Compile>
<Compile Include="UI\UI.Window.Base.vb">
@@ -331,6 +340,9 @@
<Compile Include="UI\UI.Window.ScreenshotManager.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="UI\UI.Window.Sessions.Designer.vb">
<DependentUpon>UI.Window.Sessions.vb</DependentUpon>
</Compile>
<Compile Include="UI\UI.Window.Sessions.vb">
<SubType>Form</SubType>
</Compile>
@@ -344,6 +356,9 @@
<Compile Include="UI\UI.Window.UltraVNCSC.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="UI\UI.Window.Update.Designer.vb">
<DependentUpon>UI.Window.Update.vb</DependentUpon>
</Compile>
<Compile Include="UI\UI.Window.Update.vb">
<SubType>Form</SubType>
</Compile>
@@ -364,6 +379,7 @@
<EmbeddedResource Include="Language\Language.de.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Language\Language.el.resx" />
<EmbeddedResource Include="Language\Language.en-US.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
@@ -371,10 +387,13 @@
<EmbeddedResource Include="Language\Language.es.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Language\Language.hu.resx" />
<EmbeddedResource Include="Language\Language.it.resx" />
<EmbeddedResource Include="Language\Language.nb-NO.resx" />
<EmbeddedResource Include="Language\Language.nl.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Language\Language.pt-BR.resx" />
<EmbeddedResource Include="Language\Language.pt.resx" />
<EmbeddedResource Include="Language\Language.resx">
<Generator>ResXFileCodeGenerator</Generator>
@@ -395,6 +414,7 @@
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Language\Language.zh-CN.resx" />
<EmbeddedResource Include="Language\Language.zh-TW.resx" />
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
@@ -413,8 +433,8 @@
<DependentUpon>UI.Window.ADImport.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="UI\UI.Window.Announcment.resx">
<DependentUpon>UI.Window.Announcment.vb</DependentUpon>
<EmbeddedResource Include="UI\UI.Window.Announcement.resx">
<DependentUpon>UI.Window.Announcement.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="UI\UI.Window.ComponentsCheck.resx">