Compare commits

..

188 Commits

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

Conflicts:
	CHANGELOG.TXT
2013-02-27 14:41:53 -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
b735e6d3e4 Fix tabs not closing on double-click when the active tab is a PuTTY connection.
(cherry picked from commit 960ecba12a)

Conflicts:
	CHANGELOG.TXT
2013-02-27 14:15:20 -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
d2459de700 Fix issue MR-344 - Move "Always show panel tabs" option 2013-02-26 15:16:00 -06:00
Riley McArdle
f9f265b409 Fix issue MR-340 - Object reference not set to an instance of an object. 2013-02-26 15:08:55 -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
fb68ed099e Update CHANGELOG.TXT for release of 1.70 Release Candidate 2. 2013-02-25 18:33:34 -06:00
Riley McArdle
01133b3d9f Fix issue MR-338 - PuTTYNG crashing on fresh install of mRemoteNG 2013-02-25 18:32:54 -06:00
Riley McArdle
52461b758b Revert "Fixed issue MR-229 - Integrated PuTTY doesn't work in Windows 8 RP"
This reverts commit c29c5015d5.
2013-02-25 18:32:07 -06:00
Riley McArdle
3bc5ceede4 Fix issue MR-332 - Can't select different tab with one click after disconnecting existing tab
(cherry picked from commit 73f71050a0)

Conflicts:
	CHANGELOG.TXT
2013-02-25 18:16:22 -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
7c3a349bd6 Fix typo in CHANGELOG.TXT. 2013-02-23 21:02:13 -06:00
Riley McArdle
84d3f7d30b Fixed KiTTY opening in a separate window when using a saved session. 2013-02-22 19:38:43 -06:00
Riley McArdle
c29c5015d5 Fixed issue MR-229 - Integrated PuTTY doesn't work in Windows 8 RP
Fixed issue MR-264 - Windows 8 support
2013-02-21 23:58:04 -06:00
Riley McArdle
1f776fb9bf Add timeout to WaitForInputIdle in Connection.Protocol.PuttyBase.Connect(). 2013-02-21 23:54:29 -06:00
Riley McArdle
f90eb94484 Fix issue MR-322 - Connection Button not listing servers 2013-02-21 22:23:58 -06:00
Riley McArdle
80f35cea71 Refactor Security.Crypt.Decrypt(). 2013-02-21 21:08:19 -06:00
Riley McArdle
a12978967a Change "Fix" to "Fixed" in CHANGELOG.TXT. 2013-02-21 19:46:50 -06:00
Riley McArdle
8cce811ce5 Fixed "Decryption failed. Padding is invalid and cannot be removed." notification. 2013-02-21 19:46:12 -06:00
Riley McArdle
adb45cec98 Change PuttyBase.Connect() to use MaxPuttyWaitTime setting instead of hard coded value. 2013-02-19 20:30:42 -06:00
Riley McArdle
c09ea26a3c Fix issue MR-183 - Error trying to save connections when using SQL - Invalid column name _parentConstantId 2013-02-19 19:51:20 -06:00
Riley McArdle
d71bf494df Fix issue MR-317 - Difficulty right-clicking on Tab
Fix issue MR-318 - Wrong tab gets selected when tab names overflow on the tab bar
2013-02-19 17:25:36 -06:00
Riley McArdle
e82a9c5228 Fix issue MR-225 - Tabs do not open in a panel until multiple panels are displayed.
Fix issue MR-321 - New connection panel doesn't get panel header if its the only one or is moved
Added option to always show panel tabs
2013-02-19 15:36:30 -06:00
Riley McArdle
a7d976a0a7 Update CHANGELOG.TXT for release of 1.70 Beta 2. 2013-02-18 13:34:08 -06:00
Riley McArdle
d09727a9cd Fix program exiting immediately and possible NullReferenceException in frmMain_FormClosing. 2013-02-18 13:28:47 -06:00
Riley McArdle
30c3b0111d Split 1.70 Beta 1 and 1.70 Beta 2 changes in CHANGELOG.TXT. 2013-02-18 13:14:40 -06:00
Riley McArdle
4ea588d897 Fix issue MR-175 - Problem with focus when 2 or more PuTTY sessions opened
Fix issue MR-190 - Can't click on tab/session
Fix issue MR-224 - Session tabs become un-clickable after duplicating a tab or opening a new one in the same panel
2013-02-17 18:47:28 -06:00
Riley McArdle
f7dfe0ecd0 Fix issue MR-235 - Config file gets corrupted when leaving the password entry box with ESC 2013-02-17 17:50:51 -06:00
Riley McArdle
323b3fb6de Fix installer not detecting some installs of .NET Framework 3.0. 2013-02-17 16:43:00 -06:00
Riley McArdle
e6f1c947be Fix issue MR-174 - Trailing Space on a Hostname/IP will cause the connection not to happen. 2013-02-17 16:00:10 -06:00
Riley McArdle
a01663d2ca Fix .NET Framework 3.0 detection in installer. 2013-02-15 22:53:35 -06:00
Riley McArdle
936f2e6655 Fix MR-313 - PuTTY window not maximized when loading from saved session 2013-02-15 21:54:48 -06:00
Riley McArdle
67a6d60c62 Updated translations with data from Crowdin.
Added translations for Spanish (Argentina), Italian, Portuguese, Chinese (Simplified).
2013-02-15 20:44:21 -06:00
Riley McArdle
85e6797c4f Update copyright year in installer. 2013-02-15 20:12:57 -06:00
Riley McArdle
22322bc3ba Change ConDefaultUseCredSsp to be a User scoped setting instead of Application scoped. 2013-02-15 20:12:37 -06:00
Riley McArdle
b4a3b14334 Fix issue MR-85 - Microsoft .NET Framework warning
Fix issue MR-86 - Citrix GDI+ Error when screen is locked
Fix issue MR-299 - mRemoteNG crashes while using remotely (Windows XP remote desktop)
Change target .NET Framework to 3.0 instead of 2.0
2013-02-15 20:11:03 -06:00
Riley McArdle
a3ac44af55 Fix issue MR-165 - Can't close About window if it is the last tab 2013-02-15 17:09:24 -06:00
Riley McArdle
d773f78ff5 Fix issue MR-47 - Silent Installation Prompts for Language
(cherry picked from commit 8e967a983aded875a97c3e9eeab2837cab00edb4)
2013-02-15 15:37:02 -06:00
Riley McArdle
76ee48269b Improve LoadFromXML to handle files from older versions of mRemoteNG that may have set ConfVersion incorrectly. 2013-02-15 15:32:00 -06:00
Riley McArdle
35f442bad6 Fix issue MR-233 - Backslash at end of password prevents success of putty invocation and corresponding auto-logon 2013-02-15 14:10:55 -06:00
Riley McArdle
43c001b4ba Rename UI.Window.Export.vb. 2013-02-14 20:57:16 -06:00
Riley McArdle
182b097902 Fix issue MR-196 - Cannot export list without usernames and passwords 2013-02-14 20:56:09 -06:00
Riley McArdle
f841f4b41c Fix issue MR-81 - Problem Duplicating Folder w/ Sub-Folders 2013-02-14 15:20:08 -06:00
Riley McArdle
67d07e5f0f Fix issue MR-58 - Bug when duplicating connection in connection view 2013-02-14 14:37:43 -06:00
Riley McArdle
6d15e3649e Fix issue MR-71 - Minimizing mRemoteNG causes temporary re-size of Putty sessions (windows)
Fix issue MR-199 - when using screen inside putty, screen becomes dead when reduce mremoteNG
Fix issue MR-284 - SSH: Text not showing properly
2013-02-14 14:12:48 -06:00
Riley McArdle
4fab4d91d5 Fix typing certain characters in the Config pane. 2013-02-14 12:45:10 -06:00
Riley McArdle
61b70047c6 Fix issue MR-214 - Hostname/IP reset 2013-02-14 12:35:11 -06:00
Riley McArdle
8c3cdc39fb Fix issue MR-96 - When pressing SHIFT+F4 to create a new connection inside a folder, the new connections doesn't inherit any properties from its parent
Fix issue MR-166 - Inheritance button is disabled on some connections
2013-02-12 22:11:14 -06:00
Riley McArdle
a871074845 Fix MR-178 - 3 different panels crashes all connections 2013-02-12 21:31:22 -06:00
Riley McArdle
155bc07466 Fix issue MR-54 - Error When disconnecting from SSL channel RDP 2013-02-12 21:25:11 -06:00
Riley McArdle
d32699008c Add MR-80 to CHANGELOG.TXT. Fixed along with MR-181. 2013-02-12 21:09:17 -06:00
Riley McArdle
28a8a3debd Fix issue MR-202 - The Connection "Tab" show Ampersands as underscores. 2013-02-12 21:05:50 -06:00
Riley McArdle
da50517113 Fix issue MR-101 - Collapse all folders causes a NullReferenceException 2013-02-12 21:01:49 -06:00
Riley McArdle
3079b45ab1 Fix issue MR-176 - Del key while editing connection name triggers 'Delete Connection' 2013-02-12 20:54:58 -06:00
Riley McArdle
62edfd2c50 Improved the use of Tab and Shift-Tab to cycle through entries in the Config grid. 2013-02-12 19:23:17 -06:00
Riley McArdle
becf48f347 Fix MR-167 Name and description of properties not show in inheritance list
Fix MR-171 Inherit configuration not showing friendly names for each inherit component
2013-02-12 16:44:43 -06:00
Riley McArdle
568170d525 Change default for "Check proper installation of components at startup" to false. 2013-02-12 15:41:10 -06:00
Riley McArdle
d853303bc6 encrypt RDGateway password when saving to SQL
(cherry picked from commit 0f136187a5)

Conflicts:
	mRemoteV1/Config/Config.Connections.Save.vb
2013-02-12 15:27:30 -06:00
Riley McArdle
5462242c39 Fix compiler warning about unused variable toolStrip. 2013-02-12 15:22:56 -06:00
Riley McArdle
cfa935df11 Fix RDGatewayPassword is unencrypted in confCons.xml file
(cherry picked from commit 5a97032f29)

Conflicts:
	mRemoteV1/Config/Config.Connections.Save.vb
2013-02-12 15:22:26 -06:00
Riley McArdle
818708dfb4 Fix issue MR-181 - Sessions on startup
Thanks to tbstudee
fa18d10f4a
2013-02-12 15:09:03 -06:00
Riley McArdle
3d26a1a028 Update copyright year. 2013-02-12 14:57:00 -06:00
Riley McArdle
5dcfb272d9 Remove default domain from UI.Window.ADImport.vb. 2013-02-12 12:39:26 -06:00
Riley McArdle
c634b0ccbc Remove line from CHANGELOG.TXT as it is a fix for a bug introduced in 1.70 Beta 1 and is not a change from 1.69. 2013-02-07 21:55:09 -06:00
Riley McArdle
c957be8774 Improve readability of new error checking in App.Runtime.Startup.CheckCompatibility(). 2013-02-07 21:53:40 -06:00
Riley McArdle
513356506b Improve error handling in UI.Window.Config.AddToolStripItems(). 2013-02-07 21:47:14 -06:00
Riley McArdle
f7754d2371 Fix issue MR-68 - Config Window Loses Options
Fix issue MR-277 - Inheritance configuration button not appear in configuration tab
2013-02-07 21:24:26 -06:00
Riley McArdle
aa9a642ade Fix issue MR-264 - Windows 8 support 2013-02-07 16:55:32 -06:00
Riley McArdle
7868b7e76b Add error checking to App.Runtime.Startup.CheckCompatibility() to fix issue MR-306 - Fatal .NET exception on program start. 2013-02-07 16:37:37 -06:00
112 changed files with 20461 additions and 3490 deletions

View File

@@ -2,13 +2,13 @@
setlocal enabledelayedexpansion
set VERSIONTAG=
set VERSIONTAG=Beta4
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"
@@ -25,7 +25,49 @@ 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\en-US\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\es\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\es-AR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\fr\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\it\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\nb-NO\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\nl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pt\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\pt-BR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\ru\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\uk\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\zh-CN\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release\AxInterop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release\AxInterop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.ShDocVw.dll" ^
"%~dp0\mRemoteV1\bin\Release\Interop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release\mRemoteNG.exe" ^
"%~dp0\mRemoteV1\bin\Release Portable\de\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\en-US\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\es\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\es-AR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\fr\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\it\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\nb-NO\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\nl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pl\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pt\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\pt-BR\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\ru\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\uk\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\zh-CN\mRemoteNG.resources.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.MSTSCLib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.ShDocVw.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\Interop.WFICALib.dll" ^
"%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe" ^
mkdir "%~dp0\Release" > nul 2>&1

View File

@@ -1,12 +1,160 @@
1.70 (XXXX-XX-XX):
Fix issue MR-77 - VerifyDatabaseVersion (Config.Connections.Save) failed. Version string portion was too short or too long.
Fix issue MR-78 - Renaming Connections
Fix issue MR-79 - MoveUp/Down item doesn't work + Sort button broken
Fix issue MR-93 - Regional settings problem when using SQL connection in mRemoteNG
Fix issue MR-97 - Integrate Dutch translation
Fix issue MR-98 - Integrate Russian and Ukranian translations
Fix issue MR-99 - Integrate Spanish translation
Fix issue MR-131 - RD Gateway does not respect setting for use different credentials
1.71 Beta 5 (2013-06-09):
Fixed issue MR-491 - Could not start RDP Connection
Fixed issue MR-499 - TS Gateway is not working in latest release 1.71
Fixed typo in SQL queries.
1.71 Beta 4 (2013-05-28):
Added feature MR-435 - Add digital signature check to updater
Fixed issue MR-255 - The version of the RDP AX client should be updated to 7
Fixed issue MR-392 - Sessions Panel - context menu entries need to be context aware
Fixed issue MR-422 - Gives error Object reference not set to an instance of an object.
Fixed issue MR-424 - Import of a few Linux SSH2 hosts discovered via the port scan tool results in a UE
Fixed issue MR-439 - MRemoteNG 1.70 does not start
Fixed issue MR-440 - RDP import with non-standard port
Fixed issue MR-443 - Instructions for eolwtscom.dll registration for Portable version are inaccurate
Fixed issue MR-446 - Putty saved sessions show in connection panel
Fixed issue MR-459 - Maximized -> Minimized -> Restored results in mangled active display
Fixed issue MR-463 - Add support for LoadBalanceInfo to RDP
Fixed issue MR-470 - Quick Connect to Linux server uses invalid credentials
Fixed issue MR-471 - PuTTY Saved Sessions disappears from connection list
Fixed issue MR-487 - Initiate connections on MouseUp event
Added PuTTY Session Settings command to the Config panel for PuTTY Saved Sessions.
Updated translations.
Added Norwegian (Bokmål) and Portuguese (Brazil) translations.
Added Spanish translation to the installer.
Fixed an exception or crash when choosing unnamed colors for themes.
Fixed possible error "Control does not support transparent background colors" when modifying themes.
Fixed changes to the active theme not being saved reliably.
Fixed handling of the plus (+) character in PuTTY session names.
Changed Internet Explorer to no longer force IE7 compatibility mode.
Changed the "Launch PuTTY" button in the "Options" dialog to open PuTTY from the path the user has currently set, instead of what was previously saved.
Improved update and announcement checking.
Improved the PuTTY Saved Sessions list to update automatically when any changes are made.
Improved loading time of large connection files.
Lowered required version of RDC from 6.1 to 6.0.
Updated VncSharpNG to 1.3.4896.25007.
1.71 Beta 3 (2013-03-20):
Fixed issue MR-397 - Putty disappears from the screen
Fixed issue MR-398 - Full Screen mode doesn't correctly make use of available space
Fixed issue MR-402 - scrollbar touch moves putty window
Fixed issue MR-406 - Items disappear from External Tools toolbar when accessing External Tools panel
Fixed issue MR-410 - Unhandled exception when clicking New button under Theme
Fixed issue MR-413 - Can't use aplication
Fixed new connections having a globe icon.
Fixed the category names in the themes tab of the options dialog on Windows XP not showing correctly.
Fixed PuTTY saved sessions with spaces or special characters not being listed.
1.71 Beta 2 (2013-03-19):
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.
Fixed issue MR-344 - Move "Always show panel tabs" option
Fixed issue MR-350 - VerifyDatabaseVersion (Config.Connections.Save) failed. Version string portion was too short or too long.
Fixed issue MR-355 - Moving sub folders to top level causes property loss
Fixed tabs not closing on double-click when the active tab is a PuTTY connection.
1.70 Release Candidate 2 (2013-02-25):
Fixed issue MR-332 - Can't select different tab with one click after disconnecting existing tab
Fixed issue MR-338 - PuTTYNG crashing on fresh install of mRemoteNG
Re-enabled PuTTYNG integration enhancements on Windows 8
1.70 Release Candidate 1 (2013-02-22):
Fixed issue MR-183 - Error trying to save connections when using SQL - Invalid column name _parentConstantId
Fixed issue MR-225 - Tabs do not open in a panel until multiple panels are displayed.
Fixed issue MR-229 - Integrated PuTTY doesn't work in Windows 8 RP
Fixed issue MR-264 - Windows 8 support
Fixed issue MR-317 - Difficulty right-clicking on Tab
Fixed issue MR-318 - Wrong tab gets selected when tab names overflow on the tab bar
Fixed issue MR-321 - New connection panel doesn't get panel header if its the only one or is moved
Fixed issue MR-322 - Connection Button not listing servers
Added option to always show panel tabs.
Fixed "Decryption failed. Padding is invalid and cannot be removed." notification.
Fixed KiTTY opening in a separate window when using a saved session.
1.70 Beta 2 (2013-02-18):
Fixed issue MR-47 - Silent Installation Prompts for Language
Fixed issue MR-54 - Error When disconnecting from SSL channel RDP
Fixed issue MR-58 - Bug when duplicating connection in connection view
Fixed issue MR-68 - Config Window Loses Options
Fixed issue MR-71 - Minimizing mRemoteNG causes temporary re-size of Putty sessions (windows)
Fixed issue MR-80 - Reconnect previous sessions
Fixed issue MR-81 - Problem Duplicating Folder w/ Sub-Folders
Fixed issue MR-85 - Microsoft .NET Framework warning
Fixed issue MR-86 - Citrix GDI+ Error when screen is locked
Fixed issue MR-96 - When pressing SHIFT+F4 to create a new connection inside a folder, the new connections doesn't inherit any properties from its parent
Fixed issue MR-101 - Collapse all folders causes a NullReferenceException
Fixed issue MR-165 - Can't close About window if it is the last tab
Fixed issue MR-166 - Inheritance button is disabled on some connections
Fixed issue MR-167 - Name and description of properties not show in inheritance list
Fixed issue MR-171 - Inherit configuration not showing friendly names for each inherit component
Fixed issue MR-172 - RDGatewayPassword is unencrypted in confCons.xml file
Fixed issue MR-174 - Trailing Space on a Hostname/IP will cause the connection not to happen.
Fixed issue MR-175 - Problem with focus when 2 or more PuTTY sessions opened
Fixed issue MR-176 - Del key while editing connection name triggers 'Delete Connection'
Fixed issue MR-178 - 3 different panels crashes all connections
Fixed issue MR-181 - Sessions on startup
Fixed issue MR-190 - Can't click on tab/session
Fixed issue MR-196 - Cannot export list without usernames and passwords
Fixed issue MR-199 - when using screen inside putty, screen becomes dead when reduce mremoteNG
Fixed issue MR-202 - The Connection "Tab" show Ampersands as underscores.
Fixed issue MR-214 - Hostname/IP reset
Fixed issue MR-224 - Session tabs become un-clickable after duplicating a tab or opening a new one in the same panel
Fixed issue MR-233 - Backslash at end of password prevents success of putty invocation and corresponding auto-logon
Fixed issue MR-235 - Config file gets corrupted when leaving the password entry box with ESC
Fixed issue MR-264 - Windows 8 support
Fixed issue MR-277 - Inheritance configuration button not appear in configuration tab
Fixed issue MR-284 - SSH: Text not showing properly
Fixed issue MR-299 - mRemoteNG crashes while using remotely (Windows XP remote desktop)
Fixed issue MR-306 - Fatal .NET exception on program start
Fixed issue MR-313 - PuTTY window not maximized when loading from saved session
mRemoteNG now requires .NET Framework 3.0 instead of 2.0.
Updated translations.
Added translations for Spanish (Argentina), Italian, Polish, Portuguese, Chinese (Simplified).
Improved the use of Tab and Shift-Tab to cycle through entries in the Config grid.
Improved loading of XML files from older versions of mRemote/mRemoteNG.
1.70 Beta 1 (2012-02-27):
Fixed issue MR-77 - VerifyDatabaseVersion (Config.Connections.Save) failed. Version string portion was too short or too long.
Fixed issue MR-78 - Renaming Connections
Fixed issue MR-79 - MoveUp/Down item doesn't work + Sort button broken
Fixed issue MR-93 - Regional settings problem when using SQL connection in mRemoteNG
Fixed issue MR-97 - Integrate Dutch translation
Fixed issue MR-98 - Integrate Russian and Ukranian translations
Fixed issue MR-99 - Integrate Spanish translation
Fixed issue MR-131 - RD Gateway does not respect setting for use different credentials
Added compatibility check for "Use FIPS compliant algorithms" security setting.
Improved reporting of errors when encrypting and decrypting connection files.
Added partial Polish translation.

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
====================
@@ -21,6 +30,11 @@ Copyright
MIT License
http://www.codeproject.com/KB/recipes/command_line.aspx
DotNetVer
Copyright <20> 2010 David Grinberg
Copyright <20> 2010-2011 Brandon Hansen
http://nsis.sourceforge.net/DotNetVer
Included Components
===================

Binary file not shown.

Binary file not shown.

296
Installer/DotNetVer.nsh Normal file
View File

