Compare commits

...

146 Commits

Author SHA1 Message Date
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
Riley McArdle
375e737f02 Fix PuTTY saved sessions with spaces or special characters not being listed. 2013-03-20 16:25:51 -05:00
Riley McArdle
1032801f12 Fix the category names in the themes tab of the options dialog on Windows XP not showing correctly. 2013-03-20 16:09:32 -05:00
Riley McArdle
1002b8d32f Fix namespace problem in App.Runtime.vb. 2013-03-20 15:51:32 -05:00
Riley McArdle
36a72da71f Update CHANGELOG.TXT for 1.71 Beta 3 release. 2013-03-20 15:45:19 -05:00
Riley McArdle
a2b3a815e7 Fix issue MR-397 - Putty disappears from the screen
Fix issue MR-402 - scrollbar touch moves putty window
2013-03-20 15:36:30 -05:00
Riley McArdle
7820707e46 Fix issue MR-413 - Can't use aplication 2013-03-20 11:09:01 -05:00
Riley McArdle
c3f960cfe8 More small changes to fullscreen mode. 2013-03-20 00:17:06 -05:00
Riley McArdle
965f43a4c3 Fix issue MR-398 - Full Screen mode doesn't correctly make use of available space 2013-03-19 23:20:49 -05:00
Riley McArdle
317175bb03 Minor code cleanup. 2013-03-19 22:28:55 -05:00
Riley McArdle
1608d48495 Fix new connections having a globe icon. 2013-03-19 22:24:42 -05:00
Riley McArdle
08ddee1bda Fix issue MR-406 - Items disappear from External Tools toolbar when accessing External Tools panel 2013-03-19 22:22:49 -05:00
Riley McArdle
72756a2bb8 Fix issue MR-410 - Unhandled exception when clicking New button under Theme 2013-03-19 21:11:00 -05:00
Riley McArdle
38011a3546 Add missing line to CHANGELOG.TXT. 2013-03-19 13:15:18 -05:00
Riley McArdle
d72dbdace0 Update CHANGELOG.TXT for release of 1.71 Beta 2. 2013-03-19 13:14:34 -05:00
Riley McArdle
5c887b648f Update translations from Crowdin. 2013-03-18 23:38:08 -05:00
Riley McArdle
4de7167352 Add additional translators to CREDITS.TXT. 2013-03-18 22:58:43 -05:00
Riley McArdle
54825b353f Fix issue MR-401 - Checkbox misaligned 2013-03-17 17:51:13 -05:00
Riley McArdle
b23fb58977 RDP connections can now be switched to full screen mode when redirect key combinations is enabled. 2013-03-17 15:36:59 -05:00
Riley McArdle
7b831c6ab8 Add feature MR-351 - Import connections from PuTTY 2013-03-16 22:37:34 -05:00
Riley McArdle
167344bd14 Add translator Emanuel Silva to CREDITS.TXT. 2013-03-16 13:46:21 -05:00
Riley McArdle
14f31ba461 Fix COMException on WebBrowser controls. 2013-03-15 23:56:48 -05:00
Riley McArdle
13a82799b2 Correct a typo. 2013-03-15 22:14:09 -05:00
Riley McArdle
66fe33683e Fix issue MR-375 - Changing a connection's icon using the picture button should immediately update Icon field 2013-03-15 18:03:41 -05:00
Riley McArdle
8030c9a63d Add feature MR-346 - Option to show/hide the description box at the bottom of the Config panel 2013-03-15 17:50:17 -05:00
Riley McArdle
60630a5cab Remove debug message from Connection.Protocol.PuttyBase.vb. 2013-03-15 16:51:02 -05:00
Riley McArdle
d9ba8f81e2 Create Sort Language Files.cmd. 2013-03-14 22:01:14 -05:00
Riley McArdle
7fe56402fd Fix spelling of colour for English and add color to en-US. 2013-03-14 22:00:05 -05:00
Riley McArdle
634bce25cd Move theme related strings into Language.resx. 2013-03-14 21:41:12 -05:00
Riley McArdle
437ff003b0 More theme improvements. 2013-03-14 20:18:56 -05:00
Riley McArdle
9f09798da5 More theme improvements. 2013-03-14 19:46:06 -05:00
Riley McArdle
5da85b6a88 More additions to theming. 2013-03-12 22:41:59 -05:00
Riley McArdle
bb42a31486 Change theme settings file name to Themes.xml and moved it to a Const in App.Info.Settings. 2013-03-12 20:18:13 -05:00
Riley McArdle
7e5e1e6342 Hide theme properties that don't look good. Additional improvements to theming. 2013-03-12 20:01:35 -05:00
Riley McArdle
6f43bbf96e Start adding theme support. 2013-03-09 22:13:40 -06:00
Riley McArdle
8ea514643d Additional fix for MR-345. 2013-03-09 15:14:42 -06:00
Riley McArdle
f7e12c6e92 Fix issue MR-354 - Re-ordering tabs doesn't give good, reliable visual feedback 2013-03-08 20:32:54 -06:00
Riley McArdle
30f2cc9e28 Fix ArgumentNullException in Tools.CommandLineArguments. 2013-03-08 19:35:31 -06:00
Riley McArdle
45b9dddb4b Add feature MR-345 - Two separate options for confirming closure of Tabs and Connection Panels 2013-03-08 18:33:37 -06:00
Riley McArdle
650dc487db Fix issue MR-381 - Notifications panel - whitespace context menu allows Copy and Delete on nothing 2013-03-07 22:34:49 -06:00
Riley McArdle
5bc443707f Fix issue MR-377 - Several redundant panels can be opened 2013-03-07 21:14:00 -06:00
Riley McArdle
4510219300 Fix issue MR-379 - Connection variables not working with external tools 2013-03-07 20:26:02 -06:00
Riley McArdle
cd8601c7ff Correct CHANGELOG.TXT. 2013-03-07 20:25:41 -06:00
Riley McArdle
73c27069ee Change "Automatically get session information" to be disabled by default. 2013-03-07 19:50:35 -06:00
Riley McArdle
7dcad234f5 Hide the username and domain settings for VNC connections. 2013-03-07 18:52:15 -06:00
Riley McArdle
66281639b4 Merge branch 'release/1.70' into develop
Conflicts:
	CHANGELOG.TXT
2013-03-07 12:11:20 -06:00
Riley McArdle
83ec9e50b8 Merge branch 'release/1.70' into develop 2013-03-06 23:04:55 -06:00
Riley McArdle
0ff00e59ba Add setting for update channel. 2013-03-04 21:52:28 -06:00
Riley McArdle
850a342e38 Prepare CHANGELOG.TXT for release of 1.71 Beta 1. 2013-03-04 15:54:49 -06:00
Riley McArdle
1caba06aca Fix issue MR-362 - Rename 'Screenshot Manager' to 'Screenshots' on the View menu to match Panel name 2013-03-04 13:20:49 -06:00
Riley McArdle
a115196cee Disable Fullscreen item on tab context menu if redirect keys is enabled for RDP connection. Fix automatic RDP resize when redirect keys is enabled. Fix automatic RDP resize when SmartSize setting is changed. 2013-03-04 12:55:46 -06:00
Riley McArdle
5f451de94e Fix issue MR-352 - Passwords with " (quotation mark) and # (hash key) characters make mRemoteNG to open PuttyNG dialog 2013-03-02 01:41:00 -06:00
Riley McArdle
a4921fc564 Add automatic resizing of RDP connections when the window is resized or when toggling full screen mode. 2013-03-01 17:04:28 -06:00
Riley McArdle
7d1d03e8cd Fix connection bar being shown when connecting to an RDP connection with redirect key combinations enabled. 2013-02-28 22:46:07 -06:00
Riley McArdle
92c18a45ba Merge branch 'release/1.70' into develop 2013-02-28 14:57:41 -06:00
Riley McArdle
e1deaf73ea Fix issue MR-117 - Remote Session Info Window / Tab does not populate 2013-02-27 19:20:49 -06:00
Riley McArdle
7d6d602477 Merge branch 'release/1.70' into develop
Conflicts:
	CHANGELOG.TXT
2013-02-27 14:44:17 -06:00
Riley McArdle
0a7c88a853 Fix issue MR-339 - Connection group collapses with just one click 2013-02-27 14:39:27 -06:00
Riley McArdle
960ecba12a Fix tabs not closing on double-click when the active tab is a PuTTY connection. 2013-02-27 14:12:49 -06:00
Riley McArdle
3988820db9 Fix issue MR-342 - Incorrect view in config pane of new connection after viewing default inheritance 2013-02-26 21:06:47 -06:00
Riley McArdle
22ea7055c9 Fix issue MR-142 - Start of mRemoteNG takes about one minute and consumes excessive CPU 2013-02-26 20:46:49 -06:00
Riley McArdle
edba3fbea0 Merge branch 'release/1.70' into develop
Conflicts:
	CHANGELOG.TXT
	mRemoteV1/Forms/frmOptions.resx
	mRemoteV1/Forms/frmOptions.vb
2013-02-26 20:02:18 -06:00
Riley McArdle
51e4bc7eae Move search prompt to resource string. 2013-02-26 16:19:06 -06:00
Riley McArdle
3e680235ee Improve appearance and discoverability of the connection search box. 2013-02-26 16:13:45 -06:00
Riley McArdle
c218f0362e Merge branch 'release/1.70' into develop
Conflicts:
	CHANGELOG.TXT
2013-02-25 18:47:20 -06:00
Riley McArdle
a3c9c667b4 Add detection of newer versions of connection files and database schemata and refuse to open them to avoid data loss. 2013-02-24 16:46:37 -06:00
Riley McArdle
73f71050a0 Fix issue MR-332 - Can't select different tab with one click after disconnecting existing tab 2013-02-24 16:02:04 -06:00
Riley McArdle
94d901ec4c Increment version to 1.71. 2013-02-24 15:40:19 -06:00
Riley McArdle
9e67f36615 Fix issue MR-330 - Portable version saves log to user's profile folder 2013-02-24 15:38:48 -06:00
Riley McArdle
bf6f166d8f Add feature MR-329 - Create Option to disable the "Quick: " prefix 2013-02-24 13:15:44 -06:00
Riley McArdle
1de5ab43d6 Fix issue MR-67 - Sort does not recursively sort 2013-02-24 12:49:38 -06:00
Riley McArdle
39dd75dbde Fix issue MR-121 - Config pane not sorting properties correctly when switching between alphabetical and categorized view 2013-02-24 00:04:45 -06:00
Riley McArdle
b509f75c17 Fix issue MR-130 - Issues duplicating folders 2013-02-23 23:38:16 -06:00
Riley McArdle
877649b80a Fix issue MR-158 - Password field not accepting Pipe 2013-02-23 22:14:48 -06:00
Riley McArdle
b5846f2286 Fix issue MR-333 - Unnecessary prompt for 'close all open connections?' 2013-02-23 21:34:48 -06:00
Riley McArdle
80dd98e7fb Merge branch 'release/1.70' into develop 2013-02-23 21:03:21 -06:00
Riley McArdle
80f35cea71 Refactor Security.Crypt.Decrypt(). 2013-02-21 21:08:19 -06:00
103 changed files with 15135 additions and 3369 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,105 @@
1.71 (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
Fixed issue MR-402 - scrollbar touch moves putty window
Fixed issue MR-406 - Items disappear from External Tools toolbar when accessing External Tools panel
Fixed issue MR-410 - Unhandled exception when clicking New button under Theme
Fixed issue MR-413 - Can't use aplication
Fixed new connections having a globe icon.
Fixed the category names in the themes tab of the options dialog on Windows XP not showing correctly.
Fixed PuTTY saved sessions with spaces or special characters not being listed.
1.71 Beta 2 (2013-03-19):
Added feature MR-336 - Customizable background color for the windows/panels
Added feature MR-345 - Two separate options for confirming closure of Tabs and Connection Panels
Added feature MR-346 - Option to show/hide the description box at the bottom of the Config panel
Added feature MR-351 - Import connections from PuTTY
Fixed issue MR-354 - Re-ordering tabs doesn't give good, reliable visual feedback
Fixed issue MR-375 - Changing a connection's icon using the picture button should immediately update Icon field
Fixed issue MR-377 - Several redundant panels can be opened
Fixed issue MR-379 - Connection variables not working with external tools
Fixed issue MR-381 - Notifications panel - whitespace context menu allows Copy and Delete on nothing
Fixed issue MR-401 - Checkbox misaligned
The username and domain settings are now hidden for VNC connections since they are not supported.
Changed "Automatically get session information" to be disabled by default.
RDP connections can now be switched to full screen mode when redirect key combinations is enabled.
1.71 Beta 1 (2013-03-04):
Added feature MR-329 - Create Option to disable the "Quick: " prefix
Fixed issue MR-67 - Sort does not recursively sort
Fixed issue MR-117 - Remote Session Info Window / Tab does not populate
Fixed issue MR-121 - Config pane not sorting properties correctly when switching between alphabetical and categorized view
Fixed issue MR-130 - Issues duplicating folders
Fixed issue MR-142 - Start of mRemoteNG takes about one minute and consumes excessive CPU
Fixed issue MR-158 - Password field not accepting Pipe
Fixed issue MR-330 - Portable version saves log to user's profile folder
Fixed issue MR-333 - Unnecessary prompt for 'close all open connections?'
Fixed issue MR-342 - Incorrect view in config pane of new connection after viewing default inheritance
Fixed issue MR-352 - Passwords with " (quotation mark) and # (hash key) characters make mRemoteNG to open PuttyNG dialog
Fixed issue MR-362 - Rename 'Screenshot Manager' to 'Screenshots' on the View menu to match Panel name
Added detection of newer versions of connection files and database schemata. mRemoteNG will now refuse to open them to avoid data loss.
Improved appearance and discoverability of the connection search box.
If RDC 7.0 or higher is installed, the connection bar is no longer briefly shown when connecting to an RDP connection with redirect key combinations enabled.
If RDC 8.0 or higher is installed, RDP connections automatically adjust their size when the window is resized or when toggling full screen mode.
1.70 (2013-03-07):
Fixed issue MR-339 - Connection group collapses with just one click
Fixed issue MR-340 - Object reference not set to an instance of an object.

View File

@@ -13,6 +13,15 @@ Andreas Rehm
David Vidmar
Translators
===========
Eugenio "Ryo567" Mart<72>nez
Mathieu Pape
Emanuel Silva
Robert Siwiec
Included Source Code
====================

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"

26
Sort Language Files.cmd Normal file
View File

@@ -0,0 +1,26 @@
@echo off
set TEMP_FOLDER="%TEMP%\Translations.tmp"
set SORTRESX="%~dp0\Tools\SortRESX.exe"
echo.
echo This script sorts the language files
echo.
choice /m "Would you like to continue?"
echo.
rmdir /s /q %TEMP_FOLDER%
mkdir %TEMP_FOLDER%
copy "%~dp0\mRemoteV1\Language\*.resx" %TEMP_FOLDER%
pushd %TEMP_FOLDER%
for %%f in (*) do %SORTRESX% %TEMP_FOLDER%\%%f "%~dp0\mRemoteV1\Language\%%f"
popd
rmdir /s /q %TEMP_FOLDER%
echo Done.
echo.
pause

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
@@ -21,22 +39,32 @@ Namespace App
#End If
Public Shared ReadOnly LayoutFileName As String = "pnlLayout.xml"
Public Shared ReadOnly ExtAppsFilesName As String = "extApps.xml"
Public Const ThemesFileName As String = "Themes.xml"
End Class
Public Class Update
Public Shared ReadOnly URL As String = "http://update.mremoteng.org/"
Public Shared ReadOnly Property FileName As String
Get
#If DEBUG Then
Public Shared ReadOnly File As String = "update-debug.txt"
#Else
Public Shared ReadOnly File As String = "update.txt"
Return "update-debug.txt"
#End If
Select Case My.Settings.UpdateChannel.ToLowerInvariant()
Case "beta"
Return "update-beta.txt"
Case "debug"
Return "update-debug.txt"
Case Else
Return "update.txt"
End Select
End Get
End Property
End Class
Public Class Connections
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,8 +1,10 @@
Imports log4net
Imports System.ComponentModel
Imports mRemoteNG.Config
Imports log4net
Imports mRemoteNG.Messages
Imports mRemoteNG.Connection
Imports mRemoteNG.Config.Settings
Imports mRemoteNG.Tools
Imports PSTaskDialog
Imports WeifenLuo.WinFormsUI.Docking
Imports System.IO
Imports Crownwood
@@ -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
@@ -262,70 +246,88 @@ Namespace App
Public Shared AnnouncementForm As UI.Window.Announcement
Public Shared AnnouncementPanel As New DockContent
Public Shared Sub Show(ByVal WindowType As UI.Window.Type, Optional ByVal PortScanMode As Tools.PortScan.PortScanMode = Tools.PortScan.PortScanMode.Normal)
Public Shared Sub Show(ByVal windowType As UI.Window.Type, Optional ByVal portScanMode As PortScan.PortScanMode = PortScan.PortScanMode.Normal)
Try
Select Case WindowType
Select Case windowType
Case UI.Window.Type.About
Windows.aboutForm = New UI.Window.About(Windows.aboutPanel)
Windows.aboutPanel = Windows.aboutForm
If aboutForm Is Nothing OrElse aboutForm.IsDisposed Then
aboutForm = New UI.Window.About(aboutPanel)
aboutPanel = aboutForm
End If
Windows.aboutForm.Show(frmMain.pnlDock)
aboutForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ADImport
Windows.adimportForm = New UI.Window.ADImport(Windows.adimportPanel)
Windows.adimportPanel = Windows.adimportForm
If adimportForm Is Nothing OrElse adimportForm.IsDisposed Then
adimportForm = New UI.Window.ADImport(adimportPanel)
adimportPanel = adimportForm
End If
Windows.adimportPanel.Show(frmMain.pnlDock)
adimportPanel.Show(frmMain.pnlDock)
Case UI.Window.Type.Options
Windows.optionsForm = New frmOptions(Windows.optionsPanel)
Windows.optionsForm.Show(frmMain.pnlDock)
optionsForm = New frmOptions(optionsPanel)
optionsForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Export
Windows.exportForm = New UI.Window.Export(Windows.exportPanel)
Windows.exportPanel = Windows.exportForm
If exportForm Is Nothing OrElse exportForm.IsDisposed Then
exportForm = New UI.Window.Export(exportPanel)
exportPanel = exportForm
End If
Windows.exportForm.Show(frmMain.pnlDock)
exportForm.Show(frmMain.pnlDock)
Case UI.Window.Type.SSHTransfer
Windows.sshtransferForm = New UI.Window.SSHTransfer(Windows.sshtransferPanel)
Windows.sshtransferPanel = Windows.sshtransferForm
sshtransferForm = New UI.Window.SSHTransfer(sshtransferPanel)
sshtransferPanel = sshtransferForm
Windows.sshtransferForm.Show(frmMain.pnlDock)
sshtransferForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Update
Windows.updateForm = New UI.Window.Update(Windows.updatePanel)
Windows.updatePanel = Windows.updateForm
If updateForm Is Nothing OrElse updateForm.IsDisposed Then
updateForm = New UI.Window.Update(updatePanel)
updatePanel = updateForm
End If
Windows.updateForm.Show(frmMain.pnlDock)
updateForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Help
Windows.helpForm = New UI.Window.Help(Windows.helpPanel)
Windows.helpPanel = Windows.helpForm
If helpForm Is Nothing OrElse helpForm.IsDisposed Then
helpForm = New UI.Window.Help(helpPanel)
helpPanel = helpForm
End If
Windows.helpForm.Show(frmMain.pnlDock)
helpForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ExternalApps
Windows.externalappsForm = New UI.Window.ExternalApps(Windows.externalappsPanel)
Windows.externalappsPanel = Windows.externalappsForm
If externalappsForm Is Nothing OrElse externalappsForm.IsDisposed Then
externalappsForm = New UI.Window.ExternalApps(externalappsPanel)
externalappsPanel = externalappsForm
End If
Windows.externalappsForm.Show(frmMain.pnlDock)
externalappsForm.Show(frmMain.pnlDock)
Case UI.Window.Type.PortScan
Windows.portscanForm = New UI.Window.PortScan(Windows.portscanPanel, PortScanMode)
Windows.portscanPanel = Windows.portscanForm
portscanForm = New UI.Window.PortScan(portscanPanel, portScanMode)
portscanPanel = portscanForm
Windows.portscanForm.Show(frmMain.pnlDock)
portscanForm.Show(frmMain.pnlDock)
Case UI.Window.Type.UltraVNCSC
Windows.ultravncscForm = New UI.Window.UltraVNCSC(Windows.ultravncscPanel)
Windows.ultravncscPanel = Windows.ultravncscForm
If ultravncscForm Is Nothing OrElse ultravncscForm.IsDisposed Then
ultravncscForm = New UI.Window.UltraVNCSC(ultravncscPanel)
ultravncscPanel = ultravncscForm
End If
Windows.ultravncscForm.Show(frmMain.pnlDock)
ultravncscForm.Show(frmMain.pnlDock)
Case UI.Window.Type.ComponentsCheck
Windows.componentscheckForm = New UI.Window.ComponentsCheck(Windows.componentscheckPanel)
Windows.componentscheckPanel = Windows.componentscheckForm
If componentscheckForm Is Nothing OrElse componentscheckForm.IsDisposed Then
componentscheckForm = New UI.Window.ComponentsCheck(componentscheckPanel)
componentscheckPanel = componentscheckForm
End If
Windows.componentscheckForm.Show(frmMain.pnlDock)
componentscheckForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Announcement
Windows.AnnouncementForm = New UI.Window.Announcement(AnnouncementPanel)
Windows.AnnouncementPanel = Windows.AnnouncementForm
If AnnouncementForm Is Nothing OrElse AnnouncementForm.IsDisposed Then
AnnouncementForm = New UI.Window.Announcement(AnnouncementPanel)
AnnouncementPanel = AnnouncementForm
End If
Windows.AnnouncementForm.Show(frmMain.pnlDock)
AnnouncementForm.Show(frmMain.pnlDock)
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Show (App.Runtime.Windows) failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(MessageClass.ErrorMsg, "App.Runtime.Windows.Show() failed." & vbNewLine & ex.Message, True)
End Try
End Sub
@@ -360,6 +362,11 @@ Namespace App
Public Class Startup
Public Shared Sub CheckCompatibility()
CheckFipsPolicy()
CheckLenovoAutoScrollUtility()
End Sub
Private Shared Sub CheckFipsPolicy()
Dim regKey As RegistryKey
Dim isFipsPolicyEnabled As Boolean = False
@@ -382,6 +389,22 @@ Namespace App
End If
End Sub
Private Shared Sub CheckLenovoAutoScrollUtility()
If Not My.Settings.CompatibilityWarnLenovoAutoScrollUtility Then Return
Dim proccesses() As Process = {}
Try
proccesses = Process.GetProcessesByName("virtscrl")
Catch
End Try
If proccesses.Length = 0 Then Return
cTaskDialog.MessageBox(Application.ProductName, My.Language.strCompatibilityProblemDetected, String.Format(My.Language.strCompatibilityLenovoAutoScrollUtilityDetected, System.Windows.Forms.Application.ProductName), "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.OK, eSysIcons.Warning, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.CompatibilityWarnLenovoAutoScrollUtility = False
End If
End Sub
Public Shared Sub CreatePanels()
Windows.configForm = New UI.Window.Config(Windows.configPanel)
Windows.configPanel = Windows.configForm
@@ -447,66 +470,118 @@ Namespace App
Next
End Sub
Public Shared Sub GetPuttySessions()
Connection.PuttySession.PuttySessions = Connection.Protocol.PuttyBase.GetSessions()
End Sub
Public Shared Sub CreateLogger()
log4net.Config.XmlConfigurator.Configure(New FileInfo("mRemoteNG.exe.config"))
Log = log4net.LogManager.GetLogger("mRemoteNG.Log")
Log.InfoFormat("{0} started.", My.Application.Info.ProductName)
Log.InfoFormat("Command Line: {0}", Environment.GetCommandLineArgs)
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
Next
Catch ex As Exception
Log.WarnFormat("Error retrieving operating system information from WMI. {0}", ex.Message)
End Try
Log.InfoFormat("Microsoft .NET Framework {0}", System.Environment.Version.ToString)
log4net.Config.XmlConfigurator.Configure()
Dim logFilePath As String
#If Not PORTABLE Then
Log.InfoFormat("{0} {1}", My.Application.Info.ProductName.ToString, My.Application.Info.Version.ToString)
logFilePath = Path.Combine(GetFolderPath(SpecialFolder.LocalApplicationData), Application.ProductName)
#Else
log.InfoFormat("{0} {1} {2}", My.Application.Info.ProductName.ToString, My.Application.Info.Version.ToString, My.Language.strLabelPortableEdition)
logFilePath = Application.StartupPath
#End If
Log.InfoFormat("System Culture: {0}/{1}", Threading.Thread.CurrentThread.CurrentUICulture.Name, Threading.Thread.CurrentThread.CurrentUICulture.NativeName)
End Sub
Dim logFileName As String = Path.ChangeExtension(Application.ProductName, ".log")
Dim logFile As String = Path.Combine(logFilePath, logFileName)
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
Dim repository As Repository.ILoggerRepository = LogManager.GetRepository()
Dim appenders As Appender.IAppender() = repository.GetAppenders()
Dim fileAppender As Appender.FileAppender
For Each appender As Appender.IAppender In appenders
fileAppender = TryCast(appender, Appender.FileAppender)
If Not (fileAppender Is Nothing OrElse Not fileAppender.Name = "LogFileAppender") Then
fileAppender.File = logFile
fileAppender.ActivateOptions()
End If
Next
Log = LogManager.GetLogger("Logger")
If My.Settings.WriteLogFile Then
#If Not PORTABLE Then
Log.InfoFormat("{0} {1} starting.", Application.ProductName, Application.ProductVersion)
#Else
Log.InfoFormat("{0} {1} {2} starting.", Application.ProductName, Application.ProductVersion, My.Language.strLabelPortableEdition)
#End If
Log.InfoFormat("Command Line: {0}", Environment.GetCommandLineArgs)
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
Next
Catch ex As Exception
Log.WarnFormat("Error retrieving operating system information from WMI. {0}", ex.Message)
End Try
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
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 _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 AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
My.Settings.CheckForUpdatesLastCheck = Date.Now
IsAnnouncementAvailable = AnnouncementAvailable
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
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()
@@ -622,28 +697,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
@@ -666,10 +761,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
@@ -732,7 +829,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
@@ -894,7 +993,7 @@ Namespace App
xW.WriteAttributeString("Name", My.Language.strConnections)
xW.WriteAttributeString("Export", "", "False")
xW.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
xW.WriteAttributeString("ConfVersion", "", "2.4")
xW.WriteAttributeString("ConfVersion", "", "2.5")
xW.WriteEndElement()
xW.WriteEndDocument()
@@ -903,7 +1002,6 @@ Namespace App
conL.ConnectionList = ConnectionList
conL.ContainerList = ContainerList
conL.Import = False
Tree.Node.ResetTree()
@@ -911,7 +1009,7 @@ Namespace App
' Load config
conL.ConnectionFileName = filename
conL.Load()
conL.Load(False)
Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode
Catch ex As Exception
@@ -994,8 +1092,6 @@ Namespace App
conL.PreviousSelected = LastSelected
End If
conL.Import = False
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
@@ -1007,7 +1103,7 @@ Namespace App
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
conL.SQLUpdate = Update
conL.Load()
conL.Load(False)
If My.Settings.UseSQLServer = True Then
LastSqlUpdate = Now
@@ -1024,14 +1120,31 @@ 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 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
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, conL.ConnectionFileName), ex)
If Not conL.ConnectionFileName = GetStartupConnectionFileName() Then
LoadConnections()
Exit Sub
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
@@ -1119,11 +1232,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
@@ -1133,136 +1245,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
@@ -1482,7 +1597,12 @@ Namespace App
If Not String.IsNullOrEmpty(Uri.Host) Then
Dim newConnectionInfo As New Connection.Info
newConnectionInfo.Name = String.Format(My.Language.strQuick, Uri.Host)
If My.Settings.IdentifyQuickConnectTabs Then
newConnectionInfo.Name = String.Format(My.Language.strQuick, Uri.Host)
Else
newConnectionInfo.Name = Uri.Host
End If
newConnectionInfo.Protocol = Protocol
newConnectionInfo.Hostname = Uri.Host
If Uri.Port = -1 Then
@@ -1521,11 +1641,13 @@ Namespace App
Exit Sub
End If
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Then
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Or _
Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.PuttySession Then
OpenConnection(Windows.treeForm.tvConnections.SelectedNode.Tag, Force)
ElseIf Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Container Then
For Each tNode As TreeNode In Tree.Node.SelectedNode.Nodes
If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Then
If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Or _
Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.PuttySession Then
If tNode.Tag IsNot Nothing Then
OpenConnection(tNode.Tag, Force)
End If

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

@@ -5,6 +5,7 @@ Imports mRemoteNG.App.Runtime
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports PSTaskDialog
Namespace Config
Namespace Connections
@@ -112,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
@@ -164,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
@@ -206,7 +205,12 @@ Namespace Config
sqlRd.Read()
End If
Me.confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture)
confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture)
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))
End If
Dim rootNode As TreeNode
rootNode = New TreeNode(sqlRd.Item("Name"))
@@ -235,6 +239,8 @@ Namespace Config
sqlRd.Close()
Windows.treeForm.tvConnections.BeginUpdate()
' SECTION 3. Populate the TreeView with the DOM nodes.
AddNodesFromSQL(rootNode)
'AddNodeFromXml(xDom.DocumentElement, Me._RootTreeNode)
@@ -248,6 +254,8 @@ Namespace Config
End If
Next
Windows.treeForm.tvConnections.EndUpdate()
'open connections from last mremote session
If My.Settings.OpenConsFromLastSession = True And My.Settings.NoReconnect = False Then
For Each conI As Connection.Info In Me._ConnectionList
@@ -265,10 +273,12 @@ Namespace Config
App.Runtime.IsConnectionsFileLoaded = True
'App.Runtime.Windows.treeForm.InitialRefresh()
sqlCon.Close()
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()
End If
End Try
End Sub
@@ -393,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
@@ -407,8 +420,6 @@ Namespace Config
Else
baseNode.Nodes.Add(tNode)
End If
Else
baseNode.Nodes.Add(tNode)
End If
'AddNodesFromSQL(tNode)
@@ -564,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
@@ -626,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
@@ -644,6 +662,12 @@ Namespace Config
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strOldConffile)
End If
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))
End If
' SECTION 2. Initialize the treeview control.
Dim rootNode As TreeNode
@@ -672,29 +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()
@@ -705,6 +729,8 @@ Namespace Config
End If
Next
Windows.treeForm.tvConnections.EndUpdate()
'open connections from last mremote session
If My.Settings.OpenConsFromLastSession = True And My.Settings.NoReconnect = False Then
For Each conI As Connection.Info In Me._ConnectionList
@@ -1037,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
@@ -44,6 +48,8 @@ Namespace Config
log.InfoFormat("Override Culture: {0}/{1}", Threading.Thread.CurrentThread.CurrentUICulture.Name, Threading.Thread.CurrentThread.CurrentUICulture.NativeName)
End If
Themes.ThemeManager.LoadTheme(My.Settings.ThemeName)
.WindowState = FormWindowState.Normal
If My.Settings.MainFormState = FormWindowState.Normal Then
If Not My.Settings.MainFormLocation.IsEmpty Then .Location = My.Settings.MainFormLocation
@@ -78,13 +84,14 @@ Namespace Config
.Location = newBounds.Location
If My.Settings.MainFormKiosk = True Then
Tools.Misc.Fullscreen.EnterFullscreen()
.Fullscreen.Value = True
.mMenViewFullscreen.Checked = True
End If
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
@@ -112,8 +119,7 @@ Namespace Config
End If
End With
Catch ex As Exception
App.Runtime.log.Error("Loading settings failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "Loading settings failed" & vbNewLine & ex.Message, True)
Log.Error("Loading settings failed" & vbNewLine & ex.Message)
End Try
End Sub
@@ -194,8 +200,7 @@ Namespace Config
End If
End With
Catch ex As Exception
App.Runtime.log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "LoadPanelsFromXML failed" & vbNewLine & ex.Message, True)
Log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message)
End Try
End Sub
@@ -266,8 +271,7 @@ Namespace Config
Return Windows.screenshotPanel
End If
Catch ex As Exception
App.Runtime.log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "GetContentFromPersistString failed" & vbNewLine & ex.Message, True)
Log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message)
End Try
Return Nothing

View File

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

View File

@@ -0,0 +1,9 @@
Namespace Config
Public Enum ConfirmClose
Unspecified = 0
Never = 1
[Exit] = 2
Multiple = 3
All = 4
End Enum
End Namespace

View File

@@ -0,0 +1,243 @@
Imports System.ComponentModel
Imports System.Management
Imports mRemoteNG.Messages
Imports Microsoft.Win32
Imports mRemoteNG.Connection.Protocol
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
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
puttyRootInfo.Name = Language.strPuttySavedSessionsRootName
Else
puttyRootInfo.Name = My.Settings.PuttySavedSessionsName
End If
If String.IsNullOrEmpty(My.Settings.PuttySavedSessionsPanel) Then
puttyRootInfo.Panel = Language.strGeneral
Else
puttyRootInfo.Panel = My.Settings.PuttySavedSessionsPanel
End If
Dim inUpdate As Boolean = False
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
If Not treeView.Nodes.Contains(_rootTreeNode) Then
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
treeView.Nodes.Add(_rootTreeNode)
End If
puttyRootInfo.TreeNode = _rootTreeNode
Dim newTreeNodes As New List(Of TreeNode)
For Each sessionInfo As Connection.PuttySession.Info In savedSessions
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 = treeNode
sessionInfo.Inherit.TurnOffInheritanceCompletely()
treeNode.Tag = sessionInfo
If isNewNode Then newTreeNodes.Add(treeNode)
Next
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()
Dim sessionsKey As RegistryKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey)
If sessionsKey Is Nothing Then Return New String() {}
Dim sessionNames As New List(Of String)
For Each sessionName As String In sessionsKey.GetSubKeyNames()
If raw Then
sessionNames.Add(sessionName)
Else
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
Protected Shared Function LoadSessions() As Connection.PuttySession.Info()
Dim sessionList As New List(Of Connection.PuttySession.Info)
Dim sessionInfo As Connection.Info
For Each sessionName As String In GetSessionNames(True)
sessionInfo = SessionToConnectionInfo(sessionName)
If sessionInfo Is Nothing OrElse String.IsNullOrEmpty(sessionInfo.Hostname) Then Continue For
sessionList.Add(sessionInfo)
Next
Return sessionList.ToArray()
End Function
Protected Shared Function SessionToConnectionInfo(ByVal sessionName As String) As Connection.PuttySession.Info
Dim sessionsKey As RegistryKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey)
If sessionsKey Is Nothing Then Return Nothing
Dim sessionKey As RegistryKey = sessionsKey.OpenSubKey(sessionName)
If sessionKey Is Nothing Then Return Nothing
sessionName = Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B"))
Dim sessionInfo As New Connection.PuttySession.Info
With sessionInfo
.PuttySession = sessionName
.Name = sessionName
.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
Case "rlogin"
.Protocol = Protocols.Rlogin
Case "serial"
Return Nothing
Case "ssh"
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.SSH2
End If
Case "telnet"
.Protocol = Protocols.Telnet
Case Else
Return Nothing
End Select
.Port = sessionKey.GetValue("PortNumber")
End With
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
Public Shared ReadOnly Property Names() As String()
Get
Return GetSessionNames()
End Get
End Property
Public Overloads Overrides Function GetStandardValues(ByVal context As System.ComponentModel.ITypeDescriptorContext) As System.ComponentModel.TypeConverter.StandardValuesCollection
Return New StandardValuesCollection(Names)
End Function
Public Overloads Overrides Function GetStandardValuesExclusive(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
Return True
End Function
Public Overloads Overrides Function GetStandardValuesSupported(ByVal context As ITypeDescriptorContext) As Boolean
Return True
End Function
End Class
End Class
End Namespace

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 Property Name() As String
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
@@ -27,7 +27,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameDescription"), _
LocalizedDescription("strPropertyDescriptionDescription")> _
Public Property Description() As String
Public Overridable Property Description() As String
Get
If Me._Inherit.Description And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -54,7 +54,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameIcon"), _
LocalizedDescription("strPropertyDescriptionIcon")> _
Public Property Icon() As String
Public Overridable Property Icon() As String
Get
If Me._Inherit.Icon And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -80,7 +80,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNamePanel"), _
LocalizedDescription("strPropertyDescriptionPanel")> _
Public Property Panel() As String
Public Overridable Property Panel() As String
Get
If Me._Inherit.Panel And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -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 Property Hostname() As String
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
@@ -121,7 +122,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameUsername"), _
LocalizedDescription("strPropertyDescriptionUsername")> _
Public Property Username() As String
Public Overridable Property Username() As String
Get
If Me._Inherit.Username And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -148,7 +149,7 @@ Namespace Connection
LocalizedDisplayName("strPropertyNamePassword"), _
LocalizedDescription("strPropertyDescriptionPassword"), _
PasswordPropertyText(True)> _
Public Property Password() As String
Public Overridable Property Password() As String
Get
If Me._Inherit.Password And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -202,7 +203,7 @@ Namespace Connection
LocalizedDisplayName("strPropertyNameProtocol"), _
LocalizedDescription("strPropertyDescriptionProtocol"), _
TypeConverter(GetType(Tools.Misc.EnumTypeConverter))> _
Public Property Protocol() As Connection.Protocol.Protocols
Public Overridable Property Protocol() As Connection.Protocol.Protocols
Get
If Me._Inherit.Protocol And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -255,7 +256,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNamePort"), _
LocalizedDescription("strPropertyDescriptionPort")> _
Public Property Port() As Integer
Public Overridable Property Port() As Integer
Get
If Me._Inherit.Port And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -281,8 +282,8 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNamePuttySession"), _
LocalizedDescription("strPropertyDescriptionPuttySession"), _
TypeConverter(GetType(mRemoteNG.Connection.PuttySession))> _
Public Property PuttySession() As String
TypeConverter(GetType(Config.PuttySessions.SessionList))> _
Public Overridable Property PuttySession() As String
Get
If Me._Inherit.PuttySession And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -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), _
@@ -958,7 +1012,7 @@ Namespace Connection
LocalizedDisplayName("strPropertyNameExternalToolBefore"), _
LocalizedDescription("strPropertyDescriptionExternalToolBefore"), _
TypeConverter(GetType(Tools.ExternalAppsTypeConverter))> _
Public Property PreExtApp() As String
Public Overridable Property PreExtApp() As String
Get
If Me._Inherit.PreExtApp And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -985,7 +1039,7 @@ Namespace Connection
LocalizedDisplayName("strPropertyNameExternalToolAfter"), _
LocalizedDescription("strPropertyDescriptionExternalToolAfter"), _
TypeConverter(GetType(Tools.ExternalAppsTypeConverter))> _
Public Property PostExtApp() As String
Public Overridable Property PostExtApp() As String
Get
If Me._Inherit.PostExtApp And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -1011,7 +1065,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameMACAddress"), _
LocalizedDescription("strPropertyDescriptionMACAddress")> _
Public Property MacAddress() As String
Public Overridable Property MacAddress() As String
Get
If Me._Inherit.MacAddress And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -1037,7 +1091,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameUser1"), _
LocalizedDescription("strPropertyDescriptionUser1")> _
Public Property UserField() As String
Public Overridable Property UserField() As String
Get
If Me._Inherit.UserField And Me._Parent IsNot Nothing Then
Dim parCon As Connection.Info = TryCast(Me._Parent, Container.Info).ConnectionInfo
@@ -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

@@ -17,14 +17,24 @@ Namespace Connection
End Set
End Property
Private _InterfaceControl As Connection.InterfaceControl
Public Property InterfaceControl() As Connection.InterfaceControl
Private WithEvents _connectionWindow As UI.Window.Connection
Public Property ConnectionWindow As UI.Window.Connection
Get
Return Me._InterfaceControl
Return _connectionWindow
End Get
Set(ByVal value As Connection.InterfaceControl)
Me._InterfaceControl = value
Set(value As UI.Window.Connection)
_connectionWindow = value
End Set
End Property
Private _interfaceControl As InterfaceControl
Public Property InterfaceControl() As InterfaceControl
Get
Return _interfaceControl
End Get
Set(ByVal value As InterfaceControl)
_interfaceControl = value
ConnectionWindow = TryCast(_interfaceControl.GetContainerControl(), UI.Window.Connection)
End Set
End Property
@@ -62,17 +72,29 @@ Namespace Connection
End Try
End Sub
Public Overridable Sub ResizeBegin(ByVal sender As System.Object, ByVal e As EventArgs) Handles _connectionWindow.ResizeBegin
End Sub
Public Overridable Sub Resize(ByVal sender As System.Object, ByVal e As EventArgs) Handles _connectionWindow.Resize
End Sub
Public Overridable Sub ResizeEnd(ByVal sender As System.Object, ByVal e As EventArgs) Handles _connectionWindow.ResizeEnd
End Sub
Public Overridable Function SetProps() As Boolean
Try
Me._InterfaceControl.Parent.Tag = Me._InterfaceControl
Me._InterfaceControl.Show()
Me._interfaceControl.Parent.Tag = Me._interfaceControl
Me._interfaceControl.Show()
If Me._Control IsNot Nothing Then
Me._Control.Name = Me._Name
Me._Control.Parent = Me._InterfaceControl
Me._Control.Location = Me._InterfaceControl.Location
Me._Control.Parent = Me._interfaceControl
Me._Control.Location = Me._interfaceControl.Location
Me._Control.Size = Me.InterfaceControl.Size
Me._Control.Anchor = Me._InterfaceControl.Anchor
Me._Control.Anchor = Me._interfaceControl.Anchor
End If
Return True
@@ -92,10 +114,6 @@ Namespace Connection
Me.Close()
End Sub
Public Overridable Sub Resize()
End Sub
Public Overridable Sub Close()
Dim t As New Thread(AddressOf CloseBG)
t.SetApartmentState(Threading.ApartmentState.STA)

View File

@@ -55,9 +55,9 @@ Namespace Connection
Dim objWebBrowser As WebBrowser = TryCast(wBrowser, WebBrowser)
Dim objAxWebBrowser As SHDocVw.WebBrowser = DirectCast(objWebBrowser.ActiveXInstance, SHDocVw.WebBrowser)
objWebBrowser.AllowWebBrowserDrop = False
objWebBrowser.ScrollBarsEnabled = True
AddHandler objWebBrowser.Navigated, AddressOf wBrowser_Navigated
AddHandler objWebBrowser.DocumentTitleChanged, AddressOf wBrowser_DocumentTitleChanged
AddHandler objAxWebBrowser.NewWindow3, AddressOf wBrowser_NewWindow3
End If
@@ -118,8 +118,14 @@ Namespace Connection
#End Region
#Region "Events"
Private Sub gex_CreateWindow(ByVal sender As Object, ByVal e As Skybound.Gecko.GeckoCreateWindowEventArgs)
e.WebBrowser = Me.wBrowser
Private Sub wBrowser_Navigated(sender As Object, e As System.Windows.Forms.WebBrowserNavigatedEventArgs)
Dim objWebBrowser As WebBrowser = TryCast(wBrowser, WebBrowser)
If objWebBrowser Is Nothing Then Return
' This can only be set once the WebBrowser control is shown, it will throw a COM exception otherwise.
objWebBrowser.AllowWebBrowserDrop = False
RemoveHandler objWebBrowser.Navigated, AddressOf wBrowser_Navigated
End Sub
Private Sub wBrowser_NewWindow3(ByRef ppDisp As Object, ByRef Cancel As Boolean, ByVal dwFlags As Long, ByVal bstrUrlContext As String, ByVal bstrUrl As String)
@@ -177,6 +183,7 @@ Namespace Connection
End Enum
Private Enum NWMF
' ReSharper disable InconsistentNaming
NWMF_UNLOADING = &H1
NWMF_USERINITED = &H2
NWMF_FIRST = &H4
@@ -191,6 +198,7 @@ Namespace Connection
NWMF_SUGGESTWINDOW = &H40000
NWMF_SUGGESTTAB = &H80000
NWMF_INACTIVETAB = &H100000
' ReSharper restore InconsistentNaming
End Enum
#End Region
End Class

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

@@ -1,6 +1,7 @@
Imports mRemoteNG.App.Native
Imports System.Threading
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Tools
Namespace Connection
Namespace Protocol
@@ -86,8 +87,9 @@ Namespace Connection
Return Nothing
End If
IntAppProcessStartInfo.UseShellExecute = False
IntAppProcessStartInfo.FileName = _IntAppPath
IntAppProcessStartInfo.Arguments = Arguments
IntAppProcessStartInfo.Arguments = CommandLineArguments.EscapeBackslashes(Arguments)
IntAppProcess = Process.Start(IntAppProcessStartInfo)
IntAppProcess.EnableRaisingEvents = True
@@ -120,7 +122,7 @@ Namespace Connection
SetWindowLong(Me.IntAppHandle, 0, WS_VISIBLE)
ShowWindow(Me.IntAppHandle, SW_SHOWMAXIMIZED)
Resize()
Resize(Me, New EventArgs)
MyBase.Connect()
Return True
@@ -139,8 +141,9 @@ Namespace Connection
End Try
End Sub
Public Overrides Sub Resize()
Public Overrides Sub Resize(ByVal sender As Object, ByVal e As EventArgs)
Try
If InterfaceControl.Size = Size.Empty Then Return
MoveWindow(IntAppHandle, -SystemInformation.FrameBorderSize.Width, -(SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height), Me.InterfaceControl.Width + (SystemInformation.FrameBorderSize.Width * 2), Me.InterfaceControl.Height + SystemInformation.CaptionHeight + (SystemInformation.FrameBorderSize.Height * 2), True)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strIntAppResizeFailed & vbNewLine & ex.Message, True)

View File

@@ -6,6 +6,8 @@ Imports System.Threading
Imports Microsoft.Win32
Imports System.Drawing
Imports mRemoteNG.App.Runtime
Imports System.Text.RegularExpressions
Imports mRemoteNG.Tools
Namespace Connection
Namespace Protocol
@@ -71,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
@@ -111,45 +101,57 @@ Namespace Connection
PuttyProcess = New Process
With PuttyProcess.StartInfo
.UseShellExecute = False
.FileName = _PuttyPath
Select Case _PuttyProtocol
Case Putty_Protocol.raw
.Arguments = "-load " & """" & PuttyEscapeArgument(InterfaceControl.Info.PuttySession) & """" & " -" & _PuttyProtocol.ToString & " -P " & InterfaceControl.Info.Port & " """ & InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.rlogin
.Arguments = "-load " & """" & PuttyEscapeArgument(InterfaceControl.Info.PuttySession) & """" & " -" & _PuttyProtocol.ToString & " -P " & InterfaceControl.Info.Port & " """ & InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.ssh
Dim userArgument As String = ""
Dim passwordArgument As String = ""
Dim arguments As New CommandLineArguments
arguments.EscapeForShell = False
If My.Settings.EmptyCredentials = "windows" Then
userArgument = " -l """ & Environment.UserName & """"
ElseIf My.Settings.EmptyCredentials = "custom" Then
userArgument = " -l """ & My.Settings.DefaultUsername & """"
passwordArgument = " -pw """ & PuttyEscapeArgument(Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)) & """"
arguments.Add("-load", InterfaceControl.Info.PuttySession)
If Not TypeOf InterfaceControl.Info Is PuttySession.Info Then
arguments.Add("-" & _PuttyProtocol.ToString)
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 InterfaceControl.Info.Username <> "" Then
userArgument = " -l """ & InterfaceControl.Info.Username & """"
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
If InterfaceControl.Info.Password <> "" Then
passwordArgument = " -pw """ & PuttyEscapeArgument(InterfaceControl.Info.Password) & """"
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
.Arguments = "-load " & """" & PuttyEscapeArgument(InterfaceControl.Info.PuttySession) & """" & " -" & _PuttyProtocol.ToString & " -" & _PuttySSHVersion & userArgument & passwordArgument & " -P " & InterfaceControl.Info.Port & " """ & InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.telnet
.Arguments = "-load " & """" & PuttyEscapeArgument(InterfaceControl.Info.PuttySession) & """" & " -" & _PuttyProtocol.ToString & " -P " & InterfaceControl.Info.Port & " """ & InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.serial
.Arguments = "-load " & """" & PuttyEscapeArgument(InterfaceControl.Info.PuttySession) & """" & " -" & _PuttyProtocol.ToString & " -P " & InterfaceControl.Info.Port & " """ & InterfaceControl.Info.Hostname & """"
End Select
If _isPuttyNg Then
.Arguments = .Arguments & " -hwndparent " & InterfaceControl.Handle.ToString()
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
arguments.Add(InterfaceControl.Info.Hostname)
End If
'REMOVE IN RELEASE!
'MessageCollector.AddMessage(MessageClass.InformationMsg, "PuTTY Arguments: " & .Arguments, True)
If _isPuttyNg Then
arguments.Add("-hwndparent", InterfaceControl.Handle.ToString())
End If
.Arguments = arguments.ToString
End With
PuttyProcess.EnableRaisingEvents = True
@@ -179,7 +181,7 @@ Namespace Connection
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strPuttyTitle, PuttyProcess.MainWindowTitle), True)
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strPuttyParentHandle, InterfaceControl.Parent.Handle.ToString), True)
Resize()
Resize(Me, New EventArgs)
MyBase.Connect()
Return True
@@ -189,26 +191,18 @@ Namespace Connection
End Try
End Function
' Due to the way PuTTY handles command line arguments, backslashes followed by a quotation mark will be removed.
' Since all the strings we send to PuTTY are surrounded by quotation marks, we need to escape any trailing
' backslashes by adding another. See split_into_argv() in WINDOWS\WINUTILS.C of the PuTTY source for more info.
Private Shared Function PuttyEscapeArgument(ByVal argument As String) As String
If argument.EndsWith("\") Then argument = argument & "\"
Return argument
End Function
Public Overrides Sub Focus()
Try
If ConnectionWindow.InTabDrag Then Return
SetForegroundWindow(PuttyHandle)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strPuttyFocusFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Public Overrides Sub Resize()
Public Overrides Sub Resize(ByVal sender As Object, ByVal e As EventArgs)
Try
If frmMain.WindowState = FormWindowState.Minimized Then Return
If InterfaceControl.Size = Size.Empty Then Return
MoveWindow(PuttyHandle, -SystemInformation.FrameBorderSize.Width, -(SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height), InterfaceControl.Width + (SystemInformation.FrameBorderSize.Width * 2), InterfaceControl.Height + SystemInformation.CaptionHeight + (SystemInformation.FrameBorderSize.Height * 2), True)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strPuttyResizeFailed & vbNewLine & ex.Message, True)
@@ -244,27 +238,6 @@ Namespace Connection
#End Region
#Region "Public Shared Methods"
Public Shared Function GetSessions() As Array
Try
Dim regKey As RegistryKey
regKey = Registry.CurrentUser.OpenSubKey("Software\SimonTatham\PuTTY\Sessions")
Dim arrKeys() As String
arrKeys = regKey.GetSubKeyNames()
Array.Resize(arrKeys, arrKeys.Length + 1)
arrKeys(arrKeys.Length - 1) = "Default Settings"
For i As Integer = 0 To arrKeys.Length - 1
arrKeys(i) = System.Web.HttpUtility.UrlDecode(arrKeys(i))
Next
Return arrKeys
Catch ex As Exception
App.Runtime.MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strPuttyGetSessionsFailed & vbNewLine & ex.Message, True)
Return Nothing
End Try
End Function
Public Shared Function IsFilePuttyNg(file As String) As Boolean
Dim isPuttyNg As Boolean
Try
@@ -274,21 +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()
mRemoteNG.Connection.PuttySession.PuttySessions = GetSessions()
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,100 +3,124 @@ 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"
Private _SmartSize As Boolean
Public Property SmartSize() As Boolean
Get
Return Me.RDP.AdvancedSettings4.SmartSizing
Return _rdpClient.AdvancedSettings2.SmartSizing
End Get
Set(ByVal value As Boolean)
Me.RDP.AdvancedSettings4.SmartSizing = value
_rdpClient.AdvancedSettings2.SmartSizing = value
ReconnectForResize()
End Set
End Property
Private _Fullscreen As Boolean
Public Property Fullscreen() As Boolean
Get
Return Me.RDP.FullScreen
Return _rdpClient.FullScreen
End Get
Set(ByVal value As Boolean)
Me.RDP.FullScreen = value
_rdpClient.FullScreen = value
ReconnectForResize()
End Set
End Property
Private _redirectKeys As Boolean = False
Public Property RedirectKeys As Boolean
Get
Return _redirectKeys
End Get
Set(value As Boolean)
_redirectKeys = value
Try
If Not _redirectKeys Then Return
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)
End Try
End Set
End Property
#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.AdvancedSettings.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()
Me.SetRedirectKeys()
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
@@ -108,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
@@ -123,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()
@@ -148,121 +173,163 @@ 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)
End Try
End Sub
Public Overrides Sub Resize()
Control.Location = InterfaceControl.Location
Control.Size = InterfaceControl.Size
MyBase.Resize()
Private _controlBeginningSize As New Size
Public Overrides Sub ResizeBegin(ByVal sender As Object, ByVal e As EventArgs)
_controlBeginningSize = Control.Size
End Sub
Public Overrides Sub Resize(ByVal sender As Object, ByVal e As EventArgs)
If DoResize() And _controlBeginningSize.IsEmpty Then
ReconnectForResize()
End If
MyBase.Resize(sender, e)
End Sub
Public Overrides Sub ResizeEnd(ByVal sender As Object, ByVal e As EventArgs)
DoResize()
If Not Control.Size = _controlBeginningSize Then
ReconnectForResize()
End If
_controlBeginningSize = Size.Empty
End Sub
#End Region
#Region "Private Methods"
Private Sub SetRDGateway()
Private Function DoResize() As Boolean
Control.Location = InterfaceControl.Location
If Not Control.Size = InterfaceControl.Size And Not InterfaceControl.Size = Size.Empty Then
Control.Size = InterfaceControl.Size
Return True
Else
Return False
End If
End Function
Private Sub ReconnectForResize()
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) Then Return
If SmartSize Then Return
Dim size As Size
If Not Fullscreen Then
size = Control.Size
Else
size = Screen.FromControl(Control).Bounds.Size
End If
Dim msRdpClient8 As IMsRdpClient8 = _rdpClient
msRdpClient8.Reconnect(size.Width, size.Height)
End Sub
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)
@@ -272,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)
@@ -302,34 +366,21 @@ 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)
End Try
End Sub
Private Sub SetRedirectKeys()
Try
If Me.Info.RedirectKeys Then
RDP.AdvancedSettings2.ContainerHandledFullScreen = 1
RDP.AdvancedSettings2.DisplayConnectionBar = False
RDP.AdvancedSettings2.PinConnectionBar = False
RDP.FullScreen = True
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectKeysFailed & vbNewLine & ex.Message, True)
End Try
End Sub
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
@@ -338,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
@@ -362,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
@@ -382,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
@@ -405,16 +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)
RaiseEvent LeaveFullscreen(Me, e)
Private Sub RDPEvent_OnLoginComplete()
_loginComplete = True
End Sub
Private Sub RDPEvent_OnLeaveFullscreenMode()
Fullscreen = False
RaiseEvent LeaveFullscreen(Me, New EventArgs())
End Sub
#End Region
@@ -545,87 +611,26 @@ 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
Public Shared RDC60 As New Version(6, 0, 6000)
Public Shared RDC61 As New Version(6, 0, 6001)
Public Shared RDC70 As New Version(6, 1, 7600)
Public Shared RDC80 As New Version(6, 2, 9200)
End Class
#Region "Terminal Sessions"
@@ -806,7 +811,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
@@ -814,11 +819,10 @@ Namespace Connection
tmrReconnect.Enabled = False
ReconnectGroup.DisposeReconnectGroup()
'SetProps()
RDP.Connect()
_rdpClient.Connect()
End If
End Sub
#End Region
End Class
End Namespace
End Namespace

View File

@@ -1,21 +0,0 @@
Imports System.ComponentModel
Namespace Connection
Public Class PuttySession
Inherits StringConverter
Public Shared PuttySessions As String() = New String() {}
Public Overloads Overrides Function GetStandardValues(ByVal context As System.ComponentModel.ITypeDescriptorContext) As System.ComponentModel.TypeConverter.StandardValuesCollection
Return New StandardValuesCollection(PuttySessions)
End Function
Public Overloads Overrides Function GetStandardValuesExclusive(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
Return True
End Function
Public Overloads Overrides Function GetStandardValuesSupported(ByVal context As ITypeDescriptorContext) As Boolean
Return True
End Function
End Class
End Namespace

View File

@@ -0,0 +1,121 @@
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
<[ReadOnly](True)> _
Public Overrides Property PuttySession() As String
<[ReadOnly](True)> _
Public Overrides Property Name() As String
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property Description() As String
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property Icon() As String
Get
Return "PuTTY"
End Get
Set(value As String)
End Set
End Property
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property Panel() As String
Get
Return RootPuttySessionsInfo.Panel
End Get
Set(value As String)
End Set
End Property
<[ReadOnly](True)> _
Public Overrides Property Hostname() As String
<[ReadOnly](True)> _
Public Overrides Property Username() As String
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property Password() As String
<[ReadOnly](True)> _
Public Overrides Property Protocol() As Protocol.Protocols
<[ReadOnly](True)> _
Public Overrides Property Port() As Integer
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property PreExtApp() As String
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property PostExtApp() As String
<[ReadOnly](True), _
Browsable(False)> _
Public Overrides Property MacAddress() As String
<[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()
@@ -689,6 +688,7 @@ Partial Class frmMain
Me.tsExternalTools.Location = New System.Drawing.Point(39, 49)
Me.tsExternalTools.Name = "tsExtAppsToolbar"
Me.tsExternalTools.Size = New System.Drawing.Size(111, 25)
Me.tsExternalTools.MaximumSize = New System.Drawing.Size(0, 25)
Me.tsExternalTools.TabIndex = 17
'
'cMenExtAppsToolbar
@@ -712,6 +712,7 @@ Partial Class frmMain
Me.tsQuickConnect.Location = New System.Drawing.Point(3, 24)
Me.tsQuickConnect.Name = "tsQuickConnect"
Me.tsQuickConnect.Size = New System.Drawing.Size(331, 25)
Me.tsQuickConnect.MaximumSize = New System.Drawing.Size(0, 25)
Me.tsQuickConnect.TabIndex = 18
'
'btnQuickyPlay
@@ -741,6 +742,7 @@ Partial Class frmMain
Me.ToolStrip1.Location = New System.Drawing.Point(3, 74)
Me.ToolStrip1.Name = "ToolStrip1"
Me.ToolStrip1.Size = New System.Drawing.Size(264, 25)
Me.ToolStrip1.MaximumSize = New System.Drawing.Size(0, 25)
Me.ToolStrip1.TabIndex = 19
Me.ToolStrip1.Visible = False
'
@@ -790,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
@@ -857,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

@@ -5,6 +5,8 @@ Imports System.Runtime.InteropServices
Imports Crownwood
Imports mRemoteNG.App.Native
Imports PSTaskDialog
Imports mRemoteNG.Config
Imports mRemoteNG.Themes
Public Class frmMain
Private _previousWindowState As FormWindowState
@@ -20,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()
@@ -46,18 +50,19 @@ Public Class frmMain
ApplyLanguage()
AddHandler ThemeManager.ThemeChanged, AddressOf ApplyThemes
ApplyThemes()
fpChainedWindowHandle = SetClipboardViewer(Me.Handle)
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()
Startup.GetPuttySessions()
App.Runtime.GetExtApps()
GetExtApps()
Windows.treePanel.Focus()
Tree.Node.TreeView = Windows.treeForm.tvConnections
@@ -69,25 +74,13 @@ Public Class frmMain
Return
End If
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
@@ -124,7 +117,7 @@ Public Class frmMain
mMenViewConfig.Text = My.Language.strMenuConfig
mMenViewSessions.Text = My.Language.strMenuSessions
mMenViewErrorsAndInfos.Text = My.Language.strMenuNotifications
mMenViewScreenshotManager.Text = My.Language.strMenuScreenshotManager
mMenViewScreenshotManager.Text = My.Language.strScreenshots
mMenViewJumpTo.Text = My.Language.strMenuJumpTo
mMenViewJumpToConnectionsConfig.Text = My.Language.strMenuConnectionsAndConfig
mMenViewJumpToSessionsScreenshots.Text = My.Language.strMenuSessionsAndScreenshots
@@ -166,23 +159,97 @@ Public Class frmMain
ToolStripMenuItem2.Text = My.Language.strKeysCtrlEsc
End Sub
Public Sub ApplyThemes()
With ThemeManager.ActiveTheme
pnlDock.DockBackColor = .WindowBackgroundColor
tsContainer.BackColor = .ToolbarBackgroundColor
tsContainer.ForeColor = .ToolbarTextColor
tsContainer.TopToolStripPanel.BackColor = .ToolbarBackgroundColor
tsContainer.TopToolStripPanel.ForeColor = .ToolbarTextColor
tsContainer.BottomToolStripPanel.BackColor = .ToolbarBackgroundColor
tsContainer.BottomToolStripPanel.ForeColor = .ToolbarTextColor
tsContainer.LeftToolStripPanel.BackColor = .ToolbarBackgroundColor
tsContainer.LeftToolStripPanel.ForeColor = .ToolbarTextColor
tsContainer.RightToolStripPanel.BackColor = .ToolbarBackgroundColor
tsContainer.RightToolStripPanel.ForeColor = .ToolbarTextColor
tsContainer.ContentPanel.BackColor = .ToolbarBackgroundColor
tsContainer.ContentPanel.ForeColor = .ToolbarTextColor
msMain.BackColor = .ToolbarBackgroundColor
msMain.ForeColor = .ToolbarTextColor
ApplyMenuColors(msMain.Items)
tsExternalTools.BackColor = .ToolbarBackgroundColor
tsExternalTools.ForeColor = .ToolbarTextColor
tsQuickConnect.BackColor = .ToolbarBackgroundColor
tsQuickConnect.ForeColor = .ToolbarTextColor
End With
End Sub
Private Shared Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
With ThemeManager.ActiveTheme
Dim menuItem As ToolStripMenuItem
For Each item As ToolStripItem In itemCollection
item.BackColor = .MenuBackgroundColor
item.ForeColor = .MenuTextColor
menuItem = TryCast(item, ToolStripMenuItem)
If menuItem IsNot Nothing Then
ApplyMenuColors(menuItem.DropDownItems)
End If
Next
End With
End Sub
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown
#If Not PORTABLE Then
If Not My.Settings.CheckForUpdatesAsked Then
Dim commandButtons() As String = {My.Language.strAskUpdatesCommandRecommended, My.Language.strAskUpdatesCommandCustom, My.Language.strAskUpdatesCommandAskLater}
cTaskDialog.ShowTaskDialogBox(Me, My.Application.Info.ProductName, My.Language.strAskUpdatesMainInstruction, String.Format(My.Language.strAskUpdatesContent, My.Application.Info.ProductName), "", "", "", "", String.Join("|", commandButtons), eTaskDialogButtons.None, eSysIcons.Question, eSysIcons.Question)
If cTaskDialog.CommandButtonResult = 0 Or cTaskDialog.CommandButtonResult = 1 Then
My.Settings.CheckForUpdatesAsked = True
End If
If cTaskDialog.CommandButtonResult = 1 Then
Windows.ShowUpdatesTab()
End If
End If
Dim nextUpdateCheck As Date = My.Settings.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays))
If My.Settings.UpdatePending Or Date.UtcNow > nextUpdateCheck Then
If Not IsHandleCreated Then CreateHandle() ' Make sure the handle is created so that InvokeRequired returns the correct result
Startup.CheckForUpdate()
Startup.CheckForAnnouncement()
End If
#End If
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If WindowList IsNot Nothing Then
If My.Settings.ConfirmExit And WindowList.Count > 0 Then
If Not (WindowList Is Nothing OrElse WindowList.Count = 0) Then
Dim connectionWindow As UI.Window.Connection
Dim openConnections As Integer = 0
For Each window As UI.Window.Base In WindowList
connectionWindow = TryCast(window, UI.Window.Connection)
If connectionWindow IsNot Nothing Then
openConnections = openConnections + connectionWindow.TabController.TabPages.Count
End If
Next
If openConnections > 0 And _
(My.Settings.ConfirmCloseConnection = ConfirmClose.All Or _
(My.Settings.ConfirmCloseConnection = ConfirmClose.Multiple And openConnections > 1) Or _
My.Settings.ConfirmCloseConnection = ConfirmClose.Exit) Then
Dim result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, My.Language.strConfirmExitMainInstruction, "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.ConfirmExit = False
My.Settings.ConfirmCloseConnection = My.Settings.ConfirmCloseConnection - 1
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
@@ -190,30 +257,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()
@@ -227,8 +277,8 @@ Public Class frmMain
Public Sub AddExternalToolsToToolBar()
Try
For Each item As ToolStripItem In tsExternalTools.Items
item.Dispose()
For index As Integer = tsExternalTools.Items.Count - 1 To 0 Step -1
tsExternalTools.Items(index).Dispose()
Next
tsExternalTools.Items.Clear()
@@ -256,7 +306,8 @@ Public Class frmMain
Private Sub tsExtAppEntry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim extA As Tools.ExternalTool = sender.Tag
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Then
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Or _
Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.PuttySession Then
extA.Start(Tree.Node.SelectedNode.Tag)
Else
extA.Start()
@@ -283,8 +334,10 @@ Public Class frmMain
#Region "Menu"
#Region "File"
Private Sub mMenFile_DropDownOpening(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenFile.DropDownOpening
Select Case Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode)
Select Case Tree.Node.GetNodeType(Tree.Node.SelectedNode)
Case Tree.Node.Type.Root
mMenFileNewConnection.Enabled = True
mMenFileNewFolder.Enabled = True
mMenFileImportExport.Enabled = True
mMenFileDelete.Enabled = False
mMenFileRename.Enabled = True
@@ -293,6 +346,8 @@ Public Class frmMain
mMenFileRename.Text = My.Language.strMenuRenameFolder
mMenFileDuplicate.Text = My.Language.strMenuDuplicate
Case Tree.Node.Type.Container
mMenFileNewConnection.Enabled = True
mMenFileNewFolder.Enabled = True
mMenFileImportExport.Enabled = True
mMenFileDelete.Enabled = True
mMenFileRename.Enabled = True
@@ -301,6 +356,8 @@ Public Class frmMain
mMenFileRename.Text = My.Language.strMenuRenameFolder
mMenFileDuplicate.Text = My.Language.strMenuDuplicateFolder
Case Tree.Node.Type.Connection
mMenFileNewConnection.Enabled = True
mMenFileNewFolder.Enabled = True
mMenFileImportExport.Enabled = False
mMenFileDelete.Enabled = True
mMenFileRename.Enabled = True
@@ -308,7 +365,19 @@ Public Class frmMain
mMenFileDelete.Text = My.Language.strMenuDeleteConnection
mMenFileRename.Text = My.Language.strMenuRenameConnection
mMenFileDuplicate.Text = My.Language.strMenuDuplicateConnection
Case Tree.Node.Type.PuttyRoot, Tree.Node.Type.PuttySession
mMenFileNewConnection.Enabled = False
mMenFileNewFolder.Enabled = False
mMenFileImportExport.Enabled = False
mMenFileDelete.Enabled = False
mMenFileRename.Enabled = False
mMenFileDuplicate.Enabled = False
mMenFileDelete.Text = My.Language.strMenuDelete
mMenFileRename.Text = My.Language.strMenuRename
mMenFileDuplicate.Text = My.Language.strMenuDuplicate
Case Else
mMenFileNewConnection.Enabled = True
mMenFileNewFolder.Enabled = True
mMenFileImportExport.Enabled = False
mMenFileDelete.Enabled = False
mMenFileRename.Enabled = False
@@ -511,14 +580,10 @@ Public Class frmMain
End If
End Sub
Public Fullscreen As New Tools.Misc.Fullscreen(Me)
Private Sub mMenViewFullscreen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenViewFullscreen.Click
If Tools.Misc.Fullscreen.FullscreenActive Then
Tools.Misc.Fullscreen.ExitFullscreen()
Me.mMenViewFullscreen.Checked = False
Else
Tools.Misc.Fullscreen.EnterFullscreen()
Me.mMenViewFullscreen.Checked = True
End If
Fullscreen.Value = Not Fullscreen.Value
mMenViewFullscreen.Checked = Fullscreen.Value
End Sub
#End Region
@@ -664,7 +729,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()
@@ -677,23 +742,24 @@ Public Class frmMain
menToolStrip.DropDownItems.Add(tMenItem)
AddNodeToMenu(tNode.Nodes, tMenItem)
ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Then
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)
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
@@ -701,28 +767,34 @@ Public Class frmMain
#End Region
#Region "Window Overrides and DockPanel Stuff"
Private Sub frmMain_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
If Me.WindowState = FormWindowState.Minimized Then
Private _inSizeMove As Boolean = False
Private Sub frmMain_ResizeBegin(ByVal sender As Object, ByVal e As EventArgs) Handles Me.ResizeBegin
_inSizeMove = True
End Sub
Private Sub frmMain_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Resize
If WindowState = FormWindowState.Minimized Then
If My.Settings.MinimizeToTray Then
If App.Runtime.NotificationAreaIcon Is Nothing Then
App.Runtime.NotificationAreaIcon = New Tools.Controls.NotificationAreaIcon()
If NotificationAreaIcon Is Nothing Then
NotificationAreaIcon = New Tools.Controls.NotificationAreaIcon()
End If
Me.Hide()
Hide()
End If
Else
PreviousWindowState = Me.WindowState
PreviousWindowState = WindowState
End If
End Sub
Private _inMouseActivate As Boolean = False
Private _inSizeMove As Boolean = False
Private Sub frmMain_ResizeEnd(ByVal sender As Object, ByVal e As EventArgs) Handles Me.ResizeEnd
_inSizeMove = False
' This handles activations from clicks that started a size/move operation
ActivateConnection()
End Sub
Private _inMouseActivate As Boolean = False
Protected Overloads Overrides Sub WndProc(ByRef m As Message)
Try
#If Config = "Debug" Then
'Debug.Print(m.Msg)
#End If
Select Case m.Msg
Case WM_MOUSEACTIVATE
_inMouseActivate = True
@@ -737,7 +809,7 @@ Public Class frmMain
' Let TreeViews and ComboBoxes get focus but don't simulate a mouse event
If TypeOf control Is TreeView Or TypeOf control Is ComboBox Then Exit Select
If control.CanSelect Or TypeOf control Is MenuStrip Or TypeOf control Is ToolStrip Or TypeOf control Is Magic.Controls.InertButton Then
If control.CanSelect Or TypeOf control Is MenuStrip Or TypeOf control Is ToolStrip Or TypeOf control Is Magic.Controls.TabControl Or TypeOf control Is Magic.Controls.InertButton Then
' Simulate a mouse event since one wasn't generated by Windows
Dim clientMousePosition As Point = control.PointToClient(MousePosition)
SendMessage(control.Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(clientMousePosition.X, clientMousePosition.Y))
@@ -749,13 +821,6 @@ Public Class frmMain
' This handles activations from clicks that did not start a size/move operation
ActivateConnection()
Case WM_ENTERSIZEMOVE
_inSizeMove = True
Case WM_EXITSIZEMOVE
_inSizeMove = False
' This handles activations from clicks that started a size/move operation
ActivateConnection()
Case WM_WINDOWPOSCHANGED
' Ignore this message if the window wasn't activated
Dim windowPos As WINDOWPOS = Marshal.PtrToStructure(m.LParam, GetType(WINDOWPOS))

View File

@@ -124,154 +124,177 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABi
IgAAAk1TRnQBSQFMAgEBBwEAASABAQEgAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIB4AAeIB7wH0Af8BqAHJAdcB/wFtAaQBtgH/AVABhgGcAf8BOwFiAYoB/wE2
AV0BhwH/ATYBZwGVAf8BSQGOAasB/wGPAbcBzQH/Ad0B6gHxAf8MAANXAbcDnwH/A5oB/wOWAf8DkQH/
A40B/wOJAf8DhAH/A4AB/wNYAf8DVAH/A1AB/wNNAf8DSQH/A0YB/wNXAbcYAAMNARIDVgG2A1YBtgMN
ARFgAAGtAc8B3wH/AUgBkQGtAf8BTQGjAb8B/wFpAcAB1AH/AZUB2QHmAf8BgQHbAfAB/wFBAcYB7AH/
ARUBqgHdAf8BBwGSAccB/wETAYABrAH/ASoBYgGSAf8BnQG/AdEB/wgAA6gB/wPpAf8D0wH/A9IB/wPR
Af8D0AH/A84B/wPNAf8DzQH/A8sB/wPLAf8DygH/A8kB/wPIAf8D4gH/A0YB/xgAA14B2QPkAf8D4wH/
A1gBwWAAAUsBhAGbAf8BNQG9AecB/wFYAdMB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/AUEBygHw
Af8BDwG2Ae0B/wEAAacB6AH/AQABoQHhAf8BAAGWAdIB/wEuAU8BawH/CAADrQH/A9YB/wO6Af8DuAH/
A7UB/wOzAf8DsQH/A7AB/wOtAf8DqwH/A6oB/wOoAf8DpwH/A6YB/wPIAf8DSgH/CAADCwEPA1QBrQM6
AWEDPwFuA3EB+AHiAeEB3wH/AeEB4AHfAf8DXwHzAzwBZwM8AWYDUwGtAwsBD1AAAU4BhwGeAf8BNAHE
AfAB/wFaAdQB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/AUEBygHwAf8BDwG2Ae0B/wEAAagB6AH/
AQABoQHhAf8BAAGcAdoB/wEvAVABbQH/CAADsQH/A9kB/wO9Af8DugH/A7gB/wO2Af8DtQH/A7MB/wOw
Af8DrwH/A60B/wOrAf8DqQH/A6gB/wPKAf8DTgH/CAADWgHFBP8ClgGVAf4ClQGUAf4C5wHmAf8B1gHV
AdMB/wHXAdYB1AH/AeMB4gHgAf8BigGJAYcB/gOoAf0B6QHoAeYB/wNYAcFQAAFQAYkBoAH/ATQBxAHv
Af8BWQHUAfEB/wGNAeMB9AH/AaIB6wH2Af8BggHfAfMB/wFCAcoB8AH/AQ8BtgHtAf8BAAGoAegB/wEA
AaEB4QH/AQABnAHaAf8BMQFTAW8B/wgAA7YB/wPdAf8DwQH/A70B/wO8Af8DugH/A7gB/wO1Af8DtAH/
A7IB/wOwAf8DrQH/A6wB/wOsAf8DzwH/A1IB/wgAA2QB5wL5AfcB/wLvAe4B/wLbAdoB/wHKAskB/wHJ
AcgBxgH/AckByAHHAf8ByQHIAccB/wLLAckB/wHmAeUB5AH/AeUB5AHiAf8DZQHlUAABUgGMAaIB/wE2
AcYB8AH/AVsB1AHxAf8BjAHjAfQB/wGiAesB9gH/AYIB3wH0Af8BQgHKAfAB/wEPAbYB7QH/AQABqAHo
Af8BAAGiAeIB/wEAAZsB2wH/ATMBVgGAAf8IAANaAb0D2gH/A8gB/wPAAf8DvwH/A70B/wO6Af8DuAH/
A7cB/wO1Af8DswH/A7AB/wOvAf8DswH/A8IB/wNaAb0IAANOAZUB9gH1AfQB/wHmAeUB5AH/Ab8BvgG9
Af8C6wHqAf8B1AHTAdIB/wHWAdUB1AH/AeIC4QH/ArQBswH/AdcB1gHUAf8B4gHhAd8B/wNKAY1QAAFV
AY8BpQH/ATcBxgHwAf8BWwHUAfIB/wGNAeMB9AH/AaIB6wH2Af8BgwHfAfQB/wFBAcoB8AH/AQ8BtgHt
Af8BAAGnAegB/wEAAaEB4gH/AQABnAHbAf8BNQFZAYMB/wgAA1oBvQPjAf8D5wH/A+EB/wPgAf8D4AH/
A98B/wPfAf8D3gH/A90B/wPdAf8D3AH/A9sB/wPgAf8D0AH/A1oBvQMLAQ8DVQG1A2QB5wHkAeMB4gH/
AdEB0AHPAf8C8AHvAf8DrgH/A2QB8QNnAfICrAGrAf8C6AHnAf8CywHKAf8B4AHfAd0B/wNhAeQDVQG1
AwsBD0gAAVYBkgGoAf8BNwHFAfAB/wFcAdQB8gH/AY0B4wH0Af8BogHrAfYB/wGCAd8B9AH/AUEBygHw
Af8BDwG2Ae0B/wEAAacB6AH/AQABoQHhAf8BAAGcAdsB/wE3AVwBhgH/CAADKQE/A84B/wPsAf8D3gH/
A9gB/wPSAf8DzAH/A8gB/wPHAf8DyAH/A8sB/wPQAf8D3QH/A+gB/wOkAf8DKwFCAz8BbQLkAeMB/wHY
AdYB1QH/AdIB0QHQAf8BxQHEAcMB/wHtAewB6wH/A1cBuggAA1wBzQHoAecB5gH/AbYBtQG0Af8B1gHV
AdMB/wHiAeEB4AH/AuAB3wH/AzwBZkgAAVkBlQGrAf8BNwHFAfAB/wFcAdQB8gH/AY0B4wH0Af8BogHr
AfYB/wGDAd8B9AH/AUIBywHwAf8BDwG1Ae0B/wEAAacB6AH/AQABoQHiAf8BAAGcAdoB/wE6AV8BiAH/
DAADWgG9A+MB/wPbAf8D4gH/AbcB0AG4Af8BQAGtAUQB/wFSAaoBQAH/AUwBrwFEAf8BMgGlAT4B/wGs
AcUBrAH/A8IB/wPRAf8D0wH/A1oBvQQAA0IBdgHsAesB6AH/AdoB2QHXAf8B1AHTAdEB/wHGAcUBxAH/
Ad4C3AH/A0YBfggAA1ABmgHdAdwB2wH/AcgBxgHFAf8C4gHhAf8C4QHfAf8B7gHtAewB/wM/AW9IAAFb
AZgBrgH/ATcBxQHwAf8BXAHUAfEB/wGNAeMB9AH/AaIB6wH2Af8BgwHfAfQB/wFCAcoB8AH/AQ8BtgHt
Af8BAAGoAekB/wEAAaEB4QH/AQABnAHaAf8BPAFhAYoB/wwAAykBPwPRAf8D8wH/AccB3gHKAf8BQAHJ
AYUB/wGzAdwBpAH/AecBxwFYAf8B3AG/AU8B/wFSAcwBjwH/ASsBrQFEAf8BuAHQAbgB/wPxAf8DrwH/
AysBQgQAAy8BSgNgAesDeAH8Ad4B3QHcAf8BywLKAf8B5gLlAf8DYQHhAzIBUAM4AVwDYAHrAu4B7AH/
AcwCywH/AecB5gHlAf8DeAH8A2AB6wMsAUNIAAFeAZsBsAH/ATYBxgHwAf8BXAHUAfIB/wGNAeMB9AH/
AaIB6wH2Af8BgwHfAfQB/wFCAcoB8AH/AQ8BtgHtAf8BAAGoAegB/wEAAaEB4QH/AQABnAHaAf8BPwFl
AY4B/xAAA1oBvQPEAf8BUgHOAYsB/wGZAeQBqwH/AbABxQE5Af8B6gG1ASQB/wHhAaIBFQH/AaUBnQEc
Af8BggHFAY8B/wElAZoBMgH/A6AB/wNaAb0QAANeAc4B4QHgAd4B/wHZAdcB1gH/AbgCtwH/AeEB4AHf
Af8DqAH9A6gB/QL2AfUB/wLAAb8B/wHqAekB6AH/AvMB8gH/A1wByVAAAWEBnwGzAf8BNgHGAfAB/wFa
AdQB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/AUIBygHwAf8BDwG2Ae0B/wEAAacB6AH/AQABoQHh
Af8BAAGbAdoB/wFBAWgBkAH/GAABXgF6AWkB/AGiAekBlQH/AdYBzwFFAf8B4gGzASMB/wHRAbsBKwH/
AcIBrgEeAf8BggG9AUgB/wErAW8BUgH8GAADTAGRAeMB4gHgAf8C3gHcAf8B4QHgAd8B/wHMAssB/wHE
AcMBwgH/As8BzgH/At4B3QH/AvAB7wH/AvAB7wH/AvYB9QH/A0gBh1AAAWIBoQG1Af8BXAHVAfQB/wGa
AegB9wH/AbUB8wH6Af8BwgH4AfwB/wHDAfgB/QH/AcEB9wH9Af8BrwHwAfsB/wGPAeIB9wH/AVsB0AHw
Af8BLwG4AeUB/wFEAWsBkwH/GAABYAF6AWoB/AGiAfABnwH/AdgB7QGvAf8B3gHFAUQB/wG0AeIBQQH/
ATwB5wEVAf8BRwHXAUcB/wEsAXEBWwH8FAADAQECA18B4wHlAeQB4QH/Au4B7QH/Au4B7QH/AusB6gH/
AeMB4gHhAf8C6AHnAf8C6gHpAf8C8wHyAf8C9QH0Af8B+gH5AfgB/wNcAd9QAAFlAaMBuAH/AcUB+QH9
Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHF
AfkB/QH/AcUB+QH9Af8BRgFuAZUB/xgAA2EB3AHIAfcB1AH/AdgB9gHKAf8B5wHjAakB/wHbAc8BSAH/
Aa8B3AFEAf8BnQHqAasB/wNfAeAYAANAAW8DfwH+A2QB5wNfAfMB6AHnAeYB/wHnAeYB5QH/Au0B7AH/
AvsB+gH/A2cB8gNkAecDfwH+Az0BaFAAAbcB1wHhAf8BjAG9AcwB/wGdAc8B2wH/Aa0B3wHoAf8BuQHs
AfMB/wHCAfUB+gH/AcIB9QH6Af8BuAHrAfEB/wGpAdoB4wH/AZQBxAHRAf8BbAGoAbgB/wGpAcUB0QH/
GAADLQFFAVcBdgFtAfoB2wH4AekB/wHnAfIB2AH/Ae0B5QGzAf8B3wHZAaYB/wFfAYUBXwH7AzIBUCAA
Aw8BFAMKAQ4DUwGqAe8B7gHtAf8C9AHzAf8DUgGkAwgBCwMRARdYAAL+Av8B4wHxAfQB/wG5AdcB4QH/
AZUBvgHMAf8BbAGoAbsB/wFfAZsBsAH/AVsBmAGtAf8BZAGhAbMB/wGMAbIBwgH/AbEBzQHXAf8B3wHr
Ae8B/wP+Af8cAAMuAUcDXgHZAWQBegFoAfwBZAF5AWQB/ANeAd0DMgFQLAADLwFKA10B8ANiAe8DLAFD
ZAADEQEXA1YBswFTAVQBUwGstAADBAEFAxABFQMfAS0DKQE/Ay8BSQMuAUgDKAE9Ax4BKwMPARQDAwEE
EAADtwH/AZwBqAGeAf8BAAFTAS4B/wEYAZIBUAH/AQABVwEuAf8BAAFEAaAB/wEAAUIBngH/AQABPwGb
Af8BAAE9AZkB/wEAATsBlwH/AQABOAGUAf8BAAE3AZMB/wNIAf8DSAH/HAADQQFyAUwCXwHzAVkCXAHP
AUsCTAGQAyMBM1wAAwUBBwMfASwCPgE9AWoCUgFQAaMBWwJZAcQBXQJaAdMBXQJaAdMBWwJZAcMBUgJR
AaEDPAFmAxwBKAMEAQYMAAMVAR0DUQGiAR0BlQFUAf8BggG+AaoB/wEsAaUBggH/AQ0BlwFGAf8BEAGZ
AUsB/wEUAZkBTwH/ARgBnQFUAf8BUgGqAdIB/wFQAagB0QH/AQABOQGVAf8gAAMhATABKwEwAWgB/AGG
Aa0B4QH/AVoBqAHcAf8BOwGSAckB/wEMAU4BqwH/AVUCVgGxAx8BLVMAAQEDEgEYAz4BawFdAlkB1wFW
AisB/AGsASkBAAH/AeEBSQEdAf8B5AFbATEB/wHTAUcBFQH/AaMBQAE6Af0BYQJeAdoCPgE9AWoDDwEU
CAADGAEiAVABUgFQAaQDVgGzAUkBrAGfAf8BUAG3AZ4B/wFaAbsBrAH/AVoBuwGuAf8BWwG7AbAB/wGA
AbwBswH/ARMBmgFXAf8BMAGVAccB/wFTAasB0wH/AQABPAGYAf8gAAFUAlYBqwFJAZ0B0QH/AZkBvAHr
Af8BTQGgAeMB/wGWAbkB6gH/AZQBuAHqAf8BPAGTAcoB/wIrAWQB/ANDAXhQAAMbASYDWQHSARkBAwEA
Af8BigE4ASAB/wHKAYYBQgH/AfYBvAGcAf8B+QHMAbcB/wHjAaABVAH/AbEBUwE5Af8BVQEvARAB/wFe
AlgB3QMcASgIAAFVAVYBVQGxA1YBswNWAbMBOAGkAZEB/wFLAbYBmwH/AUQBsgGbAf8BRgGyAZ4B/wFI
AbMBoQH/AYUBvwG2Af8BGgGeAYIB/wE1AZkByQH/AVcBrQHUAf8BAAFAAZwB/xwAAx8BLQErAUMBbAH8
AZ0BvwHsAf8BRQGcAeIB/wE3AZMB3wH/ATQBkQHfAf8BOwGUAeAB/wGVAbgB6gH/AYYBrQHhAf8BJQGD
AbsB/wFLAkwBkAQAA50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/
A50B/wOdAf8DnQH/A50B/wgAAVMCTwGlATABFQEAAf8BVQFAASsB/wGPAVIBPQH/AawBiAFHAf8BwgGj
AYgB/wHBAaUBjgH/AbMBmAGBAf8BkQFSATwB/wFQATcBIgH/AT8BGAEAAf8BVgJVAbEIAAMIAQsDVQGy
A1YBswFSAbIBqAH/AVkBvQGnAf8BhwHBAbUB/wGGAcEBtgH/AYcBwQG3Af8BiAHBAbkB/wEgAaIBiAH/
AToBnAHLAf8BWwGwAdUB/wEAAUMBnwH/EAADKwFCA0gBhAFVAlcBtwFMAl8B8wFSAaQB1wH/AaEBwgHt
Af8BnwHAAe0B/wGdAb8B7QH/AVABowHkAf8BNgGSAd8B/wE0AZAB3gH/AVcBpwHmAf8BkgG2AegB/wEf
AVsBtwH/AzcBWgOdAf8BugK9Af8B5gLsAf8B5gLtAf8B5wLtAf8B6ALuAf8B6QLvAf8B6QLvAf8B6gLv
Af8B6gLwAf8B6wLwAf8B6wLxAf8B7ALxAf8B7ALxAf8BvQK/Af8DnQH/BAADOQFfAVEBMQEWAf8BwwGx
AaIB/wG2AZwBgwH/AaYBVQEoAf8BqAFTASUB/wHDAaQBhwH/AdgBxgGwAf8BvQGpAYsB/wFbATsBGwH/
ATgBGAEAAf8BLgEKAQAB/wE1AQ4BAAH/AzMBUwgAAwYBCANVAbIBKwGgAYoB/wGTAckBugH/ATsBrwGX
Af8BIAGiAYMB/wEhAaMBhwH/ASMBpAGLAf8BIgGqAZIB/wEwAcIB7QH/AYEBtAHXAf8BBAFHAaMB/wwA
A0wBkwFAAZcBzwH/AVcBqAHZAf8BjQG0AeIB/wGjAcQB7QH/AacBxwHuAf8BQAGXAc0B/wEQAVEBsgH/
ATsBkwHJAf8BnwHAAe0B/wFUAZYBowH/AZ4BlgEkAf8BWAGUAZEB/wGNAbMB6QH/AVUBpQHYAf8BWgJe
AdgEAANcAeoB2wLiAf8BzQLPAf8DywH/A8wB/wPOAf8DzwH/A9AB/wPSAf8D0wH/A9UB/wHXAtgB/wHn
AuwB/wNtAfcEAAMiATEBVgJVAbEBQwEXAQAB/wGqAYUBOwH/AbIBTgEMAf8BrQErAQAB/wG6AUgBAAH/
AeoB1QG/Af8B/QH8AfoB/wHWAb4BpgH/AZABOwEIAf8BPgEMAQAB/wE/ARwBAAH/ATgBGAEAAf8DVwHF
AxwBJwgAAwQBBgERAZQBUwH/AUoBuQGeAf8BJQGmAYkB/wFVAbEB1QH/AVEBrQHUAf8BTQGrAdIB/wE7
AboB5AH/AQABmQFFAf8BAwGOATQB/wEGAUwBmgH/DAABSAJiAfYBrgHNAfAB/wGwAc8B8AH/AZgBvwHs
Af8BWgGuAecB/wGqAcoB7wH/ARkBVwG4Af8EAAERAVIBswH/AaIBwwHtAf8BqAGXAQ0B/wHEAbUBNgH/
AawBlwECAf8BNwGTAd8B/wGYAbsB6wH/AQABQAGfAf8EAANcAeoB2QLhAf8BywLMAf8DxwH/A8gB/wPK
Af8DywH/A80B/wPOAf8D0AH/A9EB/wHTAtQB/wHlAusB/wNtAfcEAAMuAUcDWQHsAT4BDAEAAf8BmQEr
AQAB/wG4AUMBAAH/AcIBPwEAAf8ByQFRAQAB/wHmAb8BlAH/AewB1AG2Af8BzQGcAT4B/wGoAUgBCAH/
AZkBSQEdAf8BowGMAU4B/wFbAUIBKwH/AlEBPwH3ATUCNAFVDAABNAGOAcQB/wEuAawBiwH/ASsBqgGP
Af8BWgG1AdgB/wFWAbIB1gH/AVMBrwHVAf8BTwGsAdMB/wEAAZABPgH/ATUBqAGEAf8BAAFUAS8B/wMU
ARsIAAFaAmAB3gGoAckB7QH/AYQBpwHtAf8BNAFGAe0B/wFGAY4B6QH/Aa0BzQHwAf8BSQGdAdIB/wEa
AVgBuQH/AUMBmQHOAf8BpQHFAe4B/wGVAZoBRQH/Aa0BlwECAf8BnQGXASkB/wFCAZsB4gH/AZgBuwHq
Af8BSAJiAfYEAANcAeoB1wLfAf8BxwLJAf8DwgH/A8QB/wPFAf8DyAH/A8kB/wPKAf8DzAH/A80B/wHQ
AtEB/wHjAuoB/wNtAfcEAAM5AV8CQAEnAf0BUAEXAQAB/wGuATUBAAH/AcABPQEAAf8B5wGWASIB/wHo
AbIBVgH/AeQBsQFWAf8B0gGJARUB/wG9AUIBAAH/AagBMAEAAf8BuAGNATkB/wHUAcMBsgH/AZgBhAFK
Af8BNwEZAQAB/wE+Aj0BagwAAToBkQHJAf8BpAHMAeQB/wGHAbsB2wH/ARsBoQFWAf8BFQGcAVAB/wEQ
AZoBTAH/AQsBlgFGAf8BJwGjAYEB/wGEAcABqwH/AR4BlgFVAf8DUQGiAxUBHQQAA1EBnAGSAbkB5QH/
AUoBUAH2Af8BgQGEAfUB/wIcAfAB/wGQAbsB6wH/Aa4BzQHwAf8BrAHMAfAB/wGqAcoB8AH/AYUBsgHp
Af8BOgGpAcEB/wEgAbMBjQH/ATIBqAG2Af8BTAGhAeQB/wGXAboB6AH/A10B7QQAA1wB6gHWAt8B/wHD
AsUB/wPAAf8DwAH/A8IB/wPDAf8DxAH/A8UB/wPIAf8DyQH/A80B/wHgAugB/wNtAfcEAAM3AVoCTQEo
AfoBgwEiAQAB/wHLAUwBAAH/AeUBiwEZAf8B/gG2AU4C/wHjAcIB/wH0AbwBhQH/AdYBUwEFAf8BxQFK
AQAB/wG6AT8BAAH/Aa8BUwEVAf8BrgGIATkB/wGUAVIBOQH/ATgBGgEAAf8DPAFmDAABPwGVAc0B/wGo
Ac8B5QH/AYwBvwHdAf8BIQGlAYEB/wGNAcUBuAH/AYkBwwG0Af8BhgHBAbEB/wGEAb8BrwH/AVMBuQGf
Af8BSgGtAaAB/wNWAbMBUAFSAVABpAMYASIDIwEzASsBYQF3AfwBkgGkAfUB/wE1ATYB9gH/AS0BhgH0
Af8BFwGmAfsB/wE4AasB8gH/AVoBrwHnAf8BVwGtAecB/wFUAaoB5gH/ARsBtgGAAf8BPAHIAZcB/wEX
AbcBVgH/AVkBrAHnAf8BjwG1AeMB/wFaAl4B1QQAA2AB1gHHAs0B/wHbAuQB/wHbAuQB/wHbAuUB/wHc
AuUB/wHcAuUB/wHdAuYB/wHdAuYB/wHeAucB/wHfAugB/wHgAugB/wHNAtMB/wNfAeMEAAMmATkBYAJa
Ad4BjgEqAQAB/wHsAZ4BLwH/Af4BvwGFAv8BzAGhAv8B3wG7Af8B/gHCAVsB/wHiAY4BJQH/AdMBhAEW
Af8BygFVAQgB/wG1AUwBBgH/AZcBPQEDAf8BgQE6ARUB/wNZAewDLgFIDAABQwGYAdAB/wGrAdEB5wH/
AZABwgHfAf8BKAGpAYgB/wGRAckBuwH/AVIBugGlAf8BTgG4AaEB/wFKAbYBngH/AU4BuAGdAf8BOQGl
AZIB/wNWAbMDVgGzAVUBVgFVAbEEAANJAYcBhgGvAeEB/wG5AdcB8wH/AQ4BpgH+Af8BSAG/Av8BBwGj
Av8BQgG+AfAB/wEWAc4B+wH/ATYBvgHxAf8BLgGzAaAB/wEXAbcBVQH/ASMBswGQAf8BpwHIAe4B/wFT
AaUB1gH/AU8CUQGcBAADLAFDA1sByAOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOd
Af8DXgHdAzEBTgQAAwkBDANLAY4BwAFKAQkC/wG8AVsB/wH6Ac4BpwH/AfgB2wG+Av8B4gHGAv8BvgGG
Af8B9AGsAVEB/wHsAcIBmgH/AeIBtQGLAf8BuAFRAQ8B/wGdAUABCAH/AYgBQAEcAf8DTwGlAxABFQwA
AUcBmwHTAf8BrgHUAegB/wGrAdMB6AH/ATUBsQGQAf8BmwHOAcAB/wGZAc0BvQH/AZYBywG7Af8BlQHK
AbkB/wGAAb8BqAH/AVMBswGpAf8DVgGzA1UBsgMIAQsEAAMEAQYDUQGfAYUBrgHhAf8BNgGyAfkB/wEH
AaMC/wEcAakB+wH/AQwB0wH+Af8BSAHiAv8BBwHVAv8BWwGwAegB/wFYAa0B5wH/AakBygHvAf8BpQHF
Ae0B/wErAU8BbgH8AyEBMEQAAxMBGgJkAVMB8QHYAZ4BTgH/AecB0wHAAf8B/AH1Ae4C/wH4AesC/wHl
AcIB/wH2AbkBggH/AfIB0gG4Af8B7gHSAbYB/wHCAYYBKgH/AacBUgEjAf8CTQEpAfoDHQEpEAABSgGd
AdUB/wFIAZsB0wH/AUUBmgHSAf8BJQGhAYwB/wEgAZ8BigH/AR0BnQGFAf8BGQGZAYAB/wEyAaUBkgH/
AVsBuAGxAf8BLAGhAYsB/wNVAbIDBgEIEAADQgF1AV8CYgH2AY4BtgHjAf8BuQHXAfMB/wE5AdUB+wH/
AQYB1QL/AR0B0QH7Af8BswHSAfIB/wGxAdAB8QH/AZIBuAHiAf8BPgGVAcwB/wNKAYpMAAM1AVcBqQE+
ARAB/wHKAbgBqAb/Af4B/AL/AfYB4gH/AfsBxQGgAf8B5AG5AZUB/wHbAawBWQH/AcMBjgE4Af8BkwFA
ARQB/wE+Aj0BajAAAVMCVAGsA1YBswNWAbMDBAEGGAADFgEeA1QBrgFSAaMB3AH/AZEBuAHkAf8BqAHK
AewB/wGlAccB7AH/AY0BtQHiAf8BRAGaAdIB/wFaAl8B2wMxAU5UAAMyAVECZAFZAewB0AGyAZUB/wHs
AeAB2QH/AeYB1QHEAf8B0wGwAZQB/wHTAaYBUwH/AcsBjwExAf8BZwFlAVkB8gE6AjkBYDQAAVMCVAGs
A1YBswMEAQYkAAMrAUIDTAGQAVsCXQHSAVkCXAHPA04BmQMtAUVgAAMRARcDRAF6AloBVwHFAmUBXgHl
AmEBWAHmAlwBWQHJAkgBRwGDAxUBHRAAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA
A/8BAAHgAQcCAAH8AT8CAAHAAQMCAAH8AT8CAAHAAQMCAAHAAQMCAAHAAQMCAAHAAQMCAAHAAQMCAAHA
AQMCAAHAAQMCAAHAAQMCAAHAAQMGAAHAAQMCAAEBAYACAAHAAQMBgAIBAYACAAHAAQMBgAEBBAABwAED
AcABAwHAAQMCAAHAAQMB8AEPAcABAwIAAcABAwHwAQ8BgAEDAgABwAEDAfABDwHAAQMCAAHAAQMB8AEP
AfABDwIAAcABAwH4AR8B/AE/AgAB4wX/AeABBwGAAQEB/AEfAv8BwAEDAYABBwH4AQcC/wGAAQMBAAEH
AfgBAwL/AcABAwEAAQcB8AEBAgABwAEDAQABBwGAAwABgAEBAYABBwIAAYABAQIAAcABBwEBAQABgAEB
AgAB4AEDAgABgAEBAgAB4AEBAgABgAEBAgAB4AMAAYABAQIAAeABAAGAAQABgAEBAgAB4AEAAYABAAL/
AYABAQHgAQEB4AEBAv8BwAEDAf8BwwHwAQMC/wHgAQcB/wHHAfwBDwL/AfABDws=
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+
JgAAAk1TRnQBSQFMAgEBCAEAAVABAQFQAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8ALgAB4gHvAfQB/wGo
AckB1wH/AWcBpAG2Af8BSgGGAZwB/wE1AVwBigH/ATABVwGHAf8BMAFhAZUB/wFDAY4BqwH/AY8BtwHN
Af8B3QHqAfEB/wwAA1cBtwOfAf8DmgH/A5YB/wORAf8DjQH/A4kB/wOEAf8DgAH/A1IB/wNOAf8DSgH/
A0cB/wNDAf8DQAH/A1cBtxgAAw0BEgNWAbYDVgG2Aw0BEWAAAa0BzwHfAf8BQgGRAa0B/wFHAaMBvwH/
AWMBwAHUAf8BlQHZAeYB/wGBAdsB8AH/ATsBxgHsAf8BDwGqAd0B/wEBAZIBxwH/AQ0BgAGsAf8BJAFc
AZIB/wGdAb8B0QH/CAADqAH/A+kB/wPTAf8D0gH/A9EB/wPQAf8DzgH/A80B/wPNAf8DywH/A8sB/wPK
Af8DyQH/A8gB/wPiAf8DQAH/GAADXgHZA+QB/wPjAf8DWAHBMAADQQFyAUwCXwHzAVkCXAHPAUsCTAGQ
AyMBMxwAAUUBhAGbAf8BLwG9AecB/wFSAdMB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/ATsBygHw
Af8BCQG2Ae0B/wEAAacB6AH/AQABoQHhAf8BAAGWAdIB/wEoAUkBZQH/CAADrQH/A9YB/wO6Af8DuAH/
A7UB/wOzAf8DsQH/A7AB/wOtAf8DqwH/A6oB/wOoAf8DpwH/A6YB/wPIAf8DRAH/CAADCwEPA1QBrQM6
AWEDPwFuA2cB+AHiAeEB3wH/AeEB4AHfAf8DXwHzAzwBZwM8AWYDUwGtAwsBDxwAAyEBMAIrAWIB/AGG
Aa0B4QH/AVQBqAHcAf8BNQGSAckB/wEGAUgBqwH/AVUCVgGxAx8BLRQAAUgBhwGeAf8BLgHEAfAB/wFU
AdQB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/ATsBygHwAf8BCQG2Ae0B/wEAAagB6AH/AQABoQHh
Af8BAAGcAdoB/wEpAUoBZwH/CAADsQH/A9kB/wO9Af8DugH/A7gB/wO2Af8DtQH/A7MB/wOwAf8DrwH/
A60B/wOrAf8DqQH/A6gB/wPKAf8DSAH/CAADWgHFBP8ChAGDAf4CgwGCAf4C5wHmAf8B1gHVAdMB/wHX
AdYB1AH/AeMB4gHgAf8DfwH+A6gB/QHpAegB5gH/A1gBwRwAAVQCVgGrAUMBnQHRAf8BmQG8AesB/wFH
AaAB4wH/AZYBuQHqAf8BlAG4AeoB/wE2AZMBygH/AisBXgH8A0MBeBAAAUoBiQGgAf8BLgHEAe8B/wFT
AdQB8QH/AY0B4wH0Af8BogHrAfYB/wGCAd8B8wH/ATwBygHwAf8BCQG2Ae0B/wEAAagB6AH/AQABoQHh
Af8BAAGcAdoB/wErAU0BaQH/CAADtgH/A90B/wPBAf8DvQH/A7wB/wO6Af8DuAH/A7UB/wO0Af8DsgH/
A7AB/wOtAf8DrAH/A6wB/wPPAf8DTAH/CAADZAHnAvkB9wH/Au8B7gH/AtsB2gH/AcoCyQH/AckByAHG
Af8ByQHIAccB/wHJAcgBxwH/AssByQH/AeYB5QHkAf8B5QHkAeIB/wNlAeUYAAMfAS0BKwE2AWYB/AGd
Ab8B7AH/AT8BnAHiAf8BMQGTAd8B/wEuAZEB3wH/ATUBlAHgAf8BlQG4AeoB/wGGAa0B4QH/AR8BgwG7
Af8BSwJMAZAMAAFMAYwBogH/ATABxgHwAf8BVQHUAfEB/wGMAeMB9AH/AaIB6wH2Af8BggHfAfQB/wE8
AcoB8AH/AQkBtgHtAf8BAAGoAegB/wEAAaIB4gH/AQABmwHbAf8BLQFQAYAB/wgAA1oBvQPaAf8DyAH/
A8AB/wO/Af8DvQH/A7oB/wO4Af8DtwH/A7UB/wOzAf8DsAH/A68B/wOzAf8DwgH/A1oBvQgAA04BlQH2
AfUB9AH/AeYB5QHkAf8BvwG+Ab0B/wLrAeoB/wHUAdMB0gH/AdYB1QHUAf8B4gLhAf8CtAGzAf8B1wHW
AdQB/wHiAeEB3wH/A0oBjQwAAysBQgNIAYQBVQJXAbcBTAJfAfMBTAGkAdcB/wGhAcIB7QH/AZ8BwAHt
Af8BnQG/Ae0B/wFKAaMB5AH/ATABkgHfAf8BLgGQAd4B/wFRAacB5gH/AZIBtgHoAf8BGQFVAbcB/wM3
AVoIAAFPAY8BpQH/ATEBxgHwAf8BVQHUAfIB/wGNAeMB9AH/AaIB6wH2Af8BgwHfAfQB/wE7AcoB8AH/
AQkBtgHtAf8BAAGnAegB/wEAAaEB4gH/AQABnAHbAf8BLwFTAYMB/wgAA1oBvQPjAf8D5wH/A+EB/wPg
Af8D4AH/A98B/wPfAf8D3gH/A90B/wPdAf8D3AH/A9sB/wPgAf8D0AH/A1oBvQMLAQ8DVQG1A2QB5wHk
AeMB4gH/AdEB0AHPAf8C8AHvAf8DrgH/A2QB8QNnAfICrAGrAf8C6AHnAf8CywHKAf8B4AHfAd0B/wNh
AeQDVQG1AwsBDwNMAZMBOgGXAc8B/wFRAagB2QH/AY0BtAHiAf8BowHEAe0B/wGnAccB7gH/AToBlwHN
Af8BCgFLAbIB/wE1AZMByQH/AZ8BwAHtAf8BTgGWAaMB/wGeAZYBHgH/AVIBlAGRAf8BjQGzAekB/wFP
AaUB2AH/AVoCXgHYCAABUAGSAagB/wExAcUB8AH/AVYB1AHyAf8BjQHjAfQB/wGiAesB9gH/AYIB3wH0
Af8BOwHKAfAB/wEJAbYB7QH/AQABpwHoAf8BAAGhAeEB/wEAAZwB2wH/ATEBVgGGAf8IAAMpAT8DzgH/
A+wB/wPeAf8D2AH/A9IB/wPMAf8DyAH/A8cB/wPIAf8DywH/A9AB/wPdAf8D6AH/A6QB/wMrAUIDPwFt
AuQB4wH/AdgB1gHVAf8B0gHRAdAB/wHFAcQBwwH/Ae0B7AHrAf8DVwG6CAADXAHNAegB5wHmAf8BtgG1
AbQB/wHWAdUB0wH/AeIB4QHgAf8C4AHfAf8DPAFmAUgCYgH2Aa4BzQHwAf8BsAHPAfAB/wGYAb8B7AH/
AVQBrgHnAf8BqgHKAe8B/wETAVEBuAH/BAABCwFMAbMB/wGiAcMB7QH/AagBlwEHAf8BxAG1ATAB/wGs
AZcBAAH/ATEBkwHfAf8BmAG7AesB/wEAAToBnwH/CAABUwGVAasB/wExAcUB8AH/AVYB1AHyAf8BjQHj
AfQB/wGiAesB9gH/AYMB3wH0Af8BPAHLAfAB/wEJAbUB7QH/AQABpwHoAf8BAAGhAeIB/wEAAZwB2gH/
ATQBWQGIAf8MAANaAb0D4wH/A9sB/wPiAf8BtwHQAbgB/wE6Aa0BPgH/AUwBqgE6Af8BRgGvAT4B/wEs
AaUBOAH/AawBxQGsAf8DwgH/A9EB/wPTAf8DWgG9BAADQgF2AewB6wHoAf8B2gHZAdcB/wHUAdMB0QH/
AcYBxQHEAf8B3gLcAf8DRgF+CAADUAGaAd0B3AHbAf8ByAHGAcUB/wLiAeEB/wLhAd8B/wHuAe0B7AH/
Az8BbwFaAmAB3gGoAckB7QH/AYQBpwHtAf8BLgFAAe0B/wFAAY4B6QH/Aa0BzQHwAf8BQwGdAdIB/wEU
AVIBuQH/AT0BmQHOAf8BpQHFAe4B/wGVAZoBPwH/Aa0BlwEAAf8BnQGXASMB/wE8AZsB4gH/AZgBuwHq
Af8BSAJiAfYIAAFVAZgBrgH/ATEBxQHwAf8BVgHUAfEB/wGNAeMB9AH/AaIB6wH2Af8BgwHfAfQB/wE8
AcoB8AH/AQkBtgHtAf8BAAGoAekB/wEAAaEB4QH/AQABnAHaAf8BNgFbAYoB/wwAAykBPwPRAf8D8wH/
AccB3gHKAf8BOgHJAYUB/wGzAdwBpAH/AecBxwFSAf8B3AG/AUkB/wFMAcwBjwH/ASUBrQE+Af8BuAHQ
AbgB/wPxAf8DrwH/AysBQgQAAy8BSgNgAesDcgH8Ad4B3QHcAf8BywLKAf8B5gLlAf8DYQHhAzIBUAM4
AVwDYAHrAu4B7AH/AcwCywH/AecB5gHlAf8DcgH8A2AB6wMsAUMDUQGcAZIBuQHlAf8BRAFKAfYB/wGB
AYQB9QH/AhYB8AH/AZABuwHrAf8BrgHNAfAB/wGsAcwB8AH/AaoBygHwAf8BhQGyAekB/wE0AakBwQH/
ARoBswGNAf8BLAGoAbYB/wFGAaEB5AH/AZcBugHoAf8DXQHtCAABWAGbAbAB/wEwAcYB8AH/AVYB1AHy
Af8BjQHjAfQB/wGiAesB9gH/AYMB3wH0Af8BPAHKAfAB/wEJAbYB7QH/AQABqAHoAf8BAAGhAeEB/wEA
AZwB2gH/ATkBXwGOAf8QAANaAb0DxAH/AUwBzgGLAf8BmQHkAasB/wGwAcUBMwH/AeoBtQEeAf8B4QGi
AQ8B/wGlAZ0BFgH/AYIBxQGPAf8BHwGaASwB/wOgAf8DWgG9EAADXgHOAeEB4AHeAf8B2QHXAdYB/wG4
ArcB/wHhAeAB3wH/A6gB/QOoAf0C9gH1Af8CwAG/Af8B6gHpAegB/wLzAfIB/wNcAckIAAMjATMBKwFb
AXEB/AGSAaQB9QH/AS8BMAH2Af8BJwGGAfQB/wERAaYB+wH/ATIBqwHyAf8BVAGvAecB/wFRAa0B5wH/
AU4BqgHmAf8BFQG2AYAB/wE2AcgBlwH/AREBtwFQAf8BUwGsAecB/wGPAbUB4wH/AVoCXgHVCAABWwGf
AbMB/wEwAcYB8AH/AVQB1AHxAf8BjAHjAfQB/wGiAesB9gH/AYMB3wH0Af8BPAHKAfAB/wEJAbYB7QH/
AQABpwHoAf8BAAGhAeEB/wEAAZsB2gH/ATsBYgGQAf8YAAFYAXQBYwH8AaIB6QGVAf8B1gHPAT8B/wHi
AbMBHQH/AdEBuwElAf8BwgGuARgB/wGCAb0BQgH/ASsBaQFAAfwYAANMAZEB4wHiAeAB/wLeAdwB/wHh
AeAB3wH/AcwCywH/AcQBwwHCAf8CzwHOAf8C3gHdAf8C8AHvAf8C8AHvAf8C9gH1Af8DSAGHDAADSQGH
AYYBrwHhAf8BuQHXAfMB/wEIAaYB/gH/AUIBvwL/AQEBowL/ATwBvgHwAf8BEAHOAfsB/wEwAb4B8QH/
ASgBswGgAf8BEQG3AU8B/wEdAbMBkAH/AacByAHuAf8BTQGlAdYB/wFPAlEBnAgAAVwBoQG1Af8BVgHV
AfQB/wGaAegB9wH/AbUB8wH6Af8BwgH4AfwB/wHDAfgB/QH/AcEB9wH9Af8BrwHwAfsB/wGPAeIB9wH/
AVUB0AHwAf8BKQG4AeUB/wE+AWUBkwH/GAABWgF0AWQB/AGiAfABnwH/AdgB7QGvAf8B3gHFAT4B/wG0
AeIBOwH/ATYB5wEPAf8BQQHXAUEB/wErAWsBVQH8FAADAQECA18B4wHlAeQB4QH/Au4B7QH/Au4B7QH/
AusB6gH/AeMB4gHhAf8C6AHnAf8C6gHpAf8C8wHyAf8C9QH0Af8B+gH5AfgB/wNcAd8MAAMEAQYDUQGf
AYUBrgHhAf8BMAGyAfkB/wEBAaMC/wEWAakB+wH/AQYB0wH+Af8BQgHiAv8BAQHVAv8BVQGwAegB/wFS
Aa0B5wH/AakBygHvAf8BpQHFAe0B/wErAT4BaAH8AyEBMAgAAV8BowG4Af8BxQH5Af0B/wHFAfkB/QH/
AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5
Af0B/wFAAWgBlQH/GAADYQHcAcgB9wHUAf8B2AH2AcoB/wHnAeMBqQH/AdsBzwFCAf8BrwHcAT4B/wGd
AeoBqwH/A18B4BgAA0ABbwN/Af4DZAHnA18B8wHoAecB5gH/AecB5gHlAf8C7QHsAf8C+wH6Af8DZwHy
A2QB5wN/Af4DPQFoFAADQgF1AV8CYgH2AY4BtgHjAf8BuQHXAfMB/wEzAdUB+wH/AQAB1QL/ARcB0QH7
Af8BswHSAfIB/wGxAdAB8QH/AZIBuAHiAf8BOAGVAcwB/wNKAYoMAAG3AdcB4QH/AYwBvQHMAf8BnQHP
AdsB/wGtAd8B6AH/AbkB7AHzAf8BwgH1AfoB/wHCAfUB+gH/AbgB6wHxAf8BqQHaAeMB/wGUAcQB0QH/
AWYBqAG4Af8BqQHFAdEB/xgAAy0BRQFNAXABZwH6AdsB+AHpAf8B5wHyAdgB/wHtAeUBswH/Ad8B2QGm
Af8BXwF/AV8B+wMyAVAgAAMPARQDCgEOA1MBqgHvAe4B7QH/AvQB8wH/A1IBpAMIAQsDEQEXIAADFgEe
A1QBrgFMAaMB3AH/AZEBuAHkAf8BqAHKAewB/wGlAccB7AH/AY0BtQHiAf8BPgGaAdIB/wFaAl8B2wMx
AU4QAAL+Av8B4wHxAfQB/wG5AdcB4QH/AZUBvgHMAf8BZgGoAbsB/wFZAZsBsAH/AVUBmAGtAf8BXgGh
AbMB/wGMAbIBwgH/AbEBzQHXAf8B3wHrAe8B/wP+Af8cAAMuAUcDXgHZAV4BdAFiAfwBXgFzAV4B/ANe
Ad0DMgFQLAADLwFKA10B8ANiAe8DLAFDMAADKwFCA0wBkAFbAl0B0gFZAlwBzwNOAZkDLQFFHAADEQEX
A1YBswFTAVQBUwGstAADBAEFAxABFQMfAS0DKQE/Ay8BSQMuAUgDKAE9Ax4BKwMPARQDAwEEEAADtwH/
AZwBqAGeAf8BAAFNASgB/wESAZIBSgH/AQABUQEoAf8BAAE+AaAB/wEAATwBngH/AQABOQGbAf8BAAE3
AZkB/wEAATUBlwH/AQABMgGUAf8BAAExAZMB/wNCAf8DQgH/CAABVwFQAU0BjwFwAWABVQG1AaQBcgFU
Ae4BuQF2AVAB/wG1AXQBTgH/AbMBcwFOAf8BsAFxAU0B/wGsAW8BTAH/AakBbgFMAf8BpwFsAUsB/wGm
AWsBSgH/AaABbQFMAf4BlQFoAVEB8QF1AWEBVAHETAADBQEHAx8BLAI+AT0BagJSAVABowFbAlkBxAFd
AloB0wFdAloB0wFbAlkBwwFSAlEBoQM8AWYDHAEoAwQBBgwAAxUBHQNRAaIBFwGVAU4B/wGCAb4BqgH/
ASYBpQGCAf8BBwGXAUAB/wEKAZkBRQH/AQ4BmQFJAf8BEgGdAU4B/wFMAaoB0gH/AUoBqAHRAf8BAAEz
AZUB/xAAAZYBcgFVAd4w/wGSAWkBUAHtSwABAQMSARgDPgFrAV0CWQHXAUYCKwH8AawBIwEAAf8B4QFD
ARcB/wHkAVUBKwH/AdMBQQEPAf8BowJAAf0BYQJeAdoCPgE9AWoDDwEUCAADGAEiAVABUgFQAaQDVgGz
AUMBrAGfAf8BSgG3AZ4B/wFUAbsBrAH/AVQBuwGuAf8BVQG7AbAB/wGAAbwBswH/AQ0BmgFRAf8BKgGV
AccB/wFNAasB0wH/AQABNgGYAf8QAAG8AX8BVwH+BP8BrgFkASkB/wGsAWEBKAH/AawBYQEoBf8BUwGq
AVoB/wFOAaUBVAH/AUkBoAFPAf8BRAGbAUkB/wFBAZcBRgH/AT0BkwFCBf8BoQFuAU0B/kwAAxsBJgNZ
AdIBEwIAAf8BigEyARoB/wHKAYYBPAH/AfYBvAGcAf8B+QHMAbcB/wHjAaABTgH/AbEBTQEzAf8BTwEp
AQoB/wFeAlgB3QMcASgIAAFVAVYBVQGxA1YBswNWAbMBMgGkAZEB/wFFAbYBmwH/AT4BsgGbAf8BQAGy
AZ4B/wFCAbMBoQH/AYUBvwG2Af8BFAGeAYIB/wEvAZkByQH/AVEBrQHUAf8BAAE6AZwB/xAAAcMBhQFX
Bf8BrgFkASkB/wHNAZ4BcQH/AawBYQEoBf8BSAGeAU0B/wFtAckBeAH/AW0ByQF4Af8BbAHIAXcB/wFr
AccBdQH/ATsBkgFABf8BpwFuAUwB/wQAA50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/
A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wgAAVMCTwGlASoBDwEAAf8BTwE6ASUB/wGPAUwBNwH/
AawBiAFBAf8BwgGjAYgB/wHBAaUBjgH/AbMBmAGBAf8BkQFMATYB/wFKATEBHAH/ATkBEgEAAf8BVgJV
AbEIAAMIAQsDVQGyA1YBswFMAbIBqAH/AVMBvQGnAf8BhwHBAbUB/wGGAcEBtgH/AYcBwQG3Af8BiAHB
AbkB/wEaAaIBiAH/ATQBnAHLAf8BVQGwAdUB/wEAAT0BnwH/EAABxAGFAVgF/wGuAWQBKQH/Ac0BnwFy
Af8BrAFhASgF/wFLAaIBUQH/AXABygF6Af8BbwHKAXoB/wFuAckBeQH/AWwByAF3Af8BPgGUAUMF/wGr
AW8BTQH/BAADnQH/AboCvQH/AeYC7AH/AeYC7QH/AecC7QH/AegC7gH/AekC7wH/AekC7wH/AeoC7wH/
AeoC8AH/AesC8AH/AesC8QH/AewC8QH/AewC8QH/Ab0CvwH/A50B/wQAAzkBXwFLASsBEAH/AcMBsQGi
Af8BtgGcAYMB/wGmAU8BIgH/AagBTQEfAf8BwwGkAYcB/wHYAcYBsAH/Ab0BqQGLAf8BVQE1ARUB/wEy
ARIBAAH/ASgBBAEAAf8BLwEIAQAB/wMzAVMIAAMGAQgDVQGyASUBoAGKAf8BkwHJAboB/wE1Aa8BlwH/
ARoBogGDAf8BGwGjAYcB/wEdAaQBiwH/ARwBqgGSAf8BKgHCAe0B/wGBAbQB1wH/AQABQQGjAf8QAAHH
AYcBVwX/AbMBawEwAf8B0AGkAXsB/wGxAWkBKwX/AU0BpAFTAf8BcQHLAXsB/wFwAcsBegH/AW8BygF5
Af8BbQHJAXgB/wFBAZgBRgX/AbEBcwFOAf8IAANcAeoB2wLiAf8BzQLPAf8DywH/A8wB/wPOAf8DzwH/
A9AB/wPSAf8D0wH/A9UB/wHXAtgB/wHnAuwB/wNtAfcEAAMiATEBVgJVAbEBPQERAQAB/wGqAYUBNQH/
AbIBSAEGAf8BrQElAQAB/wG6AUIBAAH/AeoB1QG/Af8B/QH8AfoB/wHWAb4BpgH/AZABNQECAf8BOAEG
AQAB/wE5ARYBAAH/ATIBEgEAAf8DVwHFAxwBJwgAAwQBBgELAZQBTQH/AUQBuQGeAf8BHwGmAYkB/wFP
AbEB1QH/AUsBrQHUAf8BRwGrAdIB/wE1AboB5AH/AQABmQE/Af8BAAGOAS4B/wEAAUYBmgH/EAAByAGJ
AVgF/wG2AXMBPQH/AdEBpQGCAf8BtQFwATUF/wFPAacBVgH/AXABywF6Af8BcAHLAXoB/wFvAcoBeQH/
AW0ByQF4Af8BRAGbAUoF/wG1AXUBUAH/CAADXAHqAdkC4QH/AcsCzAH/A8cB/wPIAf8DygH/A8sB/wPN
Af8DzgH/A9AB/wPRAf8B0wLUAf8B5QLrAf8DbQH3BAADLgFHA1kB7AE4AQYBAAH/AZkBJQEAAf8BuAE9
AQAB/wHCATkBAAH/AckBSwEAAf8B5gG/AZQB/wHsAdQBtgH/Ac0BnAE4Af8BqAFCAQIB/wGZAUMBFwH/
AaMBjAFIAf8BVQE8ASUB/wJRAT8B9wE1AjQBVQwAAS4BjgHEAf8BKAGsAYsB/wElAaoBjwH/AVQBtQHY
Af8BUAGyAdYB/wFNAa8B1QH/AUkBrAHTAf8BAAGQATgB/wEvAagBhAH/AQABTgEpAf8DFAEbDAABygGL
AVkF/wG7AXwBUQH/AbkBegFJAf8BuQF5AUcF/wFDAZoBSQH/AVABpwFWAf8BTgGlAVQB/wFMAaMBUgH/
AUoBoQFQAf8BRwGeAU0F/wG4AXkBUQH/CAADXAHqAdcC3wH/AccCyQH/A8IB/wPEAf8DxQH/A8gB/wPJ
Af8DygH/A8wB/wPNAf8B0ALRAf8B4wLqAf8DbQH3BAADOQFfAkABLQH9AUoBEQEAAf8BrgEvAQAB/wHA
ATcBAAH/AecBlgEcAf8B6AGyAVAB/wHkAbEBUAH/AdIBiQEPAf8BvQE8AQAB/wGoASoBAAH/AbgBjQEz
Af8B1AHDAbIB/wGYAYQBRAH/ATEBEwEAAf8BPgI9AWoMAAE0AZEByQH/AaQBzAHkAf8BhwG7AdsB/wEV
AaEBUAH/AQ8BnAFKAf8BCgGaAUYB/wEFAZYBQAH/ASEBowGBAf8BhAHAAasB/wEYAZYBTwH/A1EBogMV
AR0IAAHGAYgBXAH+MP8BuwF7AVIB/wgAA1wB6gHWAt8B/wHDAsUB/wPAAf8DwAH/A8IB/wPDAf8DxAH/
A8UB/wPIAf8DyQH/A80B/wHgAugB/wNtAfcEAAM3AVoCTQEoAfoBgwEcAQAB/wHLAUYBAAH/AeUBiwET
Af8B/gG2AUgC/wHjAcIB/wH0AbwBhQH/AdYBTQEAAf8BxQFEAQAB/wG6ATkBAAH/Aa8BTQEPAf8BrgGI
ATMB/wGUAUwBMwH/ATIBFAEAAf8DPAFmDAABOQGVAc0B/wGoAc8B5QH/AYwBvwHdAf8BGwGlAYEB/wGN
AcUBuAH/AYkBwwG0Af8BhgHBAbEB/wGEAb8BrwH/AU0BuQGfAf8BRAGtAaAB/wNWAbMBUAFSAVABpAMY
ASIEAAHBAYgBWAH6BP8B7QHDAZoB/wHtAcMBmgH/Ae0BwwGaAf8B7QHDAZoB/wHtAcMBmgH/Ae0BwwGa
Af8B7QHDAZoB/wHtAcMBmgH/Ae0BwwGaAf8B7QHDAZoF/wG9AYABVAH/CAADYAHWAccCzQH/AdsC5AH/
AdsC5AH/AdsC5QH/AdwC5QH/AdwC5QH/Ad0C5gH/Ad0C5gH/Ad4C5wH/Ad8C6AH/AeAC6AH/Ac0C0wH/
A18B4wQAAyYBOQFgAloB3gGOASQBAAH/AewBngEpAf8B/gG/AYUC/wHMAaEC/wHfAbsB/wH+AcIBVQH/
AeIBjgEfAf8B0wGEARAB/wHKAU8BAgH/AbUBRgEAAf8BlwE3AQAB/wGBATQBDwH/A1kB7AMuAUgMAAE9
AZgB0AH/AasB0QHnAf8BkAHCAd8B/wEiAakBiAH/AZEByQG7Af8BTAG6AaUB/wFIAbgBoQH/AUQBtgGe
Af8BSAG4AZ0B/wEzAaUBkgH/A1YBswNWAbMBVQFWAVUBsQQAAbYBhwFdAfAE/wHtAcMBmwH/AfQB2gHA
Af8B9AHaAcAB/wH0AdsBwQH/AfQB2wHBAf8B9AHbAcEB/wH0AdsBwQH/AfQB2wHBAf8B9AHbAcEB/wHt
AcMBmgX/AbsBfwFXAf4IAAMsAUMDWwHIA50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/
A50B/wNeAd0DMQFOBAADCQEMA0sBjgHAAUQBAwL/AbwBVQH/AfoBzgGnAf8B+AHbAb4C/wHiAcYC/wG+
AYYB/wH0AawBSwH/AewBwgGaAf8B4gG1AYsB/wG4AUsBCQH/AZ0BOgECAf8BiAE6ARYB/wNPAaUDEAEV
DAABQQGbAdMB/wGuAdQB6AH/AasB0wHoAf8BLwGxAZAB/wGbAc4BwAH/AZkBzQG9Af8BlgHLAbsB/wGV
AcoBuQH/AYABvwGoAf8BTQGzAakB/wNWAbMDVQGyAwgBCwQAAZcBegFeAdgE/wHtAcMBmwH/Ae0BwwGb
Af8B7QHDAZsB/wHtAcMBmgH/Ae0BwwGaAf8B7QHDAZoB/wHtAcMBmgH/Ae0BwwGaAf8B7QHDAZoB/wHt
AcMBmgX/AbsBhAFcAfhIAAMTARoCZAFTAfEB2AGeAUgB/wHnAdMBwAH/AfwB9QHuAv8B+AHrAv8B5QHC
Af8B9gG5AYIB/wHyAdIBuAH/Ae4B0gG2Af8BwgGGASQB/wGnAUwBHQH/Ak0BKQH6Ax0BKRAAAUQBnQHV
Af8BQgGbAdMB/wE/AZoB0gH/AR8BoQGMAf8BGgGfAYoB/wEXAZ0BhQH/ARMBmQGAAf8BLAGlAZIB/wFV
AbgBsQH/ASYBoQGLAf8DVQGyAwYBCAgAAWEBWQFSAZsw/wHWAakBiAH/TAADNQFXAakBOAEKAf8BygG4
AagG/wH+AfwC/wH2AeIB/wH7AcUBoAH/AeQBuQGVAf8B2wGsAVMB/wHDAY4BMgH/AZMBOgEOAf8BPgI9
AWowAAFTAlQBrANWAbMDVgGzAwQBBgwAAUYBQwFBAXEBWQFTAU4BkAGLAXMBXAHMAc4BkgFcAf8ByAGN
AV4B/gHNAZEBXAH/AcwBjwFcAf8BzQGRAV4B/wHNAZIBYAH/AcsBkAFeAf8BsAGDAVsB7wGJAXIBXgHL
AdgBrQGKAf8B1wGrAYoB/1AAAzIBUQJkAVkB7AHQAbIBlQH/AewB4AHZAf8B5gHVAcQB/wHTAbABlAH/
AdMBpgFNAf8BywGPASsB/wFnAWUBWQHyAToCOQFgNAABUwJUAawDVgGzAwQBBpwAAxEBFwNEAXoCWgFX
AcUCZQFeAeUCYQFYAeYCXAFZAckCSAFHAYMDFQEdEAABQgFNAT4HAAE+AwABKAMAAUADAAEwAwABAQEA
AQEFAAGAAQEWAAP/gQAB4AEHAgAB/AE/Av8BwAEDAgAB/AE/AfwBHwHAAQMCAAHAAQMB+AEHAcABAwIA
AcABAwH4AQMBwAEDAgABwAEDAfABAQHAAQMCAAHAAQMBgAEAAcABAwYAAcABAwIAAQEBgAEBAQABwAED
AYACAQGAAgABwAEDAYABAQQAAcABAwHAAQMBwAEDAgABwAEDAfABDwHAAQMBgAEAAcABAwHwAQ8BgAED
AYABAAHAAQMB8AEPAcABAwHgAQEBwAEDAfABDwHwAQ8B8AEDAcABAwH4AR8B/AE/AfwBDwHjBf8B4AEH
AYABAQGAAQEC/wHAAQMBgAEHAYABAQL/AYABAwEAAQcBgAEBAv8BwAEDAQABBwGAAQECAAHAAQMBAAEH
AYABAQIAAYABAQGAAQcBgAEBAYABAQIAAcABBwGAAQEBgAEBAgAB4AEDAYABAQGAAQECAAHgAQEBgAEB
AYABAQIAAeABAAGAAQEBgAEBAgAB4AEAAYABAQGAAQECAAHgAQABgAEBAv8BgAEBAeABAQGAAQEC/wHA
AQMB/wHDAYABAQL/AeABBwH/AccE/wHwAQ8L
</value>
</data>
<metadata name="dlgColor.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>140, 17</value>
</metadata>
</root>

View File

@@ -1,6 +1,12 @@
Imports mRemoteNG.My
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
Public Class frmOptions
Inherits System.Windows.Forms.Form
@@ -73,10 +79,8 @@ Public Class frmOptions
Friend WithEvents chkMinimizeToSystemTray As System.Windows.Forms.CheckBox
Friend WithEvents chkShowSystemTrayIcon As System.Windows.Forms.CheckBox
Friend WithEvents chkShowFullConnectionsFilePathInTitle As System.Windows.Forms.CheckBox
Friend WithEvents chkConfirmCloseConnection As System.Windows.Forms.CheckBox
Friend WithEvents chkSaveConsOnExit As System.Windows.Forms.CheckBox
Friend WithEvents chkProperInstallationOfComponentsAtStartup As System.Windows.Forms.CheckBox
Friend WithEvents chkConfirmExit As System.Windows.Forms.CheckBox
Friend WithEvents chkSingleInstance As System.Windows.Forms.CheckBox
Friend WithEvents chkReconnectOnStart As System.Windows.Forms.CheckBox
Friend WithEvents tcTabControl As System.Windows.Forms.TabControl
@@ -110,17 +114,31 @@ Public Class frmOptions
Friend WithEvents lblSQLDatabaseName As System.Windows.Forms.Label
Friend WithEvents txtSQLDatabaseName As System.Windows.Forms.TextBox
Friend WithEvents chkAlwaysShowPanelTabs As System.Windows.Forms.CheckBox
Friend WithEvents chkIdentifyQuickConnectTabs As System.Windows.Forms.CheckBox
Friend WithEvents pnlConfirmCloseConnection As System.Windows.Forms.Panel
Friend WithEvents lblClosingConnections As System.Windows.Forms.Label
Friend WithEvents radCloseWarnAll As System.Windows.Forms.RadioButton
Friend WithEvents radCloseWarnMultiple As System.Windows.Forms.RadioButton
Friend WithEvents radCloseWarnExit As System.Windows.Forms.RadioButton
Friend WithEvents radCloseWarnNever As System.Windows.Forms.RadioButton
Friend WithEvents tabTheme As System.Windows.Forms.TabPage
Friend WithEvents ThemePropertyGrid As System.Windows.Forms.PropertyGrid
Friend WithEvents dlgColor As System.Windows.Forms.ColorDialog
Friend WithEvents btnThemeNew As System.Windows.Forms.Button
Friend WithEvents cboTheme As System.Windows.Forms.ComboBox
Friend WithEvents btnThemeDelete As System.Windows.Forms.Button
Private components As System.ComponentModel.IContainer
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Startup/Exit", 0)
Dim ListViewItem2 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Appearance", 1)
Dim ListViewItem3 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Tabs & Panels", 2)
Dim ListViewItem4 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Connections", 3)
Dim ListViewItem5 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("SQL Server", 4)
Dim ListViewItem6 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Updates", 5)
Dim ListViewItem7 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Advanced", 6)
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Startup/Exit", "StartupExit_Icon.ico")
Dim ListViewItem2 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Appearance", "Panels_Icon.ico")
Dim ListViewItem3 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Tabs & Panels", "Tab_Icon.ico")
Dim ListViewItem4 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Connections", "Root_Icon.ico")
Dim ListViewItem5 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("SQL Server", "database.bmp")
Dim ListViewItem6 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Updates", "Update_Icon.ico")
Dim ListViewItem7 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Advanced", "Config_Icon.ico")
Dim ListViewItem8 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem("Theme", "Appearance_Icon.ico")
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmOptions))
Me.btnOK = New System.Windows.Forms.Button()
Me.btnCancel = New System.Windows.Forms.Button()
@@ -191,15 +209,14 @@ Public Class frmOptions
Me.lblLanguageRestartRequired = New System.Windows.Forms.Label()
Me.chkReconnectOnStart = New System.Windows.Forms.CheckBox()
Me.chkSingleInstance = New System.Windows.Forms.CheckBox()
Me.chkConfirmExit = New System.Windows.Forms.CheckBox()
Me.chkProperInstallationOfComponentsAtStartup = New System.Windows.Forms.CheckBox()
Me.chkSaveConsOnExit = New System.Windows.Forms.CheckBox()
Me.chkConfirmCloseConnection = New System.Windows.Forms.CheckBox()
Me.tcTabControl = New System.Windows.Forms.TabControl()
Me.tabStartupExit = New System.Windows.Forms.TabPage()
Me.tabAppearance = New System.Windows.Forms.TabPage()
Me.tabTabsAndPanels = New System.Windows.Forms.TabPage()
Me.chkAlwaysShowPanelTabs = New System.Windows.Forms.CheckBox()
Me.chkIdentifyQuickConnectTabs = New System.Windows.Forms.CheckBox()
Me.tabConnections = New System.Windows.Forms.TabPage()
Me.pnlDefaultCredentials = New System.Windows.Forms.Panel()
Me.radCredentialsCustom = New System.Windows.Forms.RadioButton()
@@ -212,6 +229,12 @@ Public Class frmOptions
Me.lblCredentialsPassword = New System.Windows.Forms.Label()
Me.txtCredentialsUsername = New System.Windows.Forms.TextBox()
Me.lblCredentialsDomain = New System.Windows.Forms.Label()
Me.pnlConfirmCloseConnection = New System.Windows.Forms.Panel()
Me.lblClosingConnections = New System.Windows.Forms.Label()
Me.radCloseWarnAll = New System.Windows.Forms.RadioButton()
Me.radCloseWarnMultiple = New System.Windows.Forms.RadioButton()
Me.radCloseWarnExit = New System.Windows.Forms.RadioButton()
Me.radCloseWarnNever = New System.Windows.Forms.RadioButton()
Me.tabSQLServer = New System.Windows.Forms.TabPage()
Me.lblSQLDatabaseName = New System.Windows.Forms.Label()
Me.txtSQLDatabaseName = New System.Windows.Forms.TextBox()
@@ -226,6 +249,12 @@ Public Class frmOptions
Me.lblSQLPassword = New System.Windows.Forms.Label()
Me.tabUpdates = New System.Windows.Forms.TabPage()
Me.tabAdvanced = New System.Windows.Forms.TabPage()
Me.tabTheme = New System.Windows.Forms.TabPage()
Me.btnThemeDelete = New System.Windows.Forms.Button()
Me.btnThemeNew = New System.Windows.Forms.Button()
Me.cboTheme = New System.Windows.Forms.ComboBox()
Me.ThemePropertyGrid = New System.Windows.Forms.PropertyGrid()
Me.dlgColor = New System.Windows.Forms.ColorDialog()
CType(Me.numPuttyWaitTime, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.numUVNCSCPort, System.ComponentModel.ISupportInitialize).BeginInit()
Me.pnlProxy.SuspendLayout()
@@ -243,9 +272,11 @@ Public Class frmOptions
Me.tabTabsAndPanels.SuspendLayout()
Me.tabConnections.SuspendLayout()
Me.pnlDefaultCredentials.SuspendLayout()
Me.pnlConfirmCloseConnection.SuspendLayout()
Me.tabSQLServer.SuspendLayout()
Me.tabUpdates.SuspendLayout()
Me.tabAdvanced.SuspendLayout()
Me.tabTheme.SuspendLayout()
Me.SuspendLayout()
'
'btnOK
@@ -275,7 +306,7 @@ Public Class frmOptions
Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.lvPages.FullRowSelect = True
Me.lvPages.HideSelection = False
Me.lvPages.Items.AddRange(New System.Windows.Forms.ListViewItem() {ListViewItem1, ListViewItem2, ListViewItem3, ListViewItem4, ListViewItem5, ListViewItem6, ListViewItem7})
Me.lvPages.Items.AddRange(New System.Windows.Forms.ListViewItem() {ListViewItem1, ListViewItem2, ListViewItem3, ListViewItem4, ListViewItem5, ListViewItem6, ListViewItem7, ListViewItem8})
Me.lvPages.LabelWrap = False
Me.lvPages.LargeImageList = Me.imgListPages
Me.lvPages.Location = New System.Drawing.Point(12, 12)
@@ -293,12 +324,13 @@ Public Class frmOptions
Me.imgListPages.ImageStream = CType(resources.GetObject("imgListPages.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.imgListPages.TransparentColor = System.Drawing.Color.Fuchsia
Me.imgListPages.Images.SetKeyName(0, "StartupExit_Icon.ico")
Me.imgListPages.Images.SetKeyName(1, "Appearance_Icon.ico")
Me.imgListPages.Images.SetKeyName(1, "Panels_Icon.ico")
Me.imgListPages.Images.SetKeyName(2, "Tab_Icon.ico")
Me.imgListPages.Images.SetKeyName(3, "Root_Icon.ico")
Me.imgListPages.Images.SetKeyName(4, "database.bmp")
Me.imgListPages.Images.SetKeyName(5, "Update_Icon.ico")
Me.imgListPages.Images.SetKeyName(6, "Config_Icon.ico")
Me.imgListPages.Images.SetKeyName(7, "Appearance_Icon.ico")
'
'lblMaximumPuttyWaitTime
'
@@ -427,7 +459,7 @@ Public Class frmOptions
'chkEncryptCompleteFile
'
Me.chkEncryptCompleteFile.AutoSize = True
Me.chkEncryptCompleteFile.Location = New System.Drawing.Point(2, 26)
Me.chkEncryptCompleteFile.Location = New System.Drawing.Point(3, 26)
Me.chkEncryptCompleteFile.Name = "chkEncryptCompleteFile"
Me.chkEncryptCompleteFile.Size = New System.Drawing.Size(180, 17)
Me.chkEncryptCompleteFile.TabIndex = 1
@@ -665,7 +697,7 @@ Public Class frmOptions
Me.pnlAutoSave.Controls.Add(Me.lblAutoSave2)
Me.pnlAutoSave.Location = New System.Drawing.Point(3, 107)
Me.pnlAutoSave.Name = "pnlAutoSave"
Me.pnlAutoSave.Size = New System.Drawing.Size(500, 29)
Me.pnlAutoSave.Size = New System.Drawing.Size(596, 29)
Me.pnlAutoSave.TabIndex = 4
'
'lblAutoSave1
@@ -721,7 +753,7 @@ Public Class frmOptions
Me.pnlRdpReconnectionCount.Controls.Add(Me.numRdpReconnectionCount)
Me.pnlRdpReconnectionCount.Location = New System.Drawing.Point(3, 72)
Me.pnlRdpReconnectionCount.Name = "pnlRdpReconnectionCount"
Me.pnlRdpReconnectionCount.Size = New System.Drawing.Size(500, 29)
Me.pnlRdpReconnectionCount.Size = New System.Drawing.Size(596, 29)
Me.pnlRdpReconnectionCount.TabIndex = 3
'
'lblRdpReconnectionCount
@@ -746,7 +778,7 @@ Public Class frmOptions
'chkAlwaysShowPanelSelectionDlg
'
Me.chkAlwaysShowPanelSelectionDlg.AutoSize = True
Me.chkAlwaysShowPanelSelectionDlg.Location = New System.Drawing.Point(3, 118)
Me.chkAlwaysShowPanelSelectionDlg.Location = New System.Drawing.Point(3, 141)
Me.chkAlwaysShowPanelSelectionDlg.Name = "chkAlwaysShowPanelSelectionDlg"
Me.chkAlwaysShowPanelSelectionDlg.Size = New System.Drawing.Size(317, 17)
Me.chkAlwaysShowPanelSelectionDlg.TabIndex = 4
@@ -766,7 +798,7 @@ Public Class frmOptions
'chkDoubleClickClosesTab
'
Me.chkDoubleClickClosesTab.AutoSize = True
Me.chkDoubleClickClosesTab.Location = New System.Drawing.Point(3, 95)
Me.chkDoubleClickClosesTab.Location = New System.Drawing.Point(3, 118)
Me.chkDoubleClickClosesTab.Name = "chkDoubleClickClosesTab"
Me.chkDoubleClickClosesTab.Size = New System.Drawing.Size(159, 17)
Me.chkDoubleClickClosesTab.TabIndex = 3
@@ -797,7 +829,7 @@ Public Class frmOptions
'
Me.chkMCWarnings.AutoSize = True
Me.chkMCWarnings.Enabled = False
Me.chkMCWarnings.Location = New System.Drawing.Point(19, 233)
Me.chkMCWarnings.Location = New System.Drawing.Point(19, 256)
Me.chkMCWarnings.Name = "chkMCWarnings"
Me.chkMCWarnings.Size = New System.Drawing.Size(71, 17)
Me.chkMCWarnings.TabIndex = 8
@@ -808,7 +840,7 @@ Public Class frmOptions
'
Me.chkMCErrors.AutoSize = True
Me.chkMCErrors.Enabled = False
Me.chkMCErrors.Location = New System.Drawing.Point(19, 256)
Me.chkMCErrors.Location = New System.Drawing.Point(19, 279)
Me.chkMCErrors.Name = "chkMCErrors"
Me.chkMCErrors.Size = New System.Drawing.Size(53, 17)
Me.chkMCErrors.TabIndex = 9
@@ -819,7 +851,7 @@ Public Class frmOptions
'
Me.chkMCInformation.AutoSize = True
Me.chkMCInformation.Enabled = False
Me.chkMCInformation.Location = New System.Drawing.Point(19, 210)
Me.chkMCInformation.Location = New System.Drawing.Point(19, 233)
Me.chkMCInformation.Name = "chkMCInformation"
Me.chkMCInformation.Size = New System.Drawing.Size(83, 17)
Me.chkMCInformation.TabIndex = 7
@@ -829,7 +861,7 @@ Public Class frmOptions
'lblSwitchToErrorsAndInfos
'
Me.lblSwitchToErrorsAndInfos.AutoSize = True
Me.lblSwitchToErrorsAndInfos.Location = New System.Drawing.Point(3, 190)
Me.lblSwitchToErrorsAndInfos.Location = New System.Drawing.Point(3, 213)
Me.lblSwitchToErrorsAndInfos.Name = "lblSwitchToErrorsAndInfos"
Me.lblSwitchToErrorsAndInfos.Size = New System.Drawing.Size(159, 13)
Me.lblSwitchToErrorsAndInfos.TabIndex = 6
@@ -838,7 +870,7 @@ Public Class frmOptions
'chkUseOnlyErrorsAndInfosPanel
'
Me.chkUseOnlyErrorsAndInfosPanel.AutoSize = True
Me.chkUseOnlyErrorsAndInfosPanel.Location = New System.Drawing.Point(3, 165)
Me.chkUseOnlyErrorsAndInfosPanel.Location = New System.Drawing.Point(3, 188)
Me.chkUseOnlyErrorsAndInfosPanel.Name = "chkUseOnlyErrorsAndInfosPanel"
Me.chkUseOnlyErrorsAndInfosPanel.Size = New System.Drawing.Size(278, 17)
Me.chkUseOnlyErrorsAndInfosPanel.TabIndex = 5
@@ -916,7 +948,7 @@ Public Class frmOptions
'chkReconnectOnStart
'
Me.chkReconnectOnStart.AutoSize = True
Me.chkReconnectOnStart.Location = New System.Drawing.Point(3, 75)
Me.chkReconnectOnStart.Location = New System.Drawing.Point(3, 27)
Me.chkReconnectOnStart.Name = "chkReconnectOnStart"
Me.chkReconnectOnStart.Size = New System.Drawing.Size(273, 17)
Me.chkReconnectOnStart.TabIndex = 3
@@ -926,27 +958,17 @@ Public Class frmOptions
'chkSingleInstance
'
Me.chkSingleInstance.AutoSize = True
Me.chkSingleInstance.Location = New System.Drawing.Point(3, 99)
Me.chkSingleInstance.Location = New System.Drawing.Point(3, 51)
Me.chkSingleInstance.Name = "chkSingleInstance"
Me.chkSingleInstance.Size = New System.Drawing.Size(366, 17)
Me.chkSingleInstance.TabIndex = 4
Me.chkSingleInstance.Text = "Allow only a single instance of the application (mRemote restart required)"
Me.chkSingleInstance.UseVisualStyleBackColor = True
'
'chkConfirmExit
'
Me.chkConfirmExit.AutoSize = True
Me.chkConfirmExit.Location = New System.Drawing.Point(3, 27)
Me.chkConfirmExit.Name = "chkConfirmExit"
Me.chkConfirmExit.Size = New System.Drawing.Size(221, 17)
Me.chkConfirmExit.TabIndex = 1
Me.chkConfirmExit.Text = "Confirm exit if there are open connections"
Me.chkConfirmExit.UseVisualStyleBackColor = True
'
'chkProperInstallationOfComponentsAtStartup
'
Me.chkProperInstallationOfComponentsAtStartup.AutoSize = True
Me.chkProperInstallationOfComponentsAtStartup.Location = New System.Drawing.Point(3, 123)
Me.chkProperInstallationOfComponentsAtStartup.Location = New System.Drawing.Point(3, 75)
Me.chkProperInstallationOfComponentsAtStartup.Name = "chkProperInstallationOfComponentsAtStartup"
Me.chkProperInstallationOfComponentsAtStartup.Size = New System.Drawing.Size(262, 17)
Me.chkProperInstallationOfComponentsAtStartup.TabIndex = 5
@@ -956,23 +978,13 @@ Public Class frmOptions
'chkSaveConsOnExit
'
Me.chkSaveConsOnExit.AutoSize = True
Me.chkSaveConsOnExit.Location = New System.Drawing.Point(3, 51)
Me.chkSaveConsOnExit.Location = New System.Drawing.Point(3, 3)
Me.chkSaveConsOnExit.Name = "chkSaveConsOnExit"
Me.chkSaveConsOnExit.Size = New System.Drawing.Size(146, 17)
Me.chkSaveConsOnExit.TabIndex = 2
Me.chkSaveConsOnExit.Text = "Save connections on exit"
Me.chkSaveConsOnExit.UseVisualStyleBackColor = True
'
'chkConfirmCloseConnection
'
Me.chkConfirmCloseConnection.AutoSize = True
Me.chkConfirmCloseConnection.Location = New System.Drawing.Point(3, 3)
Me.chkConfirmCloseConnection.Name = "chkConfirmCloseConnection"
Me.chkConfirmCloseConnection.Size = New System.Drawing.Size(176, 17)
Me.chkConfirmCloseConnection.TabIndex = 0
Me.chkConfirmCloseConnection.Text = "Confirm closing connection tabs"
Me.chkConfirmCloseConnection.UseVisualStyleBackColor = True
'
'tcTabControl
'
Me.tcTabControl.Controls.Add(Me.tabStartupExit)
@@ -982,6 +994,7 @@ Public Class frmOptions
Me.tcTabControl.Controls.Add(Me.tabSQLServer)
Me.tcTabControl.Controls.Add(Me.tabUpdates)
Me.tcTabControl.Controls.Add(Me.tabAdvanced)
Me.tcTabControl.Controls.Add(Me.tabTheme)
Me.tcTabControl.Location = New System.Drawing.Point(172, 12)
Me.tcTabControl.Name = "tcTabControl"
Me.tcTabControl.SelectedIndex = 0
@@ -992,12 +1005,10 @@ Public Class frmOptions
'
'tabStartupExit
'
Me.tabStartupExit.Controls.Add(Me.chkConfirmCloseConnection)
Me.tabStartupExit.Controls.Add(Me.chkReconnectOnStart)
Me.tabStartupExit.Controls.Add(Me.chkSaveConsOnExit)
Me.tabStartupExit.Controls.Add(Me.chkSingleInstance)
Me.tabStartupExit.Controls.Add(Me.chkProperInstallationOfComponentsAtStartup)
Me.tabStartupExit.Controls.Add(Me.chkConfirmExit)
Me.tabStartupExit.Location = New System.Drawing.Point(4, 22)
Me.tabStartupExit.Name = "tabStartupExit"
Me.tabStartupExit.Size = New System.Drawing.Size(602, 463)
@@ -1024,6 +1035,7 @@ Public Class frmOptions
'tabTabsAndPanels
'
Me.tabTabsAndPanels.Controls.Add(Me.chkAlwaysShowPanelTabs)
Me.tabTabsAndPanels.Controls.Add(Me.chkIdentifyQuickConnectTabs)
Me.tabTabsAndPanels.Controls.Add(Me.chkUseOnlyErrorsAndInfosPanel)
Me.tabTabsAndPanels.Controls.Add(Me.chkOpenNewTabRightOfSelected)
Me.tabTabsAndPanels.Controls.Add(Me.lblSwitchToErrorsAndInfos)
@@ -1051,6 +1063,16 @@ Public Class frmOptions
Me.chkAlwaysShowPanelTabs.Text = "Always show panel tabs"
Me.chkAlwaysShowPanelTabs.UseVisualStyleBackColor = True
'
'chkIdentifyQuickConnectTabs
'
Me.chkIdentifyQuickConnectTabs.AutoSize = True
Me.chkIdentifyQuickConnectTabs.Location = New System.Drawing.Point(3, 95)
Me.chkIdentifyQuickConnectTabs.Name = "chkIdentifyQuickConnectTabs"
Me.chkIdentifyQuickConnectTabs.Size = New System.Drawing.Size(293, 17)
Me.chkIdentifyQuickConnectTabs.TabIndex = 10
Me.chkIdentifyQuickConnectTabs.Text = Global.mRemoteNG.My.Language.strIdentifyQuickConnectTabs
Me.chkIdentifyQuickConnectTabs.UseVisualStyleBackColor = True
'
'tabConnections
'
Me.tabConnections.Controls.Add(Me.pnlRdpReconnectionCount)
@@ -1059,6 +1081,7 @@ Public Class frmOptions
Me.tabConnections.Controls.Add(Me.pnlDefaultCredentials)
Me.tabConnections.Controls.Add(Me.chkSingleClickOnOpenedConnectionSwitchesToIt)
Me.tabConnections.Controls.Add(Me.pnlAutoSave)
Me.tabConnections.Controls.Add(Me.pnlConfirmCloseConnection)
Me.tabConnections.Location = New System.Drawing.Point(4, 22)
Me.tabConnections.Name = "tabConnections"
Me.tabConnections.Size = New System.Drawing.Size(602, 463)
@@ -1182,6 +1205,71 @@ Public Class frmOptions
Me.lblCredentialsDomain.Text = "Domain:"
Me.lblCredentialsDomain.TextAlign = System.Drawing.ContentAlignment.TopRight
'
'pnlConfirmCloseConnection
'
Me.pnlConfirmCloseConnection.Controls.Add(Me.lblClosingConnections)
Me.pnlConfirmCloseConnection.Controls.Add(Me.radCloseWarnAll)
Me.pnlConfirmCloseConnection.Controls.Add(Me.radCloseWarnMultiple)
Me.pnlConfirmCloseConnection.Controls.Add(Me.radCloseWarnExit)
Me.pnlConfirmCloseConnection.Controls.Add(Me.radCloseWarnNever)
Me.pnlConfirmCloseConnection.Location = New System.Drawing.Point(3, 323)
Me.pnlConfirmCloseConnection.Name = "pnlConfirmCloseConnection"
Me.pnlConfirmCloseConnection.Size = New System.Drawing.Size(596, 137)
Me.pnlConfirmCloseConnection.TabIndex = 10
'
'lblClosingConnections
'
Me.lblClosingConnections.AutoSize = True
Me.lblClosingConnections.Location = New System.Drawing.Point(3, 9)
Me.lblClosingConnections.Name = "lblClosingConnections"
Me.lblClosingConnections.Size = New System.Drawing.Size(136, 13)
Me.lblClosingConnections.TabIndex = 12
Me.lblClosingConnections.Text = "When closing connections:"
'
'radCloseWarnAll
'
Me.radCloseWarnAll.AutoSize = True
Me.radCloseWarnAll.Location = New System.Drawing.Point(16, 31)
Me.radCloseWarnAll.Name = "radCloseWarnAll"
Me.radCloseWarnAll.Size = New System.Drawing.Size(194, 17)
Me.radCloseWarnAll.TabIndex = 11
Me.radCloseWarnAll.TabStop = True
Me.radCloseWarnAll.Text = "Warn me when closing connections"
Me.radCloseWarnAll.UseVisualStyleBackColor = True
'
'radCloseWarnMultiple
'
Me.radCloseWarnMultiple.AutoSize = True
Me.radCloseWarnMultiple.Location = New System.Drawing.Point(16, 54)
Me.radCloseWarnMultiple.Name = "radCloseWarnMultiple"
Me.radCloseWarnMultiple.Size = New System.Drawing.Size(254, 17)
Me.radCloseWarnMultiple.TabIndex = 10
Me.radCloseWarnMultiple.TabStop = True
Me.radCloseWarnMultiple.Text = "Warn me only when closing multiple connections"
Me.radCloseWarnMultiple.UseVisualStyleBackColor = True
'
'radCloseWarnExit
'
Me.radCloseWarnExit.AutoSize = True
Me.radCloseWarnExit.Location = New System.Drawing.Point(16, 77)
Me.radCloseWarnExit.Name = "radCloseWarnExit"
Me.radCloseWarnExit.Size = New System.Drawing.Size(216, 17)
Me.radCloseWarnExit.TabIndex = 9
Me.radCloseWarnExit.TabStop = True
Me.radCloseWarnExit.Text = "Warn me only when exiting mRemoteNG"
Me.radCloseWarnExit.UseVisualStyleBackColor = True
'
'radCloseWarnNever
'
Me.radCloseWarnNever.AutoSize = True
Me.radCloseWarnNever.Location = New System.Drawing.Point(16, 100)
Me.radCloseWarnNever.Name = "radCloseWarnNever"
Me.radCloseWarnNever.Size = New System.Drawing.Size(226, 17)
Me.radCloseWarnNever.TabIndex = 8
Me.radCloseWarnNever.TabStop = True
Me.radCloseWarnNever.Text = "Do not warn me when closing connections"
Me.radCloseWarnNever.UseVisualStyleBackColor = True
'
'tabSQLServer
'
Me.tabSQLServer.Controls.Add(Me.lblSQLDatabaseName)
@@ -1355,6 +1443,57 @@ Public Class frmOptions
Me.tabAdvanced.Text = "Advanced"
Me.tabAdvanced.UseVisualStyleBackColor = True
'
'tabTheme
'
Me.tabTheme.Controls.Add(Me.btnThemeDelete)
Me.tabTheme.Controls.Add(Me.btnThemeNew)
Me.tabTheme.Controls.Add(Me.cboTheme)
Me.tabTheme.Controls.Add(Me.ThemePropertyGrid)
Me.tabTheme.Location = New System.Drawing.Point(4, 22)
Me.tabTheme.Name = "tabTheme"
Me.tabTheme.Padding = New System.Windows.Forms.Padding(3)
Me.tabTheme.Size = New System.Drawing.Size(602, 463)
Me.tabTheme.TabIndex = 7
Me.tabTheme.Text = "Theme"
Me.tabTheme.UseVisualStyleBackColor = True
'
'btnThemeDelete
'
Me.btnThemeDelete.Location = New System.Drawing.Point(524, 5)
Me.btnThemeDelete.Name = "btnThemeDelete"
Me.btnThemeDelete.Size = New System.Drawing.Size(75, 23)
Me.btnThemeDelete.TabIndex = 2
Me.btnThemeDelete.Text = "&Delete"
Me.btnThemeDelete.UseVisualStyleBackColor = True
'
'btnThemeNew
'
Me.btnThemeNew.Location = New System.Drawing.Point(443, 5)
Me.btnThemeNew.Name = "btnThemeNew"
Me.btnThemeNew.Size = New System.Drawing.Size(75, 23)
Me.btnThemeNew.TabIndex = 1
Me.btnThemeNew.Text = "&New"
Me.btnThemeNew.UseVisualStyleBackColor = True
'
'cboTheme
'
Me.cboTheme.FormattingEnabled = True
Me.cboTheme.Location = New System.Drawing.Point(3, 7)
Me.cboTheme.Name = "cboTheme"
Me.cboTheme.Size = New System.Drawing.Size(434, 21)
Me.cboTheme.TabIndex = 0
'
'ThemePropertyGrid
'
Me.ThemePropertyGrid.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.ThemePropertyGrid.Location = New System.Drawing.Point(3, 34)
Me.ThemePropertyGrid.Name = "ThemePropertyGrid"
Me.ThemePropertyGrid.Size = New System.Drawing.Size(596, 426)
Me.ThemePropertyGrid.TabIndex = 3
Me.ThemePropertyGrid.UseCompatibleTextRendering = True
'
'frmOptions
'
Me.CancelButton = Me.btnCancel
@@ -1399,11 +1538,14 @@ Public Class frmOptions
Me.tabConnections.PerformLayout()
Me.pnlDefaultCredentials.ResumeLayout(False)
Me.pnlDefaultCredentials.PerformLayout()
Me.pnlConfirmCloseConnection.ResumeLayout(False)
Me.pnlConfirmCloseConnection.PerformLayout()
Me.tabSQLServer.ResumeLayout(False)
Me.tabSQLServer.PerformLayout()
Me.tabUpdates.ResumeLayout(False)
Me.tabAdvanced.ResumeLayout(False)
Me.tabAdvanced.PerformLayout()
Me.tabTheme.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
@@ -1413,8 +1555,16 @@ Public Class frmOptions
Private Sub LoadOptions()
Try
Me.chkSaveConsOnExit.Checked = My.Settings.SaveConsOnExit
Me.chkConfirmCloseConnection.Checked = My.Settings.ConfirmCloseConnection
Me.chkConfirmExit.Checked = My.Settings.ConfirmExit
Select Case Settings.ConfirmCloseConnection
Case Config.ConfirmClose.Never
radCloseWarnNever.Checked = True
Case Config.ConfirmClose.Exit
radCloseWarnExit.Checked = True
Case Config.ConfirmClose.Multiple
radCloseWarnMultiple.Checked = True
Case Else
radCloseWarnAll.Checked = True
End Select
Me.chkReconnectOnStart.Checked = My.Settings.OpenConsFromLastSession
Me.chkProperInstallationOfComponentsAtStartup.Checked = My.Settings.StartupComponentsCheck
@@ -1439,6 +1589,7 @@ Public Class frmOptions
Me.chkOpenNewTabRightOfSelected.Checked = My.Settings.OpenTabsRightOfSelected
Me.chkShowLogonInfoOnTabs.Checked = My.Settings.ShowLogonInfoOnTabs
Me.chkShowProtocolOnTabs.Checked = My.Settings.ShowProtocolOnTabs
chkIdentifyQuickConnectTabs.Checked = Settings.IdentifyQuickConnectTabs
Me.chkShowFullConnectionsFilePathInTitle.Checked = My.Settings.ShowCompleteConsPathInTitle
Me.chkDoubleClickClosesTab.Checked = My.Settings.DoubleClickOnTabClosesIt
Me.chkAlwaysShowPanelSelectionDlg.Checked = My.Settings.AlwaysShowPanelSelectionDlg
@@ -1499,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
@@ -1519,6 +1672,15 @@ Public Class frmOptions
Me.numUVNCSCPort.Value = My.Settings.UVNCSCPort
Me.txtXULrunnerPath.Text = My.Settings.XULRunnerPath
_themeList = New BindingList(Of ThemeInfo)(ThemeManager.LoadThemes())
cboTheme.DataSource = _themeList
cboTheme.SelectedItem = ThemeManager.ActiveTheme
cboTheme_SelectionChangeCommitted(Me, New EventArgs())
ThemePropertyGrid.PropertySort = PropertySort.Categorized
_originalTheme = ThemeManager.ActiveTheme
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "LoadOptions (UI.Window.Options) failed" & vbNewLine & ex.Message, True)
End Try
@@ -1527,8 +1689,10 @@ Public Class frmOptions
Private Sub SaveOptions()
Try
My.Settings.SaveConsOnExit = Me.chkSaveConsOnExit.Checked
My.Settings.ConfirmCloseConnection = Me.chkConfirmCloseConnection.Checked
My.Settings.ConfirmExit = Me.chkConfirmExit.Checked
If radCloseWarnAll.Checked Then Settings.ConfirmCloseConnection = Config.ConfirmClose.All
If radCloseWarnMultiple.Checked Then Settings.ConfirmCloseConnection = Config.ConfirmClose.Multiple
If radCloseWarnExit.Checked Then Settings.ConfirmCloseConnection = Config.ConfirmClose.Exit
If radCloseWarnNever.Checked Then Settings.ConfirmCloseConnection = Config.ConfirmClose.Never
My.Settings.OpenConsFromLastSession = Me.chkReconnectOnStart.Checked
My.Settings.StartupComponentsCheck = Me.chkProperInstallationOfComponentsAtStartup.Checked
@@ -1561,6 +1725,7 @@ Public Class frmOptions
My.Settings.OpenTabsRightOfSelected = Me.chkOpenNewTabRightOfSelected.Checked
My.Settings.ShowLogonInfoOnTabs = Me.chkShowLogonInfoOnTabs.Checked
My.Settings.ShowProtocolOnTabs = Me.chkShowProtocolOnTabs.Checked
Settings.IdentifyQuickConnectTabs = chkIdentifyQuickConnectTabs.Checked
My.Settings.DoubleClickOnTabClosesIt = Me.chkDoubleClickClosesTab.Checked
My.Settings.AlwaysShowPanelSelectionDlg = Me.chkAlwaysShowPanelSelectionDlg.Checked
@@ -1620,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
@@ -1642,6 +1807,8 @@ Public Class frmOptions
My.Settings.XULRunnerPath = Me.txtXULrunnerPath.Text
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)
@@ -1661,8 +1828,11 @@ 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
#Region "Public Methods"
@@ -1702,6 +1872,7 @@ Public Class frmOptions
lvPages.Items(4).Text = My.Language.strSQLServer
lvPages.Items(5).Text = My.Language.strTabUpdates
lvPages.Items(6).Text = My.Language.strTabAdvanced
lvPages.Items(7).Text = Language.strOptionsTabTheme
#If Not PORTABLE Then
lblUpdatesExplanation.Text = My.Language.strUpdateCheck
#Else
@@ -1726,8 +1897,6 @@ Public Class frmOptions
chkSingleInstance.Text = My.Language.strAllowOnlySingleInstance
chkReconnectOnStart.Text = My.Language.strReconnectAtStartup
chkCheckForUpdatesOnStartup.Text = My.Language.strCheckForUpdatesOnStartup
chkConfirmCloseConnection.Text = My.Language.strConfirmCloseConnection
chkConfirmExit.Text = My.Language.strConfirmExit
chkSaveConsOnExit.Text = My.Language.strSaveConsOnExit
chkMinimizeToSystemTray.Text = My.Language.strMinimizeToSysTray
chkShowFullConnectionsFilePathInTitle.Text = My.Language.strShowFullConsFilePath
@@ -1735,6 +1904,7 @@ Public Class frmOptions
chkAlwaysShowPanelTabs.Text = My.Language.strAlwaysShowPanelTabs
chkShowDescriptionTooltipsInTree.Text = My.Language.strShowDescriptionTooltips
chkShowProtocolOnTabs.Text = My.Language.strShowProtocolOnTabs
chkIdentifyQuickConnectTabs.Text = Language.strIdentifyQuickConnectTabs
chkShowLogonInfoOnTabs.Text = My.Language.strShowLogonInfoOnTabs
chkOpenNewTabRightOfSelected.Text = My.Language.strOpenNewTabRight
chkAlwaysShowPanelSelectionDlg.Text = My.Language.strAlwaysShowPanelSelection
@@ -1757,6 +1927,11 @@ Public Class frmOptions
radCredentialsWindows.Text = My.Language.strMyCurrentWindowsCreds
radCredentialsNoInfo.Text = My.Language.strNoInformation
lblDefaultCredentials.Text = My.Language.strEmptyUsernamePasswordDomainFields
lblClosingConnections.Text = Language.strLabelClosingConnections
radCloseWarnAll.Text = Language.strRadioCloseWarnAll
radCloseWarnMultiple.Text = Language.strRadioCloseWarnMultiple
radCloseWarnExit.Text = Language.strRadioCloseWarnExit
radCloseWarnNever.Text = Language.strRadioCloseWarnNever
chkSingleClickOnOpenedConnectionSwitchesToIt.Text = My.Language.strSingleClickOnOpenConnectionSwitchesToIt
chkSingleClickOnConnectionOpensIt.Text = My.Language.strSingleClickOnConnectionOpensIt
lblSwitchToErrorsAndInfos.Text = My.Language.strSwitchToErrorsAndInfos
@@ -1775,6 +1950,8 @@ Public Class frmOptions
chkEncryptCompleteFile.Text = My.Language.strEncryptCompleteConnectionFile
lblLanguage.Text = My.Language.strLanguage
lblLanguageRestartRequired.Text = String.Format(My.Language.strLanguageRestartRequired, My.Application.Info.ProductName)
btnThemeDelete.Text = Language.strOptionsThemeButtonDelete
btnThemeNew.Text = Language.strOptionsThemeButtonNew
End Sub
Public Shadows Sub Show(ByVal dockPanel As DockPanel, Optional ByVal initialTab As Integer = 0)
@@ -1784,8 +1961,9 @@ Public Class frmOptions
MyBase.ShowDialog(frmMain)
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCancel.Click
ThemeManager.ActiveTheme = _originalTheme
Close()
End Sub
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
@@ -1834,26 +2012,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
@@ -1892,14 +2114,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
@@ -1911,5 +2160,50 @@ Public Class frmOptions
End If
End If
End Sub
Private Sub cboTheme_DropDown(ByVal sender As Object, ByVal e As EventArgs) Handles cboTheme.DropDown, cboTheme.LostFocus
If ThemeManager.ActiveTheme Is ThemeManager.DefaultTheme Then Return
ThemeManager.ActiveTheme.Name = cboTheme.Text
End Sub
Private Sub cboTheme_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs) Handles cboTheme.SelectionChangeCommitted ', cboTheme.SelectedIndexChanged, cboTheme.SelectedValueChanged
If cboTheme.SelectedItem Is Nothing Then cboTheme.SelectedItem = ThemeManager.DefaultTheme
If cboTheme.SelectedItem Is ThemeManager.DefaultTheme Then
cboTheme.DropDownStyle = ComboBoxStyle.DropDownList
btnThemeDelete.Enabled = False
ThemePropertyGrid.Enabled = False
Else
cboTheme.DropDownStyle = ComboBoxStyle.DropDown
btnThemeDelete.Enabled = True
ThemePropertyGrid.Enabled = True
End If
ThemeManager.ActiveTheme = cboTheme.SelectedItem
ThemePropertyGrid.SelectedObject = ThemeManager.ActiveTheme
ThemePropertyGrid.Refresh()
End Sub
Private Sub btnThemeNew_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnThemeNew.Click
Dim newTheme As ThemeInfo = ThemeManager.ActiveTheme.Clone()
newTheme.Name = Language.strUnnamedTheme
_themeList.Add(newTheme)
cboTheme.SelectedItem = newTheme
cboTheme_SelectionChangeCommitted(Me, New EventArgs())
cboTheme.Focus()
End Sub
Private Sub btnThemeDelete_Click(sender As System.Object, e As EventArgs) Handles btnThemeDelete.Click
Dim theme As ThemeInfo = cboTheme.SelectedItem
If theme Is Nothing Then Return
_themeList.Remove(theme)
cboTheme.SelectedItem = ThemeManager.DefaultTheme
cboTheme_SelectionChangeCommitted(Me, New EventArgs())
End Sub
#End Region
End Class

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

BIN
mRemoteV1/Icons/PuTTY.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -5,6 +5,7 @@ Namespace Images
Container = 1
ConnectionOpen = 2
ConnectionClosed = 3
PuttySessions = 4
End Enum
Public Enum ErrorImage

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,42 @@ 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>
Friend Shared ReadOnly Property strCompatibilityLenovoAutoScrollUtilityDetected() As String
Get
Return ResourceManager.GetString("strCompatibilityLenovoAutoScrollUtilityDetected", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Compatibility problem detected.
'''</summary>
Friend Shared ReadOnly Property strCompatibilityProblemDetected() As String
Get
Return ResourceManager.GetString("strCompatibilityProblemDetected", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Components Check.
'''</summary>
@@ -999,15 +1043,6 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Confirm closing connection tabs.
'''</summary>
Friend Shared ReadOnly Property strConfirmCloseConnection() As String
Get
Return ResourceManager.GetString("strConfirmCloseConnection", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Do you want to close the connection, &quot;{0}&quot;?.
'''</summary>
@@ -1071,15 +1106,6 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Confirm exit if there are open connections.
'''</summary>
Friend Shared ReadOnly Property strConfirmExit() As String
Get
Return ResourceManager.GetString("strConfirmExit", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Do you want to close all open connections?.
'''</summary>
@@ -1344,6 +1370,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Default Theme.
'''</summary>
Friend Shared ReadOnly Property strDefaultTheme() As String
Get
Return ResourceManager.GetString("strDefaultTheme", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Detect.
'''</summary>
@@ -1533,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>
@@ -1844,7 +1888,7 @@ Namespace My
End Property
'''<summary>
''' Looks up a localized string similar to Changeing HTTP Document Tile Failed!.
''' Looks up a localized string similar to Changing HTTP Document Tile Failed!.
'''</summary>
Friend Shared ReadOnly Property strHttpDocumentTileChangeFailed() As String
Get
@@ -1951,6 +1995,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Identify quick connect tabs by adding the prefix &quot;Quick:&quot;.
'''</summary>
Friend Shared ReadOnly Property strIdentifyQuickConnectTabs() As String
Get
Return ResourceManager.GetString("strIdentifyQuickConnectTabs", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Import from Active Directory.
'''</summary>
@@ -2149,6 +2202,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to When closing connections:.
'''</summary>
Friend Shared ReadOnly Property strLabelClosingConnections() As String
Get
Return ResourceManager.GetString("strLabelClosingConnections", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Connect:.
'''</summary>
@@ -2357,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
@@ -2365,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>
@@ -2752,6 +2823,33 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Copy All.
'''</summary>
Friend Shared ReadOnly Property strMenuNotificationsCopyAll() As String
Get
Return ResourceManager.GetString("strMenuNotificationsCopyAll", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Delete.
'''</summary>
Friend Shared ReadOnly Property strMenuNotificationsDelete() As String
Get
Return ResourceManager.GetString("strMenuNotificationsDelete", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Delete All.
'''</summary>
Friend Shared ReadOnly Property strMenuNotificationsDeleteAll() As String
Get
Return ResourceManager.GetString("strMenuNotificationsDeleteAll", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Open Connection File....
'''</summary>
@@ -2914,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>
@@ -2932,6 +3039,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Show Help Text.
'''</summary>
Friend Shared ReadOnly Property strMenuShowHelpText() As String
Get
Return ResourceManager.GetString("strMenuShowHelpText", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Show Text.
'''</summary>
@@ -3212,6 +3328,42 @@ 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>
Friend Shared ReadOnly Property strOptionsTabTheme() As String
Get
Return ResourceManager.GetString("strOptionsTabTheme", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Delete.
'''</summary>
Friend Shared ReadOnly Property strOptionsThemeButtonDelete() As String
Get
Return ResourceManager.GetString("strOptionsThemeButtonDelete", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;New.
'''</summary>
Friend Shared ReadOnly Property strOptionsThemeButtonNew() As String
Get
Return ResourceManager.GetString("strOptionsThemeButtonNew", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Panel Name.
'''</summary>
@@ -3293,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>
@@ -3428,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>
@@ -3743,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>
@@ -3878,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>
@@ -4286,6 +4474,24 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to PuTTY Saved Sessions.
'''</summary>
Friend Shared ReadOnly Property strPuttySavedSessionsRootName() As String
Get
Return ResourceManager.GetString("strPuttySavedSessionsRootName", resourceCulture)
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>
@@ -4376,6 +4582,42 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to &amp;Warn me when closing connections.
'''</summary>
Friend Shared ReadOnly Property strRadioCloseWarnAll() As String
Get
Return ResourceManager.GetString("strRadioCloseWarnAll", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Warn me only when e&amp;xiting mRemoteNG.
'''</summary>
Friend Shared ReadOnly Property strRadioCloseWarnExit() As String
Get
Return ResourceManager.GetString("strRadioCloseWarnExit", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Warn me only when closing &amp;multiple connections.
'''</summary>
Friend Shared ReadOnly Property strRadioCloseWarnMultiple() As String
Get
Return ResourceManager.GetString("strRadioCloseWarnMultiple", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Do &amp;not warn me when closing connections.
'''</summary>
Friend Shared ReadOnly Property strRadioCloseWarnNever() As String
Get
Return ResourceManager.GetString("strRadioCloseWarnNever", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to RAW.
'''</summary>
@@ -4719,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
@@ -5024,6 +5266,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Search.
'''</summary>
Friend Shared ReadOnly Property strSearchPrompt() As String
Get
Return ResourceManager.GetString("strSearchPrompt", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Send To....
'''</summary>
@@ -5277,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
@@ -5384,6 +5635,339 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel.
'''</summary>
Friend Shared ReadOnly Property strThemeCategoryConfigPanel() As String
Get
Return ResourceManager.GetString("strThemeCategoryConfigPanel", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Connections Panel.
'''</summary>
Friend Shared ReadOnly Property strThemeCategoryConnectionsPanel() As String
Get
Return ResourceManager.GetString("strThemeCategoryConnectionsPanel", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to General.
'''</summary>
Friend Shared ReadOnly Property strThemeCategoryGeneral() As String
Get
Return ResourceManager.GetString("strThemeCategoryGeneral", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the config panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the category text in the config panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelCategoryTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelCategoryTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the grid lines in the config panel.
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelGridLineColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelGridLineColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the help area of the config panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelHelpBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelHelpBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the help area of the config panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelHelpTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelHelpTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the config panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConfigPanelTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConfigPanelTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the connections panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConnectionsPanelBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConnectionsPanelBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the connections panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConnectionsPanelTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConnectionsPanelTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the tree lines in the connections panel..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionConnectionsPanelTreeLineColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionConnectionsPanelTreeLineColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the menus..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionMenuBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionMenuBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the menus..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionMenuTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionMenuTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the search box..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionSearchBoxBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionSearchBoxBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the search box..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionSearchBoxTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionSearchBoxTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the prompt text in the search box..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionSearchBoxTextPromptColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionSearchBoxTextPromptColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the toolbars..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionToolbarBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionToolbarBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The colour of the text in the toolbars..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionToolbarTextColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionToolbarTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to The background colour of the main window..
'''</summary>
Friend Shared ReadOnly Property strThemeDescriptionWindowBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeDescriptionWindowBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Category Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelCategoryTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelCategoryTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Grid Line Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelGridLineColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelGridLineColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Help Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelHelpBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelHelpBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Help Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelHelpTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelHelpTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Config Panel Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConfigPanelTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameConfigPanelTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Connections Panel Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConnectionsPanelBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameConnectionsPanelBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Connections Panel Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConnectionsPanelTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameConnectionsPanelTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Connections Panel Tree Line Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameConnectionsPanelTreeLineColor() As String
Get
Return ResourceManager.GetString("strThemeNameConnectionsPanelTreeLineColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Menu Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameMenuBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameMenuBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Menu Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameMenuTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameMenuTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Search Box Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameSearchBoxBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameSearchBoxBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Search Box Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameSearchBoxTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameSearchBoxTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Search Box Text Prompt Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameSearchBoxTextPromptColor() As String
Get
Return ResourceManager.GetString("strThemeNameSearchBoxTextPromptColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Toolbar Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameToolbarBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameToolbarBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Toolbar Text Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameToolbarTextColor() As String
Get
Return ResourceManager.GetString("strThemeNameToolbarTextColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Window Background Colour.
'''</summary>
Friend Shared ReadOnly Property strThemeNameWindowBackgroundColor() As String
Get
Return ResourceManager.GetString("strThemeNameWindowBackgroundColor", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Error ({0}).
'''</summary>
@@ -5492,6 +6076,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Unnamed Theme.
'''</summary>
Friend Shared ReadOnly Property strUnnamedTheme() As String
Get
Return ResourceManager.GetString("strUnnamedTheme", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to mRemoteNG requires an update.
'''</summary>
@@ -5511,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
@@ -5520,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
@@ -5537,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..
@@ -5557,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
@@ -5566,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
@@ -5611,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>
@@ -438,14 +447,11 @@ VncSharpNG Control Version {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Konfigurationsfenster laden fehlgeschlagen!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Bestätigen Sie das schließen der Verbindungstabs</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<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>
@@ -462,9 +468,6 @@ VncSharpNG Control Version {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Sind Sie sicher dass Sie den Ordner "{0}" entfernen möchten? Jeder Ordner und jede Verbindung in diesem Ordner werden ebenfalls gelöscht.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Schließen bestätigen wenn Verbindungen bestehen</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Möchten Sie alle offenen Verbindungen schließen?</value>
</data>
@@ -549,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>
@@ -595,19 +604,19 @@ Starte mit neuer Datei.</value>
<value>Letzte IP</value>
</data>
<data name="strEndPort" xml:space="preserve">
<value>letzte Port</value>
<value>Letzter Port</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>AddExternalToolsToToolBar (FrmMain) ist fehlgeschlagen. {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve">
<value>AddFolder (UI.Window.Tree) fehlgeschlagen. {0}</value>
<value>AddFolder (UI.Window.Tree) ist fehlgeschlagen. {0}</value>
</data>
<data name="strErrorBadDatabaseVersion" xml:space="preserve">
<value>Die Datenbankversion {0} ist nicht kompatibel mit dieser Version von {1}.</value>
</data>
<data name="strErrorCloneNodeFailed" xml:space="preserve">
<value>CloneNode (Tree.Node) fehlgeschlagen. {0}</value>
<value>CloneNode (Tree.Node) ist fehlgeschlagen. {0}</value>
</data>
<data name="strErrorCode" xml:space="preserve">
<value>Fehler Nummer {0}.</value>
@@ -622,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>
@@ -688,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>
@@ -712,7 +721,7 @@ Starte mit neuer Datei.</value>
<value>Erstellen der HTTP Verbindung fehlgeschlagen!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Ändern des Webseiten Titels fehlgeschlagen!</value>
<value>Fehler beim Ändern des HTTP-Dokumentfensters!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Setzen der HTTP Parameter fehlgeschlagen!</value>
@@ -735,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>
@@ -801,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>
@@ -847,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>
@@ -999,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>
@@ -1009,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>
@@ -1059,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>
@@ -1153,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>
@@ -1291,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>
@@ -1441,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>
@@ -1457,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>
@@ -1506,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>
@@ -1536,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>
@@ -1752,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>
@@ -1837,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>
@@ -1872,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>
@@ -1908,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>
@@ -138,4 +138,106 @@
<data name="strRDP65536Colors" xml:space="preserve">
<value>65536 Colors (16-bit)</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>The background color of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>The color of the category text in the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>The color of the grid lines in the config panel</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>The background color of the help area of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>The color of the text in the help area of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>The color of the text in the config panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>The background color of the connections panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>The color of the text in the connections panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>The color of the tree lines in the connections panel.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>The background color of the menus.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>The color of the text in the menus.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>The background color of the search box.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>The color of the text in the search box.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>The color of the prompt text in the search box.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>The background color of the toolbars.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>The color of the text in the toolbars.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>The background color of the main window.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Config Panel Background Color</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Config Panel Category Text Color</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Config Panel Grid Line Color</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Config Panel Help Background Color</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Config Panel Help Text Color</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Config Panel Text Color</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Connections Panel Background Color</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Connections Panel Text Color</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Connections Panel Tree Line Color</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Menu Background Color</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Menu Text Color</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Search Box Background Color</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Search Box Text Color</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Search Box Text Prompt Color</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Toolbar Background Color</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Toolbar Text Color</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Window Background Color</value>
</data>
</root>

View File

@@ -244,9 +244,6 @@ VncSharpNG Control {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>¿Está seguro que desea eliminar la carpeta "{0}"? También se eliminará cualquier carpetas o conexiones que contiene.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Confirmar salida si hay conexiones abiertas</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>¿Desea cerrar todas las conexiones abiertas?</value>
</data>

View File

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Mostrar siempre el diálogo de selección de panel cuando se abran conexiones</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Mostrar las pestañas del panel siempre</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Mostrar siempre el Icono de la Bandeja del Sistema</value>
</data>
@@ -413,18 +416,33 @@ 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>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Confirme el cierre de las pestañas de conexiones</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Desea cerrar la conexión, "{0}"?</value>
</data>
@@ -446,9 +464,6 @@ Versión de Control {0} de VNCSharpNG</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>¿Está seguro de querer eliminar la carpeta, "{0}"? Cualquier carpeta o conexión que contenga será también eliminada.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Confirmar al salir si hay conexiones abiertas</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>¿Quiere cerrar todas las conexiones abiertas?</value>
</data>
@@ -524,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>
@@ -533,6 +551,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strCurrentVersion" xml:space="preserve">
<value>Versión Instalada</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Tema por defecto</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detectar</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>
@@ -688,7 +712,7 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<value>¡No se pudo crear una nueva conexión HTTP!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>¡Fallo en el cambio de HTTP Document Tile!</value>
<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>
@@ -744,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>
@@ -762,6 +801,9 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strLabelChangeLog" xml:space="preserve">
<value>Registro de cambios:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Al cerrar las conexiones:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Conectar:</value>
</data>
@@ -960,6 +1002,15 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strMenuNotifications" xml:space="preserve">
<value>Notificaciones</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copiar todo</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Borrar</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Borrar todo</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Abrir Archivo de Conexión...</value>
</data>
@@ -1020,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>
@@ -1111,6 +1168,15 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strOpenPorts" xml:space="preserve">
<value>Puertos Abiertos</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Tema</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Eliminar</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Nuevo</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Nombre del Panel</value>
</data>
@@ -1399,6 +1465,9 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Usar Sesión de Consola</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Usar CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Campo de Usuario</value>
</data>
@@ -1446,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>
@@ -1461,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>
@@ -1473,6 +1557,9 @@ Mensaje:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>¡Fallo en el Histórico de Conexiones Rápidas!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Avisarme al cerrar conexiones</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1683,6 +1770,9 @@ Mensaje:
<data name="strScreenshots" xml:space="preserve">
<value>Volcados de Pantalla</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Buscar</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Enviar a...</value>
</data>
@@ -1767,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>
@@ -1803,6 +1890,45 @@ Mensaje:
<data name="strTheFollowing" xml:space="preserve">
<value>El siguiente:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Panel de configuración</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Panel de conexiones</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>General</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>El color de fondo del panel de configuración.</value>
</data>
<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>
@@ -1839,6 +1965,9 @@ Mensaje:
<data name="strUncheckProperties" xml:space="preserve">
<value>¡Desmarque las propiedades que no quiera que sean guardadas!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Tema sin nombre</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>Actualización de mRemoteNG disponible</value>
</data>

View File

@@ -148,7 +148,10 @@
<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>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Toujours afficher l'icone dans la zone de notification</value>
@@ -398,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>
@@ -424,9 +433,6 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Fenêtre de configuration échec du chargement!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Confirmez la fermeture de l'onglet des connexions</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Voulez-vous fermer la connexion, "{0}"?</value>
</data>
@@ -448,9 +454,6 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Etes-vous sûr de vouloir supprimer le dossier, "{0}"? Tous les dossiers ou les connexions qu'il contient seront également supprimés.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Confirmer la sortie si des connexions sont ouvertes</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Voulez-vous de fermer toutes les connexions ouvertes?</value>
</data>
@@ -532,9 +535,15 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Impossible de créer le nouveau fichier de connexions!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Le contrôle ToolStrip est introuvable dans le FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Version installée</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Thème par défaut</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Détecter</value>
</data>
@@ -600,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>
@@ -715,6 +724,9 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<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éfixe "Rapide."</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Importer à partir d'Active Directory</value>
</data>
@@ -770,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>
@@ -781,6 +793,9 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<data name="strLabelChangeLog" xml:space="preserve">
<value>Historique des changements:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Lors de la fermeture des connexions :</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Connecter:</value>
</data>
@@ -979,6 +994,15 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<data name="strMenuNotifications" xml:space="preserve">
<value>Notifications</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Tout copier</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Supprimer</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Supprimer tout</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Ouvrir un fichier de connexion...</value>
</data>
@@ -1039,6 +1063,9 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sessions et capture d'ecran</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Afficher le texte d'aide</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Afficher le texte</value>
</data>
@@ -1133,6 +1160,15 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous
<data name="strOpenPorts" xml:space="preserve">
<value>Ports ouverts</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Thème</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Supprimer</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Nouveau</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Nom du panneau</value>
</data>
@@ -1271,6 +1307,9 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>Connexion à la console de l'hôte distant.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Utilisez les informations d'identification Security Support Provider (CredSSP) pour l'authentification si elle est disponible.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>N'hésitez pas à entrer toutes les informations dont vous avez besoin ici.</value>
</data>
@@ -1421,6 +1460,9 @@ Si vous rencontrez une erreur, créez un nouveau fichier de connexion s'il vous
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Utilisez la session console</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Utiliser CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Champ utilisateur</value>
</data>
@@ -1486,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>
@@ -1516,6 +1561,18 @@ Message:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Échec d'Existence d'Historique de Connexion Rapide !</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;M'avertir lors de la fermeture des connexions</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>M'avertir uniquement lorsque mRemoteNG se f&amp;erme</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>M'avertir seulement lors de la fermeture de connexions &amp;multiples</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>&amp;Ne pas m'avertir lors de la fermeture des connexions</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1732,6 +1789,9 @@ Message:
<data name="strScreenshots" xml:space="preserve">
<value>Captures d'écran</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Rechercher</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Envoyer à ...</value>
</data>
@@ -1817,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>
@@ -1852,6 +1912,117 @@ Message:
<data name="strTheFollowing" xml:space="preserve">
<value>Ce qui suit :</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Panneau de configuration</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Panneau de connexions</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Générale</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>La couleur de fond du panneau de configuration.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>La couleur du texte catégorie dans le panneau de configuration.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>La couleur du quadrillage dans le panneau de configuration</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>La couleur de fond de la section d'aide du panneau de configuration.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>La couleur du texte dans la section d'aide du panneau de configuration.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>La couleur du texte dans le panneau de configuration.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>La couleur de fond du panneau des connexions.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>La couleur du texte dans le panneau des connexions.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>La couleur des lignes d'arborescence dans le panneau des connexions.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>La couleur de fond des menus.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>La couleur du texte dans les menus.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>La couleur de fond de la boîte de recherche.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>La couleur du texte dans la zone Rechercher.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>La couleur du texte dans la zone de recherche rapide.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>La couleur de fond des barres d'outils.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>La couleur du texte dans les barres d'outils.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>La couleur d'arrière-plan de la fenêtre principale.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<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>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Couleur des ligne de la grille du panneau de configuration</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Couleur de Fond de l'Aide du Panneau de Configuration</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Couleur du Texte de l'Aide du Panneau de Configuration</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Couleur du Texte du Panneau de Configuration</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Couleur de Fond du Panneau des Connexions</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Couleur du Texte du Panneau de Connexions</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Couleur de l'arbre des connections dans le menu</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Couleur de Fond du Menu</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Couleur de texte du menu</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Couleur de fond de la boite de recherche</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<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 la barre d'outils</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<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>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Erreur ({0})</value>
</data>
@@ -1888,6 +2059,9 @@ Message:
<data name="strUncheckProperties" xml:space="preserve">
<value>Décochez les propriétés que vous souhaitez ne pas être enregistrer!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Thème sans nom</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG nécessite une mise à jour</value>
</data>

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

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Mostra sempre la finsetra di selezione pannello all'apertura di una connessione</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Mostra sempre le schede dei pannelli</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Mostra sempre l'icona nell'area delle notifiche</value>
</data>
@@ -435,9 +438,6 @@ VncSharpNG Control versione {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Caricamento Config UI fallito!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Conferma la chiusura delle tab delle connessioni</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Vuoi chiudere la connessione "{0}"?</value>
</data>
@@ -459,9 +459,6 @@ VncSharpNG Control versione {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Sei sicuro di voler cancellare la cartella "{0}"? Tutte le sottocartelle e le connessioni contenute in essa verranno eliminate.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Chiedi conferma prima di uscire se ci sono connessioni aperte</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Vuoi chiudere tutte le connessioni aperte?</value>
</data>
@@ -549,6 +546,9 @@ Creazione di un nuovo file delle connessioni.</value>
<data name="strCurrentVersion" xml:space="preserve">
<value>Versione installata</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Tema predefinito</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Rileva</value>
</data>
@@ -706,9 +706,6 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strHttpConnectionFailed" xml:space="preserve">
<value>Impossibile creare una nuova connessione HTTP!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Cambiamento HTTP Document Tile fallito!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Impostazione delle proprietà HTTP fallita!</value>
</data>
@@ -730,6 +727,9 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>ICA Set Resolution fallito!</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Aggiungi il prefisso "Quick:" alle schede di connessioni rapide</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Importa da Active Directory</value>
</data>
@@ -796,6 +796,9 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strLabelChangeLog" xml:space="preserve">
<value>Modifiche recenti:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Alla chiusura delle connessioni:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Connetti:</value>
</data>
@@ -994,6 +997,15 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strMenuNotifications" xml:space="preserve">
<value>Notifiche</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copia tutto</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Elimina</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Elimina tutto</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Apri file delle connessioni...</value>
</data>
@@ -1054,6 +1066,9 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sessioni e screenshot</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Mostra testo di aiuto</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Mostra testo</value>
</data>
@@ -1147,6 +1162,15 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strOpenPorts" xml:space="preserve">
<value>Porte aperte</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Tema</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>Elimina</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Nuovo</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Nome del pannello</value>
</data>
@@ -1285,6 +1309,9 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>Connettiti alla sessione della console dell'host remoto.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Usa Credential Security Support Provider (CredSSP) per l'autenticazione, se disponibile.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>Sentiti libero di inserire qui informazioni a piacimento.</value>
</data>
@@ -1435,6 +1462,9 @@ Visualizza il supporto Microsoft http://support.microsoft.com/kb/811833/it per o
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Utilizza la sessione della console</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Usa CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Campo utente</value>
</data>
@@ -1531,6 +1561,18 @@ Messaggio:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Operazione Quick Connect History Exists fallita!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Avvisami alla chiusura delle connessioni</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Avvisami soltanto all'&amp;uscita da mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Avvisami soltanto alla chiusura di &amp;più connessioni</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>&amp;Non avvisarmi alla chiusura delle connessioni</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1747,6 +1789,9 @@ Messaggio:
<data name="strScreenshots" xml:space="preserve">
<value>Screenshot</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Cerca</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Invia a...</value>
</data>
@@ -1831,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>
@@ -1867,6 +1909,117 @@ Messaggio:
<data name="strTheFollowing" xml:space="preserve">
<value>Il seguente:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Pannello configurazione</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Pannello connessioni</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Generale</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>Colore di sfondo del pannello configurazione.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>Colore della categoria nel pannello configurazione.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>Colore delle linee griglia nel pannello configurazione</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Colore di sfondo nell'area aiuto del pannello configurazione.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>Colore del testo nell'area aiuto del pannello configurazione.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>Colore del testo nel pannello configurazione.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Colore di sfondo nel pannello connessioni.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>Colore del testo nel pannello connessioni.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Colore delle linee di alberatura nel pannello connessioni.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>Colore di sfondo dei menu.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>Colore del testo nei menu.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>Colore di sfondo della casella di ricerca.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>Colore del testo nella casella di ricerca.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>Colore del prompt nella casella di ricerca.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>Colore di sfondo delle barre degli strumenti.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>Colore del testo nelle barre degli strumenti.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>Colore di sfondo della finestra principale.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Colore sfondo pannello configurazione</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Colore categoria pannello configurazione</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Colore linee griglia pannello configurazione</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Colore sfondo aiuto pannello configurazione</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Colore testo aiuto pannello configurazione</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Colore testo pannello configurazione</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Colore sfondo pannello connessioni</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Colore testo pannello connessioni</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Colore linee alberatura pannello connessioni</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Colore sfondo menu</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Colore testo menu</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Colore sfondo casella ricerca</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Colore testo casella ricerca</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Colore prompt casella ricerca</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Colore sfondo barra strumenti</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Colore testo barra strumenti</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Colore sfondo finestra</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Errore ({0})</value>
</data>
@@ -1903,6 +2056,9 @@ Messaggio:
<data name="strUncheckProperties" xml:space="preserve">
<value>Deseleziona le proprietà che non vuoi salvare!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Tema senza nome</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG richiede un aggiornamento</value>
</data>

File diff suppressed because it is too large Load Diff

View File

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Altijd Paneel dialoogvenster tonen bij het openen van verbindingen</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Altijd tabbladen tonen</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Altijd het icoon in het systeemvak tonen</value>
</data>
@@ -414,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>
@@ -438,9 +447,6 @@ VncSharpNG Versie {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Configuratie UI laden mislukt!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Bevestig sluiten connectie tab</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Wilt u de verbinding sluiten, "{0}"?</value>
</data>
@@ -462,9 +468,6 @@ VncSharpNG Versie {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Weet u het zeker dat u de map wilt verwijderen, "{0}"? Alle mappen of connecties daaronder zullen ook worden verwijderd.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Bevestig afsluiten als er geopende verbindingen zijn</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Wilt u alle geopende verbindingen sluiten?</value>
</data>
@@ -549,9 +552,15 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Kon geen nieuwe connectie bestand aanmaken!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Kan geen ToolStrip vinden in FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Geïnstalleerde versie</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Standaard thema</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detecteer</value>
</data>
@@ -710,7 +719,7 @@ Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor
<value>Kon geen nieuwe HTTP verbinding aanmaken!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Aanpassen HTTP Document Tegel mislukt!</value>
<value>Verandering van HTTP document tegel niet gelukt!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Instellen HTTP Eigenschappen mislukt!</value>
@@ -733,6 +742,9 @@ Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>ICA Instellen Resolutie mislukt!</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Vindt de Snel aansluit tabs met het voorzetsel "Quick"</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Importeer van Active Directory</value>
</data>
@@ -799,6 +811,9 @@ Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor
<data name="strLabelChangeLog" xml:space="preserve">
<value>Veranderingen:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Bij het sluiten van connecties:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Verbind:</value>
</data>
@@ -997,6 +1012,15 @@ Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor
<data name="strMenuNotifications" xml:space="preserve">
<value>Notificaties</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Kopieër alles</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Verwijder</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Verwijder alles</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Open Connectie Bestand...</value>
</data>
@@ -1057,6 +1081,9 @@ Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Sessies en Screenshots</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>&amp;Laat hulp zien</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Toon tekst</value>
</data>
@@ -1151,6 +1178,15 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strOpenPorts" xml:space="preserve">
<value>Open Poorten</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Thema</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Verwijder</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Nieuw</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Paneel Naam</value>
</data>
@@ -1289,6 +1325,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>Verbinding maken met de console sessie van de remote host.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Gebruik, indien beschikbaar, de Credential Security Support Provider (CredSSP) voor authenticatie.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>Voel je vrij om alle informatie die u nodig heeft hier in te voeren.</value>
</data>
@@ -1439,6 +1478,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Gebruik consolesessie</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Gebruik CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Gebruiker veld</value>
</data>
@@ -1505,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>
@@ -1535,6 +1580,18 @@ Bericht:
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Snelle Connectie geschiedenis bestaat mislukt!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Waarschuw bij het sluiten van connecties</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>&amp;xWaarschuw alleen bij het sluiten van mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Waarschuw alleen bij het sluiten van &amp;meerdere connecties</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>Waarschuw &amp;niet bij het sluiten van connecties</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1751,6 +1808,9 @@ Bericht:
<data name="strScreenshots" xml:space="preserve">
<value>Schermafbeeldingen</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Zoek</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Verstuur naar...</value>
</data>
@@ -1836,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>
@@ -1871,6 +1931,117 @@ Bericht:
<data name="strTheFollowing" xml:space="preserve">
<value>De volgende:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Configuratie paneel</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Connectie paneel</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Algemeen</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van het configuratie paneel.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>De kleur van de categorie tekst in het configuratie paneel.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>De kleur van de gridlijnen in het configuratiepaneel</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van de helptekst in het configuratiepaneel.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>De tekst kleur ven de help in het configurateipaneel.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>De tekstkleur van het configuratiepaneel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van het connectie paneel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>De tekstkleur van het connectie paneel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>De boomstructuur lijnen kleur in het connectie paneel.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van de menu's.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>De tekstkleur in de menu's.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van de zoekboks.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>De tekstkleur in de zoekboks.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>De prompttekst kleur in de zoekboks.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van de gereedschapsbalk.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>De tekstkleur in de gereedschapsbalk.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>De achtergrondkleur van het hoofdwindow.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Achtergrondkleur configuratiepaneel</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Categorie tekst kleur in het configuratiepaneel</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Lijnenkleur in het configuratiepaneel</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Help achtergrondkleur van het configuratiepaneel</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Help tekstkleur van het configuratiepaneel</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Configuratiepaneel tekstkleur</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Achtergrondkleur connectie paneel</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Tekstkleur connectiepaneel</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Boomstructuur lijnen kleur connectiepaneel</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Menu achtergrondkleur</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Tekstkleur menu</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Achtergrondkleur zoekboks</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Tekstkleur zoekboks</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Prompt tekstkleur zoekboks</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Achtergrondkleur gereedschapsbalk</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Tekstkleur gereedschapskleur</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Achtergrondkleur window</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Fout ({0})</value>
</data>
@@ -1907,6 +2078,9 @@ Bericht:
<data name="strUncheckProperties" xml:space="preserve">
<value>Verwijder het vinkje bij eigenschappen die u niet wil opslaan!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Thema zonder naam</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>Er is een update voor mRemoteNG beschikbaar</value>
</data>

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

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Mostrar sempre a caixa de diálogo de seleção do painel ao abrir ligações</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Sempre Mostrar painel abas</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Mostrar sempre o ícone da área de notificação</value>
</data>
@@ -420,9 +423,6 @@
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Config UI carregamento falhado!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Confira o fecho de ligações ativas</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Pretende fechar a ligação, "{0}"?</value>
</data>
@@ -444,9 +444,6 @@
<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="strConfirmExit" xml:space="preserve">
<value>Confirmar saída se houver ligações abertas</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Pretende fechar todas as ligações abertas?</value>
</data>
@@ -530,9 +527,15 @@ Descrição do erro: {1}</value>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Impossível criar novo arquivo de ligações!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Não foi possível encontrar o controlo ToolStrip em FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Versão instalada</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Tema padrão</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detetar</value>
</data>
@@ -603,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>
@@ -687,7 +690,7 @@ Descrição do erro: {1}</value>
<value>Impossível criar nova ligação HTTP!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Telha de alteração de documento HTTP falhou!</value>
<value>Alteração da aba HTTP falhou!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Falhou configuração de props HTTP!</value>
@@ -710,6 +713,9 @@ Descrição do erro: {1}</value>
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>Configuração de resolução ICA falhou!</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Identificar guias de ligação rápida, adicionando o prefixo "rápido:"</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Importar do Active Directory</value>
</data>
@@ -776,6 +782,9 @@ Descrição do erro: {1}</value>
<data name="strLabelChangeLog" xml:space="preserve">
<value>Log de alterações:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>Ao fechar ligações:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Ligar:</value>
</data>
@@ -974,6 +983,15 @@ Descrição do erro: {1}</value>
<data name="strMenuNotifications" xml:space="preserve">
<value>Notificações</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Copie todos</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Excluir</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Apagar tudo</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Abrir arquivo de ligações...</value>
</data>
@@ -1127,6 +1145,15 @@ Descrição do erro: {1}</value>
<data name="strOpenPorts" xml:space="preserve">
<value>Portas abertas</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Tema</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>&amp;Excluir</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>&amp;Novo</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Nome do painel</value>
</data>
@@ -1265,6 +1292,9 @@ Descrição do erro: {1}</value>
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>ligar-se à sessão consola do host remoto.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Use o Credential Security Support Provider (CredSSP) para autenticação, se ele estiver disponível.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>Insira qualquer informação que necessite aqui.</value>
</data>
@@ -1415,6 +1445,9 @@ Descrição do erro: {1}</value>
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
<value>Use a sessão de Consola</value>
</data>
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
<value>Utilize o CredSSP</value>
</data>
<data name="strPropertyNameUser1" xml:space="preserve">
<value>Campo de utilizador</value>
</data>
@@ -1508,6 +1541,18 @@ Descrição do erro: {1}</value>
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Histórico de Ligação rápida falhou!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;Avisar-me quando fechar ligações</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Avisar-me apenas ao &amp;sair do mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Avisar-me somente ao fechar ligações múltiplas</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>&amp;Não avisar ao fechar ligações</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1724,6 +1769,9 @@ Descrição do erro: {1}</value>
<data name="strScreenshots" xml:space="preserve">
<value>Imagens do ecrã</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Pesquisa</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Enviar para...</value>
</data>
@@ -1808,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>
@@ -1844,6 +1889,93 @@ Descrição do erro: {1}</value>
<data name="strTheFollowing" xml:space="preserve">
<value>A seguir:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Painel de configuração</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Painel de ligações</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Geral</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>A cor de fundo do painel de configuração.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>A cor do texto no painel de configuração de categoria.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>A cor das linhas de grade do painel de configuração</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>A cor de fundo da área de ajuda do painel de configuração.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>A cor do texto na área de ajuda do painel de configuração.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>A cor do texto no painel de configuração.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>A cor de fundo do painel de ligações.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>A cor do texto no painel de ligações.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>A cor das linhas de árvore no painel de ligações.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>A cor de fundo dos menus.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>A cor do texto nos menus.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>A cor de fundo da caixa de pesquisa.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>A cor do texto na caixa de pesquisa.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>A cor do texto na caixa de pesquisa rápida.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>A cor de fundo das barras de ferramentas.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>A cor do texto em barras de ferramentas.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>A cor de fundo da janela principal.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Cor de fundo do painel de configuração</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Cor do texto da categoria do Painel de configuração</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Cor de linha de grade do painel de configuração</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Cor de fundo do painel de configuração ajuda</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Cor do texto do painel de configuração ajuda</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Cor do texto do painel de configuração</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Cor de fundo de painel de ligações</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Cor de texto de painel de ligações</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Cor linha da da árvore do painel de ligações</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Erro ({0})</value>
</data>
@@ -1880,6 +2012,9 @@ Descrição do erro: {1}</value>
<data name="strUncheckProperties" xml:space="preserve">
<value>Desmarcar as propriedades que não deseja salvar!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Tema sem nome</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG requer uma atualização</value>
</data>
@@ -1931,6 +2066,9 @@ Descrição do erro: {1}</value>
<data name="strUser" xml:space="preserve">
<value>Utilizador</value>
</data>
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Use o mesmo nome de utilizador e senha</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Usar um smart card</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>
@@ -438,9 +455,6 @@ VncSharpNG Control Version {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Config UI load failed!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Confirm closing connection tabs</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Do you want to close the connection, "{0}"?</value>
</data>
@@ -462,9 +476,6 @@ VncSharpNG Control Version {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Are you sure you want to delete the folder, "{0}"? Any folders or connections that it contains will also be deleted.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Confirm exit if there are open connections</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Do you want to close all open connections?</value>
</data>
@@ -549,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>
@@ -615,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>
@@ -722,7 +742,7 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
<value>Couldn't create new HTTP Connection!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Changeing HTTP Document Tile Failed!</value>
<value>Changing HTTP Document Tile Failed!</value>
</data>
<data name="strHttpGecko" xml:space="preserve">
<value>Gecko (Firefox)</value>
@@ -757,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>
@@ -823,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>
@@ -893,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>
@@ -1024,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>
@@ -1078,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>
@@ -1178,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>
@@ -1205,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>
@@ -1250,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>
@@ -1355,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>
@@ -1400,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>
@@ -1538,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>
@@ -1568,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>
@@ -1683,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>
@@ -1784,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>
@@ -1869,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>
@@ -1904,6 +1993,117 @@ Message:
<data name="strTheFollowing" xml:space="preserve">
<value>The following:</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>General</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>The background colour of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>The colour of the category text in the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>The colour of the grid lines in the config panel</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>The background colour of the help area of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>The colour of the text in the help area of the config panel.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>The colour of the text in the config panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>The background colour of the connections panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>The colour of the text in the connections panel.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>The colour of the tree lines in the connections panel.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>The background colour of the menus.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>The colour of the text in the menus.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>The background colour of the search box.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>The colour of the text in the search box.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>The colour of the prompt text in the search box.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>The background colour of the toolbars.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>The colour of the text in the toolbars.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>The background colour of the main window.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Config Panel Background Colour</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Config Panel Category Text Colour</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Config Panel Grid Line Colour</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Config Panel Help Background Colour</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Config Panel Help Text Colour</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Config Panel Text Colour</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Connections Panel Background Colour</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Connections Panel Text Colour</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Connections Panel Tree Line Colour</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Menu Background Colour</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Menu Text Colour</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Search Box Background Colour</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Search Box Text Colour</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Search Box Text Prompt Colour</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Toolbar Background Colour</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Toolbar Text Colour</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Window Background Colour</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Error ({0})</value>
</data>
@@ -1940,6 +2140,9 @@ Message:
<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>
@@ -1947,26 +2150,26 @@ Message:
<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>
<value>The update information could not be downloaded.</value>
</data>
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Check For Update failed!</value>
<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="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>
<value>The update could not be downloaded.</value>
</data>
<data name="strUpdateDownloadFailed" xml:space="preserve">
<value>Download Update failed!</value>
<value>The update download could not be initiated.</value>
</data>
<data name="strUpdateFrequencyCustom" xml:space="preserve">
<value>Every {0} days</value>
@@ -1980,8 +2183,11 @@ mRemoteNG will now quit and begin with the installation.</value>
<data name="strUpdateFrequencyWeekly" xml:space="preserve">
<value>Weekly</value>
</data>
<data name="strUpdateStartFailed" xml:space="preserve">
<value>Error starting update!</value>
<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>
@@ -2055,10 +2261,4 @@ mRemoteNG will now quit and begin with the installation.</value>
<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>
</root>

View File

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>Всегда показывать диалог выбора панели при открытии подключения</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>Всегда показывать панель закладок</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>Всегда показывать значок в системном трее</value>
</data>
@@ -414,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>
@@ -438,9 +447,6 @@
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Ошибка загрузки Config UI!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Запрашивать подтверждение при закрытии вкладки подключения</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Хотите закрыть подключение, "{0}"?</value>
</data>
@@ -462,9 +468,6 @@
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Хотите удалить папку "{0}"? Любые папки или подключения, которые она содержит также будут удалены.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Подтверждение при выходе, если есть открытые подключения</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Хотите закрыть все открытые подключения?</value>
</data>
@@ -549,9 +552,15 @@
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>Не удается создать новый файл подключений!</value>
</data>
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
<value>Не удалось найти элемент управления ToolStrip в FilteredPropertyGrid.</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Установленная версия</value>
</data>
<data name="strDefaultTheme" xml:space="preserve">
<value>Тема по умолчанию</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Обнаружение</value>
</data>
@@ -739,6 +748,9 @@
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>Ошибка установки разрешений ICA!</value>
</data>
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
<value>Определить вкладки быстрых подключений, добавляя префикс «Quick:»</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Импорт из Active Directory</value>
</data>
@@ -805,6 +817,9 @@
<data name="strLabelChangeLog" xml:space="preserve">
<value>История версий:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>При закрытии подключений:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>&amp;Подключение:</value>
</data>
@@ -1003,6 +1018,15 @@
<data name="strMenuNotifications" xml:space="preserve">
<value>Уведомления</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>Скопировать все</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>Удалить</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>Удалить все</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>Открыть файл подключения...</value>
</data>
@@ -1063,6 +1087,9 @@
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>Сессии и скриншоты</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>Показать текст справки</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>Показать текст</value>
</data>
@@ -1157,6 +1184,15 @@
<data name="strOpenPorts" xml:space="preserve">
<value>Открытые порты</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>Тема</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>Удалить</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>Новая</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>Название группы</value>
</data>
@@ -1295,6 +1331,9 @@
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
<value>Подключение к текущему сеансу удаленного пользователя.</value>
</data>
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
<value>Использовать поставщика поддержки безопасности (CredSSP) для проверки подлинности учетных данных, если он доступен.</value>
</data>
<data name="strPropertyDescriptionUser1" xml:space="preserve">
<value>Введите любую информацию.</value>
</data>
@@ -1445,6 +1484,9 @@
<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>
@@ -1511,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>
@@ -1541,6 +1586,18 @@
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Ошибка истории Быстрых подключений!</value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>Предупреждать при закрытии подключений</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>Предупреждать меня только при выходе из mRemoteNG</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>Предупреждать меня только при закрытии нескольких подключений</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>Не предупреждать при закрытии подключений</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1665,7 +1722,7 @@
<value>RDP: Установить уровень проверки подлинности не удалась!</value>
</data>
<data name="strRdpSetConsoleSessionFailed" xml:space="preserve">
<value>RDP: Не удалось использование консольную сессию!</value>
<value>RDP: Не удалось использовать консольную сессию!</value>
</data>
<data name="strRdpSetConsoleSwitch" xml:space="preserve">
<value>Настройка переключения консолей для RDC {0}.</value>
@@ -1757,6 +1814,9 @@
<data name="strScreenshots" xml:space="preserve">
<value>Скриншоты</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>Поиск</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>Отправить...</value>
</data>
@@ -1842,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>
@@ -1877,6 +1937,117 @@
<data name="strTheFollowing" xml:space="preserve">
<value>Установить вручную:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>Конфигурация</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>Подключения</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>Общие</value>
</data>
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
<value>Цвет фона панели конфигурации.</value>
</data>
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
<value>Цвет текста категории на панели конфигурации.</value>
</data>
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
<value>Цвет линий сетки на панели конфигурации</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Цвет фона области справки панели конфигурации.</value>
</data>
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
<value>Цвет текста в области справки панели конфигурации.</value>
</data>
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
<value>Цвет текста в панели конфигурации.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Цвет фона панели подключений.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
<value>Цвет текста в панели подключений.</value>
</data>
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Цвет линий дерева на панели подключений.</value>
</data>
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
<value>Цвет фона меню.</value>
</data>
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
<value>Цвет текста в меню.</value>
</data>
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
<value>Цвет фона поля поиска.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
<value>Цвет текста в поле поиска.</value>
</data>
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
<value>Цвет текста подсказки в поле поиска.</value>
</data>
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
<value>Цвет фона панели инструментов.</value>
</data>
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
<value>Цвет текста в панели инструментов.</value>
</data>
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
<value>Цвет фона главного окна.</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>Цвет фона панели конфигурации</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>Цвет текста категории панели конфигурации</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>Цвет линий сетки панели конфигурации</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>Цвет фона справки панели конфигурации</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>Цвет текста справки панели конфигурации</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>Цвет текста панели конфигурации</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>Цвет фона панели подключений</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>Цвет текста панели подключений</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>Цвет линий дерева панели подключений</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>Цвет фона меню</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>Цвет текста меню</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>Цвет фона поля поиска</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>Цвет текста поля поиска</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>Цвет текста подсказки поля поиска</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>Цвет фона панели инструментов</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>Цвет текста панели инструментов</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>Цвет фона окна</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Ошибка ({0})</value>
</data>
@@ -1913,6 +2084,9 @@
<data name="strUncheckProperties" xml:space="preserve">
<value>Снимите свойства, которые не хотите сохранять!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>Безымянный тема</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>Требуется обновление mRemoteNG</value>
</data>

View File

@@ -438,9 +438,6 @@ VncSharpNG Control Version {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Помилка завантаження Config UI!</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Запитувати підтвердження при закритті вкладки з'єднання</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Хочете закрити з'єднання, "{0}"?</value>
</data>
@@ -462,9 +459,6 @@ VncSharpNG Control Version {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>Хочете видалити папку "{0}"? Будь-які папки або з'єднання, які вона містить також будуть видалені.</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>Підтвердження при виході, якщо є відкриті з'єднання</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>Хочете закрити всі відкриті з'єднання?</value>
</data>
@@ -715,9 +709,6 @@ VncSharpNG Control Version {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>
@@ -1148,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>
@@ -1824,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

@@ -150,6 +150,9 @@
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
<value>在打开连接时总是显示面板选择对话框</value>
</data>
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
<value>始终显示标签面板</value>
</data>
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
<value>始终显示通知区域图标</value>
</data>
@@ -409,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>
@@ -433,9 +442,6 @@ VncSharpNG 版本 {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>无法加载配置界面。</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>关闭连接选项卡时确认。</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>确定要关闭连接“{0}”?</value>
</data>
@@ -457,9 +463,6 @@ VncSharpNG 版本 {0}</value>
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
<value>确定要删除目录,"{0}"?目录下所有目录及连接都将被删除。</value>
</data>
<data name="strConfirmExit" xml:space="preserve">
<value>退出时如有已打开的连接,需进行确认。</value>
</data>
<data name="strConfirmExitMainInstruction" xml:space="preserve">
<value>确认要关闭所有已打开的连接吗?</value>
</data>
@@ -544,9 +547,15 @@ 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>
<data name="strDefaultTheme" xml:space="preserve">
<value>默认主题</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>检测</value>
</data>
@@ -792,6 +801,9 @@ VncSharpNG 版本 {0}</value>
<data name="strLabelChangeLog" xml:space="preserve">
<value>更新记录:</value>
</data>
<data name="strLabelClosingConnections" xml:space="preserve">
<value>当关闭连接时:</value>
</data>
<data name="strLabelConnect" xml:space="preserve">
<value>连接(&amp;C)</value>
</data>
@@ -990,6 +1002,15 @@ VncSharpNG 版本 {0}</value>
<data name="strMenuNotifications" xml:space="preserve">
<value>通知</value>
</data>
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
<value>复制全部</value>
</data>
<data name="strMenuNotificationsDelete" xml:space="preserve">
<value>删除</value>
</data>
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
<value>删除全部</value>
</data>
<data name="strMenuOpenConnectionFile" xml:space="preserve">
<value>打开连接配置文件…</value>
</data>
@@ -1050,6 +1071,9 @@ VncSharpNG 版本 {0}</value>
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
<value>会话和屏幕截图</value>
</data>
<data name="strMenuShowHelpText" xml:space="preserve">
<value>显示(&amp;S帮助文本</value>
</data>
<data name="strMenuShowText" xml:space="preserve">
<value>显示文本</value>
</data>
@@ -1143,6 +1167,15 @@ VncSharpNG 版本 {0}</value>
<data name="strOpenPorts" xml:space="preserve">
<value>打开端口</value>
</data>
<data name="strOptionsTabTheme" xml:space="preserve">
<value>主题</value>
</data>
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
<value>删除(&amp;D)</value>
</data>
<data name="strOptionsThemeButtonNew" xml:space="preserve">
<value>新建(&amp;N</value>
</data>
<data name="strPanelName" xml:space="preserve">
<value>面板名称</value>
</data>
@@ -1431,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>
@@ -1497,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>
@@ -1527,6 +1566,18 @@ VncSharpNG 版本 {0}</value>
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>快速连接历史记录检测失败 </value>
</data>
<data name="strRadioCloseWarnAll" xml:space="preserve">
<value>&amp;W关闭连接时确认</value>
</data>
<data name="strRadioCloseWarnExit" xml:space="preserve">
<value>退出(&amp;emRemoteNG时确认</value>
</data>
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
<value>关闭多个(&amp;m连接时确认</value>
</data>
<data name="strRadioCloseWarnNever" xml:space="preserve">
<value>关闭连接时不需确认</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
@@ -1743,6 +1794,9 @@ VncSharpNG 版本 {0}</value>
<data name="strScreenshots" xml:space="preserve">
<value>屏幕截图</value>
</data>
<data name="strSearchPrompt" xml:space="preserve">
<value>搜索</value>
</data>
<data name="strSendTo" xml:space="preserve">
<value>发送到…</value>
</data>
@@ -1828,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>
@@ -1863,6 +1917,66 @@ VncSharpNG 版本 {0}</value>
<data name="strTheFollowing" xml:space="preserve">
<value>以下:</value>
</data>
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
<value>配置面板</value>
</data>
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
<value>连接面板</value>
</data>
<data name="strThemeCategoryGeneral" xml:space="preserve">
<value>常规</value>
</data>
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
<value>配置面板背景色</value>
</data>
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
<value>配置面板类别文本颜色</value>
</data>
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
<value>配置面板网格线颜色</value>
</data>
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
<value>配置面板帮助背景颜色</value>
</data>
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
<value>配置面板帮助文本颜色</value>
</data>
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
<value>配置面板文本颜色</value>
</data>
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
<value>连接面板背景色</value>
</data>
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
<value>连接面板文本颜色</value>
</data>
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
<value>连接面板树线颜色</value>
</data>
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
<value>菜单背景颜色</value>
</data>
<data name="strThemeNameMenuTextColor" xml:space="preserve">
<value>菜单文本颜色</value>
</data>
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
<value>搜索栏背景颜色</value>
</data>
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
<value>搜索栏文本颜色</value>
</data>
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
<value>搜索栏提示文本颜色</value>
</data>
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
<value>工具栏背景颜色</value>
</data>
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
<value>工具栏文本颜色</value>
</data>
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
<value>窗口背景颜色</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>错误 ({0})</value>
</data>
@@ -1899,6 +2013,9 @@ VncSharpNG 版本 {0}</value>
<data name="strUncheckProperties" xml:space="preserve">
<value>请勾去您不想保存的属性!</value>
</data>
<data name="strUnnamedTheme" xml:space="preserve">
<value>未命名主题</value>
</data>
<data name="strUpdateAvailable" xml:space="preserve">
<value>mRemoteNG 需要更新</value>
</data>

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

@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.70.*")>
<Assembly: AssemblyVersion("1.71.*")>
<Assembly: NeutralResourcesLanguageAttribute("en")>

View File

@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.239
' Runtime Version:4.0.30319.296
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -585,6 +585,13 @@ Namespace My.Resources
End Get
End Property
Friend ReadOnly Property PuttySessions() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("PuttySessions", resourceCulture)
Return CType(obj,System.Drawing.Bitmap)
End Get
End Property
Friend ReadOnly Property Quit() As System.Drawing.Bitmap
Get
Dim obj As Object = ResourceManager.GetObject("Quit", resourceCulture)

View File

@@ -445,4 +445,8 @@
<data name="News" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Images_FamFamFam\News.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="PuttySessions" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Images\PuttySessions.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

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.
@@ -185,7 +185,7 @@ Namespace My
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property AutomaticallyGetSessionInfo() As Boolean
Get
Return CType(Me("AutomaticallyGetSessionInfo"),Boolean)
@@ -234,19 +234,6 @@ Namespace My
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 ConfirmExit() As Boolean
Get
Return CType(Me("ConfirmExit"),Boolean)
End Get
Set
Me("ConfirmExit") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
@@ -2093,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)
@@ -2207,10 +2194,10 @@ Namespace My
<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 ConfirmCloseConnection() As Boolean
Global.System.Configuration.DefaultSettingValueAttribute("4")> _
Public Property ConfirmCloseConnection() As Integer
Get
Return CType(Me("ConfirmCloseConnection"),Boolean)
Return CType(Me("ConfirmCloseConnection"),Integer)
End Get
Set
Me("ConfirmCloseConnection") = value
@@ -2321,6 +2308,170 @@ Namespace My
Me("AlwaysShowPanelTabs") = 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"), _
Global.System.Configuration.SettingsManageabilityAttribute(Global.System.Configuration.SettingsManageability.Roaming)> _
Public Property IdentifyQuickConnectTabs() As Boolean
Get
Return CType(Me("IdentifyQuickConnectTabs"),Boolean)
End Get
Set
Me("IdentifyQuickConnectTabs") = 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("release")> _
Public ReadOnly Property UpdateChannel() As String
Get
Return CType(Me("UpdateChannel"),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("")> _
Public Property ThemeName() As String
Get
Return CType(Me("ThemeName"),String)
End Get
Set
Me("ThemeName") = 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 ShowConfigHelpText() As Boolean
Get
Return CType(Me("ShowConfigHelpText"),Boolean)
End Get
Set
Me("ShowConfigHelpText") = 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 PuttySavedSessionsName() As String
Get
Return CType(Me("PuttySavedSessionsName"),String)
End Get
Set
Me("PuttySavedSessionsName") = 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 PuttySavedSessionsPanel() As String
Get
Return CType(Me("PuttySavedSessionsPanel"),String)
End Get
Set
Me("PuttySavedSessionsPanel") = 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 CompatibilityWarnLenovoAutoScrollUtility() As Boolean
Get
Return CType(Me("CompatibilityWarnLenovoAutoScrollUtility"),Boolean)
End Get
Set
Me("CompatibilityWarnLenovoAutoScrollUtility") = value
End Set
End Property
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/announcement.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

@@ -33,7 +33,7 @@
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="AutomaticallyGetSessionInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="LoadConsFromCustomLocation" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
@@ -44,9 +44,6 @@
<Setting Name="SaveConsOnExit" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="ConfirmExit" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="CheckForUpdatesOnStartup" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
@@ -474,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)" />
@@ -500,8 +497,8 @@
<Setting Name="InhDefaultEnableDesktopComposition" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConfirmCloseConnection" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
<Setting Name="ConfirmCloseConnection" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Int32" Scope="User">
<Value Profile="(Default)">4</Value>
</Setting>
<Setting Name="MainFormRestoreSize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Drawing.Size" Scope="User">
<Value Profile="(Default)" />
@@ -527,5 +524,44 @@
<Setting Name="AlwaysShowPanelTabs" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="IdentifyQuickConnectTabs" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Roaming="true" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UpdateChannel" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="Application">
<Value Profile="(Default)">release</Value>
</Setting>
<Setting Name="ThemeName" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ShowConfigHelpText" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="PuttySavedSessionsName" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="PuttySavedSessionsPanel" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CompatibilityWarnLenovoAutoScrollUtility" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="AnnouncementAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="Application">
<Value Profile="(Default)">https://update.mremoteng.org/announcement.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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

View File

@@ -0,0 +1,29 @@
Imports mRemoteNG.Tools.LocalizedAttributes
Namespace Root
Namespace PuttySessions
Public Class Info
Inherits Root.Info
Public Sub New()
MyBase.New(RootType.PuttySessions)
End Sub
Public Overrides Property Name() As String
Private _panel As String = My.Language.strGeneral
<LocalizedCategory("strCategoryDisplay", 1), _
LocalizedDisplayName("strPropertyNamePanel"), _
LocalizedDescription("strPropertyDescriptionPanel")> _
Public Property Panel() As String
Get
Return _panel
End Get
Set(ByVal value As String)
_panel = value
End Set
End Property
End Class
End Namespace
End Namespace

View File

@@ -20,7 +20,7 @@ Namespace Root
LocalizedDisplayName("strPropertyNameName"), _
LocalizedDescription("strPropertyDescriptionName"), _
Attributes.Root()> _
Public Property Name() As String
Public Overridable Property Name() As String
Get
Return Me._Name
End Get
@@ -104,6 +104,7 @@ Namespace Root
Public Enum RootType
Connection
Credential
PuttySessions
End Enum
Public Class Attributes

View File

@@ -43,36 +43,38 @@ Namespace Security
Return StrToEncrypt
End Function
Public Shared Function Decrypt(ByVal StrToDecrypt As String, ByVal StrSecret As String) As String
If StrToDecrypt = "" Or StrSecret = "" Then
Return StrToDecrypt
Public Shared Function Decrypt(ByVal ciphertextBase64 As String, ByVal password As String) As String
If String.IsNullOrEmpty(ciphertextBase64) Or String.IsNullOrEmpty(password) Then
Return ciphertextBase64
End If
Try
Dim rd As New RijndaelManaged
Dim rijndaelIvLength As Integer = 16
Dim md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(StrSecret))
Dim plaintext As String
md5.Clear()
Using rijndaelManaged As New RijndaelManaged
Using md5 As New MD5CryptoServiceProvider
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(password))
rijndaelManaged.Key = key
End Using
Dim encdata() As Byte = Convert.FromBase64String(StrToDecrypt)
Dim ms As New MemoryStream(encdata)
Dim iv(15) As Byte
Dim ciphertext() As Byte = Convert.FromBase64String(ciphertextBase64)
ms.Read(iv, 0, rijndaelIvLength)
rd.IV = iv
rd.Key = key
Using memoryStream As New MemoryStream(ciphertext)
Const ivLength As Integer = 16
Dim iv(ivLength - 1) As Byte
memoryStream.Read(iv, 0, ivLength)
rijndaelManaged.IV = iv
Dim cs As New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
Using cryptoStream As New CryptoStream(memoryStream, rijndaelManaged.CreateDecryptor, CryptoStreamMode.Read)
Using streamReader As New StreamReader(cryptoStream, System.Text.Encoding.UTF8, True)
plaintext = streamReader.ReadToEnd()
End Using
rijndaelManaged.Clear()
End Using ' cryptoStream
End Using ' memoryStream
End Using ' rijndaelManaged
Dim data(ms.Length - rijndaelIvLength) As Byte
Dim i As Integer = cs.Read(data, 0, data.Length)
cs.Close()
rd.Clear()
Return System.Text.Encoding.UTF8.GetString(data, 0, i)
Return plaintext
Catch ex As Exception
' Ignore CryptographicException "Padding is invalid and cannot be removed." when password is incorrect.
If Not TypeOf ex Is CryptographicException Then
@@ -80,7 +82,7 @@ Namespace Security
End If
End Try
Return StrToDecrypt
Return ciphertextBase64
End Function
End Class
End Namespace

View File

@@ -10,7 +10,7 @@ Namespace Security
Public Class Impersonator
#Region "Logon API"
Private Const LOGON32_PROVIDER_DEFAULT As Integer = 0
Private Const LOGON32_LOGON_INTERACTIVE As Integer = 2 ' This parameter causes LogonUser to create a primary token.
Private Const LOGON32_LOGON_NEW_CREDENTIALS As Integer = 9
Private Const SecurityImpersonation As Integer = 2
@@ -37,7 +37,6 @@ Namespace Security
#End Region
Private tokenHandle As New IntPtr(0)
Private dupeTokenHandle As New IntPtr(0)
Private impersonatedUser As WindowsImpersonationContext = Nothing
' GetErrorMessage formats and returns an error message corresponding to the input errorCode.
@@ -59,9 +58,8 @@ Namespace Security
If Not (impersonatedUser Is Nothing) Then Throw New Exception("Already impersonating a user.")
tokenHandle = IntPtr.Zero
dupeTokenHandle = IntPtr.Zero
Dim returnValue As Integer = LogonUser(UserName, DomainName, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, tokenHandle)
Dim returnValue As Integer = LogonUser(UserName, DomainName, Password, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, tokenHandle)
If 0 = returnValue Then
Dim errCode As Integer = Marshal.GetLastWin32Error()
@@ -70,17 +68,8 @@ Namespace Security
Throw exLogon
End If
returnValue = DuplicateToken(tokenHandle, SecurityImpersonation, dupeTokenHandle)
If 0 = returnValue Then
CloseHandle(tokenHandle)
Throw New ApplicationException("Error trying to duplicate handle.")
End If
' The token that is passed to the following constructor must
' be a primary token in order to use it for impersonation.
Dim newId As New WindowsIdentity(dupeTokenHandle)
Dim newId As New WindowsIdentity(tokenHandle)
impersonatedUser = newId.Impersonate()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "Starting Impersonation failed (Sessions feature will not work)" & vbNewLine & ex.Message, True)
End Try
@@ -98,7 +87,6 @@ Namespace Security
Finally
If Not System.IntPtr.op_Equality(tokenHandle, IntPtr.Zero) Then CloseHandle(tokenHandle)
If Not System.IntPtr.op_Equality(dupeTokenHandle, IntPtr.Zero) Then CloseHandle(dupeTokenHandle)
impersonatedUser = Nothing
End Try

View File

@@ -0,0 +1,325 @@
Imports System.ComponentModel
Imports mRemoteNG.Tools.LocalizedAttributes
Imports mRemoteNG.My
Namespace Themes
Public Class ThemeInfo
Implements ICloneable, INotifyPropertyChanged
#Region "Public Methods"
Public Sub New(Optional ByVal themeName As String = Nothing)
If themeName IsNot Nothing Then Name = themeName
End Sub
Public Function Clone() As Object Implements ICloneable.Clone
Return MemberwiseClone()
End Function
Public Overrides Function ToString() As String
Return Name
End Function
Public Overrides Function Equals(obj As Object) As Boolean
Dim otherTheme As ThemeInfo = TryCast(obj, ThemeInfo)
If otherTheme Is Nothing Then Return False
Dim themeInfoType As Type = (New ThemeInfo).GetType()
Dim myProperty As Object
Dim otherProperty As Object
For Each propertyInfo As Reflection.PropertyInfo In themeInfoType.GetProperties()
myProperty = propertyInfo.GetValue(Me, Nothing)
otherProperty = propertyInfo.GetValue(otherTheme, Nothing)
If Not myProperty.Equals(otherProperty) Then Return False
Next
Return True
End Function
#End Region
#Region "Events"
Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
End Sub
#End Region
#Region "Properties"
Private _name As String = Language.strUnnamedTheme
<Browsable(False)> _
Public Property Name As String
Get
Return _name
End Get
Set(value As String)
If _name = value Then Return
_name = value
NotifyPropertyChanged("Name")
End Set
End Property
#Region "General"
Private _windowBackgroundColor As Color = SystemColors.AppWorkspace
<LocalizedCategory("strThemeCategoryGeneral", 1), _
LocalizedDisplayName("strThemeNameWindowBackgroundColor"), _
LocalizedDescription("strThemeDescriptionWindowBackgroundColor")> _
Public Property WindowBackgroundColor() As Color
Get
Return (_windowBackgroundColor)
End Get
Set(value As Color)
If _windowBackgroundColor = value Then Return
_windowBackgroundColor = value
NotifyPropertyChanged("WindowBackgroundColor")
End Set
End Property
Private _menuBackgroundColor As Color = SystemColors.Control
<LocalizedCategory("strThemeCategoryGeneral", 1), _
Browsable(False),
LocalizedDisplayName("strThemeNameMenuBackgroundColor"),
LocalizedDescription("strThemeDescriptionMenuBackgroundColor")>
Public Property MenuBackgroundColor() As Color
Get
Return _menuBackgroundColor
End Get
Set(value As Color)
If _menuBackgroundColor = value Then Return
_menuBackgroundColor = value
NotifyPropertyChanged("MenuBackgroundColor")
End Set
End Property
Private _menuTextColor As Color = SystemColors.ControlText
<LocalizedCategory("strThemeCategoryGeneral", 1), _
Browsable(False),
LocalizedDisplayName("strThemeNameMenuTextColor"),
LocalizedDescription("strThemeDescriptionMenuTextColor")>
Public Property MenuTextColor() As Color
Get
Return _menuTextColor
End Get
Set(value As Color)
If _menuTextColor = value Then Return
_menuTextColor = value
NotifyPropertyChanged("MenuTextColor")
End Set
End Property
Private _toolbarBackgroundColor As Color = SystemColors.Control
<LocalizedCategory("strThemeCategoryGeneral", 1), _
Browsable(False), _
LocalizedDisplayName("strThemeNameToolbarBackgroundColor"), _
LocalizedDescription("strThemeDescriptionToolbarBackgroundColor")> _
Public Property ToolbarBackgroundColor() As Color
Get
Return _toolbarBackgroundColor
End Get
Set(value As Color)
If _toolbarBackgroundColor = value Or value.A < 255 Then Return
_toolbarBackgroundColor = value
NotifyPropertyChanged("ToolbarBackgroundColor")
End Set
End Property
Private _toolbarTextColor As Color = SystemColors.ControlText
<LocalizedCategory("strThemeCategoryGeneral", 1), _
Browsable(False), _
LocalizedDisplayName("strThemeNameToolbarTextColor"), _
LocalizedDescription("strThemeDescriptionToolbarTextColor")> _
Public Property ToolbarTextColor() As Color
Get
Return _toolbarTextColor
End Get
Set(value As Color)
If _toolbarTextColor = value Then Return
_toolbarTextColor = value
NotifyPropertyChanged("ToolbarTextColor")
End Set
End Property
#End Region
#Region "Connections Panel"
Private _connectionsPanelBackgroundColor As Color = SystemColors.Window
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2), _
LocalizedDisplayName("strThemeNameConnectionsPanelBackgroundColor"), _
LocalizedDescription("strThemeDescriptionConnectionsPanelBackgroundColor")> _
Public Property ConnectionsPanelBackgroundColor() As Color
Get
Return _connectionsPanelBackgroundColor
End Get
Set(value As Color)
If _connectionsPanelBackgroundColor = value Or value.A < 255 Then Return
_connectionsPanelBackgroundColor = value
NotifyPropertyChanged("ConnectionsPanelBackgroundColor")
End Set
End Property
Private _connectionsPanelTextColor As Color = SystemColors.WindowText
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2),
LocalizedDisplayName("strThemeNameConnectionsPanelTextColor"),
LocalizedDescription("strThemeDescriptionConnectionsPanelTextColor")>
Public Property ConnectionsPanelTextColor() As Color
Get
Return _connectionsPanelTextColor
End Get
Set(value As Color)
If _connectionsPanelTextColor = value Then Return
_connectionsPanelTextColor = value
NotifyPropertyChanged("ConnectionsPanelTextColor")
End Set
End Property
Private _connectionsPanelTreeLineColor As Color = Color.Black
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2),
LocalizedDisplayName("strThemeNameConnectionsPanelTreeLineColor"),
LocalizedDescription("strThemeDescriptionConnectionsPanelTreeLineColor")>
Public Property ConnectionsPanelTreeLineColor() As Color
Get
Return _connectionsPanelTreeLineColor
End Get
Set(value As Color)
If _connectionsPanelTreeLineColor = value Then Return
_connectionsPanelTreeLineColor = value
NotifyPropertyChanged("ConnectionsPanelTreeLineColor")
End Set
End Property
Private _searchBoxBackgroundColor As Color = SystemColors.Window
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2), _
LocalizedDisplayName("strThemeNameSearchBoxBackgroundColor"), _
LocalizedDescription("strThemeDescriptionSearchBoxBackgroundColor")> _
Public Property SearchBoxBackgroundColor() As Color
Get
Return _searchBoxBackgroundColor
End Get
Set(value As Color)
If _searchBoxBackgroundColor = value Or value.A < 255 Then Return
_searchBoxBackgroundColor = value
NotifyPropertyChanged("SearchBoxBackgroundColor")
End Set
End Property
Private _searchBoxTextPromptColor As Color = SystemColors.GrayText
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2), _
LocalizedDisplayName("strThemeNameSearchBoxTextPromptColor"), _
LocalizedDescription("strThemeDescriptionSearchBoxTextPromptColor")> _
Public Property SearchBoxTextPromptColor() As Color
Get
Return _searchBoxTextPromptColor
End Get
Set(value As Color)
If _searchBoxTextPromptColor = value Then Return
_searchBoxTextPromptColor = value
NotifyPropertyChanged("SearchBoxTextPromptColor")
End Set
End Property
Private _searchBoxTextColor As Color = SystemColors.WindowText
<LocalizedCategory("strThemeCategoryConnectionsPanel", 2), _
LocalizedDisplayName("strThemeNameSearchBoxTextColor"), _
LocalizedDescription("strThemeDescriptionSearchBoxTextColor")> _
Public Property SearchBoxTextColor() As Color
Get
Return _searchBoxTextColor
End Get
Set(value As Color)
If _searchBoxTextColor = value Then Return
_searchBoxTextColor = value
NotifyPropertyChanged("SearchBoxTextColor")
End Set
End Property
#End Region
#Region "Config Panel"
Private _configPanelBackgroundColor As Color = SystemColors.Window
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelBackgroundColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelBackgroundColor")> _
Public Property ConfigPanelBackgroundColor() As Color
Get
Return _configPanelBackgroundColor
End Get
Set(value As Color)
If _configPanelBackgroundColor = value Or value.A < 255 Then Return
_configPanelBackgroundColor = value
NotifyPropertyChanged("ConfigPanelBackgroundColor")
End Set
End Property
Private _configPanelTextColor As Color = SystemColors.WindowText
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelTextColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelTextColor")> _
Public Property ConfigPanelTextColor() As Color
Get
Return _configPanelTextColor
End Get
Set(value As Color)
If _configPanelTextColor = value Then Return
_configPanelTextColor = value
NotifyPropertyChanged("ConfigPanelTextColor")
End Set
End Property
Private _configPanelCategoryTextColor As Color = SystemColors.ControlText
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelCategoryTextColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelCategoryTextColor")> _
Public Property ConfigPanelCategoryTextColor() As Color
Get
Return _configPanelCategoryTextColor
End Get
Set(value As Color)
If _configPanelCategoryTextColor = value Then Return
_configPanelCategoryTextColor = value
NotifyPropertyChanged("ConfigPanelCategoryTextColor")
End Set
End Property
Private _configPanelHelpBackgroundColor As Color = SystemColors.Control
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelHelpBackgroundColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelHelpBackgroundColor")> _
Public Property ConfigPanelHelpBackgroundColor() As Color
Get
Return _configPanelHelpBackgroundColor
End Get
Set(value As Color)
If _configPanelHelpBackgroundColor = value Or value.A < 255 Then Return
_configPanelHelpBackgroundColor = value
NotifyPropertyChanged("ConfigPanelHelpBackgroundColor")
End Set
End Property
Private _configPanelHelpTextColor As Color = SystemColors.ControlText
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelHelpTextColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelHelpTextColor")> _
Public Property ConfigPanelHelpTextColor() As Color
Get
Return _configPanelHelpTextColor
End Get
Set(value As Color)
If _configPanelHelpTextColor = value Then Return
_configPanelHelpTextColor = value
NotifyPropertyChanged("ConfigPanelHelpTextColor")
End Set
End Property
Private _configPanelGridLineColor As Color = SystemColors.InactiveBorder
<LocalizedCategory("strThemeCategoryConfigPanel", 3), _
LocalizedDisplayName("strThemeNameConfigPanelGridLineColor"), _
LocalizedDescription("strThemeDescriptionConfigPanelGridLineColor")> _
Public Property ConfigPanelGridLineColor() As Color
Get
Return _configPanelGridLineColor
End Get
Set(value As Color)
If _configPanelGridLineColor = value Then Return
_configPanelGridLineColor = value
NotifyPropertyChanged("ConfigPanelGridLineColor")
End Set
End Property
#End Region
#End Region
End Class
End Namespace

View File

@@ -0,0 +1,96 @@
Imports System.IO
Imports System.ComponentModel
Imports mRemoteNG.My
Namespace Themes
Public Class ThemeManager
#Region "Public Methods"
Public Shared Function LoadTheme(ByVal themeName As String, Optional ByVal setActive As Boolean = True) As ThemeInfo
Dim loadedTheme As ThemeInfo = DefaultTheme
If Not String.IsNullOrEmpty(themeName) Then
For Each theme As ThemeInfo In LoadThemes()
If theme.Name = themeName Then
loadedTheme = theme
Exit For
End If
Next
End If
If setActive Then ActiveTheme = loadedTheme
Return loadedTheme
End Function
Public Shared Function LoadThemes() As List(Of ThemeInfo)
Dim themes As New List(Of ThemeInfo)
themes.Add(DefaultTheme)
Try
themes.AddRange(ThemeSerializer.LoadFromXmlFile(Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName)))
Catch ex As FileNotFoundException
End Try
Return themes
End Function
Public Shared Sub SaveThemes(ByVal themes As List(Of ThemeInfo))
themes.Remove(DefaultTheme)
ThemeSerializer.SaveToXmlFile(themes, Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName))
End Sub
Public Shared Sub SaveThemes(ByVal themes As ThemeInfo())
SaveThemes(New List(Of ThemeInfo)(themes))
End Sub
Public Shared Sub SaveThemes(ByVal themes As BindingList(Of ThemeInfo))
Dim themesArray(themes.Count - 1) As ThemeInfo
themes.CopyTo(themesArray, 0)
SaveThemes(themesArray)
End Sub
#End Region
#Region "Events"
Public Shared Event ThemeChanged()
Protected Shared Sub NotifyThemeChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs)
If e.PropertyName = "Name" Then Return
RaiseEvent ThemeChanged()
End Sub
#End Region
#Region "Properties"
' ReSharper disable InconsistentNaming
Private Shared ReadOnly _defaultTheme As New ThemeInfo(Language.strDefaultTheme)
' ReSharper restore InconsistentNaming
Public Shared ReadOnly Property DefaultTheme As ThemeInfo
Get
Return _defaultTheme
End Get
End Property
Private Shared _activeTheme As ThemeInfo
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)
' 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
End Class
End Namespace

View File

@@ -0,0 +1,119 @@
Imports System.IO
Imports System.Xml
Imports System.Reflection
Namespace Themes
Public Class ThemeSerializer
Public Shared Sub SaveToXmlFile(themeInfo As ThemeInfo, filename As String)
Dim themeList As New List(Of ThemeInfo)
themeList.Add(ThemeInfo)
SaveToXmlFile(themeList, filename)
End Sub
Public Shared Sub SaveToXmlFile(themes As List(Of ThemeInfo), filename As String)
Dim tempFileName As String = Path.GetTempFileName()
Dim xmlTextWriter As New XmlTextWriter(tempFileName, System.Text.Encoding.UTF8)
xmlTextWriter.Formatting = Formatting.Indented
xmlTextWriter.Indentation = 4
xmlTextWriter.WriteStartDocument()
xmlTextWriter.WriteStartElement("mRemoteNG")
xmlTextWriter.WriteStartElement("FileInfo")
xmlTextWriter.WriteAttributeString("Version", "1.0")
xmlTextWriter.WriteElementString("FileType", "Theme")
xmlTextWriter.WriteElementString("FileTypeVersion", "1.0")
xmlTextWriter.WriteEndElement() ' FileInfo
Dim themeType As Type = (New ThemeInfo).GetType()
Dim colorType As Type = (New Color).GetType()
Dim color As Color
For Each themeInfo As ThemeInfo In themes
xmlTextWriter.WriteStartElement("Theme")
xmlTextWriter.WriteAttributeString("Name", themeInfo.Name)
For Each propertyInfo As PropertyInfo In themeType.GetProperties()
If Not propertyInfo.PropertyType Is colorType Then Continue For
color = propertyInfo.GetValue(themeInfo, Nothing)
xmlTextWriter.WriteStartElement("Color")
xmlTextWriter.WriteAttributeString("Name", propertyInfo.Name)
xmlTextWriter.WriteAttributeString("Value", EncodeColorName(color))
xmlTextWriter.WriteEndElement() ' Color
Next
xmlTextWriter.WriteEndElement() ' Theme
Next
xmlTextWriter.WriteEndElement() ' mRemoteNG
xmlTextWriter.Close()
File.Delete(filename)
File.Move(tempFileName, filename)
End Sub
Public Shared Function LoadFromXmlFile(filename As String) As List(Of ThemeInfo)
Dim xmlDocument As New XmlDocument()
xmlDocument.Load(filename)
Dim fileInfoNode As XmlNode = xmlDocument.SelectSingleNode("/mRemoteNG/FileInfo")
Dim fileInfoVersion As New Version(fileInfoNode.Attributes("Version").Value)
If fileInfoVersion > New Version(1, 0) Then
Throw New FileFormatException(String.Format("Unsupported FileInfo version ({0}).", fileInfoVersion))
End If
Dim fileTypeNode As XmlNode = fileInfoNode.SelectSingleNode("./FileType")
Dim fileType As String = fileTypeNode.InnerText
If Not fileType = "Theme" Then
Throw New FileFormatException(String.Format("Incorrect FileType ({0}). Expected ""Theme"".", fileType))
End If
Dim fileTypeVersion As New Version(fileInfoNode.SelectSingleNode("./FileTypeVersion").InnerText)
If fileTypeVersion > New Version(1, 0) Then
Throw New FileFormatException(String.Format("Unsupported FileTypeVersion ({0}).", fileTypeVersion))
End If
Dim themeNodes As XmlNodeList = xmlDocument.SelectNodes("/mRemoteNG/Theme")
Dim themes As New List(Of ThemeInfo)
Dim themeInfo As ThemeInfo
Dim themeType As Type = (New ThemeInfo).GetType()
Dim colorType As Type = (New Color).GetType()
Dim colorName As String
Dim colorValue As String
Dim propertyInfo As PropertyInfo
For Each themeNode As XmlNode In themeNodes
themeInfo = New ThemeInfo
themeInfo.Name = themeNode.Attributes("Name").Value
For Each colorNode As XmlNode In themeNode.SelectNodes("./Color")
colorName = colorNode.Attributes("Name").Value
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, 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,102 @@
Imports System.Text.RegularExpressions
Namespace Tools
' Adapted from http://qntm.org/cmd
Public Class CommandLineArguments
#Region "Protected Fields"
Protected Arguments As New List(Of Argument)
#End Region
#Region "Public Properties"
Public Property EscapeForShell As Boolean
#End Region
#Region "Public Methods"
Public Sub Add(ByVal argument As String, Optional ByVal forceQuotes As Boolean = False)
Arguments.Add(New Argument(argument, False, forceQuotes))
End Sub
Public Sub Add(ByVal ParamArray argumentArray As String())
For Each argument As String In argumentArray
Add(argument)
Next
End Sub
Public Sub AddFileName(ByVal fileName As String, Optional ByVal forceQuotes As Boolean = False)
Arguments.Add(New Argument(fileName, True, forceQuotes))
End Sub
Public Overrides Function ToString() As String
Dim processedArguments As New List(Of String)
For Each argument As Argument In Arguments
processedArguments.Add(ProcessArgument(argument, EscapeForShell))
Next
Return String.Join(" ", processedArguments.ToArray())
End Function
Public Shared Function PrefixFileName(ByVal argument As String) As String
If String.IsNullOrEmpty(argument) Then Return argument
If argument.StartsWith("-") Then argument = ".\" & argument
Return argument
End Function
Public Shared Function EscapeBackslashes(ByVal argument As String) As String
If String.IsNullOrEmpty(argument) Then Return argument
' Sequence of backslashes followed by a double quote:
' double up all the backslashes and escape the double quote
Return Regex.Replace(argument, "(\\*)""", "$1$1\""")
End Function
Public Shared Function QuoteArgument(ByVal argument As String, Optional ByVal forceQuotes As Boolean = False) As String
If Not forceQuotes And Not String.IsNullOrEmpty(argument) And Not argument.Contains(" ") Then Return argument
' Sequence of backslashes followed by the end of the string
' (which will become a double quote):
' double up all the backslashes
If Not String.IsNullOrEmpty(argument) Then
argument = Regex.Replace(argument, "(\\*)$", "$1$1")
End If
Return """" & argument & """"
End Function
Public Shared Function EscapeShellMetacharacters(ByVal argument As String) As String
If String.IsNullOrEmpty(argument) Then Return argument
Return Regex.Replace(argument, "([()%!^""<>&|])", "^$1")
End Function
#End Region
#Region "Protected Methods"
Protected Shared Function ProcessArgument(ByVal argument As Argument, Optional ByVal escapeForShell As Boolean = False) As String
Dim text As String = argument.Text
If argument.IsFileName Then text = PrefixFileName(text)
text = EscapeBackslashes(text)
text = QuoteArgument(text, argument.ForceQuotes)
If escapeForShell Then text = EscapeShellMetacharacters(text)
Return text
End Function
#End Region
#Region "Protected Classes"
Protected Class Argument
Public Sub New(ByVal text As String, Optional ByVal isFileName As Boolean = False, Optional ByVal forceQuotes As Boolean = False)
Me.Text = text
Me.IsFileName = isFileName
Me.ForceQuotes = forceQuotes
End Sub
Public Property Text As String
Public Property IsFileName As Boolean
Public Property ForceQuotes As Boolean
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,51 +210,38 @@ 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
Implements IComparer
Private _nodeToSort As TreeNode
Private _sortType As SortType
Public Property Sorting As System.Windows.Forms.SortOrder
Public Sub New(ByVal node As TreeNode, ByVal sortType As SortType)
Public Sub New(Optional ByVal sortOrder As SortOrder = SortOrder.None)
MyBase.New()
Me._nodeToSort = node
Me._sortType = sortType
Sorting = sortOrder
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim tx As TreeNode = CType(x, TreeNode)
Dim ty As TreeNode = CType(y, TreeNode)
If ((tx.Parent Is Me._nodeToSort) AndAlso (ty.Parent Is Me._nodeToSort)) Then
' Ascending
If (Me._sortType = SortType.Ascending) Then
Select Case Sorting
Case SortOrder.Ascending
Return String.Compare(tx.Text, ty.Text)
End If
' Descending
If (Me._sortType = SortType.Descending) Then
Case SortOrder.Descending
Return String.Compare(ty.Text, tx.Text)
End If
End If
Return 0
Case Else
Return 0
End Select
End Function
Public Enum SortType
Ascending = 0
Descending = 1
End Enum
End Class
End Class
End Namespace

View File

@@ -117,21 +117,21 @@ Namespace Tools
_ConnectionInfo = ConnectionInfo
Dim p As New Process()
Dim pI As New ProcessStartInfo()
Dim process As New Process()
With process.StartInfo
.UseShellExecute = False
.FileName = ParseText(_FileName)
pI.FileName = ParseText(_FileName)
pI.Arguments = ParseText(_Arguments)
.Arguments = CommandLineArguments.EscapeBackslashes(ParseText(_Arguments))
End With
p.StartInfo = pI
p.Start()
process.Start()
If _WaitForExit Then
p.WaitForExit()
process.WaitForExit()
End If
Return p
Return process
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't start external application." & vbNewLine & ex.Message)
Return Nothing

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
@@ -297,62 +281,47 @@ Namespace Tools
End Class
Public Class Fullscreen
Private Shared winState As FormWindowState
Private Shared brdStyle As FormBorderStyle
Private Shared topMost As Boolean
Private Shared bounds As Rectangle
Public Sub New(ByVal handledForm As Form)
_handledForm = handledForm
End Sub
Public Shared targetForm As Form = frmMain
Public Shared FullscreenActive As Boolean = False
Private ReadOnly _handledForm As Form
Private _savedWindowState As FormWindowState
Private _savedBorderStyle As FormBorderStyle
Private _savedBounds As Rectangle
Public Shared Sub EnterFullscreen()
Try
If Not FullscreenActive Then
FullscreenActive = True
Save()
targetForm.WindowState = FormWindowState.Maximized
targetForm.FormBorderStyle = FormBorderStyle.None
SetWinFullScreen(targetForm.Handle)
Private _value As Boolean = False
Public Property Value() As Boolean
Get
Return _value
End Get
Set(newValue As Boolean)
If _value = newValue Then Return
If Not _value Then
EnterFullscreen()
Else
ExitFullscreen()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Entering Fullscreen failed" & vbNewLine & ex.Message, True)
End Try
_value = newValue
End Set
End Property
Private Sub EnterFullscreen()
_savedBorderStyle = _handledForm.FormBorderStyle
_savedWindowState = _handledForm.WindowState
_savedBounds = _handledForm.Bounds
_handledForm.FormBorderStyle = FormBorderStyle.None
If _handledForm.WindowState = FormWindowState.Maximized Then
_handledForm.WindowState = FormWindowState.Normal
End If
_handledForm.WindowState = FormWindowState.Maximized
End Sub
Public Shared Sub Save()
winState = targetForm.WindowState
brdStyle = targetForm.FormBorderStyle
bounds = targetForm.Bounds
End Sub
Public Shared Sub ExitFullscreen()
Try
targetForm.WindowState = winState
targetForm.FormBorderStyle = brdStyle
targetForm.Bounds = bounds
FullscreenActive = False
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Exiting Fullscreen failed" & vbNewLine & ex.Message, True)
End Try
End Sub
<DllImport("user32.dll", EntryPoint:="GetSystemMetrics")> Public Shared Function GetSystemMetrics(ByVal which As Integer) As Integer
End Function
<DllImport("user32.dll")> Public Shared Sub SetWindowPos(ByVal hwnd As IntPtr, ByVal hwndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal width As Integer, ByVal height As Integer, ByVal flags As UInteger)
End Sub
Private Shared HWND_TOP As IntPtr = IntPtr.Zero
Private Const SWP_SHOWWINDOW As Integer = 64
' 0<>0040
Public Shared Sub SetWinFullScreen(ByVal hwnd As IntPtr)
Try
Dim curScreen As Screen = Screen.FromHandle(targetForm.Handle)
SetWindowPos(hwnd, HWND_TOP, curScreen.Bounds.Left, curScreen.Bounds.Top, curScreen.Bounds.Right, curScreen.Bounds.Bottom, SWP_SHOWWINDOW)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SetWindowPos failed" & vbNewLine & ex.Message, True)
End Try
Private Sub ExitFullscreen()
_handledForm.FormBorderStyle = _savedBorderStyle
_handledForm.WindowState = _savedWindowState
_handledForm.Bounds = _savedBounds
End Sub
End Class

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

@@ -5,10 +5,12 @@ Imports System.DirectoryServices
Namespace Tree
Public Class Node
Public Enum Type
Root = 0
Container = 1
Connection = 2
NONE = 66
None = 0
Root = 1
Container = 2
Connection = 3
PuttyRoot = 4
PuttySession = 5
End Enum
Private Shared _TreeView As TreeView
@@ -92,10 +94,14 @@ Namespace Tree
Return Type.NONE
End If
If TypeOf treeNode.Tag Is Root.Info Then
If TypeOf treeNode.Tag Is Root.PuttySessions.Info Then
Return Type.PuttyRoot
ElseIf TypeOf treeNode.Tag Is Root.Info Then
Return Type.Root
ElseIf TypeOf treeNode.Tag Is Container.Info Then
Return Type.Container
ElseIf TypeOf treeNode.Tag Is Connection.PuttySession.Info Then
Return Type.PuttySession
ElseIf TypeOf treeNode.Tag Is Connection.Info Then
Return Type.Connection
End If
@@ -184,7 +190,7 @@ Namespace Tree
Dim nNode As New TreeNode
Select Case NodeType
Case Type.Connection
Case Type.Connection, Type.PuttySession
nNode.Text = My.Language.strNewConnection
nNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
nNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
@@ -299,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
@@ -319,11 +325,17 @@ Namespace Tree
oldTreeNode.Parent.Nodes.Insert(oldTreeNode.Index + 1, newTreeNode)
TreeView.SelectedNode = newTreeNode
Else
Dim parentContainerInfo As Container.Info = TryCast(parentNode.Tag, Container.Info)
If parentContainerInfo IsNot Nothing Then
newConnectionInfo.Parent = parentContainerInfo
End If
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)
@@ -497,27 +509,52 @@ Namespace Tree
TreeView.EndUpdate()
End Sub
Public Shared Sub Sort(ByVal treeNode As TreeNode, ByVal sortType As Tools.Controls.TreeNodeSorter.SortType)
Try
TreeView.BeginUpdate()
If treeNode Is Nothing Then
Public Shared Sub Sort(ByVal treeNode As TreeNode, ByVal sorting As System.Windows.Forms.SortOrder)
If TreeView Is Nothing Then Return
TreeView.BeginUpdate()
If treeNode Is Nothing Then
If TreeView.Nodes.Count > 0 Then
treeNode = TreeView.Nodes.Item(0)
ElseIf Tree.Node.GetNodeType(treeNode) = Type.Connection Then
treeNode = treeNode.Parent
Else
Return
End If
ElseIf GetNodeType(treeNode) = Type.Connection Then
treeNode = treeNode.Parent
If treeNode Is Nothing Then Return
End If
Dim ns As New Tools.Controls.TreeNodeSorter(treeNode, sortType)
Sort(treeNode, New Tools.Controls.TreeNodeSorter(sorting))
TreeView.TreeViewNodeSorter = ns
TreeView.Sort()
TreeView.EndUpdate()
End Sub
For Each childNode As TreeNode In treeNode.Nodes
If GetNodeType(childNode) = Type.Container Then Sort(childNode, sortType)
' Adapted from http://www.codeproject.com/Tips/252234/ASP-NET-TreeView-Sort
Private Shared Sub Sort(ByVal treeNode As TreeNode, ByVal nodeSorter As Tools.Controls.TreeNodeSorter)
For Each childNode As TreeNode In treeNode.Nodes
Sort(childNode, nodeSorter)
Next
Try
Dim sortedNodes As New List(Of TreeNode)
Dim currentNode As TreeNode = Nothing
While (treeNode.Nodes.Count > 0)
For Each childNode As TreeNode In treeNode.Nodes
If (currentNode Is Nothing OrElse nodeSorter.Compare(childNode, currentNode) < 0) Then
currentNode = childNode
End If
Next
treeNode.Nodes.Remove(currentNode)
sortedNodes.Add(currentNode)
currentNode = Nothing
End While
For Each childNode As TreeNode In sortedNodes
treeNode.Nodes.Add(childNode)
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Sort nodes failed" & vbNewLine & ex.Message, True)
Finally
TreeView.EndUpdate()
End Try
End Sub

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,108 +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.AllowWebBrowserDrop = False
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
#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
@@ -539,7 +543,6 @@ Namespace UI
txtCheck2.Text = My.Language.strCcVNCFailed
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "VNC " & errorMsg, True)
'mC.AddMessage(Messages.MessageClass.ErrorMsg, ex.Message, True)
End Try
If VNC IsNot Nothing Then VNC.Dispose()

View File

@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="propertyGridContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>131, 14</value>
</metadata>
<metadata name="cMenIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>21, 14</value>
</metadata>

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
@@ -18,6 +19,8 @@ Namespace UI
Friend WithEvents btnHostStatus As System.Windows.Forms.ToolStripButton
Friend WithEvents cMenIcons As System.Windows.Forms.ContextMenuStrip
Private components As System.ComponentModel.IContainer
Friend WithEvents propertyGridContextMenu As System.Windows.Forms.ContextMenuStrip
Friend WithEvents propertyGridContextMenuShowHelpText As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents pGrid As Azuria.Common.Controls.FilteredPropertyGrid
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
@@ -29,6 +32,9 @@ Namespace UI
Me.btnIcon = New System.Windows.Forms.ToolStripButton()
Me.btnHostStatus = New System.Windows.Forms.ToolStripButton()
Me.cMenIcons = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.propertyGridContextMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.propertyGridContextMenuShowHelpText = New System.Windows.Forms.ToolStripMenuItem()
Me.propertyGridContextMenu.SuspendLayout()
Me.SuspendLayout()
'
'pGrid
@@ -37,6 +43,7 @@ Namespace UI
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.pGrid.BrowsableProperties = Nothing
Me.pGrid.ContextMenuStrip = Me.propertyGridContextMenu
Me.pGrid.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.pGrid.HiddenAttributes = Nothing
Me.pGrid.HiddenProperties = Nothing
@@ -110,6 +117,18 @@ Namespace UI
Me.cMenIcons.Name = "cMenIcons"
Me.cMenIcons.Size = New System.Drawing.Size(61, 4)
'
'propertyGridContextMenu
'
Me.propertyGridContextMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.propertyGridContextMenuShowHelpText})
Me.propertyGridContextMenu.Name = "propertyGridContextMenu"
Me.propertyGridContextMenu.Size = New System.Drawing.Size(157, 26)
'
'propertyGridContextMenuShowHelpText
'
Me.propertyGridContextMenuShowHelpText.Name = "ContextMenuShowHelpText"
Me.propertyGridContextMenuShowHelpText.Size = New System.Drawing.Size(156, 22)
Me.propertyGridContextMenuShowHelpText.Text = "&Show Help Text"
'
'Config
'
Me.ClientSize = New System.Drawing.Size(226, 530)
@@ -120,6 +139,7 @@ Namespace UI
Me.Name = "Config"
Me.TabText = "Config"
Me.Text = "Config"
Me.propertyGridContextMenu.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
@@ -358,7 +378,7 @@ Namespace UI
End If
Me.btnShowDefaultProperties.Enabled = False
Me.btnShowDefaultInheritance.Enabled = False
Me.btnIcon.Enabled = True
btnIcon.Enabled = True
Me.btnHostStatus.Enabled = True
ElseIf Me.DefaultPropertiesVisible Then 'Defaults selected
Me.pGrid.SelectedObject = Obj
@@ -390,6 +410,8 @@ Namespace UI
Me.btnIcon.Enabled = True
Me.btnHostStatus.Enabled = True
ElseIf Me.DefaultInheritanceVisible Then 'Default Inhertiance selected
pGrid.SelectedObject = Obj
Me.btnShowProperties.Enabled = True
Me.btnShowInheritance.Enabled = True
Me.btnShowDefaultProperties.Enabled = False
@@ -420,17 +442,31 @@ Namespace UI
If conIcon IsNot Nothing Then
Me.btnIcon.Image = conIcon.ToBitmap
End If
ElseIf TypeOf Obj Is mRemoteNG.Root.Info Then 'ROOT
Me.PropertiesVisible = True
Me.DefaultPropertiesVisible = False
Me.btnShowProperties.Enabled = True
Me.btnShowInheritance.Enabled = False
Me.btnShowDefaultProperties.Enabled = True
Me.btnShowDefaultInheritance.Enabled = True
Me.btnIcon.Enabled = False
Me.btnHostStatus.Enabled = False
Me.pGrid.SelectedObject = Obj
ElseIf TypeOf Obj Is Root.Info Then 'ROOT
Dim rootInfo As Root.Info = CType(Obj, Root.Info)
Select Case rootInfo.Type
Case Root.Info.RootType.Connection
PropertiesVisible = True
DefaultPropertiesVisible = False
btnShowProperties.Enabled = True
btnShowInheritance.Enabled = False
btnShowDefaultProperties.Enabled = True
btnShowDefaultInheritance.Enabled = True
btnIcon.Enabled = False
btnHostStatus.Enabled = False
Case Root.Info.RootType.Credential
Throw New NotImplementedException
Case Root.Info.RootType.PuttySessions
PropertiesVisible = True
DefaultPropertiesVisible = False
btnShowProperties.Enabled = True
btnShowInheritance.Enabled = False
btnShowDefaultProperties.Enabled = False
btnShowDefaultInheritance.Enabled = False
btnIcon.Enabled = False
btnHostStatus.Enabled = False
End Select
pGrid.SelectedObject = Obj
ElseIf TypeOf Obj Is mRemoteNG.Connection.Info.Inheritance Then 'INHERITANCE
Me.pGrid.SelectedObject = Obj
@@ -484,6 +520,20 @@ Namespace UI
btnHostStatus.Text = My.Language.strStatus
Text = My.Language.strMenuConfig
TabText = My.Language.strMenuConfig
propertyGridContextMenuShowHelpText.Text = Language.strMenuShowHelpText
End Sub
Private Sub ApplyTheme()
With Themes.ThemeManager.ActiveTheme
pGrid.BackColor = .ToolbarBackgroundColor
pGrid.ForeColor = .ToolbarTextColor
pGrid.ViewBackColor = .ConfigPanelBackgroundColor
pGrid.ViewForeColor = .ConfigPanelTextColor
pGrid.LineColor = .ConfigPanelGridLineColor
pGrid.HelpBackColor = .ConfigPanelHelpBackgroundColor
pGrid.HelpForeColor = .ConfigPanelHelpTextColor
pGrid.CategoryForeColor = .ConfigPanelCategoryTextColor
End With
End Sub
Private _originalPropertyGridToolStripItemCountValid As Boolean
@@ -538,7 +588,13 @@ Namespace UI
Private Sub Config_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
AddHandler Themes.ThemeManager.ThemeChanged, AddressOf ApplyTheme
ApplyTheme()
AddToolStripItems()
pGrid.HelpVisible = Settings.ShowConfigHelpText
End Sub
Private Sub Config_SystemColorsChanged(sender As System.Object, e As System.EventArgs) Handles MyBase.SystemColorsChanged
@@ -564,8 +620,6 @@ Namespace UI
If conIcon IsNot Nothing Then
Me.btnIcon.Image = conIcon.ToBitmap
End If
Case My.Language.strPropertyNamePuttySession
mRemoteNG.Connection.PuttySession.PuttySessions = mRemoteNG.Connection.Protocol.PuttyBase.GetSessions()
Case My.Language.strPropertyNameAddress
Me.SetHostStatus(Me.pGrid.SelectedObject)
End Select
@@ -575,7 +629,16 @@ Namespace UI
End If
End If
If TypeOf Me.pGrid.SelectedObject Is mRemoteNG.Root.Info Then
If TypeOf pGrid.SelectedObject Is Root.PuttySessions.Info Then
Dim puttyRootInfo As Root.PuttySessions.Info = pGrid.SelectedObject
Select Case e.ChangedItem.PropertyDescriptor.Name
Case "Name"
puttyRootInfo.TreeNode.Text = puttyRootInfo.Name
Settings.PuttySavedSessionsName = puttyRootInfo.Name
Case "Panel"
Settings.PuttySavedSessionsPanel = puttyRootInfo.Panel
End Select
ElseIf TypeOf Me.pGrid.SelectedObject Is mRemoteNG.Root.Info Then
Dim rInfo As mRemoteNG.Root.Info = Me.pGrid.SelectedObject
Select Case e.ChangedItem.Label
@@ -607,6 +670,12 @@ Namespace UI
End Try
End Sub
Private Sub pGrid_PropertySortChanged(ByVal sender As Object, ByVal e As EventArgs) Handles pGrid.PropertySortChanged
If pGrid.PropertySort = PropertySort.CategorizedAlphabetical Then
pGrid.PropertySort = PropertySort.Categorized
End If
End Sub
Private Sub ShowHideGridItems()
Try
Dim strHide As New List(Of String)
@@ -642,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")
@@ -659,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")
@@ -667,10 +741,12 @@ 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
strHide.Add("Username;Domain")
strHide.Add("Username")
strHide.Add("Domain")
End If
If conI.VNCProxyType = mRemoteNG.Connection.Protocol.VNC.ProxyType.ProxyNone Then
strHide.Add("VNCProxyIP")
@@ -695,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")
@@ -703,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")
@@ -733,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")
@@ -741,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")
@@ -772,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")
@@ -780,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")
@@ -812,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")
@@ -820,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")
@@ -852,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")
@@ -860,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")
@@ -892,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")
@@ -899,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")
@@ -930,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")
@@ -964,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")
@@ -971,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")
@@ -1001,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")
@@ -1009,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")
@@ -1234,8 +1328,11 @@ Namespace UI
strHide.Add("Hostname")
strHide.Add("Name")
End If
ElseIf TypeOf Me.pGrid.SelectedObject Is mRemoteNG.Root.Info Then
strHide.Add("TreeNode")
ElseIf TypeOf pGrid.SelectedObject Is Root.Info Then
Dim rootInfo As Root.Info = CType(pGrid.SelectedObject, Root.Info)
If rootInfo.Type = Root.Info.RootType.PuttySessions Then
strHide.Add("Password")
End If
End If
Me.pGrid.HiddenProperties = strHide.ToArray
@@ -1308,7 +1405,8 @@ Namespace UI
Private Sub btnIcon_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnIcon.MouseUp
Try
If TypeOf Me.pGrid.SelectedObject Is mRemoteNG.Connection.Info Then
If TypeOf pGrid.SelectedObject Is mRemoteNG.Connection.Info And _
Not TypeOf pGrid.SelectedObject Is mRemoteNG.Connection.PuttySession.Info Then
Me.cMenIcons.Items.Clear()
For Each iStr As String In mRemoteNG.Connection.Icon.Icons
@@ -1328,19 +1426,28 @@ Namespace UI
End Try
End Sub
Private Sub IconMenu_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Private Sub IconMenu_Click(ByVal sender As Object, ByVal e As EventArgs)
Try
If TypeOf Me.pGrid.SelectedObject Is mRemoteNG.Connection.Info Then
TryCast(Me.pGrid.SelectedObject, mRemoteNG.Connection.Info).Icon = TryCast(sender, ToolStripMenuItem).Text
Dim conIcon As Icon = mRemoteNG.Connection.Icon.FromString(TryCast(Me.pGrid.SelectedObject, mRemoteNG.Connection.Info).Icon)
If conIcon IsNot Nothing Then
Me.btnIcon.Image = conIcon.ToBitmap
End If
Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(pGrid.SelectedObject, mRemoteNG.Connection.Info)
If connectionInfo Is Nothing Then Return
App.Runtime.SaveConnectionsBG()
End If
Dim selectedMenuItem As ToolStripMenuItem = TryCast(sender, ToolStripMenuItem)
If selectedMenuItem Is Nothing Then Return
Dim iconName As String = selectedMenuItem.Text
If String.IsNullOrEmpty(iconName) Then Return
Dim connectionIcon As Icon = mRemoteNG.Connection.Icon.FromString(iconName)
If connectionIcon Is Nothing Then Return
btnIcon.Image = connectionIcon.ToBitmap()
connectionInfo.Icon = iconName
pGrid.Refresh()
SaveConnectionsBG()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strConfigPropertyGridMenuClickFailed & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strConfigPropertyGridMenuClickFailed & vbNewLine & ex.Message, True)
End Try
End Sub
#End Region
@@ -1405,6 +1512,19 @@ Namespace UI
End Try
End Sub
#End Region
Private Sub propertyGridContextMenu_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles propertyGridContextMenu.Opening
propertyGridContextMenuShowHelpText.Checked = Settings.ShowConfigHelpText
End Sub
Private Sub propertyGridContextMenu_Click(sender As Object, e As EventArgs) Handles propertyGridContextMenuShowHelpText.Click
propertyGridContextMenuShowHelpText.Checked = Not propertyGridContextMenuShowHelpText.Checked
End Sub
Private Sub propertyGridContextMenu_CheckedChanged(sender As Object, e As EventArgs) Handles propertyGridContextMenuShowHelpText.CheckedChanged
Settings.ShowConfigHelpText = propertyGridContextMenuShowHelpText.Checked
pGrid.HelpVisible = propertyGridContextMenuShowHelpText.Checked
End Sub
End Class
End Namespace
End Namespace

View File

@@ -6,6 +6,7 @@ Imports Crownwood
Imports WeifenLuo.WinFormsUI.Docking
Imports PSTaskDialog
Imports mRemoteNG.App.Runtime
Imports mRemoteNG.Config
Namespace UI
Namespace Window
@@ -292,6 +293,30 @@ Namespace UI
ApplyLanguage()
End Sub
Private _documentHandlersAdded As Boolean = False
Private _floatHandlersAdded As Boolean = False
Private Sub Connection_DockStateChanged(ByVal sender As System.Object, ByVal e As EventArgs) Handles Me.DockStateChanged
If DockState = DockState.Float Then
If _documentHandlersAdded Then
RemoveHandler frmMain.ResizeBegin, AddressOf Connection_ResizeBegin
RemoveHandler frmMain.ResizeEnd, AddressOf Connection_ResizeEnd
_documentHandlersAdded = False
End If
AddHandler DockHandler.FloatPane.FloatWindow.ResizeBegin, AddressOf Connection_ResizeBegin
AddHandler DockHandler.FloatPane.FloatWindow.ResizeEnd, AddressOf Connection_ResizeEnd
_floatHandlersAdded = True
ElseIf DockState = DockState.Document Then
If _floatHandlersAdded Then
RemoveHandler DockHandler.FloatPane.FloatWindow.ResizeBegin, AddressOf Connection_ResizeBegin
RemoveHandler DockHandler.FloatPane.FloatWindow.ResizeEnd, AddressOf Connection_ResizeEnd
_floatHandlersAdded = False
End If
AddHandler frmMain.ResizeBegin, AddressOf Connection_ResizeBegin
AddHandler frmMain.ResizeEnd, AddressOf Connection_ResizeEnd
_documentHandlersAdded = True
End If
End Sub
Private Sub ApplyLanguage()
cmenTabFullscreen.Text = My.Language.strMenuFullScreenRDP
cmenTabSmartSize.Text = My.Language.strMenuSmartSize
@@ -311,13 +336,15 @@ Namespace UI
cmenTabPuttySettings.Text = My.Language.strPuttySettings
End Sub
Private Sub Connection_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Not frmMain.IsClosing And My.Settings.ConfirmCloseConnection And TabController.TabPages.Count > 0 Then
Dim Result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionPanelMainInstruction, Me.Text), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
Private Sub Connection_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
If Not frmMain.IsClosing And ( _
(My.Settings.ConfirmCloseConnection = ConfirmClose.All And TabController.TabPages.Count > 0) Or _
(My.Settings.ConfirmCloseConnection = ConfirmClose.Multiple And TabController.TabPages.Count > 1)) Then
Dim result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionPanelMainInstruction, Me.Text), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.ConfirmCloseConnection = False
My.Settings.ConfirmCloseConnection = My.Settings.ConfirmCloseConnection - 1
End If
If Result = DialogResult.No Then
If result = DialogResult.No Then
e.Cancel = True
Exit Sub
End If
@@ -326,28 +353,23 @@ Namespace UI
Try
For Each tabP As Magic.Controls.TabPage In Me.TabController.TabPages
If tabP.Tag IsNot Nothing Then
Dim IC As mRemoteNG.Connection.InterfaceControl = tabP.Tag
IC.Protocol.Close()
Dim interfaceControl As mRemoteNG.Connection.InterfaceControl = tabP.Tag
interfaceControl.Protocol.Close()
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Connection_FormClosing (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Connection.Connection_FormClosing() failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub Connection_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Try
For Each tabP As Magic.Controls.TabPage In Me.TabController.TabPages
If tabP.Tag IsNot Nothing Then
If TypeOf tabP.Tag Is mRemoteNG.Connection.InterfaceControl Then
Dim IC As mRemoteNG.Connection.InterfaceControl = tabP.Tag
IC.Protocol.Resize()
End If
End If
Next
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "Connection_Resize (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
Public Shadows Event ResizeBegin As EventHandler
Private Sub Connection_ResizeBegin(ByVal sender As System.Object, ByVal e As EventArgs)
RaiseEvent ResizeBegin(Me, e)
End Sub
Public Shadows Event ResizeEnd As EventHandler
Public Sub Connection_ResizeEnd(ByVal sender As System.Object, ByVal e As EventArgs)
RaiseEvent ResizeEnd(sender, e)
End Sub
#End Region
@@ -361,31 +383,31 @@ Namespace UI
End Sub
Private Sub CloseConnectionTab()
Dim SelectedTab As Crownwood.Magic.Controls.TabPage = Me.TabController.SelectedTab
If My.Settings.ConfirmCloseConnection Then
Dim Result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionMainInstruction, SelectedTab.Title), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
Dim selectedTab As Magic.Controls.TabPage = TabController.SelectedTab
If My.Settings.ConfirmCloseConnection = ConfirmClose.All Then
Dim result As DialogResult = cTaskDialog.MessageBox(Me, My.Application.Info.ProductName, String.Format(My.Language.strConfirmCloseConnectionMainInstruction, selectedTab.Title), "", "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.YesNo, eSysIcons.Question, Nothing)
If cTaskDialog.VerificationChecked Then
My.Settings.ConfirmCloseConnection = False
My.Settings.ConfirmCloseConnection = My.Settings.ConfirmCloseConnection - 1
End If
If Result = DialogResult.No Then
If result = DialogResult.No Then
Exit Sub
End If
End If
Try
If SelectedTab.Tag IsNot Nothing Then
Dim IC As mRemoteNG.Connection.InterfaceControl = SelectedTab.Tag
IC.Protocol.Close()
If selectedTab.Tag IsNot Nothing Then
Dim interfaceControl As mRemoteNG.Connection.InterfaceControl = selectedTab.Tag
interfaceControl.Protocol.Close()
Else
Me.CloseTab(SelectedTab)
CloseTab(selectedTab)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CloseConnectionTab (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Connection.CloseConnectionTab() failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub TabController_DoubleClickTab(ByVal sender As Crownwood.Magic.Controls.TabControl, ByVal page As Crownwood.Magic.Controls.TabPage) Handles TabController.DoubleClickTab
_lastMouseUp = 0
_firstClickTicks = 0
If My.Settings.DoubleClickOnTabClosesIt Then
Me.CloseConnectionTab()
End If
@@ -424,15 +446,16 @@ Namespace UI
End If
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then
Me.cmenTabFullscreen.Enabled = True
Me.cmenTabSmartSize.Enabled = True
Dim rdp As mRemoteNG.Connection.Protocol.RDP = IC.Protocol
Me.cmenTabSmartSize.Checked = rdp.SmartSize
Me.cmenTabFullscreen.Checked = rdp.Fullscreen
cmenTabFullscreen.Enabled = True
cmenTabFullscreen.Checked = rdp.Fullscreen
cmenTabSmartSize.Enabled = True
cmenTabSmartSize.Checked = rdp.SmartSize
Else
Me.cmenTabFullscreen.Enabled = False
Me.cmenTabSmartSize.Enabled = False
cmenTabFullscreen.Enabled = False
cmenTabSmartSize.Enabled = False
End If
If IC.Info.Protocol = mRemoteNG.Connection.Protocol.Protocols.VNC Then
@@ -845,10 +868,9 @@ Namespace UI
RefreshIC()
End Sub
Private _lastMouseUp As Integer = 0
Private _firstClickTicks As Integer = 0
Private _doubleClickRectangle As Rectangle
Private Sub TabController_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.MouseUp
Debug.Print("TabController_MouseUp()")
Debug.Print("_ignoreChangeSelectedTabClick = {0}", _ignoreChangeSelectedTabClick)
Try
If Not Native.GetForegroundWindow() = frmMain.Handle And Not _ignoreChangeSelectedTabClick Then
Dim clickedTab As Magic.Controls.TabPage = TabController.TabPageFromPoint(e.Location)
@@ -862,9 +884,10 @@ Namespace UI
Select Case e.Button
Case MouseButtons.Left
Dim currentTicks As Integer = Environment.TickCount
Dim elapsedTicks As Integer = currentTicks - _lastMouseUp
If elapsedTicks > SystemInformation.DoubleClickTime Then
_lastMouseUp = currentTicks
Dim elapsedTicks As Integer = currentTicks - _firstClickTicks
If elapsedTicks > SystemInformation.DoubleClickTime Or Not _doubleClickRectangle.Contains(MousePosition) Then
_firstClickTicks = currentTicks
_doubleClickRectangle = New Rectangle(MousePosition.X - (SystemInformation.DoubleClickSize.Width / 2), MousePosition.Y - (SystemInformation.DoubleClickSize.Height / 2), SystemInformation.DoubleClickSize.Width, SystemInformation.DoubleClickSize.Height)
FocusIC()
Else
TabController.OnDoubleClickTab(TabController.SelectedTab)
@@ -915,7 +938,6 @@ Namespace UI
Protected Overloads Overrides Sub WndProc(ByRef WndMsg As Message)
Try
If WndMsg.Msg = Native.WM_MOUSEACTIVATE Then
Dim curTab As Magic.Controls.TabPage = Me.TabController.SelectedTab
Dim curRect As Rectangle = curTab.RectangleToScreen(curTab.ClientRectangle)
@@ -938,15 +960,14 @@ Namespace UI
#End Region
#Region "Tab drag and drop"
Public Property InTabDrag As Boolean = False
Private Sub TabController_PageDragStart(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragStart
Cursor = Cursors.SizeWE
End Sub
Private Sub TabController_PageDragEnd(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragQuit
Cursor = Cursors.Default
End Sub
Private Sub TabController_PageDragMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragMove
InTabDrag = True ' For some reason PageDragStart gets raised again after PageDragEnd so set this here instead
Dim sourceTab As Magic.Controls.TabPage = TabController.SelectedTab
Dim destinationTab As Magic.Controls.TabPage = TabController.TabPageFromPoint(e.Location)
@@ -960,6 +981,13 @@ Namespace UI
TabController.SelectedTab = sourceTab
TabController.TabPages.ResumeEvents()
End Sub
Private Sub TabController_PageDragEnd(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.PageDragEnd, TabController.PageDragQuit
Cursor = Cursors.Default
InTabDrag = False
Dim interfaceControl As mRemoteNG.Connection.InterfaceControl = TryCast(TabController.SelectedTab.Tag, mRemoteNG.Connection.InterfaceControl)
If interfaceControl IsNot Nothing Then interfaceControl.Protocol.Focus()
End Sub
#End Region
End Class
End Namespace

View File

@@ -1,3 +1,4 @@
Imports System.Text
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
@@ -19,16 +20,16 @@ Namespace UI
Friend WithEvents cMenMCDelete As System.Windows.Forms.ToolStripMenuItem
Friend WithEvents pnlErrorMsg As System.Windows.Forms.Panel
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.pnlErrorMsg = New System.Windows.Forms.Panel
Me.txtMsgText = New System.Windows.Forms.TextBox
Me.lblMsgDate = New System.Windows.Forms.Label
Me.pbError = New System.Windows.Forms.PictureBox
Me.lvErrorCollector = New System.Windows.Forms.ListView
Me.clmMessage = New System.Windows.Forms.ColumnHeader
Me.components = New System.ComponentModel.Container()
Me.pnlErrorMsg = New System.Windows.Forms.Panel()
Me.txtMsgText = New System.Windows.Forms.TextBox()
Me.lblMsgDate = New System.Windows.Forms.Label()
Me.pbError = New System.Windows.Forms.PictureBox()
Me.lvErrorCollector = New System.Windows.Forms.ListView()
Me.clmMessage = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.cMenMC = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cMenMCCopy = New System.Windows.Forms.ToolStripMenuItem
Me.cMenMCDelete = New System.Windows.Forms.ToolStripMenuItem
Me.cMenMCCopy = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenMCDelete = New System.Windows.Forms.ToolStripMenuItem()
Me.imgListMC = New System.Windows.Forms.ImageList(Me.components)
Me.pnlErrorMsg.SuspendLayout()
CType(Me.pbError, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -38,7 +39,7 @@ Namespace UI
'pnlErrorMsg
'
Me.pnlErrorMsg.Anchor = CType(((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.Right), System.Windows.Forms.AnchorStyles)
Me.pnlErrorMsg.BackColor = System.Drawing.SystemColors.Control
Me.pnlErrorMsg.Controls.Add(Me.txtMsgText)
Me.pnlErrorMsg.Controls.Add(Me.lblMsgDate)
@@ -51,8 +52,8 @@ Namespace UI
'txtMsgText
'
Me.txtMsgText.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.txtMsgText.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtMsgText.Location = New System.Drawing.Point(40, 20)
Me.txtMsgText.Multiline = True
@@ -65,7 +66,7 @@ Namespace UI
'lblMsgDate
'
Me.lblMsgDate.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.lblMsgDate.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblMsgDate.Location = New System.Drawing.Point(40, 5)
Me.lblMsgDate.Name = "lblMsgDate"
@@ -84,8 +85,8 @@ Namespace UI
'lvErrorCollector
'
Me.lvErrorCollector.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.lvErrorCollector.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.lvErrorCollector.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.clmMessage})
Me.lvErrorCollector.ContextMenuStrip = Me.cMenMC
@@ -103,7 +104,7 @@ Namespace UI
'
'clmMessage
'
Me.clmMessage.Text = My.Language.strColumnMessage
Me.clmMessage.Text = Global.mRemoteNG.My.Language.strColumnMessage
Me.clmMessage.Width = 184
'
'cMenMC
@@ -112,23 +113,23 @@ Namespace UI
Me.cMenMC.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cMenMCCopy, Me.cMenMCDelete})
Me.cMenMC.Name = "cMenMC"
Me.cMenMC.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional
Me.cMenMC.Size = New System.Drawing.Size(137, 48)
Me.cMenMC.Size = New System.Drawing.Size(153, 70)
'
'cMenMCCopy
'
Me.cMenMCCopy.Image = Global.mRemoteNG.My.Resources.Resources.Copy
Me.cMenMCCopy.Name = "cMenMCCopy"
Me.cMenMCCopy.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys)
Me.cMenMCCopy.Size = New System.Drawing.Size(136, 22)
Me.cMenMCCopy.Text = My.Language.strMenuCopy
Me.cMenMCCopy.Size = New System.Drawing.Size(152, 22)
Me.cMenMCCopy.Text = Global.mRemoteNG.My.Language.strMenuCopy
'
'cMenMCDelete
'
Me.cMenMCDelete.Image = Global.mRemoteNG.My.Resources.Resources.Delete
Me.cMenMCDelete.Name = "cMenMCDelete"
Me.cMenMCDelete.ShortcutKeys = System.Windows.Forms.Keys.Delete
Me.cMenMCDelete.Size = New System.Drawing.Size(136, 22)
Me.cMenMCDelete.Text = My.Language.strMenuDelete
Me.cMenMCDelete.Size = New System.Drawing.Size(152, 22)
Me.cMenMCDelete.Text = Global.mRemoteNG.My.Language.strMenuDelete
'
'imgListMC
'
@@ -141,11 +142,12 @@ Namespace UI
Me.ClientSize = New System.Drawing.Size(617, 233)
Me.Controls.Add(Me.lvErrorCollector)
Me.Controls.Add(Me.pnlErrorMsg)
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 = Global.mRemoteNG.My.Resources.Resources.Info_Icon
Me.Name = "ErrorsAndInfos"
Me.TabText = My.Language.strMenuNotifications
Me.Text = My.Language.strMenuNotifications
Me.TabText = Global.mRemoteNG.My.Language.strMenuNotifications
Me.Text = "Notifications"
Me.pnlErrorMsg.ResumeLayout(False)
Me.pnlErrorMsg.PerformLayout()
CType(Me.pbError, System.ComponentModel.ISupportInitialize).EndInit()
@@ -174,8 +176,8 @@ Namespace UI
Private Sub ApplyLanguage()
clmMessage.Text = My.Language.strColumnMessage
cMenMCCopy.Text = My.Language.strMenuCopy
cMenMCDelete.Text = My.Language.strMenuDelete
cMenMCCopy.Text = My.Language.strMenuNotificationsCopyAll
cMenMCDelete.Text = My.Language.strMenuNotificationsDeleteAll
TabText = My.Language.strMenuNotifications
Text = My.Language.strMenuNotifications
End Sub
@@ -311,43 +313,80 @@ Namespace UI
End Try
End Sub
Private Sub cMenMCCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenMCCopy.Click
Me.CopyMessageToClipboard()
Private Sub cMenMC_Opening(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles cMenMC.Opening
If lvErrorCollector.Items.Count Then
cMenMCCopy.Enabled = True
cMenMCDelete.Enabled = True
Else
cMenMCCopy.Enabled = False
cMenMCDelete.Enabled = False
End If
If lvErrorCollector.SelectedItems.Count Then
cMenMCCopy.Text = My.Language.strMenuCopy
cMenMCDelete.Text = My.Language.strMenuNotificationsDelete
Else
cMenMCCopy.Text = My.Language.strMenuNotificationsCopyAll
cMenMCDelete.Text = My.Language.strMenuNotificationsDeleteAll
End If
End Sub
Private Sub CopyMessageToClipboard()
Private Sub cMenMCCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenMCCopy.Click
CopyMessagesToClipboard()
End Sub
Private Sub CopyMessagesToClipboard()
Try
If Me.lvErrorCollector.SelectedItems.Count > 0 Then
Dim strCopyText As String
strCopyText = "----------" & vbNewLine
For Each lvItem As ListViewItem In Me.lvErrorCollector.SelectedItems
strCopyText &= TryCast(lvItem.Tag, Messages.Message).MsgClass.ToString & vbNewLine
strCopyText &= TryCast(lvItem.Tag, Messages.Message).MsgDate & vbNewLine
strCopyText &= TryCast(lvItem.Tag, Messages.Message).MsgText & vbNewLine
strCopyText &= "----------" & vbNewLine
Next
Clipboard.SetText(strCopyText)
Dim items As IEnumerable
If lvErrorCollector.SelectedItems.Count Then
items = lvErrorCollector.SelectedItems
Else
items = lvErrorCollector.Items
End If
Dim stringBuilder As New StringBuilder
stringBuilder.AppendLine("----------")
lvErrorCollector.BeginUpdate()
Dim message As Messages.Message
For Each item As ListViewItem In items
message = TryCast(item.Tag, Messages.Message)
If message Is Nothing Then Continue For
stringBuilder.AppendLine(message.MsgClass.ToString)
stringBuilder.AppendLine(message.MsgDate)
stringBuilder.AppendLine(message.MsgText)
stringBuilder.AppendLine("----------")
Next
Clipboard.SetText(stringBuilder.ToString)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CopyMessageToClipboard (UI.Window.ErrorsAndInfos) failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.ErrorsAndInfos.CopyMessagesToClipboard() failed." & vbNewLine & ex.Message, True)
Finally
lvErrorCollector.EndUpdate()
End Try
End Sub
Private Sub cMenMCDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenMCDelete.Click
Me.DeleteMessages()
DeleteMessages()
End Sub
Private Sub DeleteMessages()
Try
If Me.lvErrorCollector.SelectedItems.Count > 0 Then
For Each lvItem As ListViewItem In Me.lvErrorCollector.SelectedItems
lvItem.Remove()
lvErrorCollector.BeginUpdate()
If lvErrorCollector.SelectedItems.Count Then
For Each item As ListViewItem In lvErrorCollector.SelectedItems
item.Remove()
Next
Else
lvErrorCollector.Items.Clear()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "DeleteMessages (UI.Window.ErrorsAndInfos) failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.ErrorsAndInfos.DeleteMessages() failed" & vbNewLine & ex.Message, True)
Finally
lvErrorCollector.EndUpdate()
End Try
End Sub
#End Region

View File

@@ -52,7 +52,6 @@ Namespace UI
'
'wbHelp
'
Me.wbHelp.AllowWebBrowserDrop = False
Me.wbHelp.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)
@@ -224,6 +223,11 @@ Namespace UI
Me.tvIndex.SelectedNode = Me.tvIndex.Nodes(0).Nodes(0)
End Sub
Private Sub Help_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.
wbHelp.AllowWebBrowserDrop = False
End Sub
Private Sub tvIndex_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvIndex.NodeMouseClick
Me.tvIndex.SelectedNode = e.Node
End Sub

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)
If Not terminalSessions.OpenConnection(.Hostname) Then Return
serverHandle = terminalSessions.ServerHandle
GetSessions(terminalSessions)
End With
_retrieved = True
Catch ex As ThreadAbortException
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionGetFailed & vbNewLine & ex.Message, True)
Finally
impersonator.StopImpersonation()
If Not serverHandle = 0 Then
terminalSessions.CloseConnection(serverHandle)
End If
End Try
End Sub
' Get sessions from an already impersonated and connected TerminalSessions object
Private Sub GetSessions(ByVal terminalSessions As mRemoteNG.Connection.Protocol.RDP.TerminalSessions)
Dim rdpSessions As mRemoteNG.Connection.Protocol.RDP.Sessions = terminalSessions.GetSessions
For Each session As mRemoteNG.Connection.Protocol.RDP.Session In rdpSessions
Dim item As New ListViewItem
item.Tag = session.SessionID
item.Text = session.SessionUser
item.SubItems.Add(session.SessionState)
item.SubItems.Add(Replace(session.SessionName, vbNewLine, ""))
AddToList(item)
Next
End Sub
Private Sub KillSessionBackground(ByVal dataObject As Object)
Dim data As BackgroundData = TryCast(dataObject, BackgroundData)
If data Is Nothing Then Return
Dim impersonator As New Security.Impersonator
Dim terminalSessions As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
Dim serverHandle As Long = 0
Try
With data
If String.IsNullOrEmpty(.Username) Or String.IsNullOrEmpty(.Password) Then Return
impersonator.StartImpersonation(.Domain, .Username, .Password)
If terminalSessions.OpenConnection(.Hostname) Then
serverHandle = terminalSessions.ServerHandle
terminalSessions.KillSession(.SessionId)
End If
ClearList()
GetSessions(terminalSessions)
_retrieved = True
End With
Catch ex As ThreadAbortException
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionKillFailed & vbNewLine & ex.Message, True)
Finally
impersonator.StopImpersonation()
If Not serverHandle = 0 Then
terminalSessions.CloseConnection(serverHandle)
End If
End Try
End Sub
Delegate Sub AddToListCallback(ByVal item As ListViewItem)
Private Sub AddToList(ByVal item As ListViewItem)
If sessionList.InvokeRequired Then
Dim callback As New AddToListCallback(AddressOf AddToList)
sessionList.Invoke(callback, New Object() {item})
Else
sessionList.Items.Add(item)
End If
End Sub
Delegate Sub ClearListCallback()
Private Sub ClearList()
If sessionList.InvokeRequired Then
Dim callback As New ClearListCallback(AddressOf ClearList)
sessionList.Invoke(callback)
Else
sessionList.Items.Clear()
End If
End Sub
Private Sub menuSession_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
Dim connectionInfo As mRemoteNG.Connection.Info
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

@@ -1,4 +1,5 @@
Imports mRemoteNG.Connection
Imports mRemoteNG
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
@@ -53,51 +54,51 @@ Namespace UI
Friend WithEvents mMenAddFolder As System.Windows.Forms.ToolStripMenuItem
Public WithEvents tvConnections As System.Windows.Forms.TreeView
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.components = New System.ComponentModel.Container()
Dim TreeNode1 As System.Windows.Forms.TreeNode = New System.Windows.Forms.TreeNode("Connections")
Me.tvConnections = New System.Windows.Forms.TreeView
Me.tvConnections = New System.Windows.Forms.TreeView()
Me.cMenTree = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.cMenTreeAddConnection = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeAddFolder = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeSep1 = New System.Windows.Forms.ToolStripSeparator
Me.cMenTreeConnect = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeConnectWithOptions = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeConnectWithOptionsConnectToConsoleSession = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeConnectWithOptionsDontConnectToConsoleSession = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeConnectWithOptionsConnectInFullscreen = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeConnectWithOptionsChoosePanelBeforeConnecting = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeDisconnect = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeSep2 = New System.Windows.Forms.ToolStripSeparator
Me.cMenTreeToolsTransferFile = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExport = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExportExportmRemoteXML = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExportImportmRemoteXML = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExportSep1 = New System.Windows.Forms.ToolStripSeparator
Me.cMenTreeToolsImportExportImportFromAD = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExportImportFromRDPFiles = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsImportExportImportFromPortScan = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsSort = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsSortAscending = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsSortDescending = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeToolsExternalApps = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeSep3 = New System.Windows.Forms.ToolStripSeparator
Me.cMenTreeDuplicate = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeRename = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeDelete = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeSep4 = New System.Windows.Forms.ToolStripSeparator
Me.cMenTreeMoveUp = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeMoveDown = New System.Windows.Forms.ToolStripMenuItem
Me.cMenTreeAddConnection = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeAddFolder = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeSep1 = New System.Windows.Forms.ToolStripSeparator()
Me.cMenTreeConnect = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeConnectWithOptions = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeConnectWithOptionsConnectToConsoleSession = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeConnectWithOptionsDontConnectToConsoleSession = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeConnectWithOptionsConnectInFullscreen = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeConnectWithOptionsChoosePanelBeforeConnecting = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeDisconnect = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeSep2 = New System.Windows.Forms.ToolStripSeparator()
Me.cMenTreeToolsTransferFile = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExport = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExportExportmRemoteXML = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExportImportmRemoteXML = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExportSep1 = New System.Windows.Forms.ToolStripSeparator()
Me.cMenTreeToolsImportExportImportFromAD = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExportImportFromRDPFiles = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsImportExportImportFromPortScan = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsSort = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsSortAscending = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsSortDescending = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeToolsExternalApps = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeSep3 = New System.Windows.Forms.ToolStripSeparator()
Me.cMenTreeDuplicate = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeRename = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeDelete = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeSep4 = New System.Windows.Forms.ToolStripSeparator()
Me.cMenTreeMoveUp = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTreeMoveDown = New System.Windows.Forms.ToolStripMenuItem()
Me.imgListTree = New System.Windows.Forms.ImageList(Me.components)
Me.pnlConnections = New System.Windows.Forms.Panel
Me.PictureBox1 = New System.Windows.Forms.PictureBox
Me.txtSearch = New System.Windows.Forms.TextBox
Me.msMain = New System.Windows.Forms.MenuStrip
Me.mMenAddConnection = New System.Windows.Forms.ToolStripMenuItem
Me.mMenAddFolder = New System.Windows.Forms.ToolStripMenuItem
Me.mMenView = New System.Windows.Forms.ToolStripMenuItem
Me.mMenViewExpandAllFolders = New System.Windows.Forms.ToolStripMenuItem
Me.mMenViewCollapseAllFolders = New System.Windows.Forms.ToolStripMenuItem
Me.mMenSortAscending = New System.Windows.Forms.ToolStripMenuItem
Me.pnlConnections = New System.Windows.Forms.Panel()
Me.PictureBox1 = New System.Windows.Forms.PictureBox()
Me.txtSearch = New System.Windows.Forms.TextBox()
Me.msMain = New System.Windows.Forms.MenuStrip()
Me.mMenAddConnection = New System.Windows.Forms.ToolStripMenuItem()
Me.mMenAddFolder = New System.Windows.Forms.ToolStripMenuItem()
Me.mMenView = New System.Windows.Forms.ToolStripMenuItem()
Me.mMenViewExpandAllFolders = New System.Windows.Forms.ToolStripMenuItem()
Me.mMenViewCollapseAllFolders = New System.Windows.Forms.ToolStripMenuItem()
Me.mMenSortAscending = New System.Windows.Forms.ToolStripMenuItem()
Me.cMenTree.SuspendLayout()
Me.pnlConnections.SuspendLayout()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -108,8 +109,8 @@ Namespace UI
'
Me.tvConnections.AllowDrop = True
Me.tvConnections.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.tvConnections.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.tvConnections.ContextMenuStrip = Me.cMenTree
Me.tvConnections.HideSelection = False
@@ -122,7 +123,7 @@ Namespace UI
TreeNode1.Text = "Connections"
Me.tvConnections.Nodes.AddRange(New System.Windows.Forms.TreeNode() {TreeNode1})
Me.tvConnections.SelectedImageIndex = 0
Me.tvConnections.Size = New System.Drawing.Size(192, 407)
Me.tvConnections.Size = New System.Drawing.Size(192, 410)
Me.tvConnections.TabIndex = 20
'
'cMenTree
@@ -157,7 +158,7 @@ Namespace UI
Me.cMenTreeConnect.Image = Global.mRemoteNG.My.Resources.Resources.Play
Me.cMenTreeConnect.Name = "cMenTreeConnect"
Me.cMenTreeConnect.ShortcutKeys = CType(((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Shift) _
Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys)
Or System.Windows.Forms.Keys.C), System.Windows.Forms.Keys)
Me.cMenTreeConnect.Size = New System.Drawing.Size(186, 22)
Me.cMenTreeConnect.Text = "Connect"
'
@@ -348,8 +349,8 @@ Namespace UI
'pnlConnections
'
Me.pnlConnections.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.pnlConnections.Controls.Add(Me.PictureBox1)
Me.pnlConnections.Controls.Add(Me.txtSearch)
Me.pnlConnections.Controls.Add(Me.tvConnections)
@@ -362,7 +363,7 @@ Namespace UI
'
Me.PictureBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.PictureBox1.Image = Global.mRemoteNG.My.Resources.Resources.Search
Me.PictureBox1.Location = New System.Drawing.Point(0, 411)
Me.PictureBox1.Location = New System.Drawing.Point(2, 412)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(16, 16)
Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
@@ -372,13 +373,15 @@ Namespace UI
'txtSearch
'
Me.txtSearch.Anchor = CType(((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.Right), System.Windows.Forms.AnchorStyles)
Me.txtSearch.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.txtSearch.Location = New System.Drawing.Point(21, 412)
Me.txtSearch.ForeColor = System.Drawing.SystemColors.GrayText
Me.txtSearch.Location = New System.Drawing.Point(19, 413)
Me.txtSearch.Name = "txtSearch"
Me.txtSearch.Size = New System.Drawing.Size(169, 13)
Me.txtSearch.Size = New System.Drawing.Size(171, 13)
Me.txtSearch.TabIndex = 30
Me.txtSearch.TabStop = False
Me.txtSearch.Text = "Search"
'
'msMain
'
@@ -462,6 +465,14 @@ Namespace UI
#Region "Form Stuff"
Private Sub Tree_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
AddHandler Themes.ThemeManager.ThemeChanged, AddressOf ApplyTheme
ApplyTheme()
txtSearch.Multiline = True
txtSearch.MinimumSize = New Size(0, 14)
txtSearch.Size = New Size(txtSearch.Size.Width, 14)
txtSearch.Multiline = False
End Sub
Private Sub ApplyLanguage()
@@ -495,9 +506,23 @@ Namespace UI
mMenViewExpandAllFolders.Text = My.Language.strExpandAllFolders
mMenViewCollapseAllFolders.Text = My.Language.strCollapseAllFolders
mMenSortAscending.ToolTipText = My.Language.strSortAsc
txtSearch.Text = Language.strSearchPrompt
TabText = My.Language.strConnections
Text = My.Language.strConnections
End Sub
Public Sub ApplyTheme()
With Themes.ThemeManager.ActiveTheme
msMain.BackColor = .ToolbarBackgroundColor
msMain.ForeColor = .ToolbarTextColor
tvConnections.BackColor = .ConnectionsPanelBackgroundColor
tvConnections.ForeColor = .ConnectionsPanelTextColor
tvConnections.LineColor = .ConnectionsPanelTreeLineColor
BackColor = .ToolbarBackgroundColor
txtSearch.BackColor = .SearchBoxBackgroundColor
txtSearch.ForeColor = .SearchBoxTextPromptColor
End With
End Sub
#End Region
#Region "Public Methods"
@@ -532,10 +557,11 @@ Namespace UI
#Region "Private Methods"
Private Sub FillImageList()
Try
Me.imgListTree.Images.Add(My.Resources.Root)
Me.imgListTree.Images.Add(My.Resources.Folder)
Me.imgListTree.Images.Add(My.Resources.Play)
Me.imgListTree.Images.Add(My.Resources.Pause)
imgListTree.Images.Add(Resources.Root)
imgListTree.Images.Add(Resources.Folder)
imgListTree.Images.Add(Resources.Play)
imgListTree.Images.Add(Resources.Pause)
imgListTree.Images.Add(Resources.PuttySessions)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "FillImageList (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
@@ -561,22 +587,21 @@ Namespace UI
Private Sub tvConnections_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvConnections.AfterSelect
Try
Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node)
Case mRemoteNG.Tree.Node.Type.Connection
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, mRemoteNG.Container.Info).ConnectionInfo)
Case mRemoteNG.Tree.Node.Type.Root
Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo)
Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot
Windows.configForm.SetPropertyGridObject(e.Node.Tag)
Case Else
Exit Sub
End Select
Windows.configForm.pGrid_SelectedObjectChanged()
Me.ShowHideTreeContextMenuItems(e.Node)
Windows.sessionsForm.GetSessionsAuto()
ShowHideTreeContextMenuItems(e.Node)
Windows.sessionsForm.GetSessions(True)
App.Runtime.LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "tvConnections_AfterSelect (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
End Try
@@ -588,8 +613,10 @@ Namespace UI
Me.tvConnections.SelectedNode = e.Node
If e.Button = System.Windows.Forms.MouseButtons.Left Then
If My.Settings.SingleClickOnConnectionOpensIt And mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.Connection Then
App.Runtime.OpenConnection()
If Settings.SingleClickOnConnectionOpensIt And _
(mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.PuttySession) Then
OpenConnection()
End If
If My.Settings.SingleClickSwitchesToOpenConnection And mRemoteNG.Tree.Node.GetNodeType(e.Node) = mRemoteNG.Tree.Node.Type.Connection Then
@@ -602,8 +629,9 @@ Namespace UI
End Sub
Private Sub tvConnections_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvConnections.NodeMouseDoubleClick
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Then
App.Runtime.OpenConnection()
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.PuttySession Then
OpenConnection()
End If
End Sub
@@ -631,111 +659,119 @@ Namespace UI
Return False
End Function
Private Sub ShowHideTreeContextMenuItems(ByVal tNode As TreeNode)
Try
Me.cMenTree.Enabled = True
If tNode Is Nothing Then
Exit Sub
Private Sub EnableMenuItemsRecursive(ByVal items As ToolStripItemCollection, Optional ByVal enable As Boolean = True)
Dim menuItem As ToolStripMenuItem
For Each item As ToolStripItem In items
menuItem = TryCast(item, ToolStripMenuItem)
If menuItem Is Nothing Then Continue For
menuItem.Enabled = enable
If menuItem.HasDropDownItems Then
EnableMenuItemsRecursive(menuItem.DropDownItems, enable)
End If
Next
End Sub
Select Case mRemoteNG.Tree.Node.GetNodeType(tNode)
Private Sub ShowHideTreeContextMenuItems(ByVal selectedNode As TreeNode)
If selectedNode Is Nothing Then Return
Try
cMenTree.Enabled = True
EnableMenuItemsRecursive(cMenTree.Items)
Select Case mRemoteNG.Tree.Node.GetNodeType(selectedNode)
Case mRemoteNG.Tree.Node.Type.Connection
Dim conI As mRemoteNG.Connection.Info = tNode.Tag
Dim connectionInfo As mRemoteNG.Connection.Info = selectedNode.Tag
Me.cMenTreeConnect.Enabled = True
Me.cMenTreeConnectWithOptions.Enabled = True
If TryCast(tNode.Tag, mRemoteNG.Connection.Info).OpenConnections.Count > 0 Then
Me.cMenTreeDisconnect.Enabled = True
Else
Me.cMenTreeDisconnect.Enabled = False
If connectionInfo.OpenConnections.Count = 0 Then
cMenTreeDisconnect.Enabled = False
End If
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2 Then
Me.cMenTreeToolsTransferFile.Enabled = True
Else
Me.cMenTreeToolsTransferFile.Enabled = False
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2) Then
cMenTreeToolsTransferFile.Enabled = False
End If
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then
Me.cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = True
Me.cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = True
ElseIf conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
Me.cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = True
Me.cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
Else
Me.cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
Me.cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA) Then
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
End If
Me.cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = True
cMenTreeToolsImportExport.Enabled = False
Case mRemoteNG.Tree.Node.Type.PuttySession
Dim puttySessionInfo As mRemoteNG.Connection.PuttySession.Info = selectedNode.Tag
Me.cMenTreeToolsImportExport.Enabled = False
cMenTreeAddConnection.Enabled = False
cMenTreeAddFolder.Enabled = False
Me.cMenTreeToolsExternalApps.Enabled = True
If puttySessionInfo.OpenConnections.Count = 0 Then
cMenTreeDisconnect.Enabled = False
End If
Me.cMenTreeDuplicate.Enabled = True
Me.cMenTreeDelete.Enabled = True
If Not (puttySessionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH1 Or _
puttySessionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.SSH2) Then
cMenTreeToolsTransferFile.Enabled = False
End If
Me.cMenTreeMoveUp.Enabled = True
Me.cMenTreeMoveDown.Enabled = True
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeToolsImportExport.Enabled = False
cMenTreeToolsSort.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeRename.Enabled = False
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case mRemoteNG.Tree.Node.Type.Container
Me.cMenTreeConnect.Enabled = True
Me.cMenTreeConnectWithOptions.Enabled = True
Me.cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
Me.cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
Me.cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = True
Me.cMenTreeDisconnect.Enabled = False
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeDisconnect.Enabled = False
For Each n As TreeNode In tNode.Nodes
If TypeOf n.Tag Is mRemoteNG.Connection.Info Then
Dim cI As mRemoteNG.Connection.Info = n.Tag
If cI.OpenConnections.Count > 0 Then
Me.cMenTreeDisconnect.Enabled = True
Exit For
End If
Dim openConnections As Integer = 0
Dim connectionInfo As mRemoteNG.Connection.Info
For Each node As TreeNode In selectedNode.Nodes
If TypeOf node.Tag Is mRemoteNG.Connection.Info Then
connectionInfo = node.Tag
openConnections = openConnections + connectionInfo.OpenConnections.Count
End If
Next
If openConnections = 0 Then
cMenTreeDisconnect.Enabled = False
End If
Me.cMenTreeToolsTransferFile.Enabled = False
Me.cMenTreeToolsImportExport.Enabled = True
Me.cMenTreeToolsImportExportExportmRemoteXML.Enabled = True
Me.cMenTreeToolsImportExportImportFromAD.Enabled = True
Me.cMenTreeToolsImportExportImportmRemoteXML.Enabled = True
Me.cMenTreeToolsExternalApps.Enabled = False
Me.cMenTreeDuplicate.Enabled = True
Me.cMenTreeDelete.Enabled = True
Me.cMenTreeMoveUp.Enabled = True
Me.cMenTreeMoveDown.Enabled = True
cMenTreeToolsTransferFile.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
Case mRemoteNG.Tree.Node.Type.Root
Me.cMenTreeConnect.Enabled = False
Me.cMenTreeConnectWithOptions.Enabled = False
Me.cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
Me.cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
Me.cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = False
Me.cMenTreeDisconnect.Enabled = False
Me.cMenTreeToolsTransferFile.Enabled = False
Me.cMenTreeToolsImportExport.Enabled = True
Me.cMenTreeToolsImportExportExportmRemoteXML.Enabled = True
Me.cMenTreeToolsImportExportImportFromAD.Enabled = True
Me.cMenTreeToolsImportExportImportmRemoteXML.Enabled = True
Me.cMenTreeToolsExternalApps.Enabled = False
Me.cMenTreeDuplicate.Enabled = False
Me.cMenTreeDelete.Enabled = False
Me.cMenTreeMoveUp.Enabled = False
Me.cMenTreeMoveDown.Enabled = False
cMenTreeConnect.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeConnectWithOptionsConnectInFullscreen.Enabled = False
cMenTreeConnectWithOptionsConnectToConsoleSession.Enabled = False
cMenTreeConnectWithOptionsChoosePanelBeforeConnecting.Enabled = False
cMenTreeDisconnect.Enabled = False
cMenTreeToolsTransferFile.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case mRemoteNG.Tree.Node.Type.PuttyRoot
cMenTreeAddConnection.Enabled = False
cMenTreeAddFolder.Enabled = False
cMenTreeConnect.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeDisconnect.Enabled = False
cMenTreeToolsTransferFile.Enabled = False
cMenTreeConnectWithOptions.Enabled = False
cMenTreeToolsImportExport.Enabled = False
cMenTreeToolsSort.Enabled = False
cMenTreeToolsExternalApps.Enabled = False
cMenTreeDuplicate.Enabled = False
cMenTreeRename.Enabled = False
cMenTreeDelete.Enabled = False
cMenTreeMoveUp.Enabled = False
cMenTreeMoveDown.Enabled = False
Case Else
Me.cMenTree.Enabled = False
cMenTree.Enabled = False
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ShowHideTreeContextMenuItems (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
@@ -836,26 +872,23 @@ Namespace UI
Dim pt As Point = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y))
Dim targetNode As TreeNode = selectedTreeview.GetNodeAt(pt)
'See if the targetNode is currently selected,
'if so no need to validate again
If Not (selectedTreeview.SelectedNode Is targetNode) Then
'Select the node currently under the cursor
selectedTreeview.SelectedNode = targetNode
'Select the node currently under the cursor
selectedTreeview.SelectedNode = targetNode
'Check that the selected node is not the dropNode and
'also that it is not a child of the dropNode and
'therefore an invalid target
Dim dropNode As TreeNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode)
'Check that the selected node is not the dropNode and
'also that it is not a child of the dropNode and
'therefore an invalid target
Dim dropNode As TreeNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode)
Do Until targetNode Is Nothing
If targetNode Is dropNode Then
e.Effect = DragDropEffects.None
Exit Sub
End If
targetNode = targetNode.Parent
Loop
End If
Dim puttyRootInfo As Root.PuttySessions.Info
Do Until targetNode Is Nothing
puttyRootInfo = TryCast(targetNode.Tag, Root.PuttySessions.Info)
If puttyRootInfo IsNot Nothing Or targetNode Is dropNode Then
e.Effect = DragDropEffects.None
Return
End If
targetNode = targetNode.Parent
Loop
'Currently selected node is a suitable target
e.Effect = DragDropEffects.Move
@@ -866,6 +899,17 @@ Namespace UI
Private Sub tvConnections_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles tvConnections.ItemDrag
Try
Dim dragTreeNode As TreeNode = TryCast(e.Item, TreeNode)
If dragTreeNode Is Nothing Then Return
If dragTreeNode.Tag Is Nothing Then Return
If TypeOf dragTreeNode.Tag Is mRemoteNG.Connection.PuttySession.Info Or _
Not (TypeOf dragTreeNode.Tag Is mRemoteNG.Connection.Info Or _
TypeOf dragTreeNode.Tag Is Container.Info) Then
tvConnections.SelectedNode = dragTreeNode
Return
End If
'Set the drag node and initiate the DragDrop
DoDragDrop(e.Item, DragDropEffects.Move)
Catch ex As Exception
@@ -933,24 +977,24 @@ Namespace UI
Me.ImportFromPortScan()
End Sub
Private Sub mMenSortAscending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenSortAscending.Click
Me.tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(Me.tvConnections.Nodes.Item(0), Tools.Controls.TreeNodeSorter.SortType.Ascending)
Me.tvConnections.EndUpdate()
Private Sub mMenSortAscending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles mMenSortAscending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.Nodes.Item(0), System.Windows.Forms.SortOrder.Ascending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
Private Sub cMenTreeToolsSortAscending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenTreeToolsSortAscending.Click
Me.tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(Me.tvConnections.SelectedNode, Tools.Controls.TreeNodeSorter.SortType.Ascending)
Me.tvConnections.EndUpdate()
Private Sub cMenTreeToolsSortAscending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsSortAscending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.SelectedNode, System.Windows.Forms.SortOrder.Ascending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
Private Sub cMenTreeToolsSortDescending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenTreeToolsSortDescending.Click
Me.tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(Me.tvConnections.SelectedNode, Tools.Controls.TreeNodeSorter.SortType.Descending)
Me.tvConnections.EndUpdate()
Private Sub cMenTreeToolsSortDescending_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles cMenTreeToolsSortDescending.Click
tvConnections.BeginUpdate()
mRemoteNG.Tree.Node.Sort(tvConnections.SelectedNode, System.Windows.Forms.SortOrder.Descending)
tvConnections.EndUpdate()
SaveConnectionsBG()
End Sub
@@ -1004,7 +1048,7 @@ Namespace UI
containerNode = containerNode.Parent
End If
Dim newConnectionInfo As New Info()
Dim newConnectionInfo As New mRemoteNG.Connection.Info()
If mRemoteNG.Tree.Node.GetNodeType(containerNode) = mRemoteNG.Tree.Node.Type.Root Then
newConnectionInfo.Inherit.TurnOffInheritanceCompletely()
Else
@@ -1043,7 +1087,8 @@ Namespace UI
End If
End If
newContainerInfo.ConnectionInfo = New Info(newContainerInfo)
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
@@ -1138,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
@@ -1178,7 +1223,8 @@ Namespace UI
Private Sub StartExternalApp(ByVal ExtA As Tools.ExternalTool)
Try
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Then
If mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.Connection Or _
mRemoteNG.Tree.Node.GetNodeType(mRemoteNG.Tree.Node.SelectedNode) = mRemoteNG.Tree.Node.Type.PuttySession Then
ExtA.Start(mRemoteNG.Tree.Node.SelectedNode.Tag)
End If
Catch ex As Exception
@@ -1201,6 +1247,20 @@ Namespace UI
#End Region
#Region "Search"
Private Sub txtSearch_GotFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtSearch.GotFocus
txtSearch.ForeColor = Themes.ThemeManager.ActiveTheme.SearchBoxTextColor
If txtSearch.Text = Language.strSearchPrompt Then
txtSearch.Text = ""
End If
End Sub
Private Sub txtSearch_LostFocus(ByVal sender As Object, ByVal e As EventArgs) Handles txtSearch.LostFocus
If txtSearch.Text = "" Then
txtSearch.ForeColor = Themes.ThemeManager.ActiveTheme.SearchBoxTextPromptColor
txtSearch.Text = Language.strSearchPrompt
End If
End Sub
Private Sub txtSearch_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtSearch.KeyDown
Try
If e.KeyCode = Keys.Escape Then

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

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