@@ -0,0 +1,296 @@
; ---------------------
; DotNetVer.nsh
; Written by: David Grinberg
; Homepage: http://ontheperiphery.veraida.com/
; Updated By: Brandon Hansen (http://www.remotehams.com/)
; ---------------------
;
; LogicLib extensions for checking Microsoft .NET Framework versions and service packs.
;
; Latests Updates by Brandon Hansen, KG6YPI (RemoteHams.com)
; Dec 26, 2011 - .NET Framework 4.0 detection fixes - client profile not being found
; Dec 07, 2010 - .NET Framework 4.0 detection added by Brandon Hansen (KG6YPI)
;
; Usage examples:
;
; ${If} ${HasDotNet4.0}
; DetailPrint "Microsoft .NET Framework 4.0 installed."
; ${If} ${DOTNETVER_4_0} AtLeastDotNetServicePack 1
; DetailPrint "Microsoft .NET Framework 4.0 is at least SP1."
; ${Else}
; DetailPrint "Microsoft .NET Framework 4.0 SP1 not installed."
; ${EndIf}
; ${If} ${DOTNETVER_4_0} HasDotNetClientProfile 1
; DetailPrint "Microsoft .NET Framework 4.0 (Client Profile) available."
; ${EndIf}
; ${If} ${DOTNETVER_4_0} HasDotNetFullProfile 1
; DetailPrint "Microsoft .NET Framework 4.0 (Full Profile) available."
; ${EndIf}
; ${If} ${DOTNETVER_4_0} HasDotNetFullProfile 0
; DetailPrint "Microsoft .NET Framework 4.0 (Full Profile) not available."
; ${EndIf}
; ${EndIf}
!verbose push
!verbose 3
!ifndef ___DOTNETVER__NSH___
!define ___DOTNETVER__NSH___
!include LogicLib.nsh
!include Util.nsh
# constants
!define DOTNETVER_1_0 "1.0"
!define DOTNETVER_1_1 "1.1"
!define DOTNETVER_2_0 "2.0"
!define DOTNETVER_3_0 "3.0"
!define DOTNETVER_3_5 "3.5"
!define DOTNETVER_4_0 "4.0"
# variable declaration
Var /GLOBAL __DONTNET_FOUNDVER
!macro __DotNetVer_DeclareVars
!ifndef __DOTNETVER_VARS_DECLARED
!define __DOTNETVER_VARS_DECLARED
Var /GLOBAL __DOTNET_1.0
Var /GLOBAL __DOTNET_1.1
Var /GLOBAL __DOTNET_2.0
Var /GLOBAL __DOTNET_3.0
Var /GLOBAL __DOTNET_3.5
Var /GLOBAL __DOTNET_4.0
Var /GLOBAL __DOTNETVER_1.0_SP
Var /GLOBAL __DOTNETVER_1.1_SP
Var /GLOBAL __DOTNETVER_2.0_SP
Var /GLOBAL __DOTNETVER_3.0_SP
Var /GLOBAL __DOTNETVER_3.5_SP
Var /GLOBAL __DOTNETVER_4.0_SP
Var /GLOBAL __DOTNET_1.0_CLIENT
Var /GLOBAL __DOTNET_1.1_CLIENT
Var /GLOBAL __DOTNET_2.0_CLIENT
Var /GLOBAL __DOTNET_3.0_CLIENT
Var /GLOBAL __DOTNET_3.5_CLIENT
Var /GLOBAL __DOTNET_4.0_CLIENT
Var /GLOBAL __DOTNET_1.0_FULL
Var /GLOBAL __DOTNET_1.1_FULL
Var /GLOBAL __DOTNET_2.0_FULL
Var /GLOBAL __DOTNET_3.0_FULL
Var /GLOBAL __DOTNET_3.5_FULL
Var /GLOBAL __DOTNET_4.0_FULL
StrCpy $__DOTNET_1.0 0
StrCpy $__DOTNET_1.1 0
StrCpy $__DOTNET_2.0 0
StrCpy $__DOTNET_3.0 0
StrCpy $__DOTNET_3.5 0
StrCpy $__DOTNET_4.0 0
StrCpy $__DOTNETVER_1.0_SP 0
StrCpy $__DOTNETVER_1.1_SP 0
StrCpy $__DOTNETVER_2.0_SP 0
StrCpy $__DOTNETVER_3.0_SP 0
StrCpy $__DOTNETVER_3.5_SP 0
StrCpy $__DOTNETVER_4.0_SP 0
StrCpy $__DOTNET_1.0_CLIENT 0
StrCpy $__DOTNET_1.1_CLIENT 0
StrCpy $__DOTNET_2.0_CLIENT 0
StrCpy $__DOTNET_3.0_CLIENT 0
StrCpy $__DOTNET_3.5_CLIENT 0
StrCpy $__DOTNET_4.0_CLIENT 0
StrCpy $__DOTNET_1.0_FULL 0
StrCpy $__DOTNET_1.1_FULL 0
StrCpy $__DOTNET_2.0_FULL 0
StrCpy $__DOTNET_3.0_FULL 0
StrCpy $__DOTNET_3.5_FULL 0
StrCpy $__DOTNET_4.0_FULL 0
!endif
!macroend
# lazy initialization macro
!macro __DotNetVer_InitVars
# only calculate version once
StrCmp $__DONTNET_FOUNDVER "" dotnetver.noveryet
Return
dotnetver.noveryet:
!insertmacro __DotNetVer_DeclareVars
Push $0 ;registry count
Push $1 ;registry key
Push $2 ;version number
Push $3 ;installed
Push $4 ;service pack number
Push $8 ;strLen helper var
StrCpy $0 0
dotnetver.startenum:
EnumRegKey $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP" $0
StrCmp $1 "" dotnetver.done
IntOp $0 $0 + 1
StrCpy $2 $1 1 0
StrCmp $2 "v" +1 dotnetver.startenum
StrCpy $2 $1 3 1
; Check for .NET 1.0 to 3.5
ReadRegDWORD $3 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\$1" "Install"
ReadRegDWORD $4 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\$1" "SP"
IntCmp $3 1 dotnetcheck.skipalt
; Alternate check for versions that don't set the Install key
ReadRegDWORD $3 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\$1\Setup" "InstallSuccess"
dotnetcheck.skipalt:
; This is a sanity check that works on .NET 1.0 to 3.5
; if it fails check for dotnet 4
IntCmp $3 0 dotnetcheck.40
StrCmp $2 ${DOTNETVER_1_0} dotnetver.10
StrCmp $2 ${DOTNETVER_1_1} dotnetver.11
StrCmp $2 ${DOTNETVER_2_0} dotnetver.20
StrCmp $2 ${DOTNETVER_3_0} dotnetver.30
StrCmp $2 ${DOTNETVER_3_5} dotnetver.35
dotnetcheck.40:
StrCmp $2 ${DOTNETVER_4_0} dotnetver.40
StrCmp $2 "4" dotnetver.40
Goto dotnetver.startenum
dotnetver.10:
StrCpy $__DOTNET_1.0 1
StrCpy $__DOTNETVER_1.0_SP $4
StrCpy $__DOTNET_1.0_FULL 1
Goto dotnetver.startenum
dotnetver.11:
StrCpy $__DOTNET_1.1 1
StrCpy $__DOTNETVER_1.1_SP $4
StrCpy $__DOTNET_1.1_FULL 1
Goto dotnetver.startenum
dotnetver.20:
StrCpy $__DOTNET_2.0 1
StrCpy $__DOTNETVER_2.0_SP $4
StrCpy $__DOTNET_2.0_FULL 1
Goto dotnetver.startenum
dotnetver.30:
StrCpy $__DOTNET_3.0 1
StrCpy $__DOTNETVER_3.0_SP $4
StrCpy $__DOTNET_3.0_FULL 1
Goto dotnetver.startenum
dotnetver.35:
StrCpy $__DOTNET_3.5 1
StrCpy $__DOTNETVER_3.5_SP $4
StrCpy $__DOTNET_3.5_FULL 1
Goto dotnetver.startenum
dotnetver.40:
; Check for .NET 4.0 (Full Profile)
ReadRegDWORD $3 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
ReadRegDWORD $4 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "SP"
StrLen $8 $3
IntCmp $8 0 dotnetcheck.40c
IntCmp $3 0 dotnetcheck.40c
StrCmp $2 ${DOTNETVER_4_0} dotnetver.40_Full
StrCmp $2 "4" dotnetver.40_Full
dotnetcheck.40c:
; Check for .NET 4.0 (Client Profile)
ReadRegDWORD $3 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "Install"
ReadRegDWORD $4 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "SP"
StrLen $8 $3
IntCmp $8 0 dotnetver.startenum
IntCmp $3 0 dotnetver.startenum
StrCmp $2 ${DOTNETVER_4_0} dotnetver.40_Client
StrCmp $2 "4" dotnetver.40_Client
Goto dotnetver.startenum
dotnetver.40_Full:
StrCpy $__DOTNET_4.0 1
StrCpy $__DOTNETVER_4.0_SP $4
StrCpy $__DOTNET_4.0_FULL 1
Goto dotnetcheck.40c ; continue looking for other profiles
dotnetver.40_Client:
StrCpy $__DOTNET_4.0 1
StrCpy $__DOTNETVER_4.0_SP $4
StrCpy $__DOTNET_4.0_CLIENT 1
Goto dotnetver.startenum
dotnetver.done:
StrCpy $__DONTNET_FOUNDVER "1"
Pop $8
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
!macroend
!macro _HasDotNet _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _= `$__DOTNET_${_b}` `1` `${_t}` `${_f}`
!macroend
!macro __DotNetVer_DefineTest Ver
!define HasDotNet${Ver} `"" HasDotNet ${Ver}`
!macroend
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_1_0}
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_1_1}
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_2_0}
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_3_0}
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_3_5}
!insertmacro __DotNetVer_DefineTest ${DOTNETVER_4_0}
!macro _AtLeastDotNetServicePack _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _>= `$__DOTNETVER_${_a}_SP` `${_b}` `${_t}` `${_f}`
!macroend
!define AtLeastDotNetServicePack `AtLeastDotNetServicePack`
!macro _AtMostDotNetServicePack _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _<= `$__DOTNETVER_${_a}_SP` `${_b}` `${_t}` `${_f}`
!macroend
!define AtMostDotNetServicePack `AtMostDotNetServicePack`
!macro _IsDotNetServicePack _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _= `$__DOTNETVER_${_a}_SP` `${_b}` `${_t}` `${_f}`
!macroend
!define IsDotNetServicePack `IsDotNetServicePack`
!macro _HasDotNetClientProfile _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _= `$__DOTNET_${_a}_CLIENT` `${_b}` `${_t}` `${_f}`
!macroend
!define HasDotNetClientProfile `HasDotNetClientProfile`
!macro _HasDotNetFullProfile _a _b _t _f
${CallArtificialFunction} __DotNetVer_InitVars
!insertmacro _= `$__DOTNET_${_a}_FULL` `${_b}` `${_t}` `${_f}`
!macroend
!define HasDotNetFullProfile `HasDotNetFullProfile`
# done
!endif # !___DOTNETVER__NSH___
!verbose pop

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_CZECH} "Installer Language"
LangString SelectInstallerLanguage ${LANG_CZECH} "Please select the language of the installer"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_CZECH} "mRemoteNG requires Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_CZECH} "mRemoteNG requires Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_CZECH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_DUTCH} "Installer Language"
LangString SelectInstallerLanguage ${LANG_DUTCH} "Please select the language of the installer"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_DUTCH} "mRemoteNG requires Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_DUTCH} "mRemoteNG requires Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_DUTCH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_ENGLISH} "Installer Language"
LangString SelectInstallerLanguage ${LANG_ENGLISH} "Please select the language of the installer"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_ENGLISH} "mRemoteNG requires Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_ENGLISH} "mRemoteNG requires Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_ENGLISH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_FRENCH} "Installer Language"
LangString SelectInstallerLanguage ${LANG_FRENCH} "Please select the language of the installer"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_FRENCH} "mRemoteNG requires Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_FRENCH} "mRemoteNG requires Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_FRENCH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_GERMAN} "Installationsprogamm Sprache"
LangString SelectInstallerLanguage ${LANG_GERMAN} "Bitte w<>hlen Sie die Sprache f<>r das Installationsprogramm"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_GERMAN} "mRemoteNG ben<65>tigt das Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_GERMAN} "mRemoteNG ben<65>tigt das Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_GERMAN} "Sie m<>ssen Mitglied der Grupper 'Power Users' or 'Administratoren' sein, damit Sie mRemoteNG installieren k<>nnen."

View File

@@ -10,7 +10,7 @@ LangString InstallerLanguage ${LANG_POLISH} "Installer Language"
LangString SelectInstallerLanguage ${LANG_POLISH} "Please select the language of the installer"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_POLISH} "mRemoteNG requires Microsoft .NET Framework 2.0."
LangString RequiresNetFramework ${LANG_POLISH} "mRemoteNG requires Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_POLISH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."

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 2.0."
LangString RequiresNetFramework ${LANG_SPANISH} "mRemoteNG requiere Microsoft .NET Framework 3.0."
; User needs to be Admin
LangString RequiresAdminUser ${LANG_SPANISH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."
LangString RequiresAdminUser ${LANG_SPANISH} "Debe ser miembro del grupo 'Administradores' para poder instalar mRemoteNG."
; Start Menu items
LangString CreditsLinkName ${LANG_SPANISH} "Credits"
LangString CopyingLinkName ${LANG_SPANISH} "License"
LangString UninstallLinkName ${LANG_SPANISH} "Uninstall"
LangString ChangeLogLinkName ${LANG_SPANISH} "Version History"
LangString CreditsLinkName ${LANG_SPANISH} "Créditos"
LangString CopyingLinkName ${LANG_SPANISH} "Licencia"
LangString UninstallLinkName ${LANG_SPANISH} "Desinstalar"
LangString ChangeLogLinkName ${LANG_SPANISH} "Historial de Versiones"

View File

@@ -11,7 +11,7 @@ LangString InstallerLanguage ${LANG_THAI} "ภาษาสำหรับกา
LangString SelectInstallerLanguage ${LANG_THAI} "กรุณาเลือกภาษาสำหรับการติดตั้ง"
; Requires .NET Framework
LangString RequiresNetFramework ${LANG_THAI} "mRemoteNG มีความต้องการ Microsoft .NET Framework 2.0. เป็นพื้นฐาน"
LangString RequiresNetFramework ${LANG_THAI} "mRemoteNG มีความต้องการ Microsoft .NET Framework 3.0. เป็นพื้นฐาน"
; User needs to be Admin
LangString RequiresAdminUser ${LANG_THAI} "คุณต้องเป็นสมาชิกในกลุ่มของ 'Power Users' หรือ 'Administrators' เพื่อการติดตั้ง mRemoteNG"

View File

@@ -2,6 +2,7 @@
!include "WordFunc.nsh"
!insertmacro VersionCompare
!include "DotNetVer.nsh"
!include "..\Release\Version.nsh"
; This will be passed in using the /D switch by BUILD.CMD
@@ -13,9 +14,6 @@
!define PRODUCT_VERSION_TAGGED "${PRODUCT_VERSION_SHORT}"
!endif
; Global Variables
Var InstallDotNET
; Basic Config
Name "mRemoteNG ${PRODUCT_VERSION_FRIENDLY}"
OutFile "..\Release\mRemoteNG-Installer-${PRODUCT_VERSION_TAGGED}.exe"
@@ -29,7 +27,7 @@ VIProductVersion ${PRODUCT_VERSION}
VIAddVersionKey "CompanyName" "Next Generation Software"
VIAddVersionKey "ProductName" "mRemoteNG"
VIAddVersionKey "ProductVersion" ${PRODUCT_VERSION}
VIAddVersionKey "LegalCopyright" "Copyright © 2007-2009 Felix Deimel, 2010-2011 Riley McArdle"
VIAddVersionKey "LegalCopyright" "Copyright © 2007-2009 Felix Deimel, 2010-2013 Riley McArdle"
VIAddVersionKey "FileDescription" "mRemoteNG ${PRODUCT_VERSION_FRIENDLY} Installer"
VIAddVersionKey "FileVersion" ${PRODUCT_VERSION}
@@ -96,7 +94,8 @@ Function .onInit
Win9x:
doit:
# We can install
Call SelectLanguage
IfSilent +2
Call SelectLanguage
Goto end
noop:
MessageBox MB_OK "$(RequiresAdminUser)"
@@ -132,22 +131,7 @@ Function SelectLanguage
Abort
; Check .NET version
StrCpy $InstallDotNET "No"
Call GetDotNETVersion
Pop $0
${If} $0 == "not found"
StrCpy $InstallDotNET "Yes"
${EndIf}
StrCpy $0 $0 "" 1 # skip "v"
${VersionCompare} $0 "2.0" $1
${If} $1 == 2
StrCpy $InstallDotNET "Yes"
${EndIf}
${If} $InstallDotNET == "Yes"
${IfNot} ${HasDotNet3.0}
MessageBox MB_OK|MB_ICONEXCLAMATION "$(RequiresNetFramework)"
Quit
${EndIf}
@@ -211,15 +195,3 @@ Section "un.Uninstall"
DeleteRegKey /ifempty HKCU "Software\mRemoteNG"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\mRemoteNG"
SectionEnd
Function GetDotNETVersion
Push $0
Push $1
System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i) i .r1"
StrCmp $1 "error" 0 +2
StrCpy $0 "not found"
Pop $1
Exch $0
FunctionEnd

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

@@ -27,14 +27,24 @@ echo.
mkdir %TEMP_FOLDER%
%RAR% x -o+ %ZIP_FILE% *.* %TEMP_FOLDER%
%SORTRESX% %TEMP_FOLDER%\de\Language.de-DE.resx "%~dp0\mRemoteV1\Language\Language.de.resx"
%SORTRESX% %TEMP_FOLDER%\en-US\Language..resx "%~dp0\mRemoteV1\Language\Language.en-US.resx"
%SORTRESX% %TEMP_FOLDER%\es-ES\Language.es-ES.resx "%~dp0\mRemoteV1\Language\Language.es.resx"
%SORTRESX% %TEMP_FOLDER%\fr\Language.fr-FR.resx "%~dp0\mRemoteV1\Language\Language.fr.resx"
%SORTRESX% %TEMP_FOLDER%\it\Language.it-IT.resx "%~dp0\mRemoteV1\Language\Language.it.resx"
%SORTRESX% %TEMP_FOLDER%\nl\Language.nl-NL.resx "%~dp0\mRemoteV1\Language\Language.nl.resx"
%SORTRESX% %TEMP_FOLDER%\ru\Language.ru-RU.resx "%~dp0\mRemoteV1\Language\Language.ru.resx"
%SORTRESX% %TEMP_FOLDER%\uk\Language.uk-UA.resx "%~dp0\mRemoteV1\Language\Language.uk.resx"
%SORTRESX% %TEMP_FOLDER%\ar\Language.ar.resx "%~dp0\mRemoteV1\Language\Language.ar.resx"
%SORTRESX% %TEMP_FOLDER%\de\Language.de.resx "%~dp0\mRemoteV1\Language\Language.de.resx"
%SORTRESX% %TEMP_FOLDER%\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"
%SORTRESX% %TEMP_FOLDER%\pt-PT\Language.pt.resx "%~dp0\mRemoteV1\Language\Language.pt.resx"
%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"
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,29 @@ 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/"
#If DEBUG Then
Public Shared ReadOnly File As String = "update-debug.txt"
#Else
Public Shared ReadOnly File As String = "update.txt"
#End If
Public Shared ReadOnly Property FileName As String
Get
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,9 @@
Imports log4net
Imports System.ComponentModel
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 +21,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 +134,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
@@ -239,8 +222,8 @@ Namespace App
Public Shared quickyPanel As New DockContent
Public Shared optionsForm As frmOptions
Public Shared optionsPanel As New DockContent
Public Shared saveasForm As UI.Window.SaveAs
Public Shared saveasPanel As New DockContent
Public Shared exportForm As UI.Window.Export
Public Shared exportPanel As New DockContent
Public Shared aboutForm As UI.Window.About
Public Shared aboutPanel As New DockContent
Public Shared updateForm As UI.Window.Update
@@ -262,70 +245,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)
Case UI.Window.Type.SaveAs
Windows.saveasForm = New UI.Window.SaveAs(Windows.saveasPanel)
Windows.saveasPanel = Windows.saveasForm
optionsForm = New frmOptions(optionsPanel)
optionsForm.Show(frmMain.pnlDock)
Case UI.Window.Type.Export
If exportForm Is Nothing OrElse exportForm.IsDisposed Then
exportForm = New UI.Window.Export(exportPanel)
exportPanel = exportForm
End If
Windows.saveasForm.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,17 +361,26 @@ 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
' Windows XP/Windows Server 2003
regKey = Registry.LocalMachine.OpenSubKey("System\CurrentControlSet\Control\Lsa")
If Not regKey.GetValue("FIPSAlgorithmPolicy") = 0 Then isFipsPolicyEnabled = True
If regKey IsNot Nothing Then
If Not regKey.GetValue("FIPSAlgorithmPolicy") = 0 Then isFipsPolicyEnabled = True
End If
' Windows Vista/Windows Server 2008 and newer
regKey = Registry.LocalMachine.OpenSubKey("System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy")
If Not regKey.GetValue("Enabled") = 0 Then isFipsPolicyEnabled = True
If regKey IsNot Nothing Then
If Not regKey.GetValue("Enabled") = 0 Then isFipsPolicyEnabled = True
End If
If isFipsPolicyEnabled Then
MessageBox.Show(frmMain, String.Format(My.Language.strErrorFipsPolicyIncompatible, My.Application.Info.ProductName), My.Application.Info.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
@@ -378,6 +388,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
@@ -443,66 +469,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()
@@ -636,6 +714,8 @@ Namespace App
Dim SettingsSave As New Config.Settings.Save()
SettingsSave.Save()
IeBrowserEmulation.Unregister()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
End Try
@@ -662,10 +742,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
@@ -728,7 +810,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
@@ -804,12 +888,6 @@ Namespace App
TryCast(cForm, UI.Window.Connection).SetFormText(title.Replace("&", "&&"))
If frmMain.pnlDock.DocumentsCount > 1 Then
frmMain.pnlDock.DocumentStyle = DocumentStyle.DockingMdi
Else
frmMain.pnlDock.DocumentStyle = DocumentStyle.DockingSdi
End If
pnlcForm.Show(frmMain.pnlDock, DockState.Document)
If noTabber Then
@@ -896,7 +974,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()
@@ -905,7 +983,6 @@ Namespace App
conL.ConnectionList = ConnectionList
conL.ContainerList = ContainerList
conL.Import = False
Tree.Node.ResetTree()
@@ -913,7 +990,7 @@ Namespace App
' Load config
conL.ConnectionFileName = filename
conL.Load()
conL.Load(False)
Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode
Catch ex As Exception
@@ -996,8 +1073,6 @@ Namespace App
conL.PreviousSelected = LastSelected
End If
conL.Import = False
Tree.Node.ResetTree()
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
@@ -1009,7 +1084,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
@@ -1026,14 +1101,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
@@ -1121,11 +1213,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
@@ -1135,136 +1226,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
@@ -1358,18 +1452,18 @@ Namespace App
End Sub
Public Shared Sub SaveConnections(Optional ByVal Update As Boolean = False)
If Not IsConnectionsFileLoaded Then Exit Sub
Dim previousTimerState As Boolean = False
Try
If Update = True And My.Settings.UseSQLServer = False Then
Exit Sub
End If
Dim tmrWasEnabled As Boolean
If TimerSqlWatcher IsNot Nothing Then
tmrWasEnabled = TimerSqlWatcher.Enabled
If TimerSqlWatcher.Enabled = True Then
TimerSqlWatcher.Stop()
End If
previousTimerState = TimerSqlWatcher.Enabled
TimerSqlWatcher.Enabled = False
End If
Dim conS As New Config.Connections.Save
@@ -1401,70 +1495,78 @@ Namespace App
If My.Settings.UseSQLServer = True Then
LastSqlUpdate = Now
End If
If tmrWasEnabled Then
TimerSqlWatcher.Start()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strConnectionsFileCouldNotBeSaved & vbNewLine & ex.Message)
Finally
If TimerSqlWatcher IsNot Nothing Then
TimerSqlWatcher.Enabled = previousTimerState
End If
End Try
End Sub
Public Shared Sub SaveConnectionsAs(ByVal SaveSecurity As Security.Save, ByVal RootNode As TreeNode)
Dim conS As New Config.Connections.Save
Try
Dim tmrWasEnabled As Boolean
Public Shared Sub SaveConnectionsAs(Optional ByVal rootNode As TreeNode = Nothing, Optional ByVal saveSecurity As Security.Save = Nothing)
Dim connectionsSave As New Config.Connections.Save
Dim previousTimerState As Boolean = False
Try
If TimerSqlWatcher IsNot Nothing Then
tmrWasEnabled = TimerSqlWatcher.Enabled
If TimerSqlWatcher.Enabled = True Then
TimerSqlWatcher.Stop()
End If
previousTimerState = TimerSqlWatcher.Enabled
TimerSqlWatcher.Enabled = False
End If
Dim export As Boolean = False
Dim saveAsDialog As SaveFileDialog
If rootNode Is Nothing Then
rootNode = Windows.treeForm.tvConnections.Nodes(0)
saveAsDialog = Controls.ConnectionsSaveAsDialog
Else
export = True
saveAsDialog = Controls.ConnectionsExportDialog
End If
Dim sD As SaveFileDialog = Tools.Controls.ConnectionsSaveAsDialog
If sD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
conS.ConnectionFileName = sD.FileName
If saveAsDialog.ShowDialog = System.Windows.Forms.DialogResult.OK Then
connectionsSave.ConnectionFileName = saveAsDialog.FileName
Else
Exit Sub
End If
Select Case sD.FilterIndex
Case 1
conS.SaveFormat = Config.Connections.Save.Format.mRXML
Case 2
conS.SaveFormat = Config.Connections.Save.Format.mRCSV
Case 3
conS.SaveFormat = Config.Connections.Save.Format.vRDCSV
End Select
If export Then
Select Case saveAsDialog.FilterIndex
Case 1
connectionsSave.SaveFormat = Config.Connections.Save.Format.mRXML
Case 2
connectionsSave.SaveFormat = Config.Connections.Save.Format.mRCSV
Case 3
connectionsSave.SaveFormat = Config.Connections.Save.Format.vRDCSV
End Select
Else
connectionsSave.SaveFormat = Config.Connections.Save.Format.mRXML
If RootNode Is Windows.treeForm.tvConnections.Nodes(0) Then
If conS.SaveFormat <> Config.Connections.Save.Format.mRXML And conS.SaveFormat <> Config.Connections.Save.Format.None Then
If connectionsSave.ConnectionFileName = Info.Connections.DefaultConnectionsPath & "\" & Info.Connections.DefaultConnectionsFile Then
My.Settings.LoadConsFromCustomLocation = False
Else
If conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
My.Settings.LoadConsFromCustomLocation = False
Else
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = conS.ConnectionFileName
End If
My.Settings.LoadConsFromCustomLocation = True
My.Settings.CustomConsPath = connectionsSave.ConnectionFileName
End If
End If
conS.ConnectionList = ConnectionList
conS.ContainerList = ContainerList
If RootNode IsNot Windows.treeForm.tvConnections.Nodes(0) Then
conS.Export = True
End If
conS.SaveSecurity = SaveSecurity
conS.RootTreeNode = RootNode
connectionsSave.ConnectionList = ConnectionList
connectionsSave.ContainerList = ContainerList
connectionsSave.RootTreeNode = rootNode
conS.Save()
connectionsSave.Export = export
If saveSecurity Is Nothing Then saveSecurity = New Security.Save
connectionsSave.SaveSecurity = saveSecurity
connectionsSave.Save()
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strConnectionsFileCouldNotSaveAs, conS.ConnectionFileName) & vbNewLine & ex.Message)
MessageCollector.AddMessage(MessageClass.ErrorMsg, String.Format(My.Language.strConnectionsFileCouldNotSaveAs, connectionsSave.ConnectionFileName) & vbNewLine & ex.Message)
Finally
If TimerSqlWatcher IsNot Nothing Then
TimerSqlWatcher.Enabled = previousTimerState
End If
End Try
End Sub
#End Region
@@ -1476,7 +1578,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
@@ -1515,11 +1622,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,17 +155,18 @@ 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
@@ -206,7 +198,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 +232,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 +247,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 +266,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
@@ -564,6 +567,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 +636,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
@@ -639,11 +649,17 @@ Namespace Config
End If
If xDom.DocumentElement.HasAttribute("ConfVersion") Then
Me.confVersion = Convert.ToDouble(xDom.DocumentElement.Attributes("ConfVersion").Value, CultureInfo.InvariantCulture)
Me.confVersion = Convert.ToDouble(xDom.DocumentElement.Attributes("ConfVersion").Value.Replace(",", "."), CultureInfo.InvariantCulture)
Else
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 +688,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 +721,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
@@ -721,7 +739,7 @@ Namespace Config
App.Runtime.Windows.treeForm.InitialRefresh()
Catch ex As Exception
App.Runtime.IsConnectionsFileLoaded = False
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strLoadFromXmlFailed & vbNewLine & ex.Message & ex.StackTrace, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strLoadFromXmlFailed & vbNewLine & ex.Message & vbNewLine & ex.StackTrace, True)
Throw
End Try
End Sub
@@ -1037,6 +1055,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
@@ -80,7 +79,7 @@ Namespace Config
If (Not sqlDataReader.HasRows) Then Return True ' assume new empty database
sqlDataReader.Read()
databaseVersion = New System.Version(Convert.ToDouble(sqlDataReader.Item("confVersion"), CultureInfo.InvariantCulture))
databaseVersion = New Version(Convert.ToString(sqlDataReader.Item("confVersion"), CultureInfo.InvariantCulture))
sqlDataReader.Close()
@@ -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,15 +192,15 @@ 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, " & _
"InheritVNCSmartSizeMode, InheritVNCViewOnly, " & _
"InheritRDGatewayUsageMethod, InheritRDGatewayHostname, InheritRDGatewayUseConnectionCredentials, InheritRDGatewayUsername, InheritRDGatewayPassword, InheritRDGatewayDomain, " & _
"InheritUseCredSsp, " & _
"PositionID, _parentConstantId, ConstantID, LastChange)" & _
"PositionID, ParentID, ConstantID, LastChange)" & _
"VALUES (", _sqlConnection)
If Tree.Node.GetNodeType(node) = Tree.Node.Type.Connection Or Tree.Node.GetNodeType(node) = Tree.Node.Type.Container Then
@@ -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 & "',"
@@ -309,7 +317,7 @@ Namespace Config
End If
If Me._SaveSecurity.Password = True Then
_sqlQuery.CommandText &= "'" & .RDGatewayPassword & "',"
_sqlQuery.CommandText &= "'" & Security.Crypt.Encrypt(.RDGatewayPassword, _password) & "',"
Else
_sqlQuery.CommandText &= "'" & "" & "',"
End If
@@ -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 & "',"
@@ -468,17 +482,15 @@ Namespace Config
Private Sub SaveToXml()
Try
If IsConnectionsFileLoaded = False Then Exit Sub
If Not IsConnectionsFileLoaded Then Exit Sub
Dim treeNode As TreeNode
Dim isExport As Boolean = False
If Tree.Node.GetNodeType(RootTreeNode) = Tree.Node.Type.Root Then
treeNode = RootTreeNode.Clone
Else
treeNode = New TreeNode("mR|Export (" + Tools.Misc.DBDate(Now) + ")")
treeNode.Nodes.Add(RootTreeNode.Clone)
isExport = True
End If
Dim tempFileName As String = Path.GetTempFileName()
@@ -491,9 +503,9 @@ Namespace Config
_xmlTextWriter.WriteStartElement("Connections") ' Do not localize
_xmlTextWriter.WriteAttributeString("Name", "", treeNode.Text)
_xmlTextWriter.WriteAttributeString("Export", "", isExport)
_xmlTextWriter.WriteAttributeString("Export", "", Export)
If isExport Then
If Export Then
_xmlTextWriter.WriteAttributeString("Protected", "", Security.Crypt.Encrypt("ThisIsNotProtected", _password))
Else
If TryCast(treeNode.Tag, Root.Info).Password = True Then
@@ -514,12 +526,14 @@ Namespace Config
_xmlTextWriter.WriteEndElement()
_xmlTextWriter.Close()
Dim backupFileName As String = ConnectionFileName & ".backup"
File.Delete(backupFileName)
File.Move(ConnectionFileName, backupFileName)
If Not Export And File.Exists(ConnectionFileName) Then
Dim backupFileName As String = ConnectionFileName & ".backup"
File.Delete(backupFileName)
File.Move(ConnectionFileName, backupFileName)
End If
File.Move(tempFileName, ConnectionFileName)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SaveToXml failed" & vbNewLine & ex.Message, True)
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "SaveToXml failed" & vbNewLine & ex.Message, False)
End Try
End Sub
@@ -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)
@@ -659,7 +677,7 @@ Namespace Config
End If
If Me._SaveSecurity.Password = True Then
_xmlTextWriter.WriteAttributeString("RDGatewayPassword", "", curConI.RDGatewayPassword)
_xmlTextWriter.WriteAttributeString("RDGatewayPassword", "", Security.Crypt.Encrypt(curConI.RDGatewayPassword, _password))
Else
_xmlTextWriter.WriteAttributeString("RDGatewayPassword", "", "")
End If
@@ -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

@@ -44,6 +44,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 +80,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
@@ -101,6 +104,10 @@ Namespace Config
Me.LoadPanelsFromXML()
Me.LoadExternalAppsFromXML()
If My.Settings.AlwaysShowPanelTabs Then
frmMain.pnlDock.DocumentStyle = DocumentStyle.DockingWindow
End If
If My.Settings.ResetToolbars = False Then
LoadToolbarsFromSettings()
Else
@@ -108,8 +115,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
@@ -190,8 +196,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
@@ -262,8 +267,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,240 @@
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
treeView.Nodes.Add(_rootTreeNode)
If Not inUpdate Then
treeView.BeginUpdate()
inUpdate = True
End If
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

@@ -13,7 +13,7 @@ Namespace Connection
Browsable(True), _
LocalizedDisplayName("strPropertyNameName"), _
LocalizedDescription("strPropertyDescriptionName")> _
Public Property Name() As String
Public Overridable Property Name() As String
Get
Return Me._Name
End Get
@@ -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
Return _hostname.Trim()
End Get
Set(ByVal value As String)
Me._Hostname = value
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
@@ -132,13 +133,13 @@ Namespace Connection
parCon = parCont.ConnectionInfo
End If
Return parCon.Username
Return parCon.Username.Trim()
Else
Return Me._Username
Return Me._Username.Trim()
End If
End Get
Set(ByVal value As String)
Me._Username = value
Me._Username = value.Trim()
End Set
End Property
@@ -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
@@ -185,13 +186,13 @@ Namespace Connection
parCon = parCont.ConnectionInfo
End If
Return parCon.Domain
Return parCon.Domain.Trim()
Else
Return Me._Domain
Return Me._Domain.Trim()
End If
End Get
Set(ByVal value As String)
Me._Domain = value
Me._Domain = value.Trim()
End Set
End Property
#End Region
@@ -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), _
@@ -482,13 +509,13 @@ Namespace Connection
parCon = parCont.ConnectionInfo
End If
Return parCon.RDGatewayHostname
Return parCon.RDGatewayHostname.Trim()
Else
Return Me._RDGatewayHostname
Return Me._RDGatewayHostname.Trim()
End If
End Get
Set(ByVal value As String)
Me._RDGatewayHostname = value
Me._RDGatewayHostname = value.Trim()
End Set
End Property
@@ -535,13 +562,13 @@ Namespace Connection
parCon = parCont.ConnectionInfo
End If
Return parCon.RDGatewayUsername
Return parCon.RDGatewayUsername.Trim()
Else
Return Me._RDGatewayUsername
Return Me._RDGatewayUsername.Trim()
End If
End Get
Set(ByVal value As String)
Me._RDGatewayUsername = value
Me._RDGatewayUsername = value.Trim()
End Set
End Property
@@ -588,13 +615,13 @@ Namespace Connection
parCon = parCont.ConnectionInfo
End If
Return parCon.RDGatewayDomain
Return parCon.RDGatewayDomain.Trim()
Else
Return Me._RDGatewayDomain
Return Me._RDGatewayDomain.Trim()
End If
End Get
Set(ByVal value As String)
Me._RDGatewayDomain = value
Me._RDGatewayDomain = value.Trim()
End Set
End Property
#End Region
@@ -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
@@ -1478,7 +1532,9 @@ Namespace Connection
#Region "Methods"
Public Function Copy() As Connection.Info
Return Me.MemberwiseClone
Dim newConnectionInfo As Connection.Info = MemberwiseClone()
newConnectionInfo._OpenConnections = New Connection.Protocol.List
Return newConnectionInfo
End Function
Public Sub New()
@@ -1846,6 +1902,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), _
@@ -1998,6 +2069,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,86 +101,108 @@ Namespace Connection
PuttyProcess = New Process
With PuttyProcess.StartInfo
.UseShellExecute = False
.FileName = _PuttyPath
Select Case Me._PuttyProtocol
Case Putty_Protocol.raw
.Arguments = "-load " & """" & Me.InterfaceControl.Info.PuttySession & """" & " -" & Me._PuttyProtocol.ToString & " -P " & Me.InterfaceControl.Info.Port & " """ & Me.InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.rlogin
.Arguments = "-load " & """" & Me.InterfaceControl.Info.PuttySession & """" & " -" & Me._PuttyProtocol.ToString & " -P " & Me.InterfaceControl.Info.Port & " """ & Me.InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.ssh
Dim UserArg As String = ""
Dim PassArg As String = ""
Dim arguments As New CommandLineArguments
arguments.EscapeForShell = False
If My.Settings.EmptyCredentials = "windows" Then
UserArg = " -l """ & Environment.UserName & """"
ElseIf My.Settings.EmptyCredentials = "custom" Then
UserArg = " -l """ & My.Settings.DefaultUsername & """"
PassArg = " -pw """ & 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 Me.InterfaceControl.Info.Username <> "" Then
UserArg = " -l """ & Me.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 Me.InterfaceControl.Info.Password <> "" Then
PassArg = " -pw """ & Me.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 " & """" & Me.InterfaceControl.Info.PuttySession & """" & " -" & Me._PuttyProtocol.ToString & " -" & Me._PuttySSHVersion & UserArg & PassArg & " -P " & Me.InterfaceControl.Info.Port & " """ & Me.InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.telnet
.Arguments = "-load " & """" & Me.InterfaceControl.Info.PuttySession & """" & " -" & Me._PuttyProtocol.ToString & " -P " & Me.InterfaceControl.Info.Port & " """ & Me.InterfaceControl.Info.Hostname & """"
Case Putty_Protocol.serial
.Arguments = "-load " & """" & Me.InterfaceControl.Info.PuttySession & """" & " -" & Me._PuttyProtocol.ToString & " -P " & Me.InterfaceControl.Info.Port & " """ & Me.InterfaceControl.Info.Hostname & """"
End Select
If _isPuttyNg Then
.Arguments = .Arguments & " -hwndparent " & Me.InterfaceControl.Handle.ToString()
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
arguments.Add(InterfaceControl.Info.Hostname)
End If
'REMOVE IN RELEASE!
'mC.AddMessage(Messages.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
AddHandler PuttyProcess.Exited, AddressOf ProcessExited
PuttyProcess.Start()
PuttyProcess.WaitForInputIdle()
PuttyProcess.WaitForInputIdle(My.Settings.MaxPuttyWaitTime * 1000)
If _isPuttyNg Then
PuttyHandle = FindWindowEx(Me.InterfaceControl.Handle, 0, vbNullString, vbNullString)
Else
PuttyHandle = PuttyProcess.MainWindowHandle
Dim startTicks As Integer = Environment.TickCount
While PuttyHandle.ToInt32 = 0 And Environment.TickCount < startTicks + (My.Settings.MaxPuttyWaitTime * 1000)
If _isPuttyNg Then
PuttyHandle = FindWindowEx(InterfaceControl.Handle, 0, vbNullString, vbNullString)
Else
PuttyProcess.Refresh()
PuttyHandle = PuttyProcess.MainWindowHandle
End If
If PuttyHandle.ToInt32 = 0 Then Thread.Sleep(0)
End While
If Not _isPuttyNg Then
SetParent(PuttyHandle, InterfaceControl.Handle)
End If
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strPuttyStuff, True)
MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strPuttyStuff, True)
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strPuttyHandle, PuttyHandle.ToString), True)
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strPuttyTitle, PuttyProcess.MainWindowTitle), True)
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strPuttyParentHandle, Me.InterfaceControl.Parent.Handle.ToString), True)
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strPuttyHandle, PuttyHandle.ToString), True)
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
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strPuttyConnectionFailed & vbNewLine & ex.Message)
MessageCollector.AddMessage(MessageClass.ErrorMsg, My.Language.strPuttyConnectionFailed & vbNewLine & ex.Message)
Return False
End Try
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 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)
@@ -226,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
@@ -254,24 +245,8 @@ Namespace Connection
Catch
isPuttyNg = False
End Try
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format("IsFilePuttyNg(""{0}"") = {1}", file, isPuttyNg), False)
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,123 @@ 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
#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
@@ -111,7 +134,7 @@ Namespace Connection
Me.SetEventHandlers()
Try
RDP.Connect()
_rdpClient.Connect()
MyBase.Connect()
Return True
Catch ex As Exception
@@ -123,7 +146,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 +171,161 @@ 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 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 +335,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 +362,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 +385,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 +409,28 @@ 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.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,13 +438,16 @@ 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 AxMSTSCLib.IMsTscAxEvents_OnDisconnectedEvent)
Dim Reason As String = RDP.GetErrorDescription(e.discReason, RDP.ExtendedDisconnectReason)
MyBase.Event_Disconnected(Me, e.discReason & vbCrLf & Reason)
Private Sub RDPEvent_OnDisconnected(ByVal discReason As Integer)
Const UI_ERR_NORMAL_DISCONNECT As Integer = &HB08
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
ReconnectGroup = New ReconnectGroup
@@ -398,20 +457,21 @@ Namespace Connection
ReconnectGroup.Show()
tmrReconnect.Enabled = True
Else
MyBase.Close()
Close()
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_OnLeaveFullscreenMode()
Fullscreen = False
RaiseEvent LeaveFullscreen(Me, New EventArgs())
End Sub
#End Region
@@ -542,87 +602,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"
@@ -803,7 +802,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
@@ -811,11 +810,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

@@ -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()
@@ -138,7 +137,7 @@ Partial Class frmMain
Me.pnlDock.DockBackColor = System.Drawing.SystemColors.Control
Me.pnlDock.DockLeftPortion = 230
Me.pnlDock.DockRightPortion = 230
Me.pnlDock.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingWindow
Me.pnlDock.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingSdi
Me.pnlDock.Location = New System.Drawing.Point(0, 0)
Me.pnlDock.Name = "pnlDock"
Me.pnlDock.Size = New System.Drawing.Size(842, 424)
@@ -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

@@ -1,9 +1,12 @@
Imports WeifenLuo.WinFormsUI.Docking
Imports mRemoteNG.App.Runtime
Imports System.Reflection
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
@@ -29,6 +32,8 @@ Public Class frmMain
#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()
@@ -45,44 +50,37 @@ 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
'LoadCredentials()
LoadConnections()
If Not IsConnectionsFileLoaded Then
Application.Exit()
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
@@ -119,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
@@ -161,50 +159,111 @@ Public Class frmMain
ToolStripMenuItem2.Text = My.Language.strKeysCtrlEsc
End Sub
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If My.Settings.ConfirmExit And WindowList.Count > 0 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
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 Result = DialogResult.No Then
e.Cancel = True
Exit Sub
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 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.ConfirmCloseConnection = My.Settings.ConfirmCloseConnection - 1
End If
If result = DialogResult.No Then
e.Cancel = True
Exit Sub
End If
End If
End If
PuttySessions.StopWatcher()
Shutdown.BeforeQuit()
_IsClosing = True
For Each Window As UI.Window.Base In WindowList
Window.Close()
Next
App.Runtime.Shutdown.BeforeQuit()
If WindowList IsNot Nothing Then
For Each window As UI.Window.Base In WindowList
window.Close()
Next
End If
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()
@@ -218,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()
@@ -247,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()
@@ -274,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
@@ -284,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
@@ -292,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
@@ -299,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
@@ -347,7 +425,7 @@ Public Class frmMain
End Sub
Private Sub mMenFileSaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenFileSaveAs.Click
App.Runtime.Windows.Show(UI.Window.Type.SaveAs)
SaveConnectionsAs()
End Sub
Private Sub mMenFileExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mMenFileExit.Click
@@ -502,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
@@ -655,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()
@@ -668,25 +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
tMenItem.Dispose()
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
@@ -694,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
@@ -727,10 +806,10 @@ Public Class frmMain
Dim control As Control = FromChildHandle(WindowFromPoint(MousePosition))
If Not IsNothing(control) Then
' Let ComboBoxes get focus but don't simulate a mouse event
If TypeOf control Is ComboBox Then Exit Select
' 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))
@@ -742,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))
@@ -792,6 +864,32 @@ Public Class frmMain
Private Sub pnlDock_ActiveDocumentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles pnlDock.ActiveDocumentChanged
ActivateConnection()
End Sub
Public Sub ShowHidePanelTabs(Optional closingDocument As DockContent = Nothing)
Dim newDocumentStyle As DocumentStyle = pnlDock.DocumentStyle
If My.Settings.AlwaysShowPanelTabs Then
newDocumentStyle = DocumentStyle.DockingWindow ' Show the panel tabs
Else
Dim nonConnectionPanelCount As Integer = 0
For Each document As DockContent In pnlDock.Documents
If (closingDocument Is Nothing OrElse document IsNot closingDocument) And Not TypeOf document Is UI.Window.Connection Then
nonConnectionPanelCount = nonConnectionPanelCount + 1
End If
Next
If nonConnectionPanelCount = 0 Then
newDocumentStyle = DocumentStyle.DockingSdi ' Hide the panel tabs
Else
newDocumentStyle = DocumentStyle.DockingWindow ' Show the panel tabs
End If
End If
If Not pnlDock.DocumentStyle = newDocumentStyle Then
pnlDock.DocumentStyle = newDocumentStyle
pnlDock.Size = New Size(1, 1)
End If
End Sub
#End Region
#Region "Screen Stuff"

View File

@@ -124,154 +124,177 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk
IgAAAk1TRnQBSQFMAgEBBwEAAQgBAQEIAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIB4AAeIB7wH0Af8BqAHJAdcB/wFwAaQBtgH/AVMBhgGcAf8BPgFlAYoB/wE5
AWABhwH/ATkBagGVAf8BTAGOAasB/wGPAbcBzQH/Ad0B6gHxAf8MAANXAbcDnwH/A5oB/wOWAf8DkQH/
A40B/wOJAf8DhAH/A4AB/wNbAf8DVwH/A1MB/wNQAf8DTAH/A0kB/wNXAbcYAAMNARIDVgG2A1YBtgMN
ARFgAAGtAc8B3wH/AUsBkQGtAf8BUAGjAb8B/wFsAcAB1AH/AZUB2QHmAf8BgQHbAfAB/wFEAcYB7AH/
ARgBqgHdAf8BCgGSAccB/wEWAYABrAH/AS0BZQGSAf8BnQG/AdEB/wgAA6gB/wPpAf8D0wH/A9IB/wPR
Af8D0AH/A84B/wPNAf8DzQH/A8sB/wPLAf8DygH/A8kB/wPIAf8D4gH/A0kB/xgAA14B2QPkAf8D4wH/
A1gBwWAAAU4BhAGbAf8BOAG9AecB/wFbAdMB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/AUQBygHw
Af8BEgG2Ae0B/wEAAacB6AH/AQABoQHhAf8BAAGWAdIB/wExAVIBbgH/CAADrQH/A9YB/wO6Af8DuAH/
A7UB/wOzAf8DsQH/A7AB/wOtAf8DqwH/A6oB/wOoAf8DpwH/A6YB/wPIAf8DTQH/CAADCwEPA1QBrQM6
AWEDPwFuA3QB+AHiAeEB3wH/AeEB4AHfAf8DXwHzAzwBZwM8AWYDUwGtAwsBD1AAAVEBhwGeAf8BNwHE
AfAB/wFdAdQB8QH/AYwB4wH0Af8BogHrAfYB/wGDAd8B9AH/AUQBygHwAf8BEgG2Ae0B/wEAAagB6AH/
AQABoQHhAf8BAAGcAdoB/wEyAVMBcAH/CAADsQH/A9kB/wO9Af8DugH/A7gB/wO2Af8DtQH/A7MB/wOw
Af8DrwH/A60B/wOrAf8DqQH/A6gB/wPKAf8DUQH/CAADWgHFBP8CnwGeAf4CngGdAf4C5wHmAf8B1gHV
AdMB/wHXAdYB1AH/AeMB4gHgAf8BkwGSAZAB/gKqAakB/QHpAegB5gH/A1gBwVAAAVMBiQGgAf8BNwHE
Ae8B/wFcAdQB8QH/AY0B4wH0Af8BogHrAfYB/wGCAd8B8wH/AUUBygHwAf8BEgG2Ae0B/wEAAagB6AH/
AQABoQHhAf8BAAGcAdoB/wE0AVYBcgH/CAADtgH/A90B/wPBAf8DvQH/A7wB/wO6Af8DuAH/A7UB/wO0
Af8DsgH/A7AB/wOtAf8DrAH/A6wB/wPPAf8DVQH/CAADZAHnAvkB9wH/Au8B7gH/AtsB2gH/AcoCyQH/
AckByAHGAf8ByQHIAccB/wHJAcgBxwH/AssByQH/AeYB5QHkAf8B5QHkAeIB/wNlAeVQAAFVAYwBogH/
ATkBxgHwAf8BXgHUAfEB/wGMAeMB9AH/AaIB6wH2Af8BggHfAfQB/wFFAcoB8AH/ARIBtgHtAf8BAAGo
AegB/wEAAaIB4gH/AQABmwHbAf8BNgFZAYAB/wgAA1oBvQPaAf8DyAH/A8AB/wO/Af8DvQH/A7oB/wO4
Af8DtwH/A7UB/wOzAf8DsAH/A68B/wOzAf8DwgH/A1oBvQgAA04BlQH2AfUB9AH/AeYB5QHkAf8BvwG+
Ab0B/wLrAeoB/wHUAdMB0gH/AdYB1QHUAf8B4gLhAf8CtAGzAf8B1wHWAdQB/wHiAeEB3wH/A0oBjVAA
AVgBjwGlAf8BOgHGAfAB/wFeAdQB8gH/AY0B4wH0Af8BogHrAfYB/wGDAd8B9AH/AUQBygHwAf8BEgG2
Ae0B/wEAAacB6AH/AQABoQHiAf8BAAGcAdsB/wE4AVwBgwH/CAADWgG9A+MB/wPnAf8D4QH/A+AB/wPg
Af8D3wH/A98B/wPeAf8D3QH/A90B/wPcAf8D2wH/A+AB/wPQAf8DWgG9AwsBDwNVAbUDZAHnAeQB4wHi
Af8B0QHQAc8B/wLwAe8B/wOuAf8DZAHxA2cB8gKsAasB/wLoAecB/wLLAcoB/wHgAd8B3QH/A2EB5ANV
AbUDCwEPSAABWQGSAagB/wE6AcUB8AH/AV8B1AHyAf8BjQHjAfQB/wGiAesB9gH/AYIB3wH0Af8BRAHK
AfAB/wESAbYB7QH/AQABpwHoAf8BAAGhAeEB/wEAAZwB2wH/AToBXwGGAf8IAAMpAT8DzgH/A+wB/wPe
Af8D2AH/A9IB/wPMAf8DyAH/A8cB/wPIAf8DywH/A9AB/wPdAf8D6AH/A6QB/wMrAUIDPwFtAuQB4wH/
AdgB1gHVAf8B0gHRAdAB/wHFAcQBwwH/Ae0B7AHrAf8DVwG6CAADXAHNAegB5wHmAf8BtgG1AbQB/wHW
AdUB0wH/AeIB4QHgAf8C4AHfAf8DPAFmSAABXAGVAasB/wE6AcUB8AH/AV8B1AHyAf8BjQHjAfQB/wGi
AesB9gH/AYMB3wH0Af8BRQHLAfAB/wESAbUB7QH/AQABpwHoAf8BAAGhAeIB/wEAAZwB2gH/AT0BYgGI
Af8MAANaAb0D4wH/A9sB/wPiAf8BtwHQAbgB/wFDAa0BRwH/AVUBqgFDAf8BTwGvAUcB/wE1AaUBQQH/
AawBxQGsAf8DwgH/A9EB/wPTAf8DWgG9BAADQgF2AewB6wHoAf8B2gHZAdcB/wHUAdMB0QH/AcYBxQHE
Af8B3gLcAf8DRgF+CAADUAGaAd0B3AHbAf8ByAHGAcUB/wLiAeEB/wLhAd8B/wHuAe0B7AH/Az8Bb0gA
AV4BmAGuAf8BOgHFAfAB/wFfAdQB8QH/AY0B4wH0Af8BogHrAfYB/wGDAd8B9AH/AUUBygHwAf8BEgG2
Ae0B/wEAAagB6QH/AQABoQHhAf8BAAGcAdoB/wE/AWQBigH/DAADKQE/A9EB/wPzAf8BxwHeAcoB/wFD
AckBhQH/AbMB3AGkAf8B5wHHAVsB/wHcAb8BUgH/AVUBzAGPAf8BLgGtAUcB/wG4AdABuAH/A/EB/wOv
Af8DKwFCBAADLwFKA2AB6wN7AfwB3gHdAdwB/wHLAsoB/wHmAuUB/wNhAeEDMgFQAzgBXANgAesC7gHs
Af8BzALLAf8B5wHmAeUB/wN7AfwDYAHrAywBQ0gAAWEBmwGwAf8BOQHGAfAB/wFfAdQB8gH/AY0B4wH0
Af8BogHrAfYB/wGDAd8B9AH/AUUBygHwAf8BEgG2Ae0B/wEAAagB6AH/AQABoQHhAf8BAAGcAdoB/wFC
AWgBjgH/EAADWgG9A8QB/wFVAc4BiwH/AZkB5AGrAf8BsAHFATwB/wHqAbUBJwH/AeEBogEYAf8BpQGd
AR8B/wGCAcUBjwH/ASgBmgE1Af8DoAH/A1oBvRAAA14BzgHhAeAB3gH/AdkB1wHWAf8BuAK3Af8B4QHg
Ad8B/wOoAf0DqgH9AvYB9QH/AsABvwH/AeoB6QHoAf8C8wHyAf8DXAHJUAABZAGfAbMB/wE5AcYB8AH/
AV0B1AHxAf8BjAHjAfQB/wGiAesB9gH/AYMB3wH0Af8BRQHKAfAB/wESAbYB7QH/AQABpwHoAf8BAAGh
AeEB/wEAAZsB2gH/AUQBawGQAf8YAAFhAX0BbAH8AaIB6QGVAf8B1gHPAUgB/wHiAbMBJgH/AdEBuwEu
Af8BwgGuASEB/wGCAb0BSwH/ASsBcgFXAfwYAANMAZEB4wHiAeAB/wLeAdwB/wHhAeAB3wH/AcwCywH/
AcQBwwHCAf8CzwHOAf8C3gHdAf8C8AHvAf8C8AHvAf8C9gH1Af8DSAGHUAABZQGhAbUB/wFfAdUB9AH/
AZoB6AH3Af8BtQHzAfoB/wHCAfgB/AH/AcMB+AH9Af8BwQH3Af0B/wGvAfAB+wH/AY8B4gH3Af8BXgHQ
AfAB/wEyAbgB5QH/AUcBbgGTAf8YAAFjAX0BbQH8AaIB8AGfAf8B2AHtAa8B/wHeAcUBRwH/AbQB4gFE
Af8BPwHnARgB/wFKAdcBSgH/ATIBdAFeAfwUAAMBAQIDXwHjAeUB5AHhAf8C7gHtAf8C7gHtAf8C6wHq
Af8B4wHiAeEB/wLoAecB/wLqAekB/wLzAfIB/wL1AfQB/wH6AfkB+AH/A1wB31AAAWgBowG4Af8BxQH5
Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/AcUB+QH9Af8BxQH5Af0B/wHFAfkB/QH/
AcUB+QH9Af8BxQH5Af0B/wFJAXEBlQH/GAADYQHcAcgB9wHUAf8B2AH2AcoB/wHnAeMBqQH/AdsBzwFL
Af8BrwHcAUcB/wGdAeoBqwH/A18B4BgAA0ABbwN/Af4DZAHnA18B8wHoAecB5gH/AecB5gHlAf8C7QHs
Af8C+wH6Af8DZwHyA2QB5wN/Af4DPQFoUAABtwHXAeEB/wGMAb0BzAH/AZ0BzwHbAf8BrQHfAegB/wG5
AewB8wH/AcIB9QH6Af8BwgH1AfoB/wG4AesB8QH/AakB2gHjAf8BlAHEAdEB/wFvAagBuAH/AakBxQHR
Af8YAAMtAUUBYAF5AXAB+gHbAfgB6QH/AecB8gHYAf8B7QHlAbMB/wHfAdkBpgH/AV8BiAFfAfsDMgFQ
IAADDwEUAwoBDgNTAaoB7wHuAe0B/wL0AfMB/wNSAaQDCAELAxEBF1gAAv4C/wHjAfEB9AH/AbkB1wHh
Af8BlQG+AcwB/wFvAagBuwH/AWIBmwGwAf8BXgGYAa0B/wFnAaEBswH/AYwBsgHCAf8BsQHNAdcB/wHf
AesB7wH/A/4B/xwAAy4BRwNeAdkBZwF9AWsB/AFnAXwBZwH8A14B3QMyAVAsAAMvAUoDXQHwA2IB7wMs
AUNkAAMRARcDVgGzAVMBVAFTAay0AAMEAQUDEAEVAx8BLQMpAT8DLwFJAy4BSAMoAT0DHgErAw8BFAMD
AQQQAAO3Af8BnAGoAZ4B/wEAAVYBMQH/ARsBkgFTAf8BAAFaATEB/wEDAUcBoAH/AQABRQGeAf8BAAFC
AZsB/wEAAUABmQH/AQABPgGXAf8BAAE7AZQB/wEAAToBkwH/A0sB/wNLAf8cAANBAXIBTAJfAfMBWQJc
Ac8BSwJMAZADIwEzXAADBQEHAx8BLAI+AT0BagJSAVABowFbAlkBxAFdAloB0wFdAloB0wFbAlkBwwFS
AlEBoQM8AWYDHAEoAwQBBgwAAxUBHQNRAaIBIAGVAVcB/wGCAb4BqgH/AS8BpQGCAf8BEAGXAUkB/wET
AZkBTgH/ARcBmQFSAf8BGwGdAVcB/wFVAaoB0gH/AVMBqAHRAf8BAAE8AZUB/yAAAyEBMAErATYBawH8
AYYBrQHhAf8BXQGoAdwB/wE+AZIByQH/AQ8BUQGrAf8BVQJWAbEDHwEtUwABAQMSARgDPgFrAV0CWQHX
AVkCKwH8AawBLAEDAf8B4QFMASAB/wHkAV4BNAH/AdMBSgEYAf8BowFAATcB/QFhAl4B2gI+AT0BagMP
ARQIAAMYASIBUAFSAVABpANWAbMBTAGsAZ8B/wFTAbcBngH/AV0BuwGsAf8BXQG7Aa4B/wFeAbsBsAH/
AYABvAGzAf8BFgGaAVoB/wEzAZUBxwH/AVYBqwHTAf8BAAE/AZgB/yAAAVQCVgGrAUwBnQHRAf8BmQG8
AesB/wFQAaAB4wH/AZYBuQHqAf8BlAG4AeoB/wE/AZMBygH/AisBZwH8A0MBeFAAAxsBJgNZAdIBHAEG
AQAB/wGKATsBIwH/AcoBhgFFAf8B9gG8AZwB/wH5AcwBtwH/AeMBoAFXAf8BsQFWATwB/wFYATIBEwH/
AV4CWAHdAxwBKAgAAVUBVgFVAbEDVgGzA1YBswE7AaQBkQH/AU4BtgGbAf8BRwGyAZsB/wFJAbIBngH/
AUsBswGhAf8BhQG/AbYB/wEdAZ4BggH/ATgBmQHJAf8BWgGtAdQB/wEAAUMBnAH/HAADHwEtASsBTAFv
AfwBnQG/AewB/wFIAZwB4gH/AToBkwHfAf8BNwGRAd8B/wE+AZQB4AH/AZUBuAHqAf8BhgGtAeEB/wEo
AYMBuwH/AUsCTAGQBAADnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOd
Af8DnQH/A50B/wOdAf8DnQH/CAABUwJPAaUBMwEYAQAB/wFYAUMBLgH/AY8BVQFAAf8BrAGIAUoB/wHC
AaMBiAH/AcEBpQGOAf8BswGYAYEB/wGRAVUBPwH/AVMBOgElAf8BQgEbAQAB/wFWAlUBsQgAAwgBCwNV
AbIDVgGzAVUBsgGoAf8BXAG9AacB/wGHAcEBtQH/AYYBwQG2Af8BhwHBAbcB/wGIAcEBuQH/ASMBogGI
Af8BPQGcAcsB/wFeAbAB1QH/AQIBRgGfAf8QAAMrAUIDSAGEAVUCVwG3AUwCXwHzAVUBpAHXAf8BoQHC
Ae0B/wGfAcAB7QH/AZ0BvwHtAf8BUwGjAeQB/wE5AZIB3wH/ATcBkAHeAf8BWgGnAeYB/wGSAbYB6AH/
ASIBXgG3Af8DNwFaA50B/wG6Ar0B/wHmAuwB/wHmAu0B/wHnAu0B/wHoAu4B/wHpAu8B/wHpAu8B/wHq
Au8B/wHqAvAB/wHrAvAB/wHrAvEB/wHsAvEB/wHsAvEB/wG9Ar8B/wOdAf8EAAM5AV8BVAE0ARkB/wHD
AbEBogH/AbYBnAGDAf8BpgFYASsB/wGoAVYBKAH/AcMBpAGHAf8B2AHGAbAB/wG9AakBiwH/AV4BPgEe
Af8BOwEbAQAB/wExAQ0BAAH/ATgBEQEAAf8DMwFTCAADBgEIA1UBsgEuAaABigH/AZMByQG6Af8BPgGv
AZcB/wEjAaIBgwH/ASQBowGHAf8BJgGkAYsB/wElAaoBkgH/ATMBwgHtAf8BgQG0AdcB/wEHAUoBowH/
DAADTAGTAUMBlwHPAf8BWgGoAdkB/wGNAbQB4gH/AaMBxAHtAf8BpwHHAe4B/wFDAZcBzQH/ARMBVAGy
Af8BPgGTAckB/wGfAcAB7QH/AVcBlgGjAf8BngGWAScB/wFbAZQBkQH/AY0BswHpAf8BWAGlAdgB/wFa
Al4B2AQAA1wB6gHbAuIB/wHNAs8B/wPLAf8DzAH/A84B/wPPAf8D0AH/A9IB/wPTAf8D1QH/AdcC2AH/
AecC7AH/A20B9wQAAyIBMQFWAlUBsQFGARoBAAH/AaoBhQE+Af8BsgFRAQ8B/wGtAS4BAAH/AboBSwED
Af8B6gHVAb8B/wH9AfwB+gH/AdYBvgGmAf8BkAE+AQsB/wFBAQ8BAAH/AUIBHwEAAf8BOwEbAQAB/wNX
AcUDHAEnCAADBAEGARQBlAFWAf8BTQG5AZ4B/wEoAaYBiQH/AVgBsQHVAf8BVAGtAdQB/wFQAasB0gH/
AT4BugHkAf8BAAGZAUgB/wEGAY4BNwH/AQkBTwGaAf8MAAFIAmIB9gGuAc0B8AH/AbABzwHwAf8BmAG/
AewB/wFdAa4B5wH/AaoBygHvAf8BHAFaAbgB/wQAARQBVQGzAf8BogHDAe0B/wGoAZcBEAH/AcQBtQE5
Af8BrAGXAQUB/wE6AZMB3wH/AZgBuwHrAf8BAAFDAZ8B/wQAA1wB6gHZAuEB/wHLAswB/wPHAf8DyAH/
A8oB/wPLAf8DzQH/A84B/wPQAf8D0QH/AdMC1AH/AeUC6wH/A20B9wQAAy4BRwNZAewBQQEPAQAB/wGZ
AS4BAAH/AbgBRgEAAf8BwgFCAQAB/wHJAVQBAgH/AeYBvwGUAf8B7AHUAbYB/wHNAZwBQQH/AagBSwEL
Af8BmQFMASAB/wGjAYwBUQH/AV4BRQEuAf8CUQE/AfcBNQI0AVUMAAE3AY4BxAH/ATEBrAGLAf8BLgGq
AY8B/wFdAbUB2AH/AVkBsgHWAf8BVgGvAdUB/wFSAawB0wH/AQMBkAFBAf8BOAGoAYQB/wEAAVcBMgH/
AxQBGwgAAVoCYAHeAagByQHtAf8BhAGnAe0B/wE3AUkB7QH/AUkBjgHpAf8BrQHNAfAB/wFMAZ0B0gH/
AR0BWwG5Af8BRgGZAc4B/wGlAcUB7gH/AZUBmgFIAf8BrQGXAQUB/wGdAZcBLAH/AUUBmwHiAf8BmAG7
AeoB/wFIAmIB9gQAA1wB6gHXAt8B/wHHAskB/wPCAf8DxAH/A8UB/wPIAf8DyQH/A8oB/wPMAf8DzQH/
AdAC0QH/AeMC6gH/A20B9wQAAzkBXwJAASQB/QFTARoBAAH/Aa4BOAEAAf8BwAFAAQAB/wHnAZYBJQH/
AegBsgFZAf8B5AGxAVkB/wHSAYkBGAH/Ab0BRQEAAf8BqAEzAQAB/wG4AY0BPAH/AdQBwwGyAf8BmAGE
AU0B/wE6ARwBAAH/AT4CPQFqDAABPQGRAckB/wGkAcwB5AH/AYcBuwHbAf8BHgGhAVkB/wEYAZwBUwH/
ARMBmgFPAf8BDgGWAUkB/wEqAaMBgQH/AYQBwAGrAf8BIQGWAVgB/wNRAaIDFQEdBAADUQGcAZIBuQHl
Af8BTQFTAfYB/wGBAYQB9QH/Ah8B8AH/AZABuwHrAf8BrgHNAfAB/wGsAcwB8AH/AaoBygHwAf8BhQGy
AekB/wE9AakBwQH/ASMBswGNAf8BNQGoAbYB/wFPAaEB5AH/AZcBugHoAf8DXQHtBAADXAHqAdYC3wH/
AcMCxQH/A8AB/wPAAf8DwgH/A8MB/wPEAf8DxQH/A8gB/wPJAf8DzQH/AeAC6AH/A20B9wQAAzcBWgJN
ASgB+gGDASUBAAH/AcsBTwEAAf8B5QGLARwB/wH+AbYBUQL/AeMBwgH/AfQBvAGFAf8B1gFWAQgB/wHF
AU0BAAH/AboBQgEAAf8BrwFWARgB/wGuAYgBPAH/AZQBVQE8Af8BOwEdAQEB/wM8AWYMAAFCAZUBzQH/
AagBzwHlAf8BjAG/Ad0B/wEkAaUBgQH/AY0BxQG4Af8BiQHDAbQB/wGGAcEBsQH/AYQBvwGvAf8BVgG5
AZ8B/wFNAa0BoAH/A1YBswFQAVIBUAGkAxgBIgMjATMBKwFkAXoB/AGSAaQB9QH/ATgBOQH2Af8BMAGG
AfQB/wEaAaYB+wH/ATsBqwHyAf8BXQGvAecB/wFaAa0B5wH/AVcBqgHmAf8BHgG2AYAB/wE/AcgBlwH/
ARoBtwFZAf8BXAGsAecB/wGPAbUB4wH/AVoCXgHVBAADYAHWAccCzQH/AdsC5AH/AdsC5AH/AdsC5QH/
AdwC5QH/AdwC5QH/Ad0C5gH/Ad0C5gH/Ad4C5wH/Ad8C6AH/AeAC6AH/Ac0C0wH/A18B4wQAAyYBOQFg
AloB3gGOAS0BAAH/AewBngEyAf8B/gG/AYUC/wHMAaEC/wHfAbsB/wH+AcIBXgH/AeIBjgEoAf8B0wGE
ARkB/wHKAVgBCwH/AbUBTwEJAf8BlwFAAQYB/wGBAT0BGAH/A1kB7AMuAUgMAAFGAZgB0AH/AasB0QHn
Af8BkAHCAd8B/wErAakBiAH/AZEByQG7Af8BVQG6AaUB/wFRAbgBoQH/AU0BtgGeAf8BUQG4AZ0B/wE8
AaUBkgH/A1YBswNWAbMBVQFWAVUBsQQAA0kBhwGGAa8B4QH/AbkB1wHzAf8BEQGmAf4B/wFLAb8C/wEK
AaMC/wFFAb4B8AH/ARkBzgH7Af8BOQG+AfEB/wExAbMBoAH/ARoBtwFYAf8BJgGzAZAB/wGnAcgB7gH/
AVYBpQHWAf8BTwJRAZwEAAMsAUMDWwHIA50B/wOdAf8DnQH/A50B/wOdAf8DnQH/A50B/wOdAf8DnQH/
A50B/wNeAd0DMQFOBAADCQEMA0sBjgHAAU0BDAL/AbwBXgH/AfoBzgGnAf8B+AHbAb4C/wHiAcYC/wG+
AYYB/wH0AawBVAH/AewBwgGaAf8B4gG1AYsB/wG4AVQBEgH/AZ0BQwELAf8BiAFDAR8B/wNPAaUDEAEV
DAABSgGbAdMB/wGuAdQB6AH/AasB0wHoAf8BOAGxAZAB/wGbAc4BwAH/AZkBzQG9Af8BlgHLAbsB/wGV
AcoBuQH/AYABvwGoAf8BVgGzAakB/wNWAbMDVQGyAwgBCwQAAwQBBgNRAZ8BhQGuAeEB/wE5AbIB+QH/
AQoBowL/AR8BqQH7Af8BDwHTAf4B/wFLAeIC/wEKAdUC/wFeAbAB6AH/AVsBrQHnAf8BqQHKAe8B/wGl
AcUB7QH/ASsBVgFxAfwDIQEwRAADEwEaAmQBUwHxAdgBngFRAf8B5wHTAcAB/wH8AfUB7gL/AfgB6wL/
AeUBwgH/AfYBuQGCAf8B8gHSAbgB/wHuAdIBtgH/AcIBhgEtAf8BpwFVASYB/wJNASkB+gMdASkQAAFN
AZ0B1QH/AUsBmwHTAf8BSAGaAdIB/wEoAaEBjAH/ASMBnwGKAf8BIAGdAYUB/wEcAZkBgAH/ATUBpQGS
Af8BXgG4AbEB/wEvAaEBiwH/A1UBsgMGAQgQAANCAXUBXwJiAfYBjgG2AeMB/wG5AdcB8wH/ATwB1QH7
Af8BCQHVAv8BIAHRAfsB/wGzAdIB8gH/AbEB0AHxAf8BkgG4AeIB/wFBAZUBzAH/A0oBikwAAzUBVwGp
AUEBEwH/AcoBuAGoBv8B/gH8Av8B9gHiAf8B+wHFAaAB/wHkAbkBlQH/AdsBrAFcAf8BwwGOATsB/wGT
AUMBFwH/AT4CPQFqMAABUwJUAawDVgGzA1YBswMEAQYYAAMWAR4DVAGuAVUBowHcAf8BkQG4AeQB/wGo
AcoB7AH/AaUBxwHsAf8BjQG1AeIB/wFHAZoB0gH/AVoCXwHbAzEBTlQAAzIBUQJkAVkB7AHQAbIBlQH/
AewB4AHZAf8B5gHVAcQB/wHTAbABlAH/AdMBpgFWAf8BywGPATQB/wFnAWUBWQHyAToCOQFgNAABUwJU
AawDVgGzAwQBBiQAAysBQgNMAZABWwJdAdIBWQJcAc8DTgGZAy0BRWAAAxEBFwNEAXoCWgFXAcUCZQFe
AeUCYQFYAeYCXAFZAckCSAFHAYMDFQEdEAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEB
FgAD/wEAAeABBwIAAfwBPwIAAcABAwIAAfwBPwIAAcABAwIAAcABAwIAAcABAwIAAcABAwIAAcABAwIA
AcABAwIAAcABAwIAAcABAwIAAcABAwYAAcABAwIAAQEBgAIAAcABAwGAAgEBgAIAAcABAwGAAQEEAAHA
AQMBwAEDAcABAwIAAcABAwHwAQ8BwAEDAgABwAEDAfABDwGAAQMCAAHAAQMB8AEPAcABAwIAAcABAwHw
AQ8B8AEPAgABwAEDAfgBHwH8AT8CAAHjBf8B4AEHAYABAQH8AR8C/wHAAQMBgAEHAfgBBwL/AYABAwEA
AQcB+AEDAv8BwAEDAQABBwHwAQECAAHAAQMBAAEHAYADAAGAAQEBgAEHAgABgAEBAgABwAEHAQEBAAGA
AQECAAHgAQMCAAGAAQECAAHgAQECAAGAAQECAAHgAwABgAEBAgAB4AEAAYABAAGAAQECAAHgAQABgAEA
Av8BgAEBAeABAQHgAQEC/wHAAQMB/wHDAfABAwL/AeABBwH/AccB/AEPAv8B8AEPCw==
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
@@ -109,17 +113,32 @@ Public Class frmOptions
Friend WithEvents lblExperimental As System.Windows.Forms.Label
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()
@@ -190,14 +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()
@@ -210,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()
@@ -224,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()
@@ -241,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
@@ -273,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)
@@ -291,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
'
@@ -425,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
@@ -663,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
@@ -719,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
@@ -744,7 +778,7 @@ Public Class frmOptions
'chkAlwaysShowPanelSelectionDlg
'
Me.chkAlwaysShowPanelSelectionDlg.AutoSize = True
Me.chkAlwaysShowPanelSelectionDlg.Location = New System.Drawing.Point(3, 95)
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
@@ -754,7 +788,7 @@ Public Class frmOptions
'chkShowLogonInfoOnTabs
'
Me.chkShowLogonInfoOnTabs.AutoSize = True
Me.chkShowLogonInfoOnTabs.Location = New System.Drawing.Point(3, 26)
Me.chkShowLogonInfoOnTabs.Location = New System.Drawing.Point(3, 49)
Me.chkShowLogonInfoOnTabs.Name = "chkShowLogonInfoOnTabs"
Me.chkShowLogonInfoOnTabs.Size = New System.Drawing.Size(203, 17)
Me.chkShowLogonInfoOnTabs.TabIndex = 1
@@ -764,7 +798,7 @@ Public Class frmOptions
'chkDoubleClickClosesTab
'
Me.chkDoubleClickClosesTab.AutoSize = True
Me.chkDoubleClickClosesTab.Location = New System.Drawing.Point(3, 72)
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
@@ -774,7 +808,7 @@ Public Class frmOptions
'chkShowProtocolOnTabs
'
Me.chkShowProtocolOnTabs.AutoSize = True
Me.chkShowProtocolOnTabs.Location = New System.Drawing.Point(3, 49)
Me.chkShowProtocolOnTabs.Location = New System.Drawing.Point(3, 72)
Me.chkShowProtocolOnTabs.Name = "chkShowProtocolOnTabs"
Me.chkShowProtocolOnTabs.Size = New System.Drawing.Size(166, 17)
Me.chkShowProtocolOnTabs.TabIndex = 2
@@ -784,7 +818,7 @@ Public Class frmOptions
'chkOpenNewTabRightOfSelected
'
Me.chkOpenNewTabRightOfSelected.AutoSize = True
Me.chkOpenNewTabRightOfSelected.Location = New System.Drawing.Point(3, 3)
Me.chkOpenNewTabRightOfSelected.Location = New System.Drawing.Point(3, 26)
Me.chkOpenNewTabRightOfSelected.Name = "chkOpenNewTabRightOfSelected"
Me.chkOpenNewTabRightOfSelected.Size = New System.Drawing.Size(280, 17)
Me.chkOpenNewTabRightOfSelected.TabIndex = 0
@@ -795,7 +829,7 @@ Public Class frmOptions
'
Me.chkMCWarnings.AutoSize = True
Me.chkMCWarnings.Enabled = False
Me.chkMCWarnings.Location = New System.Drawing.Point(19, 214)
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
@@ -806,7 +840,7 @@ Public Class frmOptions
'
Me.chkMCErrors.AutoSize = True
Me.chkMCErrors.Enabled = False
Me.chkMCErrors.Location = New System.Drawing.Point(19, 237)
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
@@ -817,7 +851,7 @@ Public Class frmOptions
'
Me.chkMCInformation.AutoSize = True
Me.chkMCInformation.Enabled = False
Me.chkMCInformation.Location = New System.Drawing.Point(19, 191)
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
@@ -827,7 +861,7 @@ Public Class frmOptions
'lblSwitchToErrorsAndInfos
'
Me.lblSwitchToErrorsAndInfos.AutoSize = True
Me.lblSwitchToErrorsAndInfos.Location = New System.Drawing.Point(3, 171)
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
@@ -836,7 +870,7 @@ Public Class frmOptions
'chkUseOnlyErrorsAndInfosPanel
'
Me.chkUseOnlyErrorsAndInfosPanel.AutoSize = True
Me.chkUseOnlyErrorsAndInfosPanel.Location = New System.Drawing.Point(3, 146)
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
@@ -846,7 +880,7 @@ Public Class frmOptions
'chkShowFullConnectionsFilePathInTitle
'
Me.chkShowFullConnectionsFilePathInTitle.AutoSize = True
Me.chkShowFullConnectionsFilePathInTitle.Location = New System.Drawing.Point(3, 128)
Me.chkShowFullConnectionsFilePathInTitle.Location = New System.Drawing.Point(3, 141)
Me.chkShowFullConnectionsFilePathInTitle.Name = "chkShowFullConnectionsFilePathInTitle"
Me.chkShowFullConnectionsFilePathInTitle.Size = New System.Drawing.Size(239, 17)
Me.chkShowFullConnectionsFilePathInTitle.TabIndex = 4
@@ -856,7 +890,7 @@ Public Class frmOptions
'chkShowSystemTrayIcon
'
Me.chkShowSystemTrayIcon.AutoSize = True
Me.chkShowSystemTrayIcon.Location = New System.Drawing.Point(3, 176)
Me.chkShowSystemTrayIcon.Location = New System.Drawing.Point(3, 187)
Me.chkShowSystemTrayIcon.Name = "chkShowSystemTrayIcon"
Me.chkShowSystemTrayIcon.Size = New System.Drawing.Size(172, 17)
Me.chkShowSystemTrayIcon.TabIndex = 5
@@ -866,7 +900,7 @@ Public Class frmOptions
'chkMinimizeToSystemTray
'
Me.chkMinimizeToSystemTray.AutoSize = True
Me.chkMinimizeToSystemTray.Location = New System.Drawing.Point(3, 200)
Me.chkMinimizeToSystemTray.Location = New System.Drawing.Point(3, 210)
Me.chkMinimizeToSystemTray.Name = "chkMinimizeToSystemTray"
Me.chkMinimizeToSystemTray.Size = New System.Drawing.Size(139, 17)
Me.chkMinimizeToSystemTray.TabIndex = 6
@@ -876,7 +910,7 @@ Public Class frmOptions
'chkShowDescriptionTooltipsInTree
'
Me.chkShowDescriptionTooltipsInTree.AutoSize = True
Me.chkShowDescriptionTooltipsInTree.Location = New System.Drawing.Point(3, 104)
Me.chkShowDescriptionTooltipsInTree.Location = New System.Drawing.Point(3, 118)
Me.chkShowDescriptionTooltipsInTree.Name = "chkShowDescriptionTooltipsInTree"
Me.chkShowDescriptionTooltipsInTree.Size = New System.Drawing.Size(231, 17)
Me.chkShowDescriptionTooltipsInTree.TabIndex = 3
@@ -914,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
@@ -924,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
@@ -954,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)
@@ -980,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
@@ -990,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)
@@ -1021,6 +1034,8 @@ 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)
@@ -1038,6 +1053,26 @@ Public Class frmOptions
Me.tabTabsAndPanels.Text = "Tabs & Panels"
Me.tabTabsAndPanels.UseVisualStyleBackColor = True
'
'chkAlwaysShowPanelTabs
'
Me.chkAlwaysShowPanelTabs.AutoSize = True
Me.chkAlwaysShowPanelTabs.Location = New System.Drawing.Point(3, 3)
Me.chkAlwaysShowPanelTabs.Name = "chkAlwaysShowPanelTabs"
Me.chkAlwaysShowPanelTabs.Size = New System.Drawing.Size(139, 17)
Me.chkAlwaysShowPanelTabs.TabIndex = 7
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)
@@ -1046,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)
@@ -1169,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)
@@ -1342,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
@@ -1386,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
@@ -1400,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
@@ -1418,6 +1581,7 @@ Public Class frmOptions
Me.cboLanguage.SelectedIndex = 0
End If
chkAlwaysShowPanelTabs.Checked = Settings.AlwaysShowPanelTabs
Me.chkShowDescriptionTooltipsInTree.Checked = My.Settings.ShowDescriptionTooltipsInTree
Me.chkShowSystemTrayIcon.Checked = My.Settings.ShowSystemTrayIcon
Me.chkMinimizeToSystemTray.Checked = My.Settings.MinimizeToTray
@@ -1425,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
@@ -1485,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
@@ -1505,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
@@ -1513,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
@@ -1524,6 +1702,9 @@ Public Class frmOptions
My.Settings.OverrideUICulture = ""
End If
Settings.AlwaysShowPanelTabs = chkAlwaysShowPanelTabs.Checked
frmMain.ShowHidePanelTabs()
My.Settings.ShowDescriptionTooltipsInTree = Me.chkShowDescriptionTooltipsInTree.Checked
My.Settings.ShowSystemTrayIcon = Me.chkShowSystemTrayIcon.Checked
My.Settings.MinimizeToTray = Me.chkMinimizeToSystemTray.Checked
@@ -1544,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
@@ -1603,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
@@ -1625,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)
@@ -1644,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"
@@ -1685,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
@@ -1709,14 +1897,14 @@ 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
chkShowSystemTrayIcon.Text = My.Language.strAlwaysShowSysTrayIcon
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
@@ -1739,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
@@ -1757,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)
@@ -1766,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
@@ -1816,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
@@ -1874,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), "", "", "", "", 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
@@ -1893,10 +2160,50 @@ Public Class frmOptions
End If
End If
End Sub
#End Region
Private Sub lblProxyPort_Click(sender As System.Object, e As System.EventArgs) Handles lblProxyPort.Click
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

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

@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.261
' Runtime Version:4.0.30319.296
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -163,6 +163,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Always show panel tabs.
'''</summary>
Friend Shared ReadOnly Property strAlwaysShowPanelTabs() As String
Get
Return ResourceManager.GetString("strAlwaysShowPanelTabs", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Always show notification area icon.
'''</summary>
@@ -254,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
@@ -552,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
@@ -643,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
@@ -909,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>
@@ -918,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>
@@ -990,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>
@@ -1062,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>
@@ -1317,6 +1352,15 @@ Namespace My
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Could not find ToolStrip control in FilteredPropertyGrid..
'''</summary>
Friend Shared ReadOnly Property strCouldNotFindToolStripInFilteredPropertyGrid() As String
Get
Return ResourceManager.GetString("strCouldNotFindToolStripInFilteredPropertyGrid", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Installed version.
'''</summary>
@@ -1326,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>
@@ -1515,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>
@@ -1826,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
@@ -1933,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>
@@ -2131,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>
@@ -2339,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
@@ -2347,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>
@@ -2734,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>
@@ -2896,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>
@@ -2914,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>
@@ -3194,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>
@@ -3275,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>
@@ -3410,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>
@@ -3725,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>
@@ -3860,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>
@@ -4268,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>
@@ -4358,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>
@@ -4701,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
@@ -5006,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>
@@ -5259,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
@@ -5366,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>
@@ -5474,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>
@@ -5493,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
@@ -5502,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
@@ -5519,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..
@@ -5539,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
@@ -5548,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
@@ -5593,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

@@ -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>
@@ -219,12 +219,18 @@
<data name="strButtonNew" xml:space="preserve">
<value>&amp;Neu</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp;Okay</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Eigenschaften</value>
</data>
<data name="strButtonScan" xml:space="preserve">
<value>&amp;Scannen</value>
</data>
<data name="strButtonStop" xml:space="preserve">
<value>&amp;Halt</value>
</data>
<data name="strButtonTestProxy" xml:space="preserve">
<value>Proxy prüfen</value>
</data>
@@ -247,6 +253,9 @@ Bitte verwenden Sie Datei - Verbindungen laden für normale Verbindungs Dateien!
<data name="strCategoryDisplay" xml:space="preserve">
<value>Anzeige</value>
</data>
<data name="strCategoryGateway" xml:space="preserve">
<value>Gateway</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>Allgemein</value>
</data>
@@ -390,6 +399,9 @@ VncSharpNG Control Version {0}</value>
<data name="strColumnFilename" xml:space="preserve">
<value>Dateiname</value>
</data>
<data name="strColumnHostnameIP" xml:space="preserve">
<value>Hostname/IP</value>
</data>
<data name="strColumnMessage" xml:space="preserve">
<value>Nachricht</value>
</data>
@@ -426,6 +438,12 @@ VncSharpNG Control Version {0}</value>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Konfigurationsfenster laden fehlgeschlagen!</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>
</data>
<data name="strConfirmDeleteExternalTool" xml:space="preserve">
<value>Sind Sie sicher dass Sie das extene Programm "{0}" entfernen möchten?</value>
</data>
@@ -441,9 +459,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>
@@ -570,18 +585,57 @@ Starte mit neuer Datei.</value>
<data name="strEncryptCompleteConnectionFile" xml:space="preserve">
<value>Verbindungsdaten Datei vollständig verschlüsseln</value>
</data>
<data name="strEndIP" xml:space="preserve">
<value>Letzte IP</value>
</data>
<data name="strEndPort" xml:space="preserve">
<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) 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) ist fehlgeschlagen. {0}</value>
</data>
<data name="strErrorCode" xml:space="preserve">
<value>Fehler Nummer {0}.</value>
</data>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>Die Verbindungsliste konnte nicht gespeichert werden.</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve">
<value>Entschlüsselung ist gescheitert. {0}</value>
</data>
<data name="strErrorEncryptionFailed" xml:space="preserve">
<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>
</data>
<data name="strErrors" xml:space="preserve">
<value>Fehler</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>Die Verbindungseinstellungen konnten nicht geladen werden.{0}{0}{2}{0}{3}{0}{0}Um Datenverlust zu vermeiden, wird {1} jetzt beendet.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>VerifyDatabaseVersion (Config.Connections.Save) ist fehlgeschlagen. {0}</value>
</data>
<data name="strExpandAllFolders" xml:space="preserve">
<value>Alle Ordner erweitern</value>
</data>
<data name="strExperimental" xml:space="preserve">
<value>Experimentell</value>
</data>
<data name="strExport" xml:space="preserve">
<value>Exportieren</value>
</data>
<data name="strExportmRemoteXML" xml:space="preserve">
<value>mRemote/mRemoteNG XML exportieren</value>
</data>
@@ -627,6 +681,9 @@ Starte mit neuer Datei.</value>
<data name="strGetConnectionInfoFromSqlFailed" xml:space="preserve">
<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>
</data>
<data name="strGroupboxAutomaticReconnect" xml:space="preserve">
<value>Automatisches wiederverbinden</value>
</data>
@@ -639,15 +696,15 @@ Starte mit neuer Datei.</value>
<data name="strGroupboxFiles" xml:space="preserve">
<value>Dateien</value>
</data>
<data name="strHost" xml:space="preserve">
<value>Host</value>
</data>
<data name="strHttpConnectFailed" xml:space="preserve">
<value>Verbindung mit HTTP fehlgeschlagen!</value>
</data>
<data name="strHttpConnectionFailed" xml:space="preserve">
<value>Erstellen der HTTP Verbindung fehlgeschlagen!</value>
</data>
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Ändern des Webseiten Titels fehlgeschlagen!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Setzen der HTTP Parameter fehlgeschlagen!</value>
</data>
@@ -708,6 +765,9 @@ Starte mit neuer Datei.</value>
<data name="strIntAppKillFailed" xml:space="preserve">
<value>Beenden des Internen Programmes fehlgeschlagen!</value>
</data>
<data name="strIntAppParentHandle" xml:space="preserve">
<value>Panel Handle: {0}</value>
</data>
<data name="strIntAppResizeFailed" xml:space="preserve">
<value>Internes Programm Größenanpassung fehlgeschlagen!</value>
</data>
@@ -744,12 +804,21 @@ Starte mit neuer Datei.</value>
<data name="strLabelFilename" xml:space="preserve">
<value>Dateiname:</value>
</data>
<data name="strLabelHostname" xml:space="preserve">
<value>Hostname:</value>
</data>
<data name="strLabelOptions" xml:space="preserve">
<value>Optionen:</value>
</data>
<data name="strLabelPassword" xml:space="preserve">
<value>Passwort:</value>
</data>
<data name="strLabelPort" xml:space="preserve">
<value>Port:</value>
</data>
<data name="strLabelPortableEdition" xml:space="preserve">
<value>Portable Edition</value>
</data>
<data name="strLabelProtocol" xml:space="preserve">
<value>Protokoll:</value>
</data>
@@ -768,6 +837,15 @@ Starte mit neuer Datei.</value>
<data name="strLabelSelectPanel" xml:space="preserve">
<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>
</data>
<data name="strLabelSQLDatabaseName" xml:space="preserve">
<value>Datenbank:</value>
</data>
<data name="strLabelSQLServerDatabaseName" xml:space="preserve">
<value>Datenbank:</value>
</data>
<data name="strLabelUsername" xml:space="preserve">
<value>Benutzername:</value>
</data>
@@ -921,6 +999,9 @@ Starte mit neuer Datei.</value>
<data name="strMenuPaste" xml:space="preserve">
<value>Einfügen</value>
</data>
<data name="strMenuPortScan" xml:space="preserve">
<value>Port Scan</value>
</data>
<data name="strMenuQuickConnectToolbar" xml:space="preserve">
<value>Direkt Verbinden Symbolleiste</value>
</data>
@@ -972,6 +1053,9 @@ Starte mit neuer Datei.</value>
<data name="strMenuShowText" xml:space="preserve">
<value>Text anzeigen</value>
</data>
<data name="strMenuSmartSize" xml:space="preserve">
<value>SmartSize (RDP/VNC)</value>
</data>
<data name="strMenuSSHFileTransfer" xml:space="preserve">
<value>SSH Datei Übertragung</value>
</data>
@@ -1041,6 +1125,9 @@ Starte mit neuer Datei.</value>
<data name="strNone" xml:space="preserve">
<value>Keine Angabe</value>
</data>
<data name="strNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="strNoSmartSize" xml:space="preserve">
<value>Keine automatische Größenanpassung (SmartSize)</value>
</data>
@@ -1057,6 +1144,9 @@ 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="strPanelName" xml:space="preserve">
<value>Panel Name</value>
</data>
<data name="strPasswordProtect" xml:space="preserve">
<value>Passwort Schutz</value>
</data>
@@ -1102,6 +1192,12 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyDescriptionDomain" xml:space="preserve">
<value>Geben Sie hier ihre Domäne ein.</value>
</data>
<data name="strPropertyDescriptionEnableDesktopComposition" xml:space="preserve">
<value>Wählen, ob die Desktopgestaltung genutzt werden soll.</value>
</data>
<data name="strPropertyDescriptionEnableFontSmoothing" xml:space="preserve">
<value>Wählen Sie, ob eine Schriftglättung genutzt werden soll oder nicht.</value>
</data>
<data name="strPropertyDescriptionEncoding" xml:space="preserve">
<value>Wählen Sie die zu verwendende Codierung.</value>
</data>
@@ -1169,7 +1265,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<value>Wählen Sie, ob ihre lokalen Drucker auf dem entfernten System zur Verfügung stehen sollen.</value>
</data>
<data name="strPropertyDescriptionRedirectSmartCards" xml:space="preserve">
<value>Wählen Sie, ob Ihre lokalen smart Cards auf dem entfernten System zur Verfügung stehen sollen.</value>
<value>Wählen Sie, ob lokale Smartcards auf dem Remotehost verfügbar sein sollen.</value>
</data>
<data name="strPropertyDescriptionRedirectSounds" xml:space="preserve">
<value>Wählen Sie, wie Töne auf dem entfernten System wiedergegeben werden sollen.</value>
@@ -1210,6 +1306,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyDescriptionVNCProxyUsername" xml:space="preserve">
<value>Geben Sie Ihren Benutzernamen ein.</value>
</data>
<data name="strPropertyNameAddress" xml:space="preserve">
<value>Hostname/IP</value>
</data>
<data name="strPropertyNameAll" xml:space="preserve">
<value>Alles</value>
</data>
@@ -1240,6 +1339,12 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameDomain" xml:space="preserve">
<value>Domäne</value>
</data>
<data name="strPropertyNameEnableDesktopComposition" xml:space="preserve">
<value>Desktopgestaltung</value>
</data>
<data name="strPropertyNameEnableFontSmoothing" xml:space="preserve">
<value>Schriftglättung</value>
</data>
<data name="strPropertyNameEncoding" xml:space="preserve">
<value>Codierung</value>
</data>
@@ -1261,9 +1366,18 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameMACAddress" xml:space="preserve">
<value>MAC Adresse</value>
</data>
<data name="strPropertyNameName" xml:space="preserve">
<value>Name</value>
</data>
<data name="strPropertyNamePanel" xml:space="preserve">
<value>Panel</value>
</data>
<data name="strPropertyNamePassword" xml:space="preserve">
<value>Passwort</value>
</data>
<data name="strPropertyNamePort" xml:space="preserve">
<value>Port</value>
</data>
<data name="strPropertyNameProtocol" xml:space="preserve">
<value>Protokoll</value>
</data>
@@ -1273,6 +1387,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameRDGatewayDomain" xml:space="preserve">
<value>Gateway Domäne</value>
</data>
<data name="strPropertyNameRDGatewayHostname" xml:space="preserve">
<value>Gateway-Hostname</value>
</data>
<data name="strPropertyNameRDGatewayPassword" xml:space="preserve">
<value>Gateway Passwort</value>
</data>
@@ -1291,12 +1408,21 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameRedirectKeys" xml:space="preserve">
<value>Tastenkombinationen</value>
</data>
<data name="strPropertyNameRedirectPorts" xml:space="preserve">
<value>Ports</value>
</data>
<data name="strPropertyNameRedirectPrinters" xml:space="preserve">
<value>Drucker</value>
</data>
<data name="strPropertyNameRedirectSmartCards" xml:space="preserve">
<value>Smartcards</value>
</data>
<data name="strPropertyNameRedirectSounds" xml:space="preserve">
<value>Töne</value>
</data>
<data name="strPropertyNameRenderingEngine" xml:space="preserve">
<value>Rendering-Engine</value>
</data>
<data name="strPropertyNameResolution" xml:space="preserve">
<value>Auflösung</value>
</data>
@@ -1315,9 +1441,15 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPropertyNameViewOnly" xml:space="preserve">
<value>View-Only</value>
</data>
<data name="strPropertyNameVNCProxyAddress" xml:space="preserve">
<value>Proxy-Adresse</value>
</data>
<data name="strPropertyNameVNCProxyPassword" xml:space="preserve">
<value>Proxy Passwort</value>
</data>
<data name="strPropertyNameVNCProxyPort" xml:space="preserve">
<value>Proxy Port</value>
</data>
<data name="strPropertyNameVNCProxyType" xml:space="preserve">
<value>Proxy Typ</value>
</data>
@@ -1353,9 +1485,15 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPuttyGetSessionsFailed" xml:space="preserve">
<value>Auslesen der PuTTY Verbindungsliste fehlgeschlagen!</value>
</data>
<data name="strPuttyHandle" xml:space="preserve">
<value>Putty Handle: {0}</value>
</data>
<data name="strPuttyKillFailed" xml:space="preserve">
<value>Beenden von PuTTY fehlgeschlagen!</value>
</data>
<data name="strPuttyParentHandle" xml:space="preserve">
<value>Panel Handle: {0}</value>
</data>
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Ändern der Größe fehlgschlagen!</value>
</data>
@@ -1371,6 +1509,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strPuttyStuff" xml:space="preserve">
<value>--- PuTTY ---</value>
</data>
<data name="strPuttyTitle" xml:space="preserve">
<value>Putty Title: {0}</value>
</data>
<data name="strQuick" xml:space="preserve">
<value>Direkt: {0}</value>
</data>
@@ -1389,6 +1530,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strRAW" xml:space="preserve">
<value>Rohdaten (RAW)</value>
</data>
<data name="strRDP" xml:space="preserve">
<value>RDP</value>
</data>
<data name="strRDP16777216Colors" xml:space="preserve">
<value>16777216 Farben (24Bit)</value>
</data>
@@ -1572,6 +1716,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strRename" xml:space="preserve">
<value>Umbenennen</value>
</data>
<data name="strRlogin" xml:space="preserve">
<value>Rlogin</value>
</data>
<data name="strSave" xml:space="preserve">
<value>Speichern</value>
</data>
@@ -1635,9 +1782,15 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strSmartSizeModeAspect" xml:space="preserve">
<value>Aspekt</value>
</data>
<data name="strSmartSizeModeFree" xml:space="preserve">
<value>verfügbar</value>
</data>
<data name="strSmartSizeModeNone" xml:space="preserve">
<value>Kein SmartSize</value>
</data>
<data name="strSocks5" xml:space="preserve">
<value>Socks 5</value>
</data>
<data name="strSort" xml:space="preserve">
<value>Sortieren</value>
</data>
@@ -1648,7 +1801,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<value>Absteigend (Z-A)</value>
</data>
<data name="strSpecialKeys" xml:space="preserve">
<value>Spezielle Tastenkombinationen</value>
<value>spezielle Tasten</value>
</data>
<data name="strSQLInfo" xml:space="preserve">
<value>Für mehr Informationen bitte Hilfeeintrag lesen (Info - Help - Getting started - SQL Configuration)</value>
@@ -1674,9 +1827,6 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strSSHTransferEndFailed" xml:space="preserve">
<value>SSH Abschluss der Übertragung fehlgeschlagen!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Übertragung fehlgeschlagen!</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Anfangs IP</value>
</data>
@@ -1686,6 +1836,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strStartupExit" xml:space="preserve">
<value>Anfang/Ende</value>
</data>
<data name="strStatus" xml:space="preserve">
<value>Status</value>
</data>
<data name="strSwitchToErrorsAndInfos" xml:space="preserve">
<value>Öffne das Fehler &amp;&amp; Infos Panel bei:</value>
</data>
@@ -1698,12 +1851,21 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strTabsAndPanels" xml:space="preserve">
<value>Tabs &amp;&amp; Panele</value>
</data>
<data name="strTabUpdates" xml:space="preserve">
<value>Aktualisierungen</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<data name="strTheFollowing" xml:space="preserve">
<value>die folgenden:</value>
</data>
<data name="strTitleError" xml:space="preserve">
<value>Fehler ({0})</value>
</data>
<data name="strTitleInformation" xml:space="preserve">
<value>Informationen ({0})</value>
</data>
<data name="strTitlePassword" xml:space="preserve">
<value>Passwort</value>
</data>
@@ -1746,6 +1908,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Prüfung auf Aktualisierung ist fehlgeschlagen!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition unterstützt derzeit keine automatische Updates.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>Löschen der Aktualisierungsdatei ist gehlgeschlagen!</value>
</data>
@@ -1787,11 +1952,17 @@ mRemoteNG wird nun geschlossen und die Installation gestartet.</value>
<value>Selben Benutzer und Passwort verwenden</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Verwenden einer smart Card</value>
<value>Verwenden sie eine Smartcard</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>SQL Server für das Laden &amp;&amp; Speichern der Verbindungen verwenden</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>Trennen der VNC Verbindung fehlgeschlagen!</value>
</data>

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

@@ -0,0 +1,387 @@
<?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="strActive" xml:space="preserve">
<value>Activo</value>
</data>
<data name="strActivity" xml:space="preserve">
<value>Actividad</value>
</data>
<data name="strButtonDefaultProperties" xml:space="preserve">
<value>Propiedades por defecto</value>
</data>
<data name="strButtonDisconnect" xml:space="preserve">
<value>Desconectar</value>
</data>
<data name="strButtonIcon" xml:space="preserve">
<value>Icono</value>
</data>
<data name="strButtonLaunchPutty" xml:space="preserve">
<value>Ejecutar PuTTY</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp; OK</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Propiedades</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>Probar Proxy</value>
</data>
<data name="strCategoryCredentials" xml:space="preserve">
<value>Credenciales</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Varios</value>
</data>
<data name="strCcAlwaysShowScreen" xml:space="preserve">
<value>Siempre mostrar esta pantalla al inicio</value>
</data>
<data name="strCcNotInstalledProperly" xml:space="preserve">
<value>no está correctamente instalado</value>
</data>
<data name="strCcPuttyOK" xml:space="preserve">
<value>El ejecutable de PuTTY se encontró y debería estar listo para usarse.</value>
</data>
<data name="strCcRDPOK" xml:space="preserve">
<value>Todos los componentes RDP se encontraron y parecen estar registrados correctamente. Versión de escritorio remoto {0}</value>
</data>
<data name="strCcVNCOK" xml:space="preserve">
<value>Todos los componentes de VNC se encontraron y parecen estar registrados correctamente.
VncSharpNG Control {0}</value>
</data>
<data name="strCheckboxAutomaticReconnect" xml:space="preserve">
<value>Intentar reconectar automáticamente cuando se desconecte (solo para RDP &amp;&amp; ICA)</value>
</data>
<data name="strCheckboxDomain" xml:space="preserve">
<value>Dominio</value>
</data>
<data name="strCheckboxDoNotShowThisMessageAgain" xml:space="preserve">
<value>No mostrar este mensaje de nuevo.</value>
</data>
<data name="strCheckboxInheritance" xml:space="preserve">
<value>Herencia</value>
</data>
<data name="strCheckboxPassword" xml:space="preserve">
<value>Contraseña</value>
</data>
<data name="strCheckboxProxyAuthentication" xml:space="preserve">
<value>Este servidor proxy requiere autenticación</value>
</data>
<data name="strCheckboxPuttyPath" xml:space="preserve">
<value>Usar ruta de Putty personalizada:</value>
</data>
<data name="strCheckboxReconnectWhenReady" xml:space="preserve">
<value>Vuelva a conectarse cuando esté listo</value>
</data>
<data name="strCheckboxUpdateUseProxy" xml:space="preserve">
<value>Usar un servidor proxy para conectarse</value>
</data>
<data name="strCheckboxUsername" xml:space="preserve">
<value>Usuario</value>
</data>
<data name="strCheckboxWaitForExit" xml:space="preserve">
<value>Esperar a Salir</value>
</data>
<data name="strCheckForUpdate" xml:space="preserve">
<value>Pruebe nuevamente</value>
</data>
<data name="strCheckForUpdatesOnStartup" xml:space="preserve">
<value>Comprobar las actualizaciones y anuncios en el inicio</value>
</data>
<data name="strCheckNow" xml:space="preserve">
<value>Compruebe ahora</value>
</data>
<data name="strCheckProperInstallationOfComponentsAtStartup" xml:space="preserve">
<value>Verifique la correcta instalación de los componentes en el inicio</value>
</data>
<data name="strChoosePanelBeforeConnecting" xml:space="preserve">
<value>Elija el panel antes de conectarse</value>
</data>
<data name="strClosedPorts" xml:space="preserve">
<value>Puertos Cerrados</value>
</data>
<data name="strCollapseAllFolders" xml:space="preserve">
<value>Contraer todas las carpetas</value>
</data>
<data name="strComponentsCheck" xml:space="preserve">
<value>Comprobación de componentes</value>
</data>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>btnIcon_Click falló!</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>¿Desea cerrar la conexión, "{0}"?</value>
</data>
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
<value>¿Está seguro que desea cerrar el panel, "{0}"? Cualquier conexión que contenga el panel también estará cerrada.</value>
</data>
<data name="strConfirmDeleteNodeFolder" xml:space="preserve">
<value>¿Está seguro que desea eliminar la carpeta vacía, "{0}"?</value>
</data>
<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="strConfirmExitMainInstruction" xml:space="preserve">
<value>¿Desea cerrar todas las conexiones abiertas?</value>
</data>
<data name="strConfirmResetLayout" xml:space="preserve">
<value>¿Estás seguro que deseas restablecer los paneles a su diseño predeterminado?</value>
</data>
<data name="strConnect" xml:space="preserve">
<value>Conectar</value>
</data>
<data name="strConnecting" xml:space="preserve">
<value>Conectando...</value>
</data>
<data name="strConnectionEventConnected" xml:space="preserve">
<value>Evento de protocolo conectado</value>
</data>
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
<value>¡Error de conexión!</value>
</data>
<data name="strConnectionOpenFailed" xml:space="preserve">
<value>No se pudo abrir la conexión!</value>
</data>
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
<value>No se puede abrir la conexión: ningún nombre de host especificado!</value>
</data>
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
<value>Error de RDP.
Código de Error: {0}
Descripción del Error: {1}</value>
</data>
<data name="strConnections" xml:space="preserve">
<value>Conexiones</value>
</data>
<data name="strConnectionSetDefaultPortFailed" xml:space="preserve">
<value>No se ha podido establecer el puerto predeterminado!</value>
</data>
<data name="strConnectionsFileBackupFailed" xml:space="preserve">
<value>No se pudo crear copia de seguridad del archivo de conexiones!</value>
</data>
<data name="strConnectionsFileCouldNotBeImported" xml:space="preserve">
<value>No se pudo importar archivo de conexiones!</value>
</data>
<data name="strConnectionsFileCouldNotBeLoaded" xml:space="preserve">
<value>No se pudo cargar el archivo de conexiones "{0}"!</value>
</data>
<data name="strConnectionsFileCouldNotBeSaved" xml:space="preserve">
<value>No se pudo guardar el archivo de conexiones!</value>
</data>
<data name="strConnectionsFileCouldNotSaveAs" xml:space="preserve">
<value>No se pudo guardar archivo de conexiones como "{0}"!</value>
</data>
<data name="strConnectToConsoleSession" xml:space="preserve">
<value>Conectar con la sesión de consola</value>
</data>
<data name="strConnectWithOptions" xml:space="preserve">
<value>Conectar (con opciones)</value>
</data>
<data name="strConnenctionClosedByUser" xml:space="preserve">
<value>Conexión a {0} {1} vía cerrada por usuario {2}.</value>
</data>
<data name="strConnenctionClosedByUserDetail" xml:space="preserve">
<value>Conexión a {0} {1} vía cerrada por usuario {2}. (Descripción: "{3}"; Campo de usuario: "{4}")</value>
</data>
<data name="strConnenctionCloseEvent" xml:space="preserve">
<value>Evento de conexión cerrada</value>
</data>
<data name="strConnenctionCloseEventFailed" xml:space="preserve">
<value>Evento de cerrar conexión falló!</value>
</data>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>No se pudo crear el nuevo archivo de conexiones!</value>
</data>
<data name="strCurrentVersion" xml:space="preserve">
<value>Versión instalada</value>
</data>
<data name="strDetect" xml:space="preserve">
<value>Detectar</value>
</data>
<data name="strDontConnectWhenAuthFails" xml:space="preserve">
<value>No conectar si falla la autenticación</value>
</data>
<data name="strDownloadAndInstall" xml:space="preserve">
<value>Descargar e instalar</value>
</data>
<data name="strDuplicate" xml:space="preserve">
<value>Duplicar</value>
</data>
<data name="strEmptyPasswordContinue" xml:space="preserve">
<value>¿Desea continuar sin contraseña?</value>
</data>
<data name="strEmptyUsernamePasswordDomainFields" xml:space="preserve">
<value>Si desea Nombre de usuario, password o dominio vacio use:</value>
</data>
<data name="strEnc128Bit" xml:space="preserve">
<value>128-bit</value>
</data>
<data name="strEnc128BitLogonOnly" xml:space="preserve">
<value>128-bit (iniciar sesión)</value>
</data>
<data name="strEncBasic" xml:space="preserve">
<value>Básica</value>
</data>
<data name="strEncryptCompleteConnectionFile" xml:space="preserve">
<value>Encriptar completamente el archivo de conexiones</value>
</data>
<data name="strEndIP" xml:space="preserve">
<value>Último IP</value>
</data>
<data name="strEndPort" xml:space="preserve">
<value>Último puerto</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>BarraAgregarHerramientasExternas (frmMain) falló. {0}</value>
</data>
<data name="strErrorBadDatabaseVersion" xml:space="preserve">
<value>La versión de la base de datos {0} no es compatible con esta versión de {1}.</value>
</data>
<data name="strErrorCloneNodeFailed" xml:space="preserve">
<value>ClonarModulo (Tree.Node) falló. {0}</value>
</data>
<data name="strErrorCode" xml:space="preserve">
<value>Código de Error {0}.</value>
</data>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>La lista de conexiones no pudo ser guardada.</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve">
<value>La decriptación falló. {0}</value>
</data>
<data name="strErrorEncryptionFailed" xml:space="preserve">
<value>La encriptación falló. {0}</value>
</data>
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
<value>La configuración de seguridad de Windows, "criptografía de sistema: usar FIPS algoritmos compatibles para codificación, algoritmos hash y firma", está habilitada. Esta configuración no es compatible con {0}. Consulte el artículo de soporte técnico de Microsoft en http://support.microsoft.com/kb/811833 para obtener más información. {0} se cerrará.</value>
</data>
<data name="strErrors" xml:space="preserve">
<value>Errores</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>VerificarVersionBasedeDatos (Config.Connections.Save) falló. {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>
@@ -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>
@@ -219,6 +222,9 @@
<data name="strButtonNew" xml:space="preserve">
<value>&amp;Nuevo</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Propiedades</value>
</data>
@@ -253,6 +259,9 @@
<data name="strCategoryGateway" xml:space="preserve">
<value>Puerta de Enlace</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>General</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Varios</value>
</data>
@@ -407,14 +416,32 @@ 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="strConfirmCloseConnection" xml:space="preserve">
<value>Confirme el cierre de las pestañas de conexiones</value>
<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="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Desea cerrar la conexión, "{0}"?</value>
@@ -437,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>
@@ -455,6 +479,9 @@ Versión de Control {0} de VNCSharpNG</value>
<data name="strConnecting" xml:space="preserve">
<value>Conectando...</value>
</data>
<data name="strConnectionEventConnected" xml:space="preserve">
<value>Se lanzó el evento Connected en Protocol</value>
</data>
<data name="strConnectionEventConnectedDetail" xml:space="preserve">
<value>Connexión a "{0}" via "{1}" establecida por el usuario "{2}" (Descripción: "{3}"; Campo de Usuario: "{4}")</value>
</data>
@@ -512,12 +539,21 @@ 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>
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
<value>¡No se pudo crear un nuevo archivo de conexiones!</value>
</data>
<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>
@@ -539,9 +575,15 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strEmptyUsernamePasswordDomainFields" xml:space="preserve">
<value>Para campos de Nombre de Usuario, Contraseña y Dominio vacíos usar:</value>
</data>
<data name="strEnc128Bit" xml:space="preserve">
<value>128-bit</value>
</data>
<data name="strEnc128BitLogonOnly" xml:space="preserve">
<value>128-bit (sólo inicio de sesión)</value>
</data>
<data name="strEncBasic" xml:space="preserve">
<value>Básico</value>
</data>
<data name="strEncryptCompleteConnectionFile" xml:space="preserve">
<value>Cifrar por completo el archivo de conexión</value>
</data>
@@ -551,21 +593,52 @@ 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>
<data name="strErrorBadDatabaseVersion" xml:space="preserve">
<value>La versión de Base de Datos {0} No es compatible con esta versión de {1}.</value>
</data>
<data name="strErrorCloneNodeFailed" xml:space="preserve">
<value>Clonado de Nodo (Tree.Node) fallido. {0}</value>
</data>
<data name="strErrorCode" xml:space="preserve">
<value>Código de error {0}.</value>
</data>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>La lista de conexiones no ha podido ser grabada.</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve">
<value>Descifrado fallido. {0}</value>
</data>
<data name="strErrorEncryptionFailed" xml:space="preserve">
<value>Cifrado fallido. {0}</value>
</data>
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
<value>La configuración de Seguridad de Windows, "Criptografia del sistema: Usar Algoritmos compatibles FIPS para Encripción, Hashing y Firma", esta habilitada. Esta configuración es incompatible con {0}.
Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/811833 Para más información.
{0} Se Cerrará.</value>
</data>
<data name="strErrors" xml:space="preserve">
<value>Errores</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>No ha podido cargarse el archivo de conexión inicial.{0}{0}{2}{0}{3}{0}{0}Para evitar la pérdida de datos, {1} se cerrará ahora.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>Error.{0} en Proceso VerifyDatabaseVersion (Config.Connections.Save)</value>
</data>
<data name="strExpandAllFolders" xml:space="preserve">
<value>Expandir todas las carpetas</value>
</data>
<data name="strExperimental" xml:space="preserve">
<value>Experimental</value>
</data>
<data name="strExport" xml:space="preserve">
<value>Exportar</value>
</data>
@@ -602,9 +675,15 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strFormatInheritDescription" xml:space="preserve">
<value>Descripción de la propiedad heredada: {0}</value>
</data>
<data name="strFree" xml:space="preserve">
<value>Gratis</value>
</data>
<data name="strFullscreen" xml:space="preserve">
<value>Pantalla Completa</value>
</data>
<data name="strGeneral" xml:space="preserve">
<value>General</value>
</data>
<data name="strGetConnectionInfoFromSqlFailed" xml:space="preserve">
<value>Adquisición de Información de la Conexión desde SQL fallida</value>
</data>
@@ -623,6 +702,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strGroupboxFiles" xml:space="preserve">
<value>Archivos</value>
</data>
<data name="strHost" xml:space="preserve">
<value>Servidor</value>
</data>
<data name="strHttpConnectFailed" xml:space="preserve">
<value>¡Conexión HTTP Fallida!</value>
</data>
@@ -630,7 +712,7 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -680,6 +762,36 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strIntAppConnectionFailed" xml:space="preserve">
<value>¡Conexión fallida!</value>
</data>
<data name="strIntAppDisposeFailed" xml:space="preserve">
<value>¡La liberación del proceso Int App ha fallado!</value>
</data>
<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>
<data name="strKeysCtrlAltDel" xml:space="preserve">
<value>CTRL-ALT-DEL</value>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Dirección:</value>
</data>
@@ -689,6 +801,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -812,6 +927,12 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strMenuCopy" xml:space="preserve">
<value>Copiar</value>
</data>
<data name="strMenuCtrlAltDel" xml:space="preserve">
<value>Ctrl-Alt-Del</value>
</data>
<data name="strMenuCtrlEsc" xml:space="preserve">
<value>Ctrl-Esc</value>
</data>
<data name="strMenuDelete" xml:space="preserve">
<value>Borrar...</value>
</data>
@@ -881,6 +1002,15 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -941,9 +1071,15 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -998,6 +1134,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strNewTitle" xml:space="preserve">
<value>Nuevo Título</value>
</data>
<data name="strNo" xml:space="preserve">
<value>No</value>
</data>
<data name="strNoCompression" xml:space="preserve">
<value>Sin Compresión</value>
</data>
@@ -1010,6 +1149,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strNone" xml:space="preserve">
<value>Ninguno</value>
</data>
<data name="strNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="strNoSmartSize" xml:space="preserve">
<value>Sin SmartSize</value>
</data>
@@ -1026,6 +1168,15 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -1147,7 +1298,7 @@ Arrancando con un nuevo archivo de conexiones.</value>
<value>Seleccione si las impresoras locales deben ser mostradas en el host remoto.</value>
</data>
<data name="strPropertyDescriptionRedirectSmartCards" xml:space="preserve">
<value>Seleccione si las smart cards locales deben estar disponibles en el host remoto.</value>
<value>Seleccione si las tarjetas inteligentes deben presentarse a la máquina remota.</value>
</data>
<data name="strPropertyDescriptionRedirectSounds" xml:space="preserve">
<value>Seleccione cómo deberá ser redireccionado el sonido remoto.</value>
@@ -1251,6 +1402,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strPropertyNameName" xml:space="preserve">
<value>Nombre</value>
</data>
<data name="strPropertyNamePanel" xml:space="preserve">
<value>Panel</value>
</data>
<data name="strPropertyNamePassword" xml:space="preserve">
<value>Contraseña</value>
</data>
@@ -1293,6 +1447,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<data name="strPropertyNameRedirectPrinters" xml:space="preserve">
<value>Impresoras</value>
</data>
<data name="strPropertyNameRedirectSmartCards" xml:space="preserve">
<value>Tarjetas Inteligentes</value>
</data>
<data name="strPropertyNameRedirectSounds" xml:space="preserve">
<value>Sonidos</value>
</data>
@@ -1308,6 +1465,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
<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>
@@ -1355,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>
@@ -1370,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>
@@ -1382,6 +1557,15 @@ 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>
<data name="strRDP" xml:space="preserve">
<value>RDP</value>
</data>
<data name="strRDP16777216Colors" xml:space="preserve">
<value>16777216 Colores (24-bit)</value>
</data>
@@ -1529,6 +1713,9 @@ Mensaje:
<data name="strRdpSetResolutionFailed" xml:space="preserve">
<value>¡RDP Asignación de Resolución fallida!</value>
</data>
<data name="strRDPSmartSize" xml:space="preserve">
<value>Tamaño inteligente</value>
</data>
<data name="strRDPSoundBringToThisComputer" xml:space="preserve">
<value>Traer a este equipo</value>
</data>
@@ -1559,6 +1746,9 @@ Mensaje:
<data name="strRename" xml:space="preserve">
<value>Renombrar</value>
</data>
<data name="strRlogin" xml:space="preserve">
<value>Rlogin</value>
</data>
<data name="strSave" xml:space="preserve">
<value>Guardar</value>
</data>
@@ -1580,9 +1770,18 @@ 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>
<data name="strSessionGetFailed" xml:space="preserve">
<value>Falla al iniciar sesiones en Fondo</value>
</data>
<data name="strSessionKillFailed" xml:space="preserve">
<value>Fallo al detener sesión en Fondo</value>
</data>
<data name="strSetHostnameLikeDisplayName" xml:space="preserve">
<value>Usar el nombre del host como nombre a mostrar cuando se creen nuevas conexiones</value>
</data>
@@ -1619,6 +1818,9 @@ Mensaje:
<data name="strSmartSizeModeNone" xml:space="preserve">
<value>Sin SmartSize</value>
</data>
<data name="strSocks5" xml:space="preserve">
<value>Socks 5</value>
</data>
<data name="strSort" xml:space="preserve">
<value>Ordenar</value>
</data>
@@ -1629,7 +1831,7 @@ Mensaje:
<value>Descendente (Z-A)</value>
</data>
<data name="strSpecialKeys" xml:space="preserve">
<value>Teclas Especiales</value>
<value>Teclas especiales</value>
</data>
<data name="strSQLInfo" xml:space="preserve">
<value>¡Por favor, mire en Ayuda - Comenzando - Configuración SQL para más información!</value>
@@ -1655,15 +1857,15 @@ 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>
<data name="strStartPort" xml:space="preserve">
<value>Puerto Inicial</value>
</data>
<data name="strStartupExit" xml:space="preserve">
<value>Inicio/Salir</value>
</data>
<data name="strStatus" xml:space="preserve">
<value>Estado</value>
</data>
@@ -1682,9 +1884,54 @@ Mensaje:
<data name="strTabUpdates" xml:space="preserve">
<value>Actualizaciones</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<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>
<data name="strTitleInformation" xml:space="preserve">
<value>Información ({0})</value>
</data>
@@ -1709,12 +1956,18 @@ Mensaje:
<data name="strType" xml:space="preserve">
<value>Tipo</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>Repetidor de Ultra VNC</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>Puerto SingleClick de UltraVNC:</value>
</data>
<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>
@@ -1727,6 +1980,9 @@ Mensaje:
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>¡Comprobación de actualizaciones fallida!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition no soporta por el momento actualizaciones automáticas.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>¡Error borrando el archivo de actualización!</value>
</data>
@@ -1767,12 +2023,18 @@ mRemoteNG ahora se cerrará y comenzará la instalación.</value>
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Usar el mismo nombre de usuario y contraseña</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Usar una tarjeta inteligente</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Emplear SQL Server para cargar &amp;&amp; guardar las conexiones</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Versión</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>¡Desconexión VNC fallida!</value>
</data>
@@ -1809,6 +2071,9 @@ mRemoteNG ahora se cerrará y comenzará la instalación.</value>
<data name="strWeifenLuoAttribution" xml:space="preserve">
<value>Emplea el DockPanel Suite de [Weifen Luo]</value>
</data>
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
</data>
<data name="strWriteLogFile" xml:space="preserve">
<value>Escribir archivo de log (mRemoteNG.log)</value>
</data>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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>
@@ -132,6 +132,9 @@
<data name="strAddFolder" xml:space="preserve">
<value>Nieuwe map</value>
</data>
<data name="strAddNodeFromXmlFailed" xml:space="preserve">
<value>AddNodeFromXML mislukt!</value>
</data>
<data name="strAddNodesFromSqlFailed" xml:space="preserve">
<value>Knooppunten toevoegen van XML mislukt!</value>
</data>
@@ -147,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>
@@ -165,6 +171,9 @@
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
<value>Automatisch bijwerken instellingen</value>
</data>
<data name="strAspect" xml:space="preserve">
<value>Verhouding</value>
</data>
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
<value>Automatisch ophalen sessie informatie</value>
</data>
@@ -183,6 +192,9 @@
<data name="strButtonCancel" xml:space="preserve">
<value>&amp;Annuleren</value>
</data>
<data name="strButtonChange" xml:space="preserve">
<value>Wijzig</value>
</data>
<data name="strButtonClose" xml:space="preserve">
<value>&amp;Sluiten</value>
</data>
@@ -210,9 +222,21 @@
<data name="strButtonNew" xml:space="preserve">
<value>&amp;Nieuw</value>
</data>
<data name="strButtonOK" xml:space="preserve">
<value>&amp;OK</value>
</data>
<data name="strButtonProperties" xml:space="preserve">
<value>Eigenschapen</value>
</data>
<data name="strButtonScan" xml:space="preserve">
<value>&amp;Scan</value>
</data>
<data name="strButtonStop" xml:space="preserve">
<value>&amp;Stop</value>
</data>
<data name="strButtonTestProxy" xml:space="preserve">
<value>Test Proxy</value>
</data>
<data name="strCannotImportNormalSessionFile" xml:space="preserve">
<value>U kunt geen normale connectie bestand importeren.
Gebruik dan Bestand - Laad Connecties voor normale connectie bestanden!</value>
@@ -232,12 +256,18 @@ Gebruik dan Bestand - Laad Connecties voor normale connectie bestanden!</value>
<data name="strCategoryDisplay" xml:space="preserve">
<value>Scherm</value>
</data>
<data name="strCategoryGateway" xml:space="preserve">
<value>Gateway</value>
</data>
<data name="strCategoryGeneral" xml:space="preserve">
<value>Algemeen</value>
</data>
<data name="strCategoryMiscellaneous" xml:space="preserve">
<value>Diversen</value>
</data>
<data name="strCategoryProtocol" xml:space="preserve">
<value>Protocol</value>
</data>
<data name="strCategoryRedirect" xml:space="preserve">
<value>Verwijzing</value>
</data>
@@ -387,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>
@@ -411,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>
@@ -435,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>
@@ -522,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>
@@ -546,6 +582,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strEmptyUsernamePasswordDomainFields" xml:space="preserve">
<value>Voor lege gebruikersnaam, wachtwoord of domein velden gebruiken:</value>
</data>
<data name="strEnc128Bit" xml:space="preserve">
<value>128-bit</value>
</data>
<data name="strEnc128BitLogonOnly" xml:space="preserve">
<value>128-bit (aanmelding alleen)</value>
</data>
@@ -561,6 +600,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strEndPort" xml:space="preserve">
<value>Eind Poort</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>AddExternalToolsToToolBar (frmMain) is mislukt. {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve">
<value>Map toevoegen (UI.Window.Tree) is mislukt. {0}</value>
</data>
@@ -576,9 +618,25 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
<value>De connectie lijst kan niet worden opgeslagen..</value>
</data>
<data name="strErrorDecryptionFailed" xml:space="preserve">
<value>Decryptie is mislukt. {0}</value>
</data>
<data name="strErrorEncryptionFailed" xml:space="preserve">
<value>Encryptie is mislukt. {0}</value>
</data>
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
<value>De beveiligingsinstelling voor Windows, "Systeemcryptografie: gebruik FIPS-compatibele algoritmes voor codering, hashing en ondertekening", is ingeschakeld. Deze instelling is niet compatibel met {0}.
Zie het Microsoft Support artikel op http://support.microsoft.com/kb/811833 voor meer informatie.
{0} wordt nu gesloten.</value>
</data>
<data name="strErrors" xml:space="preserve">
<value>Foutmeldingen</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>Het verbindingsopstartbestand kon niet worden geladen. {0}{0}{2}{0}{3}{0}{0} Om dataverlies te voorkomen zal {1} nu worden afgesloten.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>Controleer Database Versie (Config.Connections.Save) is mislukt. {0}</value>
</data>
@@ -651,6 +709,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strGroupboxFiles" xml:space="preserve">
<value>Bestanden</value>
</data>
<data name="strHost" xml:space="preserve">
<value>Host</value>
</data>
<data name="strHttpConnectFailed" xml:space="preserve">
<value>HTTP verbinding mislukt!</value>
</data>
@@ -658,7 +719,7 @@ Beginnen met nieuwe Connectie bestand.</value>
<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>
@@ -681,6 +742,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<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>
@@ -732,6 +796,12 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strIntAppTitle" xml:space="preserve">
<value>Interne Applicatie naam: {0}</value>
</data>
<data name="strKeysCtrlAltDel" xml:space="preserve">
<value>CTRL-ALT-DEL</value>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Adres:</value>
</data>
@@ -741,6 +811,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<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>
@@ -768,6 +841,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strLabelPortableEdition" xml:space="preserve">
<value>Mobiele Editie</value>
</data>
<data name="strLabelProtocol" xml:space="preserve">
<value>Protocol:</value>
</data>
<data name="strLabelPuttySessionsConfig" xml:space="preserve">
<value>Om PuTTY Sessies te configureren klik op deze knop:</value>
</data>
@@ -783,6 +859,15 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strLabelSelectPanel" xml:space="preserve">
<value>Selecteer een paneel uit de onderstaande lijst of klik op Nieuw om een nieuwe toe te voegen. Klik op OK om verder te gaan.</value>
</data>
<data name="strLabelServerStatus" xml:space="preserve">
<value>Server Status:</value>
</data>
<data name="strLabelSQLDatabaseName" xml:space="preserve">
<value>Database:</value>
</data>
<data name="strLabelSQLServerDatabaseName" xml:space="preserve">
<value>Database:</value>
</data>
<data name="strLabelUsername" xml:space="preserve">
<value>Gebruikersnaam:</value>
</data>
@@ -852,6 +937,12 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strMenuCopy" xml:space="preserve">
<value>Kopiëren</value>
</data>
<data name="strMenuCtrlAltDel" xml:space="preserve">
<value>Ctrl-Alt-Del</value>
</data>
<data name="strMenuCtrlEsc" xml:space="preserve">
<value>CTRL-Esc</value>
</data>
<data name="strMenuDelete" xml:space="preserve">
<value>Verwijder...</value>
</data>
@@ -900,6 +991,12 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strMenuFullScreenRDP" xml:space="preserve">
<value>Volledig Scherm (RDP)</value>
</data>
<data name="strMenuHelp" xml:space="preserve">
<value>&amp;Help</value>
</data>
<data name="strMenuHelpContents" xml:space="preserve">
<value>mRemoteNG Help</value>
</data>
<data name="strMenuJumpTo" xml:space="preserve">
<value>Ga naar</value>
</data>
@@ -915,6 +1012,15 @@ Beginnen met nieuwe Connectie bestand.</value>
<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>
@@ -951,12 +1057,18 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strMenuReportBug" xml:space="preserve">
<value>Meld een bug</value>
</data>
<data name="strMenuResetLayout" xml:space="preserve">
<value>Herstel lay-out</value>
</data>
<data name="strMenuSaveConnectionFile" xml:space="preserve">
<value>Opslaan Connectie bestand</value>
</data>
<data name="strMenuSaveConnectionFileAs" xml:space="preserve">
<value>Opslaan Connectie bestand Als...</value>
</data>
<data name="strMenuScreenshot" xml:space="preserve">
<value>Schermafbeelding</value>
</data>
<data name="strMenuScreenshotManager" xml:space="preserve">
<value>Screenshot beheerder</value>
</data>
@@ -969,12 +1081,21 @@ Beginnen met nieuwe Connectie bestand.</value>
<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>
<data name="strMenuSmartSize" xml:space="preserve">
<value>SmartSize (RDP/VNC)</value>
</data>
<data name="strMenuSSHFileTransfer" xml:space="preserve">
<value>SSH Bestandsoverdracht</value>
</data>
<data name="strMenuStartChat" xml:space="preserve">
<value>Start Chat (VNC)</value>
</data>
<data name="strMenuSupportForum" xml:space="preserve">
<value>Ondersteunings Forum</value>
</data>
@@ -990,6 +1111,9 @@ Beginnen met nieuwe Connectie bestand.</value>
<data name="strMenuViewOnly" xml:space="preserve">
<value>Alleen bekijken (VNC)</value>
</data>
<data name="strMenuWebsite" xml:space="preserve">
<value>Website</value>
</data>
<data name="strMinimizeToSysTray" xml:space="preserve">
<value>Minimaliseer naar het systeemvak</value>
</data>
@@ -1054,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>
@@ -1162,6 +1295,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyDescriptionRDGatewayUsername" xml:space="preserve">
<value>Hiermee geeft u de gebruikersnaam op waarmee een gebruiker verbinding kan maken met de RD-gateway-server.</value>
</data>
<data name="strPropertyDescriptionRedirectDrives" xml:space="preserve">
<value>Selecteer of lokale schijfstations op de externe host moeten worden weergegeven.</value>
</data>
<data name="strPropertyDescriptionRedirectKeys" xml:space="preserve">
<value>Selecteer of toetscombinaties (b.v. Alt-Tab) moeten worden doorgestuurd naar de externe host.</value>
</data>
@@ -1172,7 +1308,7 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<value>Selecteer of lokale printers getoond moeten worden op de externe host.</value>
</data>
<data name="strPropertyDescriptionRedirectSmartCards" xml:space="preserve">
<value>Selecteer of de lokale smart cards moet beschikbaar zijn op de externe host.</value>
<value>Selecteer of lokale smartcards beschikbaar moeten zijn op de externe host.</value>
</data>
<data name="strPropertyDescriptionRedirectSounds" xml:space="preserve">
<value>Selecteer hoe externe geluiden moeten worden doorgestuurd.</value>
@@ -1189,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>
@@ -1225,6 +1364,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyNameAuthenticationMode" xml:space="preserve">
<value>Authenticatie Modus</value>
</data>
<data name="strPropertyNameCacheBitmaps" xml:space="preserve">
<value>Cache Bitmapafbeeldingen</value>
</data>
<data name="strPropertyNameColors" xml:space="preserve">
<value>Kleuren</value>
</data>
@@ -1282,6 +1424,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyNamePort" xml:space="preserve">
<value>Poort</value>
</data>
<data name="strPropertyNameProtocol" xml:space="preserve">
<value>Protocol</value>
</data>
<data name="strPropertyNamePuttySession" xml:space="preserve">
<value>PuTTY Sessie</value>
</data>
@@ -1312,15 +1457,30 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyNameRedirectPorts" xml:space="preserve">
<value>Poorten</value>
</data>
<data name="strPropertyNameRedirectPrinters" xml:space="preserve">
<value>Printers</value>
</data>
<data name="strPropertyNameRedirectSmartCards" xml:space="preserve">
<value>Smartcards</value>
</data>
<data name="strPropertyNameRedirectSounds" xml:space="preserve">
<value>Geluiden</value>
</data>
<data name="strPropertyNameRenderingEngine" xml:space="preserve">
<value>Rendering Engine</value>
</data>
<data name="strPropertyNameResolution" xml:space="preserve">
<value>Resolutie</value>
</data>
<data name="strPropertyNameSmartSizeMode" xml:space="preserve">
<value>SmartSize Modus</value>
</data>
<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>
@@ -1339,6 +1499,9 @@ Als dergelijke problemen voorkomen maak dan een nieuwe verbindings bestand aan!<
<data name="strPropertyNameVNCProxyPort" xml:space="preserve">
<value>Proxy Poort</value>
</data>
<data name="strPropertyNameVNCProxyType" xml:space="preserve">
<value>Proxy-type</value>
</data>
<data name="strPropertyNameVNCProxyUsername" xml:space="preserve">
<value>Proxy Gebruikersnaam</value>
</data>
@@ -1384,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>
@@ -1414,6 +1580,24 @@ 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>
<data name="strRDP" xml:space="preserve">
<value>RDP</value>
</data>
<data name="strRDP16777216Colors" xml:space="preserve">
<value>16777216 Kleuren (24-bit)</value>
</data>
@@ -1564,6 +1748,9 @@ Bericht:
<data name="strRdpSetResolutionFailed" xml:space="preserve">
<value>RDP instellen resolutie mislukt!</value>
</data>
<data name="strRDPSmartSize" xml:space="preserve">
<value>Smart Size</value>
</data>
<data name="strRDPSoundBringToThisComputer" xml:space="preserve">
<value>Afspelen op deze computer</value>
</data>
@@ -1594,6 +1781,9 @@ Bericht:
<data name="strRename" xml:space="preserve">
<value>Hernoemen</value>
</data>
<data name="strRlogin" xml:space="preserve">
<value>Rlogin</value>
</data>
<data name="strSave" xml:space="preserve">
<value>Opslaan</value>
</data>
@@ -1612,6 +1802,15 @@ Bericht:
<data name="strScreen" xml:space="preserve">
<value>Scherm</value>
</data>
<data name="strScreenshot" xml:space="preserve">
<value>Schermafbeelding</value>
</data>
<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>
@@ -1648,12 +1847,18 @@ Bericht:
<data name="strSingleClickOnOpenConnectionSwitchesToIt" xml:space="preserve">
<value>Enkele klik om naar geopende verbinding om te schakelen</value>
</data>
<data name="strSmartSizeModeAspect" xml:space="preserve">
<value>Verhouding</value>
</data>
<data name="strSmartSizeModeFree" xml:space="preserve">
<value>Vrij</value>
</data>
<data name="strSmartSizeModeNone" xml:space="preserve">
<value>Geen SmartSize</value>
</data>
<data name="strSocks5" xml:space="preserve">
<value>Socks 5</value>
</data>
<data name="strSort" xml:space="preserve">
<value>Sorteer</value>
</data>
@@ -1691,7 +1896,10 @@ 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>
</data>
<data name="strStartPort" xml:space="preserve">
<value>Start Poort</value>
@@ -1699,6 +1907,9 @@ Bericht:
<data name="strStartupExit" xml:space="preserve">
<value>Opstarten/Afsluiten</value>
</data>
<data name="strStatus" xml:space="preserve">
<value>Status</value>
</data>
<data name="strSwitchToErrorsAndInfos" xml:space="preserve">
<value>Schakel Notificatiepaneel in:</value>
</data>
@@ -1711,9 +1922,126 @@ Bericht:
<data name="strTabsAndPanels" xml:space="preserve">
<value>Tabbladen &amp;&amp; Panelen</value>
</data>
<data name="strTabUpdates" xml:space="preserve">
<value>Updates</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<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>
@@ -1738,12 +2066,21 @@ Bericht:
<data name="strTryIntegrate" xml:space="preserve">
<value>Probeer te integreren</value>
</data>
<data name="strType" xml:space="preserve">
<value>Type</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>UltraVNC Repeater</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>Ultra VNC Enkele Klik Poort:</value>
</data>
<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>
@@ -1756,6 +2093,9 @@ Bericht:
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Controleren op update mislukt!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition ondersteunt momenteel geen automatische updates.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>Fout bij verwijderen van update-bestand!</value>
</data>
@@ -1796,12 +2136,18 @@ mRemoteNG zal nu worden gesloten en beginnen met de installatie.</value>
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Gebruik dezelfde gebruikersnaam en wachtwoord</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Gebruik een SmartCard</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Gebruik SQL Server om te connecties te laden en op te slaan</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Versie</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>VNC Sluiten connectie mislukt!</value>
</data>

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

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>

View File

@@ -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>
@@ -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>
@@ -168,6 +171,9 @@
<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>
@@ -244,12 +250,18 @@
<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>
@@ -405,11 +417,35 @@
<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>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Запрашивать подтверждение при закрытии вкладки подключения</value>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>Ошибка btnIcon_Click!</value>
</data>
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
<value>Ошибка ShowHideGridItems!</value>
</data>
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
<value>Ошибка IconMenu_Click!</value>
</data>
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
<value>Ошибка свойства Grid opject!</value>
</data>
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
<value>Ошибка SetHostStatus!</value>
</data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>Ошибка pGrid_PopertyValueChanged!</value>
</data>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Ошибка загрузки Config UI!</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Хотите закрыть подключение, "{0}"?</value>
@@ -432,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>
@@ -519,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>
@@ -567,9 +606,18 @@
<data name="strEndPort" xml:space="preserve">
<value>Конечн. порт</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>Ошибка добавления внешнего приложения на Панель (frmMain). {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve">
<value>Ошибка AddFolder (UI.Window.Tree). {0}</value>
</data>
<data name="strErrorBadDatabaseVersion" xml:space="preserve">
<value>Версия базы данных {0} не совместима с этой версией {1}.</value>
</data>
<data name="strErrorCloneNodeFailed" xml:space="preserve">
<value>Ошибка CloneNode (Tree.Node). {0}</value>
</data>
<data name="strErrorCode" xml:space="preserve">
<value>Код ошибки {0}.</value>
</data>
@@ -592,6 +640,12 @@
<data name="strErrors" xml:space="preserve">
<value>Ошибки</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>Ошибка загрузки файла соединения.{0}{0}{2}{0}{3}{0}{0}Для предотвращения потери данных, {1} будет выполнен выход.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>Ошибка VerifyDatabaseVersion (Config.Connections.Save). {0}</value>
</data>
<data name="strExpandAllFolders" xml:space="preserve">
<value>Раскрыть все папки</value>
</data>
@@ -604,6 +658,9 @@
<data name="strExportmRemoteXML" xml:space="preserve">
<value>Экспорт mRemote / mRemoteNG XML</value>
</data>
<data name="strExtApp" xml:space="preserve">
<value>Внешнее Приложение</value>
</data>
<data name="strFAMFAMFAMAttribution" xml:space="preserve">
<value>Использованы значки [FAMFAMFAM]</value>
</data>
@@ -631,6 +688,9 @@
<data name="strFormatInheritDescription" xml:space="preserve">
<value>Описание наследованного свойства: {0}</value>
</data>
<data name="strFree" xml:space="preserve">
<value>Free</value>
</data>
<data name="strFullscreen" xml:space="preserve">
<value>Во весь экран</value>
</data>
@@ -667,12 +727,30 @@
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
<value>Изменение HTTP документа не удалось!</value>
</data>
<data name="strHttpSetPropsFailed" xml:space="preserve">
<value>Не удалось задать параметры HTTP!</value>
</data>
<data name="strIcaConnectionFailed" xml:space="preserve">
<value>Не удается создать новое подключение ICA!</value>
</data>
<data name="strIcaControlFailed" xml:space="preserve">
<value>Не удалось загрузить ICA-плагин!</value>
</data>
<data name="strIcaSetCredentialsFailed" xml:space="preserve">
<value>Ошибка установки учетных данных ICA!</value>
</data>
<data name="strIcaSetEventHandlersFailed" xml:space="preserve">
<value>Не удалось установить обработчик событий ICA!</value>
</data>
<data name="strIcaSetPropsFailed" xml:space="preserve">
<value>Не удалось задать параметры ICA!</value>
</data>
<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>
@@ -700,9 +778,36 @@
<data name="strIntAppConnectionFailed" xml:space="preserve">
<value>Подключение не удалось!</value>
</data>
<data name="strIntAppDisposeFailed" xml:space="preserve">
<value>Не удалось завершить процесс внутреннего приложения!</value>
</data>
<data name="strIntAppFocusFailed" xml:space="preserve">
<value>Внутренний инструмент: Ошибка получения фокуса!</value>
</data>
<data name="strIntAppHandle" xml:space="preserve">
<value>Обработчик Внутр. инструментов: {0}</value>
</data>
<data name="strIntAppKillFailed" xml:space="preserve">
<value>Не удалось завершить процесс внутреннего приложения!</value>
</data>
<data name="strIntAppParentHandle" xml:space="preserve">
<value>Панель обработчика событий: {0}</value>
</data>
<data name="strIntAppResizeFailed" xml:space="preserve">
<value>Внутренний инструмент: Ошибка изменения размера!</value>
</data>
<data name="strIntAppStuff" xml:space="preserve">
<value>--- Внутреннее приложение ---</value>
</data>
<data name="strIntAppTitle" xml:space="preserve">
<value>Заголовок внешнего инструмента: {0}</value>
</data>
<data name="strKeysCtrlAltDel" xml:space="preserve">
<value>CTRL+ALT+DEL</value>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Адрес:</value>
</data>
@@ -712,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>
@@ -736,6 +844,9 @@
<data name="strLabelPort" xml:space="preserve">
<value>Порт:</value>
</data>
<data name="strLabelPortableEdition" xml:space="preserve">
<value>Portable Edition</value>
</data>
<data name="strLabelProtocol" xml:space="preserve">
<value>Протокол:</value>
</data>
@@ -799,6 +910,9 @@
<data name="strLogWriteToFileFinalLocationFailed" xml:space="preserve">
<value>Невозможно сохранить отчет в папке назначения.</value>
</data>
<data name="strMagicLibraryAttribution" xml:space="preserve">
<value>Использовано Magic library от [Crownwood Software]</value>
</data>
<data name="strMenuAbout" xml:space="preserve">
<value>О программе</value>
</data>
@@ -829,6 +943,12 @@
<data name="strMenuCopy" xml:space="preserve">
<value>Копировать</value>
</data>
<data name="strMenuCtrlAltDel" xml:space="preserve">
<value>Ctrl-Alt-Del</value>
</data>
<data name="strMenuCtrlEsc" xml:space="preserve">
<value>Ctrl-Esc</value>
</data>
<data name="strMenuDelete" xml:space="preserve">
<value>Удалить...</value>
</data>
@@ -898,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>
@@ -958,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>
@@ -1012,6 +1144,9 @@
<data name="strNewPanel" xml:space="preserve">
<value>Новая панель</value>
</data>
<data name="strNewRoot" xml:space="preserve">
<value>Новый корень</value>
</data>
<data name="strNewTitle" xml:space="preserve">
<value>Новое название</value>
</data>
@@ -1021,6 +1156,9 @@
<data name="strNoCompression" xml:space="preserve">
<value>Без сжатия</value>
</data>
<data name="strNoExtAppDefined" xml:space="preserve">
<value>Не указано внешнее приложение.</value>
</data>
<data name="strNoInformation" xml:space="preserve">
<value>Нет</value>
</data>
@@ -1030,6 +1168,9 @@
<data name="strNormal" xml:space="preserve">
<value>Нормальный</value>
</data>
<data name="strNoSmartSize" xml:space="preserve">
<value>SmartSize недоступен</value>
</data>
<data name="strNoUpdateAvailable" xml:space="preserve">
<value>Нет доступных обновлений</value>
</data>
@@ -1043,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>
@@ -1181,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>
@@ -1253,6 +1406,12 @@
<data name="strPropertyNameExternalTool" xml:space="preserve">
<value>Внешний инструмент</value>
</data>
<data name="strPropertyNameExternalToolAfter" xml:space="preserve">
<value>Внеш. Инстр. После </value>
</data>
<data name="strPropertyNameExternalToolBefore" xml:space="preserve">
<value>Внеш. Инстр. До</value>
</data>
<data name="strPropertyNameIcon" xml:space="preserve">
<value>Значок</value>
</data>
@@ -1325,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>
@@ -1379,9 +1541,21 @@
<data name="strPuttyGetSessionsFailed" xml:space="preserve">
<value>Получить сессию Putty не удалось!</value>
</data>
<data name="strPuttyHandle" xml:space="preserve">
<value>Обработчик Putty: {0}</value>
</data>
<data name="strPuttyKillFailed" xml:space="preserve">
<value>Убить процесс Putty не удалось!</value>
</data>
<data name="strPuttyParentHandle" xml:space="preserve">
<value>Панель обработчиков: {0}</value>
</data>
<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>
@@ -1391,6 +1565,12 @@
<data name="strPuttyStartFailed" xml:space="preserve">
<value>Не удалось запустить Putty!</value>
</data>
<data name="strPuttyStuff" xml:space="preserve">
<value>--- PuTTY ---</value>
</data>
<data name="strPuttyTitle" xml:space="preserve">
<value>Заголовок PuTTY: {0}</value>
</data>
<data name="strQuick" xml:space="preserve">
<value>Быстрое: {0}</value>
</data>
@@ -1406,6 +1586,24 @@
<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>
<data name="strRDP" xml:space="preserve">
<value>RDP</value>
</data>
<data name="strRDP16777216Colors" xml:space="preserve">
<value>16777216 цв. (24-бит)</value>
</data>
@@ -1478,6 +1676,9 @@
<data name="strRdpErrorConnection" xml:space="preserve">
<value>Произошла неисправимая ошибка во время подключения клиента.</value>
</data>
<data name="strRdpErrorGetFailure" xml:space="preserve">
<value>Невозможно получить GetError (Критическая ошибка)</value>
</data>
<data name="strRdpErrorGetUnknown" xml:space="preserve">
<value>Произошла неизвестная критическая ошибка RDP. Код ошибки {0}.</value>
</data>
@@ -1499,21 +1700,63 @@
<data name="strRDPFitToPanel" xml:space="preserve">
<value>В окне</value>
</data>
<data name="strRdpFocusFailed" xml:space="preserve">
<value>RDP: Ошибка получения фокуса!</value>
</data>
<data name="strRdpGatewayIsSupported" xml:space="preserve">
<value>Шлюз Служб терминалов поддерживается.</value>
</data>
<data name="strRdpGatewayNotSupported" xml:space="preserve">
<value>Шлюз Служб терминалов не поддерживается!</value>
</data>
<data name="strRdpGetSessionsFailed" xml:space="preserve">
<value>Ошибка сессии!</value>
</data>
<data name="strRdpOpenConnectionFailed" xml:space="preserve">
<value>Открыть подключение RDP не удалось!</value>
</data>
<data name="strRdpReconnectCount" xml:space="preserve">
<value>К-ство переподключений RDP:</value>
</data>
<data name="strRdpSetAuthenticationLevelFailed" xml:space="preserve">
<value>RDP: Установить уровень проверки подлинности не удалась!</value>
</data>
<data name="strRdpSetConsoleSessionFailed" xml:space="preserve">
<value>RDP: Не удалось использовать консольную сессию!</value>
</data>
<data name="strRdpSetConsoleSwitch" xml:space="preserve">
<value>Настройка переключения консолей для RDC {0}.</value>
</data>
<data name="strRdpSetCredentialsFailed" xml:space="preserve">
<value>Ошибка установки учетных данных RDP!</value>
</data>
<data name="strRdpSetEventHandlersFailed" xml:space="preserve">
<value>Ошибка RDP SetEventHandlers!</value>
</data>
<data name="strRdpSetGatewayFailed" xml:space="preserve">
<value>Ошибка установки шлюза RDP!</value>
</data>
<data name="strRdpSetPerformanceFlagsFailed" xml:space="preserve">
<value>Ошибка RDP SetPerformanceFlags!</value>
</data>
<data name="strRdpSetPortFailed" xml:space="preserve">
<value>Не удалось задать порт RDP!</value>
</data>
<data name="strRdpSetPropsFailed" xml:space="preserve">
<value>Не удалось задать параметры RDP!</value>
</data>
<data name="strRdpSetRedirectionFailed" xml:space="preserve">
<value>Установить перенаправление в RDP не удалось!</value>
</data>
<data name="strRdpSetRedirectKeysFailed" xml:space="preserve">
<value>Установить перенаправление клавиш в RDP не удалось!</value>
</data>
<data name="strRdpSetResolutionFailed" xml:space="preserve">
<value>Ошибка установки разрешения RDP!</value>
</data>
<data name="strRDPSmartSize" xml:space="preserve">
<value>Smart Size</value>
</data>
<data name="strRDPSoundBringToThisComputer" xml:space="preserve">
<value>Передать на этот компьютер</value>
</data>
@@ -1523,6 +1766,12 @@
<data name="strRDPSoundLeaveAtRemoteComputer" xml:space="preserve">
<value>Оставить на удаленном компьютере</value>
</data>
<data name="strRdpToggleFullscreenFailed" xml:space="preserve">
<value>Не удалось переключить RDP в режим Fullscreen!</value>
</data>
<data name="strRdpToggleSmartSizeFailed" xml:space="preserve">
<value>Не удалось переключить RDP в режим SmartSize!</value>
</data>
<data name="strReconnectAtStartup" xml:space="preserve">
<value>При запуске подключаться к предыдущим сессиям</value>
</data>
@@ -1538,6 +1787,9 @@
<data name="strRename" xml:space="preserve">
<value>Переименовать</value>
</data>
<data name="strRlogin" xml:space="preserve">
<value>Rlogin</value>
</data>
<data name="strSave" xml:space="preserve">
<value>Сохранить</value>
</data>
@@ -1562,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>
@@ -1598,6 +1853,18 @@
<data name="strSingleClickOnOpenConnectionSwitchesToIt" xml:space="preserve">
<value>Один клик по открытому подключению переключается на него</value>
</data>
<data name="strSmartSizeModeAspect" xml:space="preserve">
<value>Вид</value>
</data>
<data name="strSmartSizeModeFree" xml:space="preserve">
<value>Free</value>
</data>
<data name="strSmartSizeModeNone" xml:space="preserve">
<value>SmartSize недоступен</value>
</data>
<data name="strSocks5" xml:space="preserve">
<value>Socks 5</value>
</data>
<data name="strSort" xml:space="preserve">
<value>Сортировать</value>
</data>
@@ -1607,6 +1874,9 @@
<data name="strSortDesc" xml:space="preserve">
<value>По убыванию (Z-A)</value>
</data>
<data name="strSpecialKeys" xml:space="preserve">
<value>Специальные клавиши</value>
</data>
<data name="strSQLInfo" xml:space="preserve">
<value>Для дополнительной информации см. справку - Начало работы - конфигурация SQL!</value>
</data>
@@ -1616,6 +1886,12 @@
<data name="strSqlUpdateCheckUpdateAvailable" xml:space="preserve">
<value>Доступно обновление для SQL! Обновите подключения.</value>
</data>
<data name="strSsh1" xml:space="preserve">
<value>SSH version 1</value>
</data>
<data name="strSsh2" xml:space="preserve">
<value>SSH version 2</value>
</data>
<data name="strSSHStartTransferBG" xml:space="preserve">
<value>Фоновая передача по SSH - не удалась!</value>
</data>
@@ -1626,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>
@@ -1655,9 +1931,123 @@
<data name="strTabUpdates" xml:space="preserve">
<value>Обновления</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<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>
@@ -1685,12 +2075,18 @@
<data name="strType" xml:space="preserve">
<value>Тип</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>Ultra VNC Repeater</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>Порт UltraVNC SingleClick:</value>
</data>
<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>
@@ -1703,6 +2099,9 @@
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Не удалось проверить наличие обновлений!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>mRemoteNG Portable Edition не поддерживает автообновление.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>Ошибка при удалении файла обновления!</value>
</data>
@@ -1743,12 +2142,18 @@ mRemoteNG сейчас прекратит работу и начнет проц
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Использовать те же имя пользователя и пароль</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Использовать смарт-карты</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Использовать SQL Server для загрузки и сохранения подключений</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Версия</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>Не удалось отключить VNC!</value>
</data>
@@ -1764,6 +2169,9 @@ mRemoteNG сейчас прекратит работу и начнет проц
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
<value>Не удалось установить обработчик событий VNC!</value>
</data>
<data name="strVncSetPropsFailed" xml:space="preserve">
<value>Не удалось задать параметры VNC!</value>
</data>
<data name="strVncStartChatFailed" xml:space="preserve">
<value>Не удалось начать VNC-чат!</value>
</data>
@@ -1779,6 +2187,12 @@ mRemoteNG сейчас прекратит работу и начнет проц
<data name="strWarnings" xml:space="preserve">
<value>Предупреждения</value>
</data>
<data name="strWeifenLuoAttribution" xml:space="preserve">
<value>Использовано DockPanel Suite от [Weifen Luo]</value>
</data>
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
</data>
<data name="strWriteLogFile" xml:space="preserve">
<value>Запись в лог-файл (mRemoteNG.log)</value>
</data>

View File

@@ -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>
@@ -168,6 +168,9 @@
<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>
@@ -414,8 +417,26 @@ VncSharpNG Control Version {0}</value>
<data name="strComponentsCheck" xml:space="preserve">
<value>Перевірка компонентів</value>
</data>
<data name="strConfirmCloseConnection" xml:space="preserve">
<value>Запитувати підтвердження при закритті вкладки з'єднання</value>
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
<value>Помилка btnIcon_Click!</value>
</data>
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
<value>Помилка ShowHideGridItems!</value>
</data>
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
<value>Помилка IconMenu_Click!</value>
</data>
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
<value>Помилка властивостей Grid object!</value>
</data>
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
<value>Помилка отримання статусу Хоста!</value>
</data>
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
<value>Помилка pGrid_PopertyValueChanged!</value>
</data>
<data name="strConfigUiLoadFailed" xml:space="preserve">
<value>Помилка завантаження Config UI!</value>
</data>
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
<value>Хочете закрити з'єднання, "{0}"?</value>
@@ -438,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>
@@ -573,6 +591,12 @@ VncSharpNG Control Version {0}</value>
<data name="strEndPort" xml:space="preserve">
<value>Кінц. порт</value>
</data>
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
<value>Помилка додавання на Панель зовнішнього інструменту (frmMain). {0}</value>
</data>
<data name="strErrorAddFolderFailed" xml:space="preserve">
<value>Помилка AddFolder (UI.Window.Tree). {0}</value>
</data>
<data name="strErrorBadDatabaseVersion" xml:space="preserve">
<value>Версія бази даних {0} не сумісна з цією версією {1}.</value>
</data>
@@ -601,6 +625,12 @@ VncSharpNG Control Version {0}</value>
<data name="strErrors" xml:space="preserve">
<value>Помилки</value>
</data>
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
<value>Файл з'єднання не може бути завантажений. {0}{0}{2}{0}{3}{0}{0} Для того, щоб запобігти втраті даних, {1} буде здійснено вихід.</value>
</data>
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
<value>Помилка VerifyDatabaseVersion (Config.Connections.Save). {0}</value>
</data>
<data name="strExpandAllFolders" xml:space="preserve">
<value>Розкрити всі папки</value>
</data>
@@ -613,6 +643,9 @@ VncSharpNG Control Version {0}</value>
<data name="strExportmRemoteXML" xml:space="preserve">
<value>Експорт mRemote / mRemoteNG XML</value>
</data>
<data name="strExtApp" xml:space="preserve">
<value>Зовн. Інструмент</value>
</data>
<data name="strFAMFAMFAMAttribution" xml:space="preserve">
<value>Використано значки [FAMFAMFAM]</value>
</data>
@@ -640,6 +673,9 @@ VncSharpNG Control Version {0}</value>
<data name="strFormatInheritDescription" xml:space="preserve">
<value>Опис успадкованої властивості: {0}</value>
</data>
<data name="strFree" xml:space="preserve">
<value>Free</value>
</data>
<data name="strFullscreen" xml:space="preserve">
<value>На весь екран</value>
</data>
@@ -673,8 +709,8 @@ 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 name="strHttpSetPropsFailed" xml:space="preserve">
<value>Не вдалося задати параметри HTTP!</value>
</data>
<data name="strIcaConnectionFailed" xml:space="preserve">
<value>Не вдається створити нове з'єднання ICA!</value>
@@ -682,6 +718,18 @@ VncSharpNG Control Version {0}</value>
<data name="strIcaControlFailed" xml:space="preserve">
<value>Не вдалося завантажити ICA-плагін!</value>
</data>
<data name="strIcaSetCredentialsFailed" xml:space="preserve">
<value>Помилка встановлення облікових даних ICA!</value>
</data>
<data name="strIcaSetEventHandlersFailed" xml:space="preserve">
<value>Не вдалося встановити оброблювач подій ICA!</value>
</data>
<data name="strIcaSetPropsFailed" xml:space="preserve">
<value>Не вдалося задати параметри ICA!</value>
</data>
<data name="strIcaSetResolutionFailed" xml:space="preserve">
<value>Помилка встановлення дозволів ICA!</value>
</data>
<data name="strImportAD" xml:space="preserve">
<value>Імпорт з Active Directory</value>
</data>
@@ -709,9 +757,30 @@ VncSharpNG Control Version {0}</value>
<data name="strIntAppConnectionFailed" xml:space="preserve">
<value>З'єднання не вдалося!</value>
</data>
<data name="strIntAppFocusFailed" xml:space="preserve">
<value>Зовнішній інструмент: Помилка отримання фокусу!</value>
</data>
<data name="strIntAppHandle" xml:space="preserve">
<value>Оброблювач подій Зовн. інструментів: {0}</value>
</data>
<data name="strIntAppKillFailed" xml:space="preserve">
<value>Не вдалося завершити процес зовнішнього інструменту!</value>
</data>
<data name="strIntAppParentHandle" xml:space="preserve">
<value>Панель Оброблювача: {0}</value>
</data>
<data name="strIntAppResizeFailed" xml:space="preserve">
<value>Зовнішній інструмент: Помилка зміни розміру!</value>
</data>
<data name="strIntAppTitle" xml:space="preserve">
<value>Заголовок зовнішнього інструменту: {0}</value>
</data>
<data name="strKeysCtrlAltDel" xml:space="preserve">
<value>CTRL + ALT + DEL</value>
</data>
<data name="strKeysCtrlEsc" xml:space="preserve">
<value>CTRL-ESC</value>
</data>
<data name="strLabelAddress" xml:space="preserve">
<value>Адреса:</value>
</data>
@@ -745,6 +814,9 @@ VncSharpNG Control Version {0}</value>
<data name="strLabelPort" xml:space="preserve">
<value>Порт:</value>
</data>
<data name="strLabelPortableEdition" xml:space="preserve">
<value>Портативна версія</value>
</data>
<data name="strLabelProtocol" xml:space="preserve">
<value>Протокол:</value>
</data>
@@ -808,6 +880,9 @@ VncSharpNG Control Version {0}</value>
<data name="strLogWriteToFileFinalLocationFailed" xml:space="preserve">
<value>Неможливо зберегти звіт в папці призначення.</value>
</data>
<data name="strMagicLibraryAttribution" xml:space="preserve">
<value>Використано Magic library від [Crownwood Software]</value>
</data>
<data name="strMenuAbout" xml:space="preserve">
<value>Про програму</value>
</data>
@@ -838,6 +913,12 @@ VncSharpNG Control Version {0}</value>
<data name="strMenuCopy" xml:space="preserve">
<value>Копіювати</value>
</data>
<data name="strMenuCtrlAltDel" xml:space="preserve">
<value>Ctrl-Alt-Del</value>
</data>
<data name="strMenuCtrlEsc" xml:space="preserve">
<value>Ctrl-Esc</value>
</data>
<data name="strMenuDelete" xml:space="preserve">
<value>Видалити...</value>
</data>
@@ -1021,6 +1102,9 @@ VncSharpNG Control Version {0}</value>
<data name="strNewPanel" xml:space="preserve">
<value>Нова панель</value>
</data>
<data name="strNewRoot" xml:space="preserve">
<value>новий кореневої</value>
</data>
<data name="strNewTitle" xml:space="preserve">
<value>Нова назва</value>
</data>
@@ -1030,6 +1114,9 @@ VncSharpNG Control Version {0}</value>
<data name="strNoCompression" xml:space="preserve">
<value>Без стискання</value>
</data>
<data name="strNoExtAppDefined" xml:space="preserve">
<value>Не вказано зовнішній інструмент</value>
</data>
<data name="strNoInformation" xml:space="preserve">
<value>Ні</value>
</data>
@@ -1262,6 +1349,12 @@ VncSharpNG Control Version {0}</value>
<data name="strPropertyNameExternalTool" xml:space="preserve">
<value>Зовнішній інструмент</value>
</data>
<data name="strPropertyNameExternalToolAfter" xml:space="preserve">
<value>Зовн. Інстр. Після</value>
</data>
<data name="strPropertyNameExternalToolBefore" xml:space="preserve">
<value>Зовн. Інстр. До</value>
</data>
<data name="strPropertyNameIcon" xml:space="preserve">
<value>Значок</value>
</data>
@@ -1388,9 +1481,18 @@ VncSharpNG Control Version {0}</value>
<data name="strPuttyGetSessionsFailed" xml:space="preserve">
<value>Отримати сесію Putty не вдалося!</value>
</data>
<data name="strPuttyHandle" xml:space="preserve">
<value>Оброблювач подій Putty: {0}</value>
</data>
<data name="strPuttyKillFailed" xml:space="preserve">
<value>Вбити процес Putty не вдалося!</value>
</data>
<data name="strPuttyParentHandle" xml:space="preserve">
<value>Панель оброблювача подій: {0}</value>
</data>
<data name="strPuttyResizeFailed" xml:space="preserve">
<value>Помилка зміни розміру вікна Putty!</value>
</data>
<data name="strPuttySettings" xml:space="preserve">
<value>Налаштування PuTTY</value>
</data>
@@ -1400,6 +1502,9 @@ VncSharpNG Control Version {0}</value>
<data name="strPuttyStartFailed" xml:space="preserve">
<value>Не вдалося запустити Putty!</value>
</data>
<data name="strPuttyTitle" xml:space="preserve">
<value>Заголовок PuTTY: {0}</value>
</data>
<data name="strQuick" xml:space="preserve">
<value>Швидке: {0}</value>
</data>
@@ -1415,6 +1520,12 @@ VncSharpNG Control Version {0}</value>
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
<value>Помилка історії Швидких з'єднань!</value>
</data>
<data name="strRAW" xml:space="preserve">
<value>RAW</value>
</data>
<data name="strRDP" xml:space="preserve">
<value>RDP</value>
</data>
<data name="strRDP16777216Colors" xml:space="preserve">
<value>16777216 кол. (24-біт)</value>
</data>
@@ -1508,21 +1619,63 @@ VncSharpNG Control Version {0}</value>
<data name="strRDPFitToPanel" xml:space="preserve">
<value>У вікні</value>
</data>
<data name="strRdpFocusFailed" xml:space="preserve">
<value>RDP: помилка отримання фокусу!</value>
</data>
<data name="strRdpGatewayIsSupported" xml:space="preserve">
<value>Шлюз Служб терміналів підтримується.</value>
</data>
<data name="strRdpGatewayNotSupported" xml:space="preserve">
<value>Шлюз Служб терміналів не підтримується!</value>
</data>
<data name="strRdpGetSessionsFailed" xml:space="preserve">
<value>Помилка сесії!</value>
</data>
<data name="strRdpOpenConnectionFailed" xml:space="preserve">
<value>Відкрити з'єднання RDP не вдалося!</value>
</data>
<data name="strRdpReconnectCount" xml:space="preserve">
<value>К-сть перепідключень RDP:</value>
</data>
<data name="strRdpSetAuthenticationLevelFailed" xml:space="preserve">
<value>RDP: не вдалося встановити рівень перевірки автентичності!</value>
</data>
<data name="strRdpSetConsoleSessionFailed" xml:space="preserve">
<value>RDP: Не вдалося використати консольну сесію!</value>
</data>
<data name="strRdpSetConsoleSwitch" xml:space="preserve">
<value>Налаштування перемикання консолей для RDC {0}.</value>
</data>
<data name="strRdpSetCredentialsFailed" xml:space="preserve">
<value>Помилка встановлення облікових даних RDP!</value>
</data>
<data name="strRdpSetEventHandlersFailed" xml:space="preserve">
<value>Не вдалося встановити оброблювач подій RDP!</value>
</data>
<data name="strRdpSetGatewayFailed" xml:space="preserve">
<value>Помилка встановлення шлюзу RDP!</value>
</data>
<data name="strRdpSetPerformanceFlagsFailed" xml:space="preserve">
<value>Помилка RDP SetPerformanceFlags!</value>
</data>
<data name="strRdpSetPortFailed" xml:space="preserve">
<value>Не вдалося встановити порт RDP!</value>
</data>
<data name="strRdpSetPropsFailed" xml:space="preserve">
<value>Не вдалося встановити параметри RDP!</value>
</data>
<data name="strRdpSetRedirectionFailed" xml:space="preserve">
<value>Не вдалося встановити перенаправлення в RDP!</value>
</data>
<data name="strRdpSetRedirectKeysFailed" xml:space="preserve">
<value>Не вдалося встановити перенаправлення клавіш в RDP!</value>
</data>
<data name="strRdpSetResolutionFailed" xml:space="preserve">
<value>Помилка встановлення дозволів RDP!</value>
</data>
<data name="strRDPSmartSize" xml:space="preserve">
<value>розумний розмір</value>
</data>
<data name="strRDPSoundBringToThisComputer" xml:space="preserve">
<value>Передати на цей комп'ютер</value>
</data>
@@ -1532,6 +1685,12 @@ VncSharpNG Control Version {0}</value>
<data name="strRDPSoundLeaveAtRemoteComputer" xml:space="preserve">
<value>Залишити на віддаленому комп'ютері</value>
</data>
<data name="strRdpToggleFullscreenFailed" xml:space="preserve">
<value>Не вдалося переключити RDP в режим Fullscreen!</value>
</data>
<data name="strRdpToggleSmartSizeFailed" xml:space="preserve">
<value>Не вдалося переключити RDP в режим SmartSize!</value>
</data>
<data name="strReconnectAtStartup" xml:space="preserve">
<value>При запуску підключатися до попередніх сесій</value>
</data>
@@ -1547,6 +1706,9 @@ VncSharpNG Control Version {0}</value>
<data name="strRename" xml:space="preserve">
<value>Перейменувати</value>
</data>
<data name="strRlogin" xml:space="preserve">
<value>Rlogin</value>
</data>
<data name="strSave" xml:space="preserve">
<value>Зберегти</value>
</data>
@@ -1607,6 +1769,15 @@ VncSharpNG Control Version {0}</value>
<data name="strSingleClickOnOpenConnectionSwitchesToIt" xml:space="preserve">
<value>Один клік по відкритому з'єднанню переключається на нього</value>
</data>
<data name="strSmartSizeModeAspect" xml:space="preserve">
<value>Вигляд</value>
</data>
<data name="strSmartSizeModeFree" xml:space="preserve">
<value>Free</value>
</data>
<data name="strSocks5" xml:space="preserve">
<value>Socks 5</value>
</data>
<data name="strSort" xml:space="preserve">
<value>Сортувати</value>
</data>
@@ -1616,6 +1787,9 @@ VncSharpNG Control Version {0}</value>
<data name="strSortDesc" xml:space="preserve">
<value>За спаданням (Z-A)</value>
</data>
<data name="strSpecialKeys" xml:space="preserve">
<value>Спеціальні клавіші</value>
</data>
<data name="strSQLInfo" xml:space="preserve">
<value>Для додаткової інформації див. довідку - Початок роботи - конфігурація SQL!</value>
</data>
@@ -1625,6 +1799,12 @@ VncSharpNG Control Version {0}</value>
<data name="strSqlUpdateCheckUpdateAvailable" xml:space="preserve">
<value>Доступно оновлення для SQL! Оновлення з'єднання.</value>
</data>
<data name="strSsh1" xml:space="preserve">
<value>SSH version 1</value>
</data>
<data name="strSsh2" xml:space="preserve">
<value>SSH version 2</value>
</data>
<data name="strSSHStartTransferBG" xml:space="preserve">
<value>Фонова передача по SSH - не вдалося!</value>
</data>
@@ -1634,9 +1814,6 @@ VncSharpNG Control Version {0}</value>
<data name="strSSHTransferEndFailed" xml:space="preserve">
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
</data>
<data name="strSSHTransferFailed" xml:space="preserve">
<value>Передача</value>
</data>
<data name="strStartIP" xml:space="preserve">
<value>Початковий IP</value>
</data>
@@ -1664,6 +1841,9 @@ VncSharpNG Control Version {0}</value>
<data name="strTabUpdates" xml:space="preserve">
<value>Оновлення</value>
</data>
<data name="strTelnet" xml:space="preserve">
<value>Telnet</value>
</data>
<data name="strTheFollowing" xml:space="preserve">
<value>Встановити вручну:</value>
</data>
@@ -1694,6 +1874,9 @@ VncSharpNG Control Version {0}</value>
<data name="strType" xml:space="preserve">
<value>Тип</value>
</data>
<data name="strUltraVncRepeater" xml:space="preserve">
<value>Ultra VNC Repeater</value>
</data>
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
<value>Порт UltraVNC SingleClick:</value>
</data>
@@ -1712,6 +1895,9 @@ VncSharpNG Control Version {0}</value>
<data name="strUpdateCheckFailed" xml:space="preserve">
<value>Не вдалося перевірити наявність оновлень!</value>
</data>
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
<value>Портативна версія mRemoteNG не підтримує автоматичне оновлення.</value>
</data>
<data name="strUpdateDeleteFailed" xml:space="preserve">
<value>Помилка при видаленні файлу оновлення!</value>
</data>
@@ -1752,12 +1938,18 @@ mRemoteNG зараз припинить роботу і почне процес
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
<value>Використовувати ті ж ім'я користувача і пароль</value>
</data>
<data name="strUseSmartCard" xml:space="preserve">
<value>Використовувати смарт-карти</value>
</data>
<data name="strUseSQLServer" xml:space="preserve">
<value>Використовувати SQL Server для завантаження і збереження з'єднань</value>
</data>
<data name="strVersion" xml:space="preserve">
<value>Версія</value>
</data>
<data name="strVnc" xml:space="preserve">
<value>VNC</value>
</data>
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
<value>Не вдалося вимкнути VNC!</value>
</data>
@@ -1773,6 +1965,9 @@ mRemoteNG зараз припинить роботу і почне процес
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
<value>Не вдалося встановити оброблювач подій VNC!</value>
</data>
<data name="strVncSetPropsFailed" xml:space="preserve">
<value>Не вдалося задати параметри VNC!</value>
</data>
<data name="strVncStartChatFailed" xml:space="preserve">
<value>Не вдалося почати VNC-чат!</value>
</data>
@@ -1788,6 +1983,12 @@ mRemoteNG зараз припинить роботу і почне процес
<data name="strWarnings" xml:space="preserve">
<value>Попередження</value>
</data>
<data name="strWeifenLuoAttribution" xml:space="preserve">
<value>Використано DockPanel Suite від [Weifen Luo]</value>
</data>
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
</data>
<data name="strWriteLogFile" xml:space="preserve">
<value>Запис в лог-файл (mRemoteNG.log)</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

@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("mRemoteNG")>
<Assembly: AssemblyCopyright("Copyright © 2007-2009 Felix Deimel, 2010-2012 Riley McArdle")>
<Assembly: AssemblyCopyright("Copyright © 2007-2009 Felix Deimel, 2010-2013 Riley McArdle")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
@@ -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.261
' Runtime Version:4.0.30319.296
'
' 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(), _
@@ -1743,7 +1730,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 StartupComponentsCheck() As Boolean
Get
Return CType(Me("StartupComponentsCheck"),Boolean)
@@ -2093,7 +2080,7 @@ Namespace My
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("de,en,en-US,es,fr,nl,pl,ru,uk")> _
Global.System.Configuration.DefaultSettingValueAttribute("de,en,en-US,es-AR,es,fr,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN")> _
Public ReadOnly Property SupportedUICultures() As String
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
@@ -2282,19 +2269,6 @@ Namespace My
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("True")> _
Public Property ConDefaultUseCredSsp() As Boolean
Get
Return CType(Me("ConDefaultUseCredSsp"), Boolean)
End Get
Set(value As Boolean)
Me("ConDefaultUseCredSsp") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
@@ -2307,6 +2281,197 @@ Namespace My
Me("InhDefaultUseCredSsp") = 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 ConDefaultUseCredSsp() As Boolean
Get
Return CType(Me("ConDefaultUseCredSsp"),Boolean)
End Get
Set
Me("ConDefaultUseCredSsp") = 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 AlwaysShowPanelTabs() As Boolean
Get
Return CType(Me("AlwaysShowPanelTabs"),Boolean)
End Get
Set
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-beta.txt")> _
Public ReadOnly Property AnnouncementAddress() As String
Get
Return CType(Me("AnnouncementAddress"),String)
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/")> _
Public Property UpdateAddress() As String
Get
Return CType(Me("UpdateAddress"),String)
End Get
Set
Me("UpdateAddress") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("")> _
Public Property ConDefaultLoadBalanceInfo() As String
Get
Return CType(Me("ConDefaultLoadBalanceInfo"),String)
End Get
Set
Me("ConDefaultLoadBalanceInfo") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
Public Property ConDefaultAutomaticResize() As Boolean
Get
Return CType(Me("ConDefaultAutomaticResize"),Boolean)
End Get
Set
Me("ConDefaultAutomaticResize") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property InhDefaultLoadBalanceInfo() As Boolean
Get
Return CType(Me("InhDefaultLoadBalanceInfo"),Boolean)
End Get
Set
Me("InhDefaultLoadBalanceInfo") = value
End Set
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
Public Property InhDefaultAutomaticResize() As Boolean
Get
Return CType(Me("InhDefaultAutomaticResize"),Boolean)
End Get
Set
Me("InhDefaultAutomaticResize") = value
End Set
End Property
End Class
End 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>
@@ -393,7 +390,7 @@
<Value Profile="(Default)">5500</Value>
</Setting>
<Setting Name="StartupComponentsCheck" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="XULRunnerPath" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
@@ -474,7 +471,7 @@
<Value Profile="(Default)" />
</Setting>
<Setting Name="SupportedUICultures" Type="System.String" Scope="Application">
<Value Profile="(Default)">de,en,en-US,es,fr,nl,pl,ru,uk</Value>
<Value Profile="(Default)">de,en,en-US,es-AR,es,fr,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN</Value>
</Setting>
<Setting 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)" />
@@ -518,10 +515,52 @@
<Setting Name="BackupFileNameFormat" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Roaming="true" Type="System.String" Scope="User">
<Value Profile="(Default)">{0}.{1:yyyyMMdd-HHmmssffff}.backup</Value>
</Setting>
<Setting Name="ConDefaultUseCredSsp" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="Application">
<Setting Name="InhDefaultUseCredSsp" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="ConDefaultUseCredSsp" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="InhDefaultUseCredSsp" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<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-beta.txt</Value>
</Setting>
<Setting Name="UpdateAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)">https://update.mremoteng.org/</Value>
</Setting>
<Setting Name="ConDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="ConDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="InhDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="InhDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
</Settings>

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,41 +43,46 @@ 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
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strErrorDecryptionFailed, ex.Message))
' Ignore CryptographicException "Padding is invalid and cannot be removed." when password is incorrect.
If Not TypeOf ex Is CryptographicException Then
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strErrorDecryptionFailed, ex.Message))
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,95 @@
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
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
@@ -179,15 +178,27 @@ Namespace Tools
End Class
Public Shared Function ConnectionsSaveAsDialog() As SaveFileDialog
Dim sDlg As New SaveFileDialog()
sDlg.CheckPathExists = True
sDlg.InitialDirectory = App.Info.Connections.DefaultConnectionsPath
sDlg.FileName = App.Info.Connections.DefaultConnectionsFile
sDlg.OverwritePrompt = True
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.CheckPathExists = True
saveFileDialog.InitialDirectory = App.Info.Connections.DefaultConnectionsPath
saveFileDialog.FileName = App.Info.Connections.DefaultConnectionsFile
saveFileDialog.OverwritePrompt = True
sDlg.Filter = My.Language.strFiltermRemoteXML & "|*.xml|" & My.Language.strFiltermRemoteCSV & "|*.csv|" & My.Language.strFiltervRD2008CSV & "|*.csv|" & My.Language.strFilterAll & "|*.*"
saveFileDialog.Filter = My.Language.strFiltermRemoteXML & "|*.xml|" & My.Language.strFilterAll & "|*.*"
Return sDlg
Return saveFileDialog
End Function
Public Shared Function ConnectionsExportDialog() As SaveFileDialog
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.CheckPathExists = True
saveFileDialog.InitialDirectory = App.Info.Connections.DefaultConnectionsPath
saveFileDialog.FileName = App.Info.Connections.DefaultConnectionsFile
saveFileDialog.OverwritePrompt = True
saveFileDialog.Filter = My.Language.strFiltermRemoteXML & "|*.xml|" & My.Language.strFiltermRemoteCSV & "|*.csv|" & My.Language.strFiltervRD2008CSV & "|*.csv|" & My.Language.strFilterAll & "|*.*"
Return saveFileDialog
End Function
Public Shared Function ConnectionsLoadDialog() As OpenFileDialog
@@ -199,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

@@ -92,7 +92,7 @@ Namespace Tools
Get
If Not Me.Localized Then
Me.Localized = True
Me.DisplayNameValue = String.Format(My.Language.strFormatInherit, My.Resources.ResourceManager.GetString(Me.DisplayNameValue))
Me.DisplayNameValue = String.Format(My.Language.strFormatInherit, My.Language.ResourceManager.GetString(Me.DisplayNameValue))
End If
Return MyBase.DisplayName
@@ -116,7 +116,7 @@ Namespace Tools
Get
If Not Me.Localized Then
Me.Localized = True
Me.DescriptionValue = String.Format(My.Language.strFormatInheritDescription, My.Resources.ResourceManager.GetString(Me.DescriptionValue))
Me.DescriptionValue = String.Format(My.Language.strFormatInheritDescription, My.Language.ResourceManager.GetString(Me.DescriptionValue))
End If
Return MyBase.Description

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

@@ -81,43 +81,30 @@ 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
@@ -214,7 +201,7 @@ Namespace Tools
#Region "Methods"
Public Sub New(ByVal host As String)
_HostIP = host
_hostIp = host
_OpenPorts = New ArrayList
_ClosedPorts = New ArrayList
End Sub
@@ -232,10 +219,10 @@ Namespace Tools
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
@@ -463,12 +450,11 @@ Namespace Tools
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
sHost.HostName = Net.Dns.GetHostEntry(sHost.HostIp).HostName
Catch ex As Exception
End Try
If String.IsNullOrEmpty(sHost.HostName) Then sHost.HostName = sHost.HostIp
_ScannedHosts.Add(sHost)
RaiseEvent HostScanned(sHost, hCount, Hosts.Count)

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
@@ -306,7 +312,7 @@ Namespace Tree
newInheritance.Parent = newConnectionInfo
newConnectionInfo.Inherit = newInheritance
connectionList.Add(newConnectionInfo)
ConnectionList.Add(newConnectionInfo)
Dim newTreeNode As New TreeNode(newConnectionInfo.Name)
newTreeNode.Tag = newConnectionInfo
@@ -316,9 +322,13 @@ Namespace Tree
newConnectionInfo.TreeNode = newTreeNode
If parentNode Is Nothing Then
oldTreeNode.Parent.Nodes.Add(newTreeNode)
Tree.Node.TreeView.SelectedNode = newTreeNode
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
@@ -332,15 +342,20 @@ Namespace Tree
newTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Container
newContainerInfo.ConnectionInfo.Parent = newContainerInfo
containerList.Add(newContainerInfo)
ContainerList.Add(newContainerInfo)
oldTreeNode.Parent.Nodes.Add(newTreeNode)
Tree.Node.TreeView.SelectedNode = newTreeNode
If parentNode Is Nothing Then
oldTreeNode.Parent.Nodes.Insert(oldTreeNode.Index + 1, newTreeNode)
TreeView.SelectedNode = newTreeNode
Else
parentNode.Nodes.Add(newTreeNode)
End If
For Each childTreeNode As TreeNode In oldTreeNode.Nodes
CloneNode(childTreeNode, newTreeNode)
Next
newTreeNode.Expand()
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, String.Format(My.Language.strErrorCloneNodeFailed, ex.Message))
@@ -420,18 +435,20 @@ Namespace Tree
End Sub
Public Shared Sub StartRenameSelectedNode()
If SelectedNode IsNot Nothing Then
Windows.treeForm.cMenTreeDelete.ShortcutKeys = Keys.None
SelectedNode.BeginEdit()
End If
If SelectedNode IsNot Nothing Then SelectedNode.BeginEdit()
End Sub
Public Shared Sub FinishRenameSelectedNode(ByVal NewName As String)
Windows.treeForm.cMenTreeDelete.ShortcutKeys = Keys.Delete
Public Shared Sub FinishRenameSelectedNode(ByVal newName As String)
If newName Is Nothing Then Return
If NewName IsNot Nothing Then
If NewName.Length > 0 Then
SelectedNode.Tag.Name = NewName
If newName.Length > 0 Then
SelectedNode.Tag.Name = newName
If My.Settings.SetHostnameLikeDisplayName Then
Dim connectionInfo As Connection.Info = TryCast(SelectedNode.Tag, Connection.Info)
If (connectionInfo IsNot Nothing) Then
connectionInfo.Hostname = newName
End If
End If
End If
End Sub
@@ -490,27 +507,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

@@ -81,7 +81,7 @@ Namespace UI
Me.AD.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.AD.Domain = "akane"
Me.AD.Domain = ""
Me.AD.Location = New System.Drawing.Point(0, 0)
Me.AD.Name = "AD"
Me.AD.SelectedNode = Nothing

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

@@ -34,6 +34,15 @@ Namespace UI
End Sub
#End Region
#Region "Private Methods"
Private Sub Base_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
frmMain.ShowHidePanelTabs()
End Sub
Private Sub Base_FormClosed(sender As System.Object, e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
frmMain.ShowHidePanelTabs(Me)
End Sub
#End Region
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,3 +1,5 @@
Imports mRemoteNG.My
Imports mRemoteNG.Connection.Protocol
Imports WeifenLuo.WinFormsUI.Docking
Imports System.Net.NetworkInformation
Imports mRemoteNG.App.Runtime
@@ -17,25 +19,31 @@ 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
Me.pGrid = New Azuria.Common.Controls.FilteredPropertyGrid
Me.btnShowInheritance = New System.Windows.Forms.ToolStripButton
Me.btnShowDefaultInheritance = New System.Windows.Forms.ToolStripButton
Me.btnShowProperties = New System.Windows.Forms.ToolStripButton
Me.btnShowDefaultProperties = New System.Windows.Forms.ToolStripButton
Me.btnIcon = New System.Windows.Forms.ToolStripButton
Me.btnHostStatus = New System.Windows.Forms.ToolStripButton
Me.components = New System.ComponentModel.Container()
Me.pGrid = New Azuria.Common.Controls.FilteredPropertyGrid()
Me.btnShowInheritance = New System.Windows.Forms.ToolStripButton()
Me.btnShowDefaultInheritance = New System.Windows.Forms.ToolStripButton()
Me.btnShowProperties = New System.Windows.Forms.ToolStripButton()
Me.btnShowDefaultProperties = New System.Windows.Forms.ToolStripButton()
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
'
Me.pGrid.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.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
@@ -109,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)
@@ -119,6 +139,7 @@ Namespace UI
Me.Name = "Config"
Me.TabText = "Config"
Me.Text = "Config"
Me.propertyGridContextMenu.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
@@ -214,49 +235,123 @@ Namespace UI
End Sub
' Main form handle command key events
' Adapted from http://kiwigis.blogspot.com/2009/05/adding-tab-key-support-to-propertygrid.html
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
#If Config = "Debug" Then
Debug.Print("key: " & keyData.ToString)
Debug.Print("msg: " & msg.Msg)
Debug.Print("hwnd: " & msg.HWnd.ToString)
Debug.Print("lparam: " & msg.LParam.ToString)
Debug.Print("wparam: " & msg.WParam.ToString)
Debug.Print("result: " & msg.Result.ToString)
#End If
If keyData = Keys.Tab Then
Dim curGridItemLabel As String = pGrid.SelectedGridItem.Label
Dim gridItemIndex As Integer
If (keyData And Keys.KeyCode) = Keys.Tab Then
Dim selectedItem As GridItem = pGrid.SelectedGridItem
Dim gridRoot As GridItem = selectedItem
While gridRoot.GridItemType <> GridItemType.Root
gridRoot = gridRoot.Parent
End While
For gridItemIndex = 0 To pGrid.SelectedGridItem.Parent.GridItems.Count
If pGrid.SelectedGridItem.Parent.GridItems(gridItemIndex).Label = curGridItemLabel Then
Exit For
End If
Next
Dim gridItems As New List(Of GridItem)
FindChildGridItems(gridRoot, gridItems)
If pGrid.SelectedGridItem.Parent.GridItems.Count > gridItemIndex + 1 Then
pGrid.SelectedGridItem.Parent.GridItems(gridItemIndex + 1).Select()
Else
pGrid.SelectedGridItem.Parent.GridItems(0).Select()
If Not ContainsGridItemProperty(gridItems) Then Return True
Dim newItem As GridItem = selectedItem
If keyData = (Keys.Tab Or Keys.Shift) Then
newItem = FindPreviousGridItemProperty(gridItems, selectedItem)
ElseIf keyData = Keys.Tab Then
newItem = FindNextGridItemProperty(gridItems, selectedItem)
End If
pGrid.SelectedGridItem = newItem
Return True ' Handled
Else
Return MyBase.ProcessCmdKey(msg, keyData)
End If
If keyData = (Keys.Tab Or Keys.Shift) Then
Dim curGridItemLabel As String = pGrid.SelectedGridItem.Label
Dim gridItemIndex As Integer
End Function
For gridItemIndex = 0 To pGrid.SelectedGridItem.Parent.GridItems.Count
If pGrid.SelectedGridItem.Parent.GridItems(gridItemIndex).Label = curGridItemLabel Then
Exit For
End If
Private Sub FindChildGridItems(item As GridItem, ByRef gridItems As List(Of GridItem))
gridItems.Add(item)
If Not item.Expandable Or item.Expanded Then
For Each child As GridItem In item.GridItems
FindChildGridItems(child, gridItems)
Next
End If
End Sub
If gridItemIndex - 1 >= 0 Then
pGrid.SelectedGridItem.Parent.GridItems(gridItemIndex - 1).Select()
Else
pGrid.SelectedGridItem.Parent.GridItems(pGrid.SelectedGridItem.Parent.GridItems.Count - 1).Select()
End If
Private Function ContainsGridItemProperty(gridItems As List(Of GridItem)) As Boolean
For Each item As GridItem In gridItems
If item.GridItemType = GridItemType.Property Then Return True
Next
Return False
End Function
Private Function FindPreviousGridItemProperty(gridItems As List(Of GridItem), startItem As GridItem) As GridItem
If gridItems.Count = 0 Then Return Nothing
If startItem Is Nothing Then Return Nothing
Dim startIndex As Integer = gridItems.IndexOf(startItem)
If startItem.GridItemType = GridItemType.Property Then
startIndex = startIndex - 1
If startIndex < 0 Then startIndex = gridItems.Count - 1
End If
Return MyBase.ProcessCmdKey(msg, keyData)
Dim previousIndex As Integer = 0
Dim previousIndexValid As Boolean = False
For index As Integer = startIndex To 0 Step -1
If gridItems(index).GridItemType = GridItemType.Property Then
previousIndex = index
previousIndexValid = True
Exit For
End If
Next
If previousIndexValid Then Return gridItems(previousIndex)
For index As Integer = gridItems.Count - 1 To startIndex + 1 Step -1
If gridItems(index).GridItemType = GridItemType.Property Then
previousIndex = index
previousIndexValid = True
Exit For
End If
Next
If Not previousIndexValid Then Return Nothing
Return gridItems(previousIndex)
End Function
Private Function FindNextGridItemProperty(gridItems As List(Of GridItem), startItem As GridItem) As GridItem
If gridItems.Count = 0 Then Return Nothing
If startItem Is Nothing Then Return Nothing
Dim startIndex As Integer = gridItems.IndexOf(startItem)
If startItem.GridItemType = GridItemType.Property Then
startIndex = startIndex + 1
If startIndex >= gridItems.Count Then startIndex = 0
End If
Dim nextIndex As Integer = 0
Dim nextIndexValid As Boolean = False
For index As Integer = startIndex To gridItems.Count - 1
If gridItems(index).GridItemType = GridItemType.Property Then
nextIndex = index
nextIndexValid = True
Exit For
End If
Next
If nextIndexValid Then Return gridItems(nextIndex)
For index As Integer = 0 To startIndex - 1
If gridItems(index).GridItemType = GridItemType.Property Then
nextIndex = index
nextIndexValid = True
Exit For
End If
Next
If Not nextIndexValid Then Return Nothing
Return gridItems(nextIndex)
End Function
Public Sub SetPropertyGridObject(ByVal Obj As Object)
@@ -283,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
@@ -315,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
@@ -345,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
@@ -400,41 +511,6 @@ Namespace UI
#End Region
#Region "Private Methods"
Private tsCustom As ToolStrip = Nothing
Private Sub Config_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ApplyLanguage()
Try
'Show PropertyGrid Toolbar buttons
tsCustom = New ToolStrip
tsCustom.Items.Add(btnShowProperties)
tsCustom.Items.Add(btnShowInheritance)
tsCustom.Items.Add(btnShowDefaultProperties)
tsCustom.Items.Add(btnShowDefaultInheritance)
tsCustom.Items.Add(btnHostStatus)
tsCustom.Items.Add(btnIcon)
tsCustom.Show()
Dim tsDefault As New ToolStrip
For Each ctrl As System.Windows.Forms.Control In pGrid.Controls
Dim tStrip As ToolStrip = TryCast(ctrl, ToolStrip)
If tStrip IsNot Nothing Then
tsDefault = tStrip
Exit For
End If
Next
tsDefault.AllowMerge = True
tsDefault.Items(tsDefault.Items.Count - 1).Visible = False
ToolStripManager.Merge(tsCustom, tsDefault)
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strConfigUiLoadFailed & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub ApplyLanguage()
btnShowInheritance.Text = My.Language.strButtonInheritance
btnShowDefaultInheritance.Text = My.Language.strButtonDefaultInheritance
@@ -444,6 +520,85 @@ 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
Private _originalPropertyGridToolStripItemCount As Integer
Private Sub AddToolStripItems()
Try
Dim customToolStrip As ToolStrip = New ToolStrip
customToolStrip.Items.Add(btnShowProperties)
customToolStrip.Items.Add(btnShowInheritance)
customToolStrip.Items.Add(btnShowDefaultProperties)
customToolStrip.Items.Add(btnShowDefaultInheritance)
customToolStrip.Items.Add(btnHostStatus)
customToolStrip.Items.Add(btnIcon)
customToolStrip.Show()
Dim propertyGridToolStrip As New ToolStrip
Dim toolStrip As ToolStrip = Nothing
For Each control As System.Windows.Forms.Control In pGrid.Controls
toolStrip = TryCast(control, ToolStrip)
If toolStrip IsNot Nothing Then
propertyGridToolStrip = toolStrip
Exit For
End If
Next
If toolStrip Is Nothing Then
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strCouldNotFindToolStripInFilteredPropertyGrid, True)
Return
End If
If Not _originalPropertyGridToolStripItemCountValid Then
_originalPropertyGridToolStripItemCount = propertyGridToolStrip.Items.Count
_originalPropertyGridToolStripItemCountValid = True
End If
Debug.Assert(_originalPropertyGridToolStripItemCount = 5)
' Hide the "Property Pages" button
propertyGridToolStrip.Items(_originalPropertyGridToolStripItemCount - 1).Visible = False
Dim expectedToolStripItemCount As Integer = _originalPropertyGridToolStripItemCount + customToolStrip.Items.Count
If propertyGridToolStrip.Items.Count <> expectedToolStripItemCount Then
propertyGridToolStrip.AllowMerge = True
ToolStripManager.Merge(customToolStrip, propertyGridToolStrip)
End If
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strConfigUiLoadFailed & vbNewLine & ex.Message, True)
End Try
End Sub
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
AddToolStripItems()
End Sub
Private Sub pGrid_PropertyValueChanged(ByVal s As Object, ByVal e As System.Windows.Forms.PropertyValueChangedEventArgs) Handles pGrid.PropertyValueChanged
@@ -465,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
@@ -476,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
@@ -508,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)
@@ -543,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")
@@ -560,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")
@@ -568,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")
@@ -596,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")
@@ -604,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")
@@ -634,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")
@@ -642,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")
@@ -673,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")
@@ -681,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")
@@ -713,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")
@@ -721,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")
@@ -753,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")
@@ -761,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")
@@ -793,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")
@@ -800,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")
@@ -831,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")
@@ -865,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")
@@ -872,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")
@@ -902,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")
@@ -910,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")
@@ -1135,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
@@ -1209,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
@@ -1229,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
@@ -1307,6 +1513,18 @@ Namespace UI
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
@@ -262,6 +263,8 @@ Namespace UI
nTab.Title &= ")"
End If
nTab.Title = nTab.Title.Replace("&", "&&")
Dim conIcon As Icon = mRemoteNG.Connection.Icon.FromString(conI.Icon)
If conIcon IsNot Nothing Then
nTab.Icon = conIcon
@@ -274,6 +277,7 @@ Namespace UI
End If
nTab.Selected = True
_ignoreChangeSelectedTabClick = False
Return nTab
Catch ex As Exception
@@ -289,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
@@ -308,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
@@ -323,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
@@ -358,30 +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
_firstClickTicks = 0
If My.Settings.DoubleClickOnTabClosesIt Then
Me.CloseConnectionTab()
End If
@@ -420,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
@@ -760,6 +787,7 @@ Namespace UI
Dim IC As mRemoteNG.Connection.InterfaceControl = Me.TabController.SelectedTab.Tag
App.Runtime.OpenConnection(IC.Info, mRemoteNG.Connection.Info.Force.DoNotJump)
_ignoreChangeSelectedTabClick = False
End If
End If
Catch ex As Exception
@@ -820,6 +848,7 @@ Namespace UI
Else
Try
Me.TabController.TabPages.Remove(TabToBeClosed)
_ignoreChangeSelectedTabClick = False
Catch comEx As System.Runtime.InteropServices.COMException
CloseTab(TabToBeClosed)
Catch ex As Exception
@@ -832,9 +861,47 @@ Namespace UI
End If
End Sub
Private _ignoreChangeSelectedTabClick As Boolean = False
Private Sub TabController_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabController.SelectionChanged
Me.FocusIC()
Me.RefreshIC()
_ignoreChangeSelectedTabClick = True
FocusIC()
RefreshIC()
End Sub
Private _firstClickTicks As Integer = 0
Private _doubleClickRectangle As Rectangle
Private Sub TabController_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.MouseUp
Try
If Not Native.GetForegroundWindow() = frmMain.Handle And Not _ignoreChangeSelectedTabClick Then
Dim clickedTab As Magic.Controls.TabPage = TabController.TabPageFromPoint(e.Location)
If clickedTab IsNot Nothing And TabController.SelectedTab IsNot clickedTab Then
Native.SetForegroundWindow(Handle)
TabController.SelectedTab = clickedTab
End If
End If
_ignoreChangeSelectedTabClick = False
Select Case e.Button
Case MouseButtons.Left
Dim currentTicks As Integer = Environment.TickCount
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)
End If
Case MouseButtons.Middle
CloseConnectionTab()
Case MouseButtons.Right
ShowHideMenuButtons()
Native.SetForegroundWindow(Handle)
cmenTab.Show(TabController, e.Location)
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "TabController_MouseUp (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
End Sub
Private Sub FocusIC()
@@ -871,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)
@@ -894,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)
@@ -917,22 +982,11 @@ Namespace UI
TabController.TabPages.ResumeEvents()
End Sub
Private Sub TabController_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles TabController.MouseUp
Debug.Print("UI.Window.Connection.TabController_MouseUp()")
Try
Select Case e.Button
Case MouseButtons.Left
FocusIC()
Case MouseButtons.Middle
TabController.SelectedTab = TabController.TabPageFromPoint(e.Location)
CloseConnectionTab()
Case MouseButtons.Right
ShowHideMenuButtons()
cmenTab.Show(TabController, e.Location)
End Select
Catch ex As Exception
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "TabController_MouseUp (UI.Window.Connections) failed" & vbNewLine & ex.Message, True)
End Try
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

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

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