mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d64fbef49 | ||
|
|
869c2726bb | ||
|
|
2e663df42a | ||
|
|
0a82828d2e | ||
|
|
13c1d049fc | ||
|
|
62feba1691 | ||
|
|
3cb8784996 | ||
|
|
81d150f80a | ||
|
|
9ebce266ec | ||
|
|
42bcf8db31 | ||
|
|
ff2bbcf650 | ||
|
|
ba55958327 | ||
|
|
2a67f493f6 | ||
|
|
06892deedf | ||
|
|
d12ea40845 | ||
|
|
3f21151331 | ||
|
|
c91f5e5cba | ||
|
|
9e90d17d80 | ||
|
|
2e67bbf6a1 | ||
|
|
ceec9749b9 | ||
|
|
f674b5bfeb | ||
|
|
b3e541c627 | ||
|
|
3389a152be | ||
|
|
662fcfa318 | ||
|
|
06baec9c55 | ||
|
|
270699c26b | ||
|
|
bc699a04ec | ||
|
|
3639e75f5b | ||
|
|
eef14ebc29 | ||
|
|
2568d2b750 | ||
|
|
58a57d7a7d | ||
|
|
8ddb71758e | ||
|
|
54f19eaeb6 | ||
|
|
960096273b | ||
|
|
b360902bd9 | ||
|
|
8006bb49ca | ||
|
|
ac65468233 | ||
|
|
8992cb29da | ||
|
|
b5f5f43b4c | ||
|
|
8a814d9016 | ||
|
|
4ff4a365e1 | ||
|
|
905b6bb92a | ||
|
|
88d06c8ef2 | ||
|
|
102987dac7 | ||
|
|
54cf76444e | ||
|
|
f595c1d446 | ||
|
|
9cf06c44e8 | ||
|
|
5d63ec6d2a | ||
|
|
0544b61138 | ||
|
|
ceb6f70b4d | ||
|
|
f3075f4c51 | ||
|
|
7b850892ae | ||
|
|
6a3ca9c9de | ||
|
|
d69d948963 | ||
|
|
aa6061d7b6 | ||
|
|
ba667475bf | ||
|
|
5737d78f78 | ||
|
|
079fe000bb | ||
|
|
29865c69ab | ||
|
|
f2e9cce248 | ||
|
|
6a16656f03 | ||
|
|
7f4d3605c0 | ||
|
|
d97ad31cc3 | ||
|
|
a49ebf17bf | ||
|
|
903a9dd5cc | ||
|
|
5d8db1ade6 | ||
|
|
423a89fdaa | ||
|
|
85d78fd4ae | ||
|
|
725269e914 | ||
|
|
9d3beaffbb | ||
|
|
7f36b7926b | ||
|
|
f4bb268e27 | ||
|
|
e1329348d1 | ||
|
|
4f06a48d16 | ||
|
|
1dea64d2eb | ||
|
|
375e737f02 | ||
|
|
1032801f12 | ||
|
|
1002b8d32f | ||
|
|
36a72da71f | ||
|
|
a2b3a815e7 | ||
|
|
7820707e46 | ||
|
|
c3f960cfe8 | ||
|
|
965f43a4c3 | ||
|
|
317175bb03 | ||
|
|
1608d48495 | ||
|
|
08ddee1bda | ||
|
|
72756a2bb8 | ||
|
|
38011a3546 |
71
BUILD.CMD
71
BUILD.CMD
@@ -8,7 +8,7 @@ set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat
|
||||
set DEVENV="devenv.exe"
|
||||
set MAKENSIS="%ProgramFiles(x86)%\NSIS\Unicode\makensis.exe"
|
||||
set RAR="%ProgramFiles%\WinRAR\WinRAR.exe"
|
||||
set SIGNCMD=signtool.exe sign /n "Next Generation Software" /sha1 "c4ece717747eb7d0cac824f6c7431e5237138b02" /t http://timestamp.verisign.com/scripts/timstamp.dll
|
||||
set SIGNCMD=signtool.exe sign /n "Astrospark Technologies, LLC" /sha1 "1cbd910dbd6e77f26506e7f600736972f700673f" /tr http://timestamp.comodoca.com/rfc3161
|
||||
|
||||
rem Windows Sysinternals Sigcheck from http://technet.microsoft.com/en-us/sysinternals/bb897441
|
||||
set SIGCHECK="%ProgramFiles(x86)%\Sigcheck\sigcheck.exe"
|
||||
@@ -18,6 +18,20 @@ call %VCVARSALL% x86
|
||||
rmdir /s /q "%~dp0\mRemoteV1\bin" > nul 2>&1
|
||||
rmdir /s /q "%~dp0\mRemoteV1\obj" > nul 2>&1
|
||||
|
||||
if exist "%~dp0\mRemoteV1\bin" goto ERROR_RMDIR
|
||||
if exist "%~dp0\mRemoteV1\obj" goto ERROR_RMDIR
|
||||
goto NOERROR_RMDIR
|
||||
|
||||
:ERROR_RMDIR
|
||||
echo.
|
||||
echo Could not clean output directories.
|
||||
echo.
|
||||
echo Build process failed.
|
||||
echo.
|
||||
goto END
|
||||
|
||||
:NOERROR_RMDIR
|
||||
|
||||
echo Building release version...
|
||||
%DEVENV% "%~dp0\mRemoteV1.sln" /build "Release"
|
||||
|
||||
@@ -25,7 +39,58 @@ echo Building portable version...
|
||||
%DEVENV% "%~dp0\mRemoteV1.sln" /build "Release Portable"
|
||||
|
||||
echo Signing binaries...
|
||||
%SIGNCMD% "%~dp0\mRemoteV1\bin\Release\de\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\en-US\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\fr\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release\AxInterop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release\AxInterop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.ShDocVw.dll" "%~dp0\mRemoteV1\bin\Release\Interop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release\mRemoteNG.exe" "%~dp0\mRemoteV1\bin\Release Portable\de\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\en-US\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\fr\mRemoteNG.resources.dll" "%~dp0\mRemoteV1\bin\Release Portable\AxInterop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release Portable\AxInterop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.WFICALib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.ShDocVw.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.MSTSCLib.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" "%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe"
|
||||
%SIGNCMD% ^
|
||||
"%~dp0\mRemoteV1\bin\Release\de\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\el\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\en-US\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\es\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\es-AR\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\fr\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\hu\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\it\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\nb-NO\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\nl\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\pl\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\pt\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\pt-BR\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\ru\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\uk\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\zh-CN\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\zh-TW\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\AxInterop.MSTSCLib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\AxInterop.WFICALib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\Interop.EOLWTSCOM.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\Interop.MSTSCLib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\Interop.ShDocVw.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\Interop.WFICALib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release\mRemoteNG.exe" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\de\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\el\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\en-US\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\es\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\es-AR\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\fr\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\hu\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\it\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\nb-NO\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\nl\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\pl\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\pt\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\pt-BR\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\ru\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\uk\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\zh-CN\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\zh-TW\mRemoteNG.resources.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.MSTSCLib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\AxInterop.WFICALib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\Interop.EOLWTSCOM.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\Interop.MSTSCLib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\Interop.ShDocVw.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\Interop.WFICALib.dll" ^
|
||||
"%~dp0\mRemoteV1\bin\Release Portable\mRemoteNG.exe" ^
|
||||
|
||||
|
||||
rem Do not remove the two blank lines above this line.
|
||||
|
||||
mkdir "%~dp0\Release" > nul 2>&1
|
||||
|
||||
@@ -79,4 +144,6 @@ del /f /q %PORTABLEZIP% > nul 2>&1
|
||||
echo.
|
||||
echo Build process complete.
|
||||
echo.
|
||||
|
||||
:END
|
||||
pause
|
||||
|
||||
@@ -1,4 +1,83 @@
|
||||
1.71 (2013-10-29):
|
||||
Fixed issue MR-574 - Crash when retrieving RDP session list if eolwtscom.dll is not registered
|
||||
Fixed issue MR-578 - Connections file is reset
|
||||
Fixed log file not showing operating system version on Windows XP and Windows Server 2003.
|
||||
Fixed the wrong connections file opening on startup under certain conditions.
|
||||
Fixed checking for updates even when disabled.
|
||||
Improved error reporting when loading connections files.
|
||||
Removed warning message when mRemoteNG is started for the first time about new connections file being created.
|
||||
|
||||
1.71 Release Candidate 2 (2013-10-16):
|
||||
Fixed issue MR-560 - Cannot Auto-Update With Open Connections: Unable to find an entry point named 'TaskDialogIndirect' in DLL 'ComCtl32'
|
||||
Fixed issue MR-565 - Double Folder keep heritage on the initial Folder
|
||||
Fixed issue MR-566 - Typo in German UI Automatic Update Settings
|
||||
Fixed duplicated folders possibly being named "New Connection" instead of the original folder's name.
|
||||
|
||||
1.71 Release Candidate 1 (2013-10-01):
|
||||
Fixed issue MR-495 - Having a negative range in port scan creates memory exhaustion.
|
||||
Fixed issue MR-514 - Window Proxy test failed without close button
|
||||
Fixed issue MR-521 - Right-Clicking in "Sessions" panel crashes mRemoteNG
|
||||
Fixed issue MR-525 - Could not start on windows 7 64bit
|
||||
Fixed issue MR-535 - SQL error saving Connections
|
||||
Fixed issue MR-538 - RDP loses connection when hiding config or connections pane
|
||||
Fixed issue MR-542 - Wrapped putty has security flaw
|
||||
Made minor improvements to the port scan functionality.
|
||||
Fixed possible cross-thread operation exception when loading connections from SQL.
|
||||
Fixed PuTTY Saved Sessions not showing after loading a new connections file.
|
||||
Updated PuTTY to version 0.63.
|
||||
Updated translations.
|
||||
Added Chinese (Traditional) translation.
|
||||
Added partial Greek and Hungarian translations.
|
||||
|
||||
1.71 Beta 5 (2013-06-09):
|
||||
Fixed issue MR-491 - Could not start RDP Connection
|
||||
Fixed issue MR-499 - TS Gateway is not working in latest release 1.71
|
||||
Fixed typo in SQL queries.
|
||||
|
||||
1.71 Beta 4 (2013-05-28):
|
||||
Added feature MR-435 - Add digital signature check to updater
|
||||
Fixed issue MR-255 - The version of the RDP AX client should be updated to 7
|
||||
Fixed issue MR-392 - Sessions Panel - context menu entries need to be context aware
|
||||
Fixed issue MR-422 - Gives error Object reference not set to an instance of an object.
|
||||
Fixed issue MR-424 - Import of a few Linux SSH2 hosts discovered via the port scan tool results in a UE
|
||||
Fixed issue MR-439 - MRemoteNG 1.70 does not start
|
||||
Fixed issue MR-440 - RDP import with non-standard port
|
||||
Fixed issue MR-443 - Instructions for eolwtscom.dll registration for Portable version are inaccurate
|
||||
Fixed issue MR-446 - Putty saved sessions show in connection panel
|
||||
Fixed issue MR-459 - Maximized -> Minimized -> Restored results in mangled active display
|
||||
Fixed issue MR-463 - Add support for LoadBalanceInfo to RDP
|
||||
Fixed issue MR-470 - Quick Connect to Linux server uses invalid credentials
|
||||
Fixed issue MR-471 - PuTTY Saved Sessions disappears from connection list
|
||||
Fixed issue MR-487 - Initiate connections on MouseUp event
|
||||
Added PuTTY Session Settings command to the Config panel for PuTTY Saved Sessions.
|
||||
Updated translations.
|
||||
Added Norwegian (Bokmal) and Portuguese (Brazil) translations.
|
||||
Added Spanish translation to the installer.
|
||||
Fixed an exception or crash when choosing unnamed colors for themes.
|
||||
Fixed possible error "Control does not support transparent background colors" when modifying themes.
|
||||
Fixed changes to the active theme not being saved reliably.
|
||||
Fixed handling of the plus (+) character in PuTTY session names.
|
||||
Changed Internet Explorer to no longer force IE7 compatibility mode.
|
||||
Changed the "Launch PuTTY" button in the "Options" dialog to open PuTTY from the path the user has currently set, instead of what was previously saved.
|
||||
Improved update and announcement checking.
|
||||
Improved the PuTTY Saved Sessions list to update automatically when any changes are made.
|
||||
Improved loading time of large connection files.
|
||||
Lowered required version of RDC from 6.1 to 6.0.
|
||||
Updated VncSharpNG to 1.3.4896.25007.
|
||||
|
||||
1.71 Beta 3 (2013-03-20):
|
||||
Fixed issue MR-397 - Putty disappears from the screen
|
||||
Fixed issue MR-398 - Full Screen mode doesn't correctly make use of available space
|
||||
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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,22 +1,22 @@
|
||||
; Spanish installer translation
|
||||
|
||||
; Start mRemoteNG after installation
|
||||
LangString LaunchMremoteNow ${LANG_SPANISH} "mRemoteNG run SPANISH message"
|
||||
LangString LaunchMremoteNow ${LANG_SPANISH} "Iniciando de mRemoteNG"
|
||||
|
||||
; Installer Language
|
||||
LangString InstallerLanguage ${LANG_SPANISH} "Installer Language"
|
||||
LangString InstallerLanguage ${LANG_SPANISH} "Lenguaje de Instalación"
|
||||
|
||||
; Select installer Language
|
||||
LangString SelectInstallerLanguage ${LANG_SPANISH} "Please select the language of the installer"
|
||||
LangString SelectInstallerLanguage ${LANG_SPANISH} "Seleccione el lenguaje de instalación"
|
||||
|
||||
; Requires .NET Framework
|
||||
LangString RequiresNetFramework ${LANG_SPANISH} "mRemoteNG requires Microsoft .NET Framework 3.0."
|
||||
LangString RequiresNetFramework ${LANG_SPANISH} "mRemoteNG requiere Microsoft .NET Framework 3.0."
|
||||
|
||||
; User needs to be Admin
|
||||
LangString RequiresAdminUser ${LANG_SPANISH} "You must be a member of the 'Power Users' or 'Administrators' group to install mRemoteNG."
|
||||
LangString RequiresAdminUser ${LANG_SPANISH} "Debe ser miembro del grupo 'Administradores' para poder instalar mRemoteNG."
|
||||
|
||||
; Start Menu items
|
||||
LangString CreditsLinkName ${LANG_SPANISH} "Credits"
|
||||
LangString CopyingLinkName ${LANG_SPANISH} "License"
|
||||
LangString UninstallLinkName ${LANG_SPANISH} "Uninstall"
|
||||
LangString ChangeLogLinkName ${LANG_SPANISH} "Version History"
|
||||
LangString CreditsLinkName ${LANG_SPANISH} "Créditos"
|
||||
LangString CopyingLinkName ${LANG_SPANISH} "Licencia"
|
||||
LangString UninstallLinkName ${LANG_SPANISH} "Desinstalar"
|
||||
LangString ChangeLogLinkName ${LANG_SPANISH} "Historial de Versiones"
|
||||
|
||||
@@ -16,7 +16,7 @@ mkdir %TEMP_FOLDER%
|
||||
copy "%~dp0\mRemoteV1\Language\*.resx" %TEMP_FOLDER%
|
||||
|
||||
pushd %TEMP_FOLDER%
|
||||
for %%f in (*) do echo %SORTRESX% %TEMP_FOLDER%\%%f "%~dp0\mRemoteV1\Language\%%f"
|
||||
for %%f in (*) do %SORTRESX% %TEMP_FOLDER%\%%f "%~dp0\mRemoteV1\Language\%%f"
|
||||
popd
|
||||
|
||||
rmdir /s /q %TEMP_FOLDER%
|
||||
|
||||
@@ -28,13 +28,17 @@ mkdir %TEMP_FOLDER%
|
||||
%RAR% x -o+ %ZIP_FILE% *.* %TEMP_FOLDER%
|
||||
|
||||
%SORTRESX% %TEMP_FOLDER%\ar\Language.ar.resx "%~dp0\mRemoteV1\Language\Language.ar.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\bg\Language.bg.resx "%~dp0\mRemoteV1\Language\Language.bg.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\de\Language.de.resx "%~dp0\mRemoteV1\Language\Language.de.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\el\Language.el.resx "%~dp0\mRemoteV1\Language\Language.el.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\en-US\Language.en.resx "%~dp0\mRemoteV1\Language\Language.en-US.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\es-AR\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es-AR.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\es-ES\Language.es.resx "%~dp0\mRemoteV1\Language\Language.es.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\fr\Language.fr.resx "%~dp0\mRemoteV1\Language\Language.fr.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\he\Language.he.resx "%~dp0\mRemoteV1\Language\Language.he.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\hu\Language.hu.resx "%~dp0\mRemoteV1\Language\Language.hu.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\it\Language.it.resx "%~dp0\mRemoteV1\Language\Language.it.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\nb\Language.nb.resx "%~dp0\mRemoteV1\Language\Language.nb-NO.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\nl\Language.nl.resx "%~dp0\mRemoteV1\Language\Language.nl.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\pl\Language.pl.resx "%~dp0\mRemoteV1\Language\Language.pl.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\pt-BR\Language.pt.resx "%~dp0\mRemoteV1\Language\Language.pt-BR.resx"
|
||||
@@ -42,6 +46,7 @@ mkdir %TEMP_FOLDER%
|
||||
%SORTRESX% %TEMP_FOLDER%\ru\Language.ru.resx "%~dp0\mRemoteV1\Language\Language.ru.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\uk\Language.uk.resx "%~dp0\mRemoteV1\Language\Language.uk.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\zh-CN\Language.zh.resx "%~dp0\mRemoteV1\Language\Language.zh-CN.resx"
|
||||
%SORTRESX% %TEMP_FOLDER%\zh-TW\Language.zh.resx "%~dp0\mRemoteV1\Language\Language.zh-TW.resx"
|
||||
|
||||
rmdir /s /q %TEMP_FOLDER%
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -1,4 +1,5 @@
|
||||
Imports System.Environment
|
||||
Imports System.Threading
|
||||
|
||||
Namespace App
|
||||
Namespace Info
|
||||
@@ -7,10 +8,27 @@ Namespace App
|
||||
Public Shared ReadOnly URLDonate As String = "http://donate.mremoteng.org/"
|
||||
Public Shared ReadOnly URLForum As String = "http://forum.mremoteng.org/"
|
||||
Public Shared ReadOnly URLBugs As String = "http://bugs.mremoteng.org/"
|
||||
Public Shared ReadOnly URLAnnouncement As String = "http://update.mremoteng.org/announcement.txt"
|
||||
Public Shared ReadOnly HomePath As String = My.Application.Info.DirectoryPath
|
||||
Public Shared EncryptionKey As String = "mR3m"
|
||||
Public Shared ReportingFilePath As String = ""
|
||||
Public Shared ReadOnly PuttyPath As String = My.Application.Info.DirectoryPath & "\PuTTYNG.exe"
|
||||
Public Shared ReadOnly Property UserAgent As String
|
||||
Get
|
||||
Dim details As New List(Of String)
|
||||
details.Add("compatible")
|
||||
If OSVersion.Platform = PlatformID.Win32NT Then
|
||||
details.Add(String.Format("Windows NT {0}.{1}", OSVersion.Version.Major, OSVersion.Version.Minor))
|
||||
Else
|
||||
details.Add(OSVersion.VersionString)
|
||||
End If
|
||||
If Tools.EnvironmentInfo.IsWow64 Then details.Add("WOW64")
|
||||
details.Add(Thread.CurrentThread.CurrentUICulture.Name)
|
||||
details.Add(String.Format(".NET CLR {0}", Version.ToString()))
|
||||
Dim detailsString As String = String.Join("; ", details.ToArray())
|
||||
|
||||
Return String.Format("Mozilla/4.0 ({0}) {1}/{2}", detailsString, Application.ProductName, Application.ProductVersion)
|
||||
End Get
|
||||
End Property
|
||||
End Class
|
||||
|
||||
Public Class Settings
|
||||
@@ -25,9 +43,11 @@ Namespace App
|
||||
End Class
|
||||
|
||||
Public Class Update
|
||||
Public Shared ReadOnly URL As String = "http://update.mremoteng.org/"
|
||||
Public Shared ReadOnly Property File As String
|
||||
Public Shared ReadOnly Property FileName As String
|
||||
Get
|
||||
#If DEBUG Then
|
||||
Return "update-debug.txt"
|
||||
#End If
|
||||
Select Case My.Settings.UpdateChannel.ToLowerInvariant()
|
||||
Case "beta"
|
||||
Return "update-beta.txt"
|
||||
@@ -44,7 +64,7 @@ Namespace App
|
||||
Public Shared ReadOnly DefaultConnectionsPath As String = App.Info.Settings.SettingsPath
|
||||
Public Shared ReadOnly DefaultConnectionsFile As String = "confCons.xml"
|
||||
Public Shared ReadOnly DefaultConnectionsFileNew As String = "confConsNew.xml"
|
||||
Public Shared ReadOnly ConnectionFileVersion As Double = 2.4
|
||||
Public Shared ReadOnly ConnectionFileVersion As Double = 2.5
|
||||
End Class
|
||||
|
||||
Public Class Credentials
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
Imports log4net
|
||||
Imports System.ComponentModel
|
||||
Imports mRemoteNG.Config
|
||||
Imports log4net
|
||||
Imports mRemoteNG.Messages
|
||||
Imports mRemoteNG.Connection
|
||||
Imports mRemoteNG.Tools
|
||||
Imports PSTaskDialog
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports System.IO
|
||||
Imports Crownwood
|
||||
@@ -19,6 +22,8 @@ Namespace App
|
||||
End Sub
|
||||
|
||||
#Region "Public Properties"
|
||||
Public Shared Property MainForm As frmMain
|
||||
|
||||
Private Shared _connectionList As Connection.List
|
||||
Public Shared Property ConnectionList() As List
|
||||
Get
|
||||
@@ -130,26 +135,6 @@ Namespace App
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Shared _isUpdateAvailable As Boolean
|
||||
Public Shared Property IsUpdateAvailable() As Boolean
|
||||
Get
|
||||
Return _isUpdateAvailable
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_isUpdateAvailable = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Shared _isAnnouncementAvailable As Boolean
|
||||
Public Shared Property IsAnnouncementAvailable() As Boolean
|
||||
Get
|
||||
Return _isAnnouncementAvailable
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_isAnnouncementAvailable = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Shared _isConnectionsFileLoaded As Boolean
|
||||
Public Shared Property IsConnectionsFileLoaded() As Boolean
|
||||
Get
|
||||
@@ -377,6 +362,11 @@ Namespace App
|
||||
|
||||
Public Class Startup
|
||||
Public Shared Sub CheckCompatibility()
|
||||
CheckFipsPolicy()
|
||||
CheckLenovoAutoScrollUtility()
|
||||
End Sub
|
||||
|
||||
Private Shared Sub CheckFipsPolicy()
|
||||
Dim regKey As RegistryKey
|
||||
|
||||
Dim isFipsPolicyEnabled As Boolean = False
|
||||
@@ -399,6 +389,22 @@ Namespace App
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Shared Sub CheckLenovoAutoScrollUtility()
|
||||
If Not My.Settings.CompatibilityWarnLenovoAutoScrollUtility Then Return
|
||||
|
||||
Dim proccesses() As Process = {}
|
||||
Try
|
||||
proccesses = Process.GetProcessesByName("virtscrl")
|
||||
Catch
|
||||
End Try
|
||||
If proccesses.Length = 0 Then Return
|
||||
|
||||
cTaskDialog.MessageBox(Application.ProductName, My.Language.strCompatibilityProblemDetected, String.Format(My.Language.strCompatibilityLenovoAutoScrollUtilityDetected, System.Windows.Forms.Application.ProductName), "", "", My.Language.strCheckboxDoNotShowThisMessageAgain, eTaskDialogButtons.OK, eSysIcons.Warning, Nothing)
|
||||
If cTaskDialog.VerificationChecked Then
|
||||
My.Settings.CompatibilityWarnLenovoAutoScrollUtility = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Sub CreatePanels()
|
||||
Windows.configForm = New UI.Window.Config(Windows.configPanel)
|
||||
Windows.configPanel = Windows.configForm
|
||||
@@ -497,54 +503,95 @@ Namespace App
|
||||
#End If
|
||||
Log.InfoFormat("Command Line: {0}", Environment.GetCommandLineArgs)
|
||||
|
||||
Dim osVersion As String = String.Empty
|
||||
Dim servicePack As String = String.Empty
|
||||
Try
|
||||
Dim servicePack As Integer
|
||||
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get()
|
||||
servicePack = managementObject.GetPropertyValue("ServicePackMajorVersion")
|
||||
If servicePack = 0 Then
|
||||
Log.InfoFormat("{0} {1}", managementObject.GetPropertyValue("Caption").Trim, managementObject.GetPropertyValue("OSArchitecture"))
|
||||
Else
|
||||
Log.InfoFormat("{0} Service Pack {1} {2}", managementObject.GetPropertyValue("Caption").Trim, servicePack.ToString, managementObject.GetPropertyValue("OSArchitecture"))
|
||||
End If
|
||||
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem WHERE Primary=True").Get()
|
||||
osVersion = managementObject.GetPropertyValue("Caption").Trim()
|
||||
Dim servicePackNumber As Integer = managementObject.GetPropertyValue("ServicePackMajorVersion")
|
||||
If Not servicePackNumber = 0 Then servicePack = String.Format("Service Pack {0}", servicePackNumber)
|
||||
Next
|
||||
Catch ex As Exception
|
||||
Log.WarnFormat("Error retrieving operating system information from WMI. {0}", ex.Message)
|
||||
End Try
|
||||
|
||||
Dim architecture As String = String.Empty
|
||||
Try
|
||||
For Each managementObject As ManagementObject In New ManagementObjectSearcher("SELECT * FROM Win32_Processor WHERE DeviceID='CPU0'").Get()
|
||||
Dim addressWidth As Integer = managementObject.GetPropertyValue("AddressWidth")
|
||||
architecture = String.Format("{0}-bit", addressWidth)
|
||||
Next
|
||||
Catch ex As Exception
|
||||
Log.WarnFormat("Error retrieving operating system address width from WMI. {0}", ex.Message)
|
||||
End Try
|
||||
|
||||
Log.InfoFormat(String.Join(" ", Array.FindAll(New String() {osVersion, servicePack, architecture}, Function(s) Not String.IsNullOrEmpty(s))))
|
||||
|
||||
Log.InfoFormat("Microsoft .NET CLR {0}", Version.ToString)
|
||||
Log.InfoFormat("System Culture: {0}/{1}", Thread.CurrentThread.CurrentUICulture.Name, Thread.CurrentThread.CurrentUICulture.NativeName)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared Sub UpdateCheck()
|
||||
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
|
||||
If My.Settings.UpdatePending Or My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
|
||||
frmMain.tmrShowUpdate.Enabled = True
|
||||
Windows.updateForm.CheckForUpdate()
|
||||
AddHandler Windows.updateForm.UpdateCheckCompleted, AddressOf UpdateCheckComplete
|
||||
End If
|
||||
Private Shared _appUpdate As Update
|
||||
Public Shared Sub CheckForUpdate()
|
||||
If _appUpdate Is Nothing Then
|
||||
_appUpdate = New Update
|
||||
ElseIf _appUpdate.IsGetUpdateInfoRunning Then
|
||||
Return
|
||||
End If
|
||||
|
||||
Dim nextUpdateCheck As Date = My.Settings.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays))
|
||||
If Not My.Settings.UpdatePending And Date.UtcNow < nextUpdateCheck Then Return
|
||||
|
||||
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
_appUpdate.GetUpdateInfoAsync()
|
||||
End Sub
|
||||
|
||||
Private Shared Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
|
||||
My.Settings.CheckForUpdatesLastCheck = Date.Now
|
||||
My.Settings.UpdatePending = UpdateAvailable
|
||||
IsUpdateAvailable = UpdateAvailable
|
||||
End Sub
|
||||
|
||||
Public Shared Sub AnnouncementCheck()
|
||||
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
|
||||
If My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
|
||||
frmMain.tmrShowUpdate.Enabled = True
|
||||
Windows.AnnouncementForm.CheckForAnnouncement()
|
||||
AddHandler Windows.AnnouncementForm.AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
|
||||
End If
|
||||
Private Shared Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
|
||||
If MainForm.InvokeRequired Then
|
||||
MainForm.Invoke(New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted), New Object() {sender, e})
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
If _appUpdate.IsUpdateAvailable() Then Windows.Show(UI.Window.Type.Update)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage("GetUpdateInfoCompleted() failed.", ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Shared Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
|
||||
My.Settings.CheckForUpdatesLastCheck = Date.Now
|
||||
IsAnnouncementAvailable = AnnouncementAvailable
|
||||
Public Shared Sub CheckForAnnouncement()
|
||||
If _appUpdate Is Nothing Then
|
||||
_appUpdate = New Update
|
||||
ElseIf _appUpdate.IsGetAnnouncementInfoRunning Then
|
||||
Return
|
||||
End If
|
||||
|
||||
AddHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
|
||||
_appUpdate.GetAnnouncementInfoAsync()
|
||||
End Sub
|
||||
|
||||
Private Shared Sub GetAnnouncementInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
|
||||
If MainForm.InvokeRequired Then
|
||||
MainForm.Invoke(New AsyncCompletedEventHandler(AddressOf GetAnnouncementInfoCompleted), New Object() {sender, e})
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RemoveHandler _appUpdate.GetAnnouncementInfoCompletedEvent, AddressOf GetAnnouncementInfoCompleted
|
||||
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
If _appUpdate.IsAnnouncementAvailable() Then Windows.Show(UI.Window.Type.Announcement)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage("GetAnnouncementInfoCompleted() failed.", ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Shared Sub ParseCommandLineArgs()
|
||||
@@ -660,28 +707,48 @@ Namespace App
|
||||
End Class
|
||||
|
||||
Public Class Shutdown
|
||||
Public Shared Sub Quit()
|
||||
Public Shared Sub Quit(Optional ByVal updateFilePath As String = Nothing)
|
||||
_updateFilePath = updateFilePath
|
||||
frmMain.Close()
|
||||
End Sub
|
||||
|
||||
Public Shared Sub BeforeQuit()
|
||||
Public Shared Sub Cleanup()
|
||||
Try
|
||||
If App.Runtime.NotificationAreaIcon IsNot Nothing Then
|
||||
If App.Runtime.NotificationAreaIcon.Disposed = False Then
|
||||
App.Runtime.NotificationAreaIcon.Dispose()
|
||||
PuttySessions.StopWatcher()
|
||||
|
||||
If NotificationAreaIcon IsNot Nothing Then
|
||||
If NotificationAreaIcon.Disposed = False Then
|
||||
NotificationAreaIcon.Dispose()
|
||||
End If
|
||||
End If
|
||||
|
||||
If My.Settings.SaveConsOnExit Then
|
||||
SaveConnections()
|
||||
End If
|
||||
If My.Settings.SaveConsOnExit Then SaveConnections()
|
||||
|
||||
Dim SettingsSave As New Config.Settings.Save()
|
||||
SettingsSave.Save()
|
||||
Dim saveSettings As New Settings.Save()
|
||||
saveSettings.Save()
|
||||
|
||||
IeBrowserEmulation.Unregister()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddMessage(MessageClass.ErrorMsg, My.Language.strSettingsCouldNotBeSavedOrTrayDispose & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Shared Sub StartUpdate()
|
||||
If Not UpdatePending() Then Return
|
||||
Try
|
||||
Process.Start(_updateFilePath)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(MessageClass.ErrorMsg, "The update could not be started." & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Shared _updateFilePath As String = Nothing
|
||||
|
||||
Public Shared ReadOnly Property UpdatePending() As Boolean
|
||||
Get
|
||||
Return Not String.IsNullOrEmpty(_updateFilePath)
|
||||
End Get
|
||||
End Property
|
||||
End Class
|
||||
#End Region
|
||||
|
||||
@@ -704,10 +771,12 @@ Namespace App
|
||||
My.Settings.ConDefaultPuttySession = .PuttySession
|
||||
My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString
|
||||
My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString
|
||||
My.Settings.ConDefaultLoadBalanceInfo = .LoadBalanceInfo
|
||||
My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession
|
||||
My.Settings.ConDefaultUseCredSsp = .UseCredSsp
|
||||
My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString
|
||||
My.Settings.ConDefaultResolution = .Resolution.ToString
|
||||
My.Settings.ConDefaultAutomaticResize = .AutomaticResize
|
||||
My.Settings.ConDefaultColors = .Colors.ToString
|
||||
My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps
|
||||
My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper
|
||||
@@ -770,7 +839,9 @@ Namespace App
|
||||
My.Settings.InhDefaultRenderingEngine = .RenderingEngine
|
||||
My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption
|
||||
My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel
|
||||
My.Settings.InhDefaultLoadBalanceInfo = .LoadBalanceInfo
|
||||
My.Settings.InhDefaultResolution = .Resolution
|
||||
My.Settings.InhDefaultAutomaticResize = .AutomaticResize
|
||||
My.Settings.InhDefaultColors = .Colors
|
||||
My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps
|
||||
My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper
|
||||
@@ -918,42 +989,54 @@ Namespace App
|
||||
ConnectionList = New Connection.List
|
||||
ContainerList = New Container.List
|
||||
|
||||
Dim conL As New Config.Connections.Load
|
||||
Dim connectionsLoad As New Connections.Load
|
||||
|
||||
My.Settings.LoadConsFromCustomLocation = False
|
||||
If filename = GetDefaultStartupConnectionFileName() Then
|
||||
My.Settings.LoadConsFromCustomLocation = False
|
||||
Else
|
||||
My.Settings.LoadConsFromCustomLocation = True
|
||||
My.Settings.CustomConsPath = filename
|
||||
End If
|
||||
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(filename))
|
||||
Dim xW As New XmlTextWriter(filename, System.Text.Encoding.UTF8)
|
||||
xW.Formatting = Formatting.Indented
|
||||
xW.Indentation = 4
|
||||
|
||||
xW.WriteStartDocument()
|
||||
xW.WriteStartElement("Connections") ' Do not localize
|
||||
xW.WriteAttributeString("Name", My.Language.strConnections)
|
||||
xW.WriteAttributeString("Export", "", "False")
|
||||
xW.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
|
||||
xW.WriteAttributeString("ConfVersion", "", "2.4")
|
||||
' Use File.Open with FileMode.CreateNew so that we don't overwrite an existing file
|
||||
Using fileStream As FileStream = File.Open(filename, FileMode.CreateNew, FileAccess.Write, FileShare.None)
|
||||
Using xmlTextWriter As New XmlTextWriter(fileStream, System.Text.Encoding.UTF8)
|
||||
With xmlTextWriter
|
||||
.Formatting = Formatting.Indented
|
||||
.Indentation = 4
|
||||
|
||||
xW.WriteEndElement()
|
||||
xW.WriteEndDocument()
|
||||
.WriteStartDocument()
|
||||
|
||||
xW.Close()
|
||||
.WriteStartElement("Connections") ' Do not localize
|
||||
.WriteAttributeString("Name", My.Language.strConnections)
|
||||
.WriteAttributeString("Export", "", "False")
|
||||
.WriteAttributeString("Protected", "", "GiUis20DIbnYzWPcdaQKfjE2H5jh//L5v4RGrJMGNXuIq2CttB/d/BxaBP2LwRhY")
|
||||
.WriteAttributeString("ConfVersion", "", "2.5")
|
||||
|
||||
conL.ConnectionList = ConnectionList
|
||||
conL.ContainerList = ContainerList
|
||||
conL.Import = False
|
||||
.WriteEndElement()
|
||||
.WriteEndDocument()
|
||||
|
||||
.Close()
|
||||
End With
|
||||
End Using
|
||||
End Using
|
||||
|
||||
connectionsLoad.ConnectionList = ConnectionList
|
||||
connectionsLoad.ContainerList = ContainerList
|
||||
|
||||
Tree.Node.ResetTree()
|
||||
|
||||
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
||||
connectionsLoad.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
||||
|
||||
' Load config
|
||||
conL.ConnectionFileName = filename
|
||||
conL.Load()
|
||||
connectionsLoad.ConnectionFileName = filename
|
||||
connectionsLoad.Load(False)
|
||||
|
||||
Windows.treeForm.tvConnections.SelectedNode = conL.RootTreeNode
|
||||
Windows.treeForm.tvConnections.SelectedNode = connectionsLoad.RootTreeNode
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strCouldNotCreateNewConnectionsFile & vbNewLine & ex.Message)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strCouldNotCreateNewConnectionsFile, ex, MessageClass.ErrorMsg)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -972,8 +1055,8 @@ Namespace App
|
||||
LoadConnections(_withDialog, _loadUpdate)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub LoadConnections(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
|
||||
Dim conL As New Config.Connections.Load
|
||||
Public Shared Sub LoadConnections(Optional ByVal withDialog As Boolean = False, Optional ByVal update As Boolean = False)
|
||||
Dim connectionsLoad As New Connections.Load
|
||||
|
||||
Try
|
||||
Dim tmrWasEnabled As Boolean
|
||||
@@ -993,68 +1076,55 @@ Namespace App
|
||||
ConnectionList = New Connection.List
|
||||
ContainerList = New Container.List
|
||||
|
||||
If My.Settings.UseSQLServer = False Then
|
||||
If WithDialog Then
|
||||
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
|
||||
If Not My.Settings.UseSQLServer Then
|
||||
If withDialog Then
|
||||
Dim loadDialog As OpenFileDialog = Controls.ConnectionsLoadDialog
|
||||
|
||||
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
||||
conL.ConnectionFileName = lD.FileName
|
||||
If loadDialog.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
||||
connectionsLoad.ConnectionFileName = loadDialog.FileName
|
||||
Else
|
||||
Exit Sub
|
||||
End If
|
||||
Else
|
||||
conL.ConnectionFileName = GetStartupConnectionFileName()
|
||||
connectionsLoad.ConnectionFileName = GetStartupConnectionFileName()
|
||||
End If
|
||||
|
||||
If File.Exists(conL.ConnectionFileName) = False Then
|
||||
If WithDialog Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, conL.ConnectionFileName))
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoadedNew, conL.ConnectionFileName))
|
||||
App.Runtime.NewConnections(conL.ConnectionFileName)
|
||||
End If
|
||||
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
CreateBackupFile(conL.ConnectionFileName)
|
||||
CreateBackupFile(connectionsLoad.ConnectionFileName)
|
||||
End If
|
||||
|
||||
conL.ConnectionList = ConnectionList
|
||||
conL.ContainerList = ContainerList
|
||||
connectionsLoad.ConnectionList = ConnectionList
|
||||
connectionsLoad.ContainerList = ContainerList
|
||||
|
||||
If PreviousConnectionList IsNot Nothing And PreviousContainerList IsNot Nothing Then
|
||||
conL.PreviousConnectionList = PreviousConnectionList
|
||||
conL.PreviousContainerList = PreviousContainerList
|
||||
connectionsLoad.PreviousConnectionList = PreviousConnectionList
|
||||
connectionsLoad.PreviousContainerList = PreviousContainerList
|
||||
End If
|
||||
|
||||
If Update = True Then
|
||||
conL.PreviousSelected = LastSelected
|
||||
If update = True Then
|
||||
connectionsLoad.PreviousSelected = LastSelected
|
||||
End If
|
||||
|
||||
conL.Import = False
|
||||
|
||||
Tree.Node.ResetTree()
|
||||
|
||||
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
||||
connectionsLoad.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
||||
|
||||
conL.UseSQL = My.Settings.UseSQLServer
|
||||
conL.SQLHost = My.Settings.SQLHost
|
||||
conL.SQLDatabaseName = My.Settings.SQLDatabaseName
|
||||
conL.SQLUsername = My.Settings.SQLUser
|
||||
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
|
||||
conL.SQLUpdate = Update
|
||||
connectionsLoad.UseSQL = My.Settings.UseSQLServer
|
||||
connectionsLoad.SQLHost = My.Settings.SQLHost
|
||||
connectionsLoad.SQLDatabaseName = My.Settings.SQLDatabaseName
|
||||
connectionsLoad.SQLUsername = My.Settings.SQLUser
|
||||
connectionsLoad.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, Info.General.EncryptionKey)
|
||||
connectionsLoad.SQLUpdate = update
|
||||
|
||||
conL.Load()
|
||||
connectionsLoad.Load(False)
|
||||
|
||||
If My.Settings.UseSQLServer = True Then
|
||||
LastSqlUpdate = Now
|
||||
Else
|
||||
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
|
||||
If connectionsLoad.ConnectionFileName = GetDefaultStartupConnectionFileName() Then
|
||||
My.Settings.LoadConsFromCustomLocation = False
|
||||
Else
|
||||
My.Settings.LoadConsFromCustomLocation = True
|
||||
My.Settings.CustomConsPath = conL.ConnectionFileName
|
||||
My.Settings.CustomConsPath = connectionsLoad.ConnectionFileName
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -1062,14 +1132,37 @@ Namespace App
|
||||
TimerSqlWatcher.Start()
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strConnectionsFileCouldNotBeLoaded & vbNewLine & ex.Message & ex.StackTrace, conL.ConnectionFileName))
|
||||
If My.Settings.UseSQLServer = False Then
|
||||
If Not conL.ConnectionFileName = GetStartupConnectionFileName() Then
|
||||
LoadConnections()
|
||||
Exit Sub
|
||||
If My.Settings.UseSQLServer Then
|
||||
MessageCollector.AddExceptionMessage(My.Language.strLoadFromSqlFailed, ex)
|
||||
Dim commandButtons As String = String.Join("|", {My.Language.strCommandTryAgain, My.Language.strCommandOpenConnectionFile, String.Format(My.Language.strCommandExitProgram, Application.ProductName)})
|
||||
cTaskDialog.ShowCommandBox(Application.ProductName, My.Language.strLoadFromSqlFailed, My.Language.strLoadFromSqlFailedContent, Misc.GetExceptionMessageRecursive(ex), "", "", commandButtons, False, eSysIcons.Error, Nothing)
|
||||
Select Case cTaskDialog.CommandButtonResult
|
||||
Case 0
|
||||
LoadConnections(withDialog, update)
|
||||
Return
|
||||
Case 1
|
||||
My.Settings.UseSQLServer = False
|
||||
LoadConnections(True, update)
|
||||
Return
|
||||
Case Else
|
||||
Application.Exit()
|
||||
Return
|
||||
End Select
|
||||
Else
|
||||
If TypeOf ex Is FileNotFoundException And Not withDialog Then
|
||||
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoadedNew, connectionsLoad.ConnectionFileName), ex, MessageClass.InformationMsg)
|
||||
NewConnections(connectionsLoad.ConnectionFileName)
|
||||
Return
|
||||
End If
|
||||
|
||||
MessageCollector.AddExceptionMessage(String.Format(My.Language.strConnectionsFileCouldNotBeLoaded, connectionsLoad.ConnectionFileName), ex)
|
||||
If Not connectionsLoad.ConnectionFileName = GetStartupConnectionFileName() Then
|
||||
LoadConnections(withDialog, update)
|
||||
Return
|
||||
Else
|
||||
MsgBox(String.Format(My.Language.strErrorStartupConnectionFileLoad, vbNewLine, Application.ProductName, GetStartupConnectionFileName(), ex.Message), MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
|
||||
MsgBox(String.Format(My.Language.strErrorStartupConnectionFileLoad, vbNewLine, Application.ProductName, GetStartupConnectionFileName(), Misc.GetExceptionMessageRecursive(ex)), MsgBoxStyle.OkOnly + MsgBoxStyle.Critical)
|
||||
Application.Exit()
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
End Try
|
||||
@@ -1084,7 +1177,7 @@ Namespace App
|
||||
File.Copy(fileName, backupFileName)
|
||||
PruneBackupFiles(fileName)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(MessageClass.WarningMsg, My.Language.strConnectionsFileBackupFailed & vbNewLine & vbNewLine & ex.Message)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strConnectionsFileBackupFailed, ex, MessageClass.WarningMsg)
|
||||
Throw
|
||||
End Try
|
||||
End Sub
|
||||
@@ -1108,26 +1201,23 @@ Namespace App
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Protected Shared Function GetStartupConnectionFileName() As String
|
||||
Dim fileName As New String("")
|
||||
|
||||
If My.Settings.LoadConsFromCustomLocation = False Then
|
||||
Dim oldPath As String = GetFolderPath(SpecialFolder.LocalApplicationData) & "\" & My.Application.Info.ProductName & "\" & App.Info.Connections.DefaultConnectionsFile
|
||||
Dim newPath As String = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
|
||||
Public Shared Function GetDefaultStartupConnectionFileName() As String
|
||||
Dim newPath As String = App.Info.Connections.DefaultConnectionsPath & "\" & Info.Connections.DefaultConnectionsFile
|
||||
#If Not PORTABLE Then
|
||||
If File.Exists(oldPath) Then
|
||||
fileName = oldPath
|
||||
Else
|
||||
fileName = newPath
|
||||
End If
|
||||
#Else
|
||||
fileName = newPath
|
||||
#End If
|
||||
Else
|
||||
fileName = My.Settings.CustomConsPath
|
||||
Dim oldPath As String = GetFolderPath(SpecialFolder.LocalApplicationData) & "\" & My.Application.Info.ProductName & "\" & Info.Connections.DefaultConnectionsFile
|
||||
If File.Exists(oldPath) Then
|
||||
Return oldPath
|
||||
End If
|
||||
#End If
|
||||
Return newPath
|
||||
End Function
|
||||
|
||||
Return fileName
|
||||
Public Shared Function GetStartupConnectionFileName() As String
|
||||
If My.Settings.LoadConsFromCustomLocation = False Then
|
||||
Return GetDefaultStartupConnectionFileName()
|
||||
Else
|
||||
Return My.Settings.CustomConsPath
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public Shared Sub ImportConnections()
|
||||
@@ -1157,11 +1247,10 @@ Namespace App
|
||||
Dim conL As New Config.Connections.Load
|
||||
conL.ConnectionFileName = lD.FileNames(i)
|
||||
conL.RootTreeNode = nNode
|
||||
conL.Import = True
|
||||
conL.ConnectionList = App.Runtime.ConnectionList
|
||||
conL.ContainerList = App.Runtime.ContainerList
|
||||
|
||||
conL.Load()
|
||||
conL.Load(True)
|
||||
|
||||
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
|
||||
Next
|
||||
@@ -1171,136 +1260,139 @@ Namespace App
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Shared Sub ImportConnectionsFromRDPFiles()
|
||||
Public Shared Sub ImportConnectionsRdpFile()
|
||||
Try
|
||||
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsRDPImportDialog
|
||||
lD.Multiselect = True
|
||||
Dim openFileDialog As OpenFileDialog = Controls.ImportConnectionsRdpFileDialog
|
||||
If Not openFileDialog.ShowDialog = DialogResult.OK Then Return
|
||||
|
||||
If lD.ShowDialog = DialogResult.OK Then
|
||||
For i As Integer = 0 To lD.FileNames.Length - 1
|
||||
Dim lines As String() = File.ReadAllLines(lD.FileNames(i))
|
||||
For Each fileName As String In openFileDialog.FileNames
|
||||
Dim lines As String() = File.ReadAllLines(fileName)
|
||||
|
||||
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(lD.FileNames(i)))
|
||||
Dim treeNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(fileName))
|
||||
|
||||
Dim nConI As New mRemoteNG.Connection.Info()
|
||||
nConI.Inherit = New Connection.Info.Inheritance(nConI)
|
||||
Dim connectionInfo As New Connection.Info()
|
||||
connectionInfo.Inherit = New Connection.Info.Inheritance(connectionInfo)
|
||||
|
||||
nConI.Name = nNode.Text
|
||||
connectionInfo.Name = treeNode.Text
|
||||
|
||||
For Each l As String In lines
|
||||
Dim pName As String = l.Substring(0, l.IndexOf(":"))
|
||||
Dim pValue As String = l.Substring(l.LastIndexOf(":") + 1)
|
||||
For Each line As String In lines
|
||||
Dim parts() As String = line.Split(New Char() {":"}, 3)
|
||||
If parts.Length < 3 Then Continue For
|
||||
|
||||
Select Case LCase(pName)
|
||||
Case "full address"
|
||||
nConI.Hostname = pValue
|
||||
Case "server port"
|
||||
nConI.Port = pValue
|
||||
Case "username"
|
||||
nConI.Username = pValue
|
||||
Case "domain"
|
||||
nConI.Domain = pValue
|
||||
Case "session bpp"
|
||||
Select Case pValue
|
||||
Case 8
|
||||
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors256
|
||||
Case 15
|
||||
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors15Bit
|
||||
Case 16
|
||||
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors16Bit
|
||||
Case 24
|
||||
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors24Bit
|
||||
Case 32
|
||||
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors32Bit
|
||||
End Select
|
||||
Case "bitmapcachepersistenable"
|
||||
If pValue = 1 Then
|
||||
nConI.CacheBitmaps = True
|
||||
Else
|
||||
nConI.CacheBitmaps = False
|
||||
End If
|
||||
Case "screen mode id"
|
||||
If pValue = 2 Then
|
||||
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.Fullscreen
|
||||
Else
|
||||
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.FitToWindow
|
||||
End If
|
||||
Case "connect to console"
|
||||
If pValue = 1 Then
|
||||
nConI.UseConsoleSession = True
|
||||
End If
|
||||
Case "disable wallpaper"
|
||||
If pValue = 1 Then
|
||||
nConI.DisplayWallpaper = True
|
||||
Else
|
||||
nConI.DisplayWallpaper = False
|
||||
End If
|
||||
Case "disable themes"
|
||||
If pValue = 1 Then
|
||||
nConI.DisplayThemes = True
|
||||
Else
|
||||
nConI.DisplayThemes = False
|
||||
End If
|
||||
Case "allow font smoothing"
|
||||
If pValue = 1 Then
|
||||
nConI.EnableFontSmoothing = True
|
||||
Else
|
||||
nConI.EnableFontSmoothing = False
|
||||
End If
|
||||
Case "allow desktop composition"
|
||||
If pValue = 1 Then
|
||||
nConI.EnableDesktopComposition = True
|
||||
Else
|
||||
nConI.EnableDesktopComposition = False
|
||||
End If
|
||||
Case "redirectsmartcards"
|
||||
If pValue = 1 Then
|
||||
nConI.RedirectSmartCards = True
|
||||
Else
|
||||
nConI.RedirectSmartCards = False
|
||||
End If
|
||||
Case "redirectdrives"
|
||||
If pValue = 1 Then
|
||||
nConI.RedirectDiskDrives = True
|
||||
Else
|
||||
nConI.RedirectDiskDrives = False
|
||||
End If
|
||||
Case "redirectcomports"
|
||||
If pValue = 1 Then
|
||||
nConI.RedirectPorts = True
|
||||
Else
|
||||
nConI.RedirectPorts = False
|
||||
End If
|
||||
Case "redirectprinters"
|
||||
If pValue = 1 Then
|
||||
nConI.RedirectPrinters = True
|
||||
Else
|
||||
nConI.RedirectPrinters = False
|
||||
End If
|
||||
Case "audiomode"
|
||||
Select Case pValue
|
||||
Case 0
|
||||
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.BringToThisComputer
|
||||
Case 1
|
||||
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
|
||||
Case 2
|
||||
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.DoNotPlay
|
||||
End Select
|
||||
End Select
|
||||
Next
|
||||
Dim key As String = parts(0)
|
||||
Dim value As String = parts(2)
|
||||
|
||||
nNode.Tag = nConI
|
||||
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
|
||||
|
||||
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
|
||||
nConI.Parent = nNode.Parent.Tag
|
||||
End If
|
||||
|
||||
ConnectionList.Add(nConI)
|
||||
Select Case LCase(key)
|
||||
Case "full address"
|
||||
Dim uri As New Uri("dummyscheme" + uri.SchemeDelimiter + value)
|
||||
If Not String.IsNullOrEmpty(uri.Host) Then connectionInfo.Hostname = uri.Host
|
||||
If Not uri.Port = -1 Then connectionInfo.Port = uri.Port
|
||||
Case "server port"
|
||||
connectionInfo.Port = value
|
||||
Case "username"
|
||||
connectionInfo.Username = value
|
||||
Case "domain"
|
||||
connectionInfo.Domain = value
|
||||
Case "session bpp"
|
||||
Select Case value
|
||||
Case 8
|
||||
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors256
|
||||
Case 15
|
||||
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors15Bit
|
||||
Case 16
|
||||
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors16Bit
|
||||
Case 24
|
||||
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors24Bit
|
||||
Case 32
|
||||
connectionInfo.Colors = Protocol.RDP.RDPColors.Colors32Bit
|
||||
End Select
|
||||
Case "bitmapcachepersistenable"
|
||||
If value = 1 Then
|
||||
connectionInfo.CacheBitmaps = True
|
||||
Else
|
||||
connectionInfo.CacheBitmaps = False
|
||||
End If
|
||||
Case "screen mode id"
|
||||
If value = 2 Then
|
||||
connectionInfo.Resolution = Protocol.RDP.RDPResolutions.Fullscreen
|
||||
Else
|
||||
connectionInfo.Resolution = Protocol.RDP.RDPResolutions.FitToWindow
|
||||
End If
|
||||
Case "connect to console"
|
||||
If value = 1 Then
|
||||
connectionInfo.UseConsoleSession = True
|
||||
End If
|
||||
Case "disable wallpaper"
|
||||
If value = 1 Then
|
||||
connectionInfo.DisplayWallpaper = True
|
||||
Else
|
||||
connectionInfo.DisplayWallpaper = False
|
||||
End If
|
||||
Case "disable themes"
|
||||
If value = 1 Then
|
||||
connectionInfo.DisplayThemes = True
|
||||
Else
|
||||
connectionInfo.DisplayThemes = False
|
||||
End If
|
||||
Case "allow font smoothing"
|
||||
If value = 1 Then
|
||||
connectionInfo.EnableFontSmoothing = True
|
||||
Else
|
||||
connectionInfo.EnableFontSmoothing = False
|
||||
End If
|
||||
Case "allow desktop composition"
|
||||
If value = 1 Then
|
||||
connectionInfo.EnableDesktopComposition = True
|
||||
Else
|
||||
connectionInfo.EnableDesktopComposition = False
|
||||
End If
|
||||
Case "redirectsmartcards"
|
||||
If value = 1 Then
|
||||
connectionInfo.RedirectSmartCards = True
|
||||
Else
|
||||
connectionInfo.RedirectSmartCards = False
|
||||
End If
|
||||
Case "redirectdrives"
|
||||
If value = 1 Then
|
||||
connectionInfo.RedirectDiskDrives = True
|
||||
Else
|
||||
connectionInfo.RedirectDiskDrives = False
|
||||
End If
|
||||
Case "redirectcomports"
|
||||
If value = 1 Then
|
||||
connectionInfo.RedirectPorts = True
|
||||
Else
|
||||
connectionInfo.RedirectPorts = False
|
||||
End If
|
||||
Case "redirectprinters"
|
||||
If value = 1 Then
|
||||
connectionInfo.RedirectPrinters = True
|
||||
Else
|
||||
connectionInfo.RedirectPrinters = False
|
||||
End If
|
||||
Case "audiomode"
|
||||
Select Case value
|
||||
Case 0
|
||||
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.BringToThisComputer
|
||||
Case 1
|
||||
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
|
||||
Case 2
|
||||
connectionInfo.RedirectSound = Protocol.RDP.RDPSounds.DoNotPlay
|
||||
End Select
|
||||
End Select
|
||||
Next
|
||||
End If
|
||||
|
||||
treeNode.Tag = connectionInfo
|
||||
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(treeNode)
|
||||
|
||||
If Tree.Node.GetNodeType(treeNode.Parent) = Tree.Node.Type.Container Then
|
||||
connectionInfo.Parent = treeNode.Parent.Tag
|
||||
End If
|
||||
|
||||
ConnectionList.Add(connectionInfo)
|
||||
Next
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFileCouldNotBeImported & vbNewLine & vbNewLine & ex.Message)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpFileCouldNotBeImported, ex)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -1410,12 +1502,8 @@ Namespace App
|
||||
|
||||
Dim conS As New Config.Connections.Save
|
||||
|
||||
If My.Settings.UseSQLServer = False Then
|
||||
If My.Settings.LoadConsFromCustomLocation = False Then
|
||||
conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
|
||||
Else
|
||||
conS.ConnectionFileName = My.Settings.CustomConsPath
|
||||
End If
|
||||
If Not My.Settings.UseSQLServer Then
|
||||
conS.ConnectionFileName = GetStartupConnectionFileName()
|
||||
End If
|
||||
|
||||
conS.ConnectionList = ConnectionList
|
||||
@@ -1484,7 +1572,7 @@ Namespace App
|
||||
Else
|
||||
connectionsSave.SaveFormat = Config.Connections.Save.Format.mRXML
|
||||
|
||||
If connectionsSave.ConnectionFileName = Info.Connections.DefaultConnectionsPath & "\" & Info.Connections.DefaultConnectionsFile Then
|
||||
If connectionsSave.ConnectionFileName = GetDefaultStartupConnectionFileName() Then
|
||||
My.Settings.LoadConsFromCustomLocation = False
|
||||
Else
|
||||
My.Settings.LoadConsFromCustomLocation = True
|
||||
|
||||
@@ -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
|
||||
@@ -113,16 +113,6 @@ Namespace Config
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Import As Boolean
|
||||
Public Property Import() As Boolean
|
||||
Get
|
||||
Return Me._Import
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
Me._Import = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _ConnectionList As Connection.List
|
||||
Public Property ConnectionList() As Connection.List
|
||||
Get
|
||||
@@ -165,23 +155,31 @@ Namespace Config
|
||||
#End Region
|
||||
|
||||
#Region "Public Methods"
|
||||
Public Sub Load()
|
||||
Public Sub Load(ByVal import As Boolean)
|
||||
If _UseSQL = True Then
|
||||
LoadFromSQL()
|
||||
SetMainFormText("SQL Server")
|
||||
Else
|
||||
Dim strCons As String = DecryptCompleteFile()
|
||||
LoadFromXML(strCons)
|
||||
LoadFromXML(strCons, import)
|
||||
End If
|
||||
|
||||
If Import = False Then
|
||||
If import = False Then
|
||||
SetMainFormText(ConnectionFileName)
|
||||
PuttySessions.AddSessionsToTree()
|
||||
End If
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "SQL"
|
||||
Private Delegate Sub LoadFromSqlDelegate()
|
||||
Private Sub LoadFromSQL()
|
||||
If Windows.treeForm Is Nothing OrElse Windows.treeForm.tvConnections Is Nothing Then Return
|
||||
If Windows.treeForm.tvConnections.InvokeRequired Then
|
||||
Windows.treeForm.tvConnections.Invoke(New LoadFromSqlDelegate(AddressOf LoadFromSQL))
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
App.Runtime.IsConnectionsFileLoaded = False
|
||||
|
||||
@@ -208,7 +206,7 @@ Namespace Config
|
||||
End If
|
||||
|
||||
confVersion = Convert.ToDouble(sqlRd.Item("confVersion"), CultureInfo.InvariantCulture)
|
||||
Const maxSupportedSchemaVersion As Double = 2.4
|
||||
Const maxSupportedSchemaVersion As Double = 2.5
|
||||
If confVersion > maxSupportedSchemaVersion Then
|
||||
cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible database schema", String.Format("The database schema on the server is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("Schema Version: {1}{0}Highest Supported Version: {2}", vbNewLine, confVersion.ToString(), maxSupportedSchemaVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
|
||||
Throw New Exception(String.Format("Incompatible database schema (schema version {0}).", confVersion))
|
||||
@@ -276,7 +274,7 @@ Namespace Config
|
||||
App.Runtime.IsConnectionsFileLoaded = True
|
||||
'App.Runtime.Windows.treeForm.InitialRefresh()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strLoadFromSqlFailed & vbNewLine & ex.Message, True)
|
||||
Throw
|
||||
Finally
|
||||
If sqlCon IsNot Nothing Then
|
||||
sqlCon.Close()
|
||||
@@ -405,7 +403,10 @@ Namespace Config
|
||||
tNode.SelectedImageIndex = Images.Enums.TreeImage.Container
|
||||
End If
|
||||
|
||||
If sqlRd.Item("ParentID") <> 0 Then
|
||||
Dim parentId As String = sqlRd.Item("ParentID").ToString().Trim()
|
||||
If String.IsNullOrEmpty(parentId) Or parentId = "0" Then
|
||||
baseNode.Nodes.Add(tNode)
|
||||
Else
|
||||
Dim pNode As TreeNode = Tree.Node.GetNodeFromConstantID(sqlRd.Item("ParentID"))
|
||||
|
||||
If pNode IsNot Nothing Then
|
||||
@@ -419,8 +420,6 @@ Namespace Config
|
||||
Else
|
||||
baseNode.Nodes.Add(tNode)
|
||||
End If
|
||||
Else
|
||||
baseNode.Nodes.Add(tNode)
|
||||
End If
|
||||
|
||||
'AddNodesFromSQL(tNode)
|
||||
@@ -576,6 +575,13 @@ Namespace Config
|
||||
conI.Inherit.UseCredSsp = .Item("InheritUseCredSsp")
|
||||
End If
|
||||
|
||||
If confVersion >= 2.5 Then
|
||||
conI.LoadBalanceInfo = .Item("LoadBalanceInfo")
|
||||
conI.AutomaticResize = .Item("AutomaticResize")
|
||||
conI.Inherit.LoadBalanceInfo = .Item("InheritLoadBalanceInfo")
|
||||
conI.Inherit.AutomaticResize = .Item("InheritAutomaticResize")
|
||||
End If
|
||||
|
||||
If SQLUpdate = True Then
|
||||
conI.PleaseConnect = .Item("Connected")
|
||||
End If
|
||||
@@ -638,7 +644,7 @@ Namespace Config
|
||||
Return ""
|
||||
End Function
|
||||
|
||||
Private Sub LoadFromXML(Optional ByVal cons As String = "")
|
||||
Private Sub LoadFromXML(ByVal cons As String, ByVal import As Boolean)
|
||||
Try
|
||||
App.Runtime.IsConnectionsFileLoaded = False
|
||||
|
||||
@@ -656,7 +662,7 @@ Namespace Config
|
||||
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, My.Language.strOldConffile)
|
||||
End If
|
||||
|
||||
Const maxSupportedConfVersion As Double = 2.4
|
||||
Const maxSupportedConfVersion As Double = 2.5
|
||||
If confVersion > maxSupportedConfVersion Then
|
||||
cTaskDialog.ShowTaskDialogBox(frmMain, Application.ProductName, "Incompatible connection file format", String.Format("The format of this connection file is not supported. Please upgrade to a newer version of {0}.", Application.ProductName), String.Format("{1}{0}File Format Version: {2}{0}Highest Supported Version: {3}", vbNewLine, ConnectionFileName, confVersion.ToString(), maxSupportedConfVersion.ToString()), "", "", "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
|
||||
Throw New Exception(String.Format("Incompatible connection file format (file format version {0}).", confVersion))
|
||||
@@ -690,31 +696,29 @@ Namespace Config
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim imp As Boolean = False
|
||||
|
||||
If Me.confVersion > 0.9 Then '1.0
|
||||
Dim isExportFile As Boolean = False
|
||||
If confVersion >= 1.0 Then
|
||||
If xDom.DocumentElement.Attributes("Export").Value = True Then
|
||||
imp = True
|
||||
isExportFile = True
|
||||
End If
|
||||
End If
|
||||
|
||||
If Me._Import = True And imp = False Then
|
||||
If import And Not isExportFile Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strCannotImportNormalSessionFile)
|
||||
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
|
||||
If imp = False Then
|
||||
Me._RootTreeNode.Text = rootNode.Text
|
||||
Me._RootTreeNode.Tag = rootNode.Tag
|
||||
Me._RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
|
||||
Me._RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
|
||||
If Not isExportFile Then
|
||||
_RootTreeNode.Text = rootNode.Text
|
||||
_RootTreeNode.Tag = rootNode.Tag
|
||||
_RootTreeNode.ImageIndex = Images.Enums.TreeImage.Root
|
||||
_RootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.Root
|
||||
End If
|
||||
|
||||
Windows.treeForm.tvConnections.BeginUpdate()
|
||||
|
||||
' SECTION 3. Populate the TreeView with the DOM nodes.
|
||||
AddNodeFromXML(xDom.DocumentElement, Me._RootTreeNode)
|
||||
AddNodeFromXml(xDom.DocumentElement, _RootTreeNode)
|
||||
|
||||
Me._RootTreeNode.Expand()
|
||||
|
||||
@@ -1059,6 +1063,13 @@ Namespace Config
|
||||
conI.UseCredSsp = .Attributes("UseCredSsp").Value
|
||||
conI.Inherit.UseCredSsp = .Attributes("InheritUseCredSsp").Value
|
||||
End If
|
||||
|
||||
If confVersion >= 2.5 Then
|
||||
conI.LoadBalanceInfo = .Attributes("LoadBalanceInfo").Value
|
||||
conI.AutomaticResize = .Attributes("AutomaticResize").Value
|
||||
conI.Inherit.LoadBalanceInfo = .Attributes("InheritLoadBalanceInfo").Value
|
||||
conI.Inherit.AutomaticResize = .Attributes("InheritAutomaticResize").Value
|
||||
End If
|
||||
End With
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, String.Format(My.Language.strGetConnectionInfoFromXmlFailed, conI.Name, Me.ConnectionFileName, ex.Message), False)
|
||||
|
||||
@@ -5,7 +5,6 @@ Imports System.Globalization
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports System.Data.SqlClient
|
||||
Imports mRemoteNG.Tools.Misc
|
||||
Imports mRemoteNG.My.Resources
|
||||
|
||||
Namespace Config
|
||||
Namespace Connections
|
||||
@@ -98,7 +97,14 @@ Namespace Config
|
||||
databaseVersion = New Version(2, 4)
|
||||
End If
|
||||
|
||||
If databaseVersion.CompareTo(New System.Version(2, 4)) = 0 Then ' 2.4
|
||||
If databaseVersion.CompareTo(New Version(2, 4)) = 0 Then ' 2.4
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format("Upgrading database from version {0} to version {1}.", databaseVersion.ToString, "2.5"))
|
||||
sqlCommand = New SqlCommand("ALTER TABLE tblCons ADD LoadBalanceInfo varchar (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, AutomaticResize bit NOT NULL DEFAULT 1, InheritLoadBalanceInfo bit NOT NULL DEFAULT 0, InheritAutomaticResize bit NOT NULL DEFAULT 0;", sqlConnection)
|
||||
sqlCommand.ExecuteNonQuery()
|
||||
databaseVersion = New Version(2, 5)
|
||||
End If
|
||||
|
||||
If databaseVersion.CompareTo(New Version(2, 5)) = 0 Then ' 2.5
|
||||
isVerified = True
|
||||
End If
|
||||
|
||||
@@ -173,7 +179,7 @@ Namespace Config
|
||||
Dim curConI As Connection.Info
|
||||
_sqlQuery = New SqlCommand("INSERT INTO tblCons (Name, Type, Expanded, Description, Icon, Panel, Username, " & _
|
||||
"DomainName, Password, Hostname, Protocol, PuttySession, " & _
|
||||
"Port, ConnectToConsole, RenderingEngine, ICAEncryptionStrength, RDPAuthenticationLevel, Colors, Resolution, DisplayWallpaper, " & _
|
||||
"Port, ConnectToConsole, RenderingEngine, ICAEncryptionStrength, RDPAuthenticationLevel, LoadBalanceInfo, Colors, Resolution, AutomaticResize, DisplayWallpaper, " & _
|
||||
"DisplayThemes, EnableFontSmoothing, EnableDesktopComposition, CacheBitmaps, RedirectDiskDrives, RedirectPorts, " & _
|
||||
"RedirectPrinters, RedirectSmartCards, RedirectSound, RedirectKeys, " & _
|
||||
"Connected, PreExtApp, PostExtApp, MacAddress, UserField, ExtApp, VNCCompression, VNCEncoding, VNCAuthMode, " & _
|
||||
@@ -186,8 +192,8 @@ Namespace Config
|
||||
"InheritIcon, InheritPanel, InheritPassword, InheritPort, " & _
|
||||
"InheritProtocol, InheritPuttySession, InheritRedirectDiskDrives, " & _
|
||||
"InheritRedirectKeys, InheritRedirectPorts, InheritRedirectPrinters, " & _
|
||||
"InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, " & _
|
||||
"InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, " & _
|
||||
"InheritRedirectSmartCards, InheritRedirectSound, InheritResolution, InheritAutomaticResize, " & _
|
||||
"InheritUseConsoleSession, InheritRenderingEngine, InheritUsername, InheritICAEncryptionStrength, InheritRDPAuthenticationLevel, InheritLoadBalanceInfo, " & _
|
||||
"InheritPreExtApp, InheritPostExtApp, InheritMacAddress, InheritUserField, InheritExtApp, InheritVNCCompression, InheritVNCEncoding, " & _
|
||||
"InheritVNCAuthMode, InheritVNCProxyType, InheritVNCProxyIP, InheritVNCProxyPort, " & _
|
||||
"InheritVNCProxyUsername, InheritVNCProxyPassword, InheritVNCColors, " & _
|
||||
@@ -260,8 +266,10 @@ Namespace Config
|
||||
_sqlQuery.CommandText &= "'" & .RenderingEngine.ToString & "',"
|
||||
_sqlQuery.CommandText &= "'" & .ICAEncryption.ToString & "',"
|
||||
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel.ToString & "',"
|
||||
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
|
||||
_sqlQuery.CommandText &= "'" & .Colors.ToString & "',"
|
||||
_sqlQuery.CommandText &= "'" & .Resolution.ToString & "',"
|
||||
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
|
||||
_sqlQuery.CommandText &= "'" & .DisplayWallpaper & "',"
|
||||
_sqlQuery.CommandText &= "'" & .DisplayThemes & "',"
|
||||
_sqlQuery.CommandText &= "'" & .EnableFontSmoothing & "',"
|
||||
@@ -345,11 +353,13 @@ Namespace Config
|
||||
_sqlQuery.CommandText &= "'" & .RedirectSmartCards & "',"
|
||||
_sqlQuery.CommandText &= "'" & .RedirectSound & "',"
|
||||
_sqlQuery.CommandText &= "'" & .Resolution & "',"
|
||||
_sqlQuery.CommandText &= "'" & .AutomaticResize & "',"
|
||||
_sqlQuery.CommandText &= "'" & .UseConsoleSession & "',"
|
||||
_sqlQuery.CommandText &= "'" & .RenderingEngine & "',"
|
||||
_sqlQuery.CommandText &= "'" & .Username & "',"
|
||||
_sqlQuery.CommandText &= "'" & .ICAEncryption & "',"
|
||||
_sqlQuery.CommandText &= "'" & .RDPAuthenticationLevel & "',"
|
||||
_sqlQuery.CommandText &= "'" & .LoadBalanceInfo & "',"
|
||||
_sqlQuery.CommandText &= "'" & .PreExtApp & "',"
|
||||
_sqlQuery.CommandText &= "'" & .PostExtApp & "',"
|
||||
_sqlQuery.CommandText &= "'" & .MacAddress & "',"
|
||||
@@ -398,11 +408,15 @@ Namespace Config
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "'," ' .AutomaticResize
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "'," ' .LoadBalanceInfo
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
_sqlQuery.CommandText &= "'" & False & "',"
|
||||
@@ -446,7 +460,7 @@ Namespace Config
|
||||
End If
|
||||
End If
|
||||
|
||||
_sqlQuery.CommandText &= _currentNodeIndex & "," & _parentConstantId & "," & .ConstantID & ",'" & Tools.Misc.DBDate(Now) & "')"
|
||||
_sqlQuery.CommandText &= _currentNodeIndex & ",'" & _parentConstantId & "','" & .ConstantID & "','" & Tools.Misc.DBDate(Now) & "')"
|
||||
End With
|
||||
End Sub
|
||||
#End Region
|
||||
@@ -597,10 +611,14 @@ Namespace Config
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("RDPAuthenticationLevel", "", curConI.RDPAuthenticationLevel.ToString)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("LoadBalanceInfo", "", curConI.LoadBalanceInfo)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("Colors", "", curConI.Colors.ToString)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("Resolution", "", curConI.Resolution.ToString)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("AutomaticResize", "", curConI.AutomaticResize)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("DisplayWallpaper", "", curConI.DisplayWallpaper)
|
||||
|
||||
_xmlTextWriter.WriteAttributeString("DisplayThemes", "", curConI.DisplayThemes)
|
||||
@@ -692,12 +710,14 @@ Namespace Config
|
||||
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", curConI.Inherit.RedirectSmartCards)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", curConI.Inherit.RedirectSound)
|
||||
_xmlTextWriter.WriteAttributeString("InheritResolution", "", curConI.Inherit.Resolution)
|
||||
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", curConI.Inherit.AutomaticResize)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", curConI.Inherit.UseConsoleSession)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", curConI.Inherit.UseCredSsp)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", curConI.Inherit.RenderingEngine)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUsername", "", curConI.Inherit.Username)
|
||||
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", curConI.Inherit.ICAEncryption)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", curConI.Inherit.RDPAuthenticationLevel)
|
||||
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", curConI.Inherit.LoadBalanceInfo)
|
||||
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", curConI.Inherit.PreExtApp)
|
||||
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", curConI.Inherit.PostExtApp)
|
||||
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", curConI.Inherit.MacAddress)
|
||||
@@ -742,12 +762,14 @@ Namespace Config
|
||||
_xmlTextWriter.WriteAttributeString("InheritRedirectSmartCards", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRedirectSound", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritResolution", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritAutomaticResize", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUseConsoleSession", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritUsername", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritPostExtApp", "", False)
|
||||
_xmlTextWriter.WriteAttributeString("InheritMacAddress", "", False)
|
||||
@@ -809,10 +831,10 @@ Namespace Config
|
||||
csvLn += "Domain;"
|
||||
End If
|
||||
|
||||
csvLn += "Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;Colors;Resolution;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;"
|
||||
csvLn += "Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;"
|
||||
|
||||
If SaveSecurity.Inheritance Then
|
||||
csvLn += "InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain"
|
||||
csvLn += "InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain"
|
||||
End If
|
||||
|
||||
csvWr.WriteLine(csvLn)
|
||||
@@ -863,10 +885,10 @@ Namespace Config
|
||||
csvLn += con.Domain & ";"
|
||||
End If
|
||||
|
||||
csvLn += con.Hostname & ";" & con.Protocol.ToString & ";" & con.PuttySession & ";" & con.Port & ";" & con.UseConsoleSession & ";" & con.UseCredSsp & ";" & con.RenderingEngine.ToString & ";" & con.ICAEncryption.ToString & ";" & con.RDPAuthenticationLevel.ToString & ";" & con.Colors.ToString & ";" & con.Resolution.ToString & ";" & con.DisplayWallpaper & ";" & con.DisplayThemes & ";" & con.EnableFontSmoothing & ";" & con.EnableDesktopComposition & ";" & con.CacheBitmaps & ";" & con.RedirectDiskDrives & ";" & con.RedirectPorts & ";" & con.RedirectPrinters & ";" & con.RedirectSmartCards & ";" & con.RedirectSound.ToString & ";" & con.RedirectKeys & ";" & con.PreExtApp & ";" & con.PostExtApp & ";" & con.MacAddress & ";" & con.UserField & ";" & con.ExtApp & ";" & con.VNCCompression.ToString & ";" & con.VNCEncoding.ToString & ";" & con.VNCAuthMode.ToString & ";" & con.VNCProxyType.ToString & ";" & con.VNCProxyIP & ";" & con.VNCProxyPort & ";" & con.VNCProxyUsername & ";" & con.VNCProxyPassword & ";" & con.VNCColors.ToString & ";" & con.VNCSmartSizeMode.ToString & ";" & con.VNCViewOnly & ";"
|
||||
csvLn += con.Hostname & ";" & con.Protocol.ToString & ";" & con.PuttySession & ";" & con.Port & ";" & con.UseConsoleSession & ";" & con.UseCredSsp & ";" & con.RenderingEngine.ToString & ";" & con.ICAEncryption.ToString & ";" & con.RDPAuthenticationLevel.ToString & ";" & con.LoadBalanceInfo & ";" & con.Colors.ToString & ";" & con.Resolution.ToString & ";" & con.AutomaticResize & ";" & con.DisplayWallpaper & ";" & con.DisplayThemes & ";" & con.EnableFontSmoothing & ";" & con.EnableDesktopComposition & ";" & con.CacheBitmaps & ";" & con.RedirectDiskDrives & ";" & con.RedirectPorts & ";" & con.RedirectPrinters & ";" & con.RedirectSmartCards & ";" & con.RedirectSound.ToString & ";" & con.RedirectKeys & ";" & con.PreExtApp & ";" & con.PostExtApp & ";" & con.MacAddress & ";" & con.UserField & ";" & con.ExtApp & ";" & con.VNCCompression.ToString & ";" & con.VNCEncoding.ToString & ";" & con.VNCAuthMode.ToString & ";" & con.VNCProxyType.ToString & ";" & con.VNCProxyIP & ";" & con.VNCProxyPort & ";" & con.VNCProxyUsername & ";" & con.VNCProxyPassword & ";" & con.VNCColors.ToString & ";" & con.VNCSmartSizeMode.ToString & ";" & con.VNCViewOnly & ";"
|
||||
|
||||
If SaveSecurity.Inheritance Then
|
||||
csvLn += con.Inherit.CacheBitmaps & ";" & con.Inherit.Colors & ";" & con.Inherit.Description & ";" & con.Inherit.DisplayThemes & ";" & con.Inherit.DisplayWallpaper & ";" & con.Inherit.EnableFontSmoothing & ";" & con.Inherit.EnableDesktopComposition & ";" & con.Inherit.Domain & ";" & con.Inherit.Icon & ";" & con.Inherit.Panel & ";" & con.Inherit.Password & ";" & con.Inherit.Port & ";" & con.Inherit.Protocol & ";" & con.Inherit.PuttySession & ";" & con.Inherit.RedirectDiskDrives & ";" & con.Inherit.RedirectKeys & ";" & con.Inherit.RedirectPorts & ";" & con.Inherit.RedirectPrinters & ";" & con.Inherit.RedirectSmartCards & ";" & con.Inherit.RedirectSound & ";" & con.Inherit.Resolution & ";" & con.Inherit.UseConsoleSession & ";" & con.Inherit.UseCredSsp & ";" & con.Inherit.RenderingEngine & ";" & con.Inherit.Username & ";" & con.Inherit.ICAEncryption & ";" & con.Inherit.RDPAuthenticationLevel & ";" & con.Inherit.PreExtApp & ";" & con.Inherit.PostExtApp & ";" & con.Inherit.MacAddress & ";" & con.Inherit.UserField & ";" & con.Inherit.ExtApp & ";" & con.Inherit.VNCCompression & ";" & con.Inherit.VNCEncoding & ";" & con.Inherit.VNCAuthMode & ";" & con.Inherit.VNCProxyType & ";" & con.Inherit.VNCProxyIP & ";" & con.Inherit.VNCProxyPort & ";" & con.Inherit.VNCProxyUsername & ";" & con.Inherit.VNCProxyPassword & ";" & con.Inherit.VNCColors & ";" & con.Inherit.VNCSmartSizeMode & ";" & con.Inherit.VNCViewOnly
|
||||
csvLn += con.Inherit.CacheBitmaps & ";" & con.Inherit.Colors & ";" & con.Inherit.Description & ";" & con.Inherit.DisplayThemes & ";" & con.Inherit.DisplayWallpaper & ";" & con.Inherit.EnableFontSmoothing & ";" & con.Inherit.EnableDesktopComposition & ";" & con.Inherit.Domain & ";" & con.Inherit.Icon & ";" & con.Inherit.Panel & ";" & con.Inherit.Password & ";" & con.Inherit.Port & ";" & con.Inherit.Protocol & ";" & con.Inherit.PuttySession & ";" & con.Inherit.RedirectDiskDrives & ";" & con.Inherit.RedirectKeys & ";" & con.Inherit.RedirectPorts & ";" & con.Inherit.RedirectPrinters & ";" & con.Inherit.RedirectSmartCards & ";" & con.Inherit.RedirectSound & ";" & con.Inherit.Resolution & ";" & con.Inherit.AutomaticResize & ";" & con.Inherit.UseConsoleSession & ";" & con.Inherit.UseCredSsp & ";" & con.Inherit.RenderingEngine & ";" & con.Inherit.Username & ";" & con.Inherit.ICAEncryption & ";" & con.Inherit.RDPAuthenticationLevel & ";" & con.Inherit.LoadBalanceInfo & ";" & con.Inherit.PreExtApp & ";" & con.Inherit.PostExtApp & ";" & con.Inherit.MacAddress & ";" & con.Inherit.UserField & ";" & con.Inherit.ExtApp & ";" & con.Inherit.VNCCompression & ";" & con.Inherit.VNCEncoding & ";" & con.Inherit.VNCAuthMode & ";" & con.Inherit.VNCProxyType & ";" & con.Inherit.VNCProxyIP & ";" & con.Inherit.VNCProxyPort & ";" & con.Inherit.VNCProxyUsername & ";" & con.Inherit.VNCProxyPassword & ";" & con.Inherit.VNCColors & ";" & con.Inherit.VNCSmartSizeMode & ";" & con.Inherit.VNCViewOnly
|
||||
End If
|
||||
|
||||
csvWr.WriteLine(csvLn)
|
||||
@@ -1040,7 +1062,7 @@ Namespace Config
|
||||
|
||||
'Smart Size
|
||||
_xmlTextWriter.WriteStartElement("AutoSize")
|
||||
_xmlTextWriter.WriteValue(IIf(con.Resolution = Connection.Protocol.RDP.RDPResolutions.SmartSize, True, False))
|
||||
_xmlTextWriter.WriteValue(con.Resolution = Connection.Protocol.RDP.RDPResolutions.SmartSize)
|
||||
_xmlTextWriter.WriteEndElement()
|
||||
|
||||
'SeparateResolutionX
|
||||
@@ -1053,26 +1075,18 @@ Namespace Config
|
||||
_xmlTextWriter.WriteValue("768")
|
||||
_xmlTextWriter.WriteEndElement()
|
||||
|
||||
Dim resolution As Rectangle = Connection.Protocol.RDP.GetResolutionRectangle(con.Resolution)
|
||||
If resolution.Width = 0 Then resolution.Width = 1024
|
||||
If resolution.Height = 0 Then resolution.Height = 768
|
||||
|
||||
'TabResolutionX
|
||||
_xmlTextWriter.WriteStartElement("TabResolutionX")
|
||||
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _
|
||||
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.Fullscreen And _
|
||||
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.SmartSize Then
|
||||
_xmlTextWriter.WriteValue(con.Resolution.ToString.Remove(con.Resolution.ToString.IndexOf("x")))
|
||||
Else
|
||||
_xmlTextWriter.WriteValue("1024")
|
||||
End If
|
||||
_xmlTextWriter.WriteValue(resolution.Width)
|
||||
_xmlTextWriter.WriteEndElement()
|
||||
|
||||
'TabResolutionY
|
||||
_xmlTextWriter.WriteStartElement("TabResolutionY")
|
||||
If con.Resolution <> Connection.Protocol.RDP.RDPResolutions.FitToWindow And _
|
||||
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.Fullscreen And _
|
||||
con.Resolution <> Connection.Protocol.RDP.RDPResolutions.SmartSize Then
|
||||
_xmlTextWriter.WriteValue(con.Resolution.ToString.Remove(0, con.Resolution.ToString.IndexOf("x")))
|
||||
Else
|
||||
_xmlTextWriter.WriteValue("768")
|
||||
End If
|
||||
_xmlTextWriter.WriteValue(resolution.Height)
|
||||
_xmlTextWriter.WriteEndElement()
|
||||
|
||||
'RDPColorDepth
|
||||
|
||||
@@ -29,7 +29,11 @@ Namespace Config
|
||||
With Me._MainForm
|
||||
' Migrate settings from previous version
|
||||
If My.Settings.DoUpgrade Then
|
||||
My.Settings.Upgrade()
|
||||
Try
|
||||
My.Settings.Upgrade()
|
||||
Catch ex As Exception
|
||||
Log.Error("My.Settings.Upgrade() failed" & vbNewLine & ex.Message)
|
||||
End Try
|
||||
My.Settings.DoUpgrade = False
|
||||
|
||||
' Clear pending update flag
|
||||
@@ -80,13 +84,14 @@ Namespace Config
|
||||
.Location = newBounds.Location
|
||||
|
||||
If My.Settings.MainFormKiosk = True Then
|
||||
Tools.Misc.Fullscreen.EnterFullscreen()
|
||||
.Fullscreen.Value = True
|
||||
.mMenViewFullscreen.Checked = True
|
||||
End If
|
||||
|
||||
If My.Settings.UseCustomPuttyPath Then
|
||||
Connection.Protocol.PuttyBase.PuttyPath = My.Settings.CustomPuttyPath
|
||||
Else
|
||||
Connection.Protocol.PuttyBase.PuttyPath = My.Application.Info.DirectoryPath & "\PuTTYNG.exe"
|
||||
Connection.Protocol.PuttyBase.PuttyPath = App.Info.General.PuttyPath
|
||||
End If
|
||||
|
||||
If My.Settings.ShowSystemTrayIcon Then
|
||||
@@ -114,8 +119,7 @@ Namespace Config
|
||||
End If
|
||||
End With
|
||||
Catch ex As Exception
|
||||
App.Runtime.log.Error("Loading settings failed" & vbNewLine & ex.Message)
|
||||
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "Loading settings failed" & vbNewLine & ex.Message, True)
|
||||
Log.Error("Loading settings failed" & vbNewLine & ex.Message)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -196,8 +200,7 @@ Namespace Config
|
||||
End If
|
||||
End With
|
||||
Catch ex As Exception
|
||||
App.Runtime.log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message)
|
||||
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "LoadPanelsFromXML failed" & vbNewLine & ex.Message, True)
|
||||
Log.Error("LoadPanelsFromXML failed" & vbNewLine & ex.Message)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
@@ -268,8 +271,7 @@ Namespace Config
|
||||
Return Windows.screenshotPanel
|
||||
End If
|
||||
Catch ex As Exception
|
||||
App.Runtime.log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message)
|
||||
'mC.AddMessage(Messages.MessageClass.ErrorMsg, "GetContentFromPersistString failed" & vbNewLine & ex.Message, True)
|
||||
Log.Error("GetContentFromPersistString failed" & vbNewLine & ex.Message)
|
||||
End Try
|
||||
|
||||
Return Nothing
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,16 +1,29 @@
|
||||
Imports System.ComponentModel
|
||||
Imports System.Management
|
||||
Imports mRemoteNG.Messages
|
||||
Imports Microsoft.Win32
|
||||
Imports mRemoteNG.Connection.Protocol
|
||||
Imports mRemoteNG.Tree
|
||||
Imports mRemoteNG.My
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports System.Security.Principal
|
||||
|
||||
Namespace Config
|
||||
Public Class PuttySessions
|
||||
Private Const PuttySessionsKey As String = "Software\SimonTatham\PuTTY\Sessions"
|
||||
Private Shared _rootTreeNode As TreeNode
|
||||
Private Shared _eventWatcher As ManagementEventWatcher
|
||||
|
||||
Public Shared Sub AddSessionsToTree(ByVal treeView As TreeView)
|
||||
Dim savedSessions() As Connection.Info = LoadSessions()
|
||||
If savedSessions Is Nothing OrElse savedSessions.Length = 0 Then Return
|
||||
Private Delegate Sub AddSessionsToTreeDelegate()
|
||||
Public Shared Sub AddSessionsToTree()
|
||||
Dim treeView As TreeView = Tree.Node.TreeView
|
||||
If treeView Is Nothing Then Return
|
||||
If treeView.InvokeRequired Then
|
||||
treeView.Invoke(New AddSessionsToTreeDelegate(AddressOf AddSessionsToTree))
|
||||
Return
|
||||
End If
|
||||
|
||||
Dim savedSessions As New List(Of Connection.Info)(LoadSessions())
|
||||
If savedSessions Is Nothing OrElse savedSessions.Count = 0 Then Return
|
||||
|
||||
Dim puttyRootInfo As New Root.PuttySessions.Info()
|
||||
If String.IsNullOrEmpty(My.Settings.PuttySavedSessionsName) Then
|
||||
@@ -24,55 +37,109 @@ Namespace Config
|
||||
puttyRootInfo.Panel = My.Settings.PuttySavedSessionsPanel
|
||||
End If
|
||||
|
||||
Dim puttyRootNode As TreeNode = New TreeNode
|
||||
puttyRootNode.Text = puttyRootInfo.Name
|
||||
puttyRootNode.Tag = puttyRootInfo
|
||||
puttyRootNode.ImageIndex = Images.Enums.TreeImage.PuttySessions
|
||||
puttyRootNode.SelectedImageIndex = Images.Enums.TreeImage.PuttySessions
|
||||
Dim inUpdate As Boolean = False
|
||||
|
||||
puttyRootInfo.TreeNode = puttyRootNode
|
||||
If _rootTreeNode Is Nothing Then
|
||||
_rootTreeNode = New TreeNode
|
||||
_rootTreeNode.Name = puttyRootInfo.Name
|
||||
_rootTreeNode.Text = puttyRootInfo.Name
|
||||
_rootTreeNode.Tag = puttyRootInfo
|
||||
_rootTreeNode.ImageIndex = Images.Enums.TreeImage.PuttySessions
|
||||
_rootTreeNode.SelectedImageIndex = Images.Enums.TreeImage.PuttySessions
|
||||
End If
|
||||
|
||||
treeView.BeginUpdate()
|
||||
treeView.Nodes.Add(puttyRootNode)
|
||||
If Not treeView.Nodes.Contains(_rootTreeNode) Then
|
||||
If Not inUpdate Then
|
||||
treeView.BeginUpdate()
|
||||
inUpdate = True
|
||||
End If
|
||||
treeView.Nodes.Add(_rootTreeNode)
|
||||
End If
|
||||
|
||||
Dim newTreeNode As TreeNode
|
||||
puttyRootInfo.TreeNode = _rootTreeNode
|
||||
|
||||
Dim newTreeNodes As New List(Of TreeNode)
|
||||
For Each sessionInfo As Connection.PuttySession.Info In savedSessions
|
||||
newTreeNode = Node.AddNode(Node.Type.PuttySession, sessionInfo.Name)
|
||||
If newTreeNode Is Nothing Then Continue For
|
||||
Dim treeNode As TreeNode
|
||||
Dim isNewNode As Boolean
|
||||
If _rootTreeNode.Nodes.ContainsKey(sessionInfo.Name) Then
|
||||
treeNode = _rootTreeNode.Nodes.Item(sessionInfo.Name)
|
||||
isNewNode = False
|
||||
Else
|
||||
treeNode = Tree.Node.AddNode(Tree.Node.Type.PuttySession, sessionInfo.Name)
|
||||
If treeNode Is Nothing Then Continue For
|
||||
treeNode.Name = treeNode.Text
|
||||
treeNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
treeNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
isNewNode = True
|
||||
End If
|
||||
|
||||
sessionInfo.RootPuttySessionsInfo = puttyRootInfo
|
||||
sessionInfo.TreeNode = newTreeNode
|
||||
sessionInfo.TreeNode = treeNode
|
||||
sessionInfo.Inherit.TurnOffInheritanceCompletely()
|
||||
|
||||
newTreeNode.Tag = sessionInfo
|
||||
newTreeNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
newTreeNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
treeNode.Tag = sessionInfo
|
||||
|
||||
puttyRootNode.Nodes.Add(newTreeNode)
|
||||
If isNewNode Then newTreeNodes.Add(treeNode)
|
||||
Next
|
||||
|
||||
puttyRootNode.Expand()
|
||||
treeView.EndUpdate()
|
||||
For Each treeNode As TreeNode In _rootTreeNode.Nodes
|
||||
If Not savedSessions.Contains(treeNode.Tag) Then
|
||||
If Not inUpdate Then
|
||||
treeView.BeginUpdate()
|
||||
inUpdate = True
|
||||
End If
|
||||
_rootTreeNode.Nodes.Remove(treeNode)
|
||||
End If
|
||||
Next
|
||||
|
||||
If Not newTreeNodes.Count = 0 Then
|
||||
If Not inUpdate Then
|
||||
treeView.BeginUpdate()
|
||||
inUpdate = True
|
||||
End If
|
||||
_rootTreeNode.Nodes.AddRange(newTreeNodes.ToArray())
|
||||
End If
|
||||
|
||||
If inUpdate Then
|
||||
Tree.Node.Sort(_rootTreeNode, SortOrder.Ascending)
|
||||
_rootTreeNode.Expand()
|
||||
treeView.EndUpdate()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Protected Shared Function GetSessionNames(Optional ByVal addDefaultSettings As Boolean = False) As String()
|
||||
Protected Shared Function GetSessionNames(Optional ByVal raw As Boolean = False) As String()
|
||||
Dim sessionsKey As RegistryKey = Registry.CurrentUser.OpenSubKey(PuttySessionsKey)
|
||||
If sessionsKey Is Nothing Then Return Nothing
|
||||
If sessionsKey Is Nothing Then Return New String() {}
|
||||
|
||||
Dim sessionNames As New List(Of String)
|
||||
If addDefaultSettings Then sessionNames.Add("Default Settings")
|
||||
For Each sessionName As String In sessionsKey.GetSubKeyNames()
|
||||
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName))
|
||||
If raw Then
|
||||
sessionNames.Add(sessionName)
|
||||
Else
|
||||
sessionNames.Add(Web.HttpUtility.UrlDecode(sessionName.Replace("+", "%2B")))
|
||||
End If
|
||||
Next
|
||||
|
||||
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()
|
||||
For Each sessionName As String In GetSessionNames(True)
|
||||
sessionInfo = SessionToConnectionInfo(sessionName)
|
||||
If sessionInfo Is Nothing Then Continue For
|
||||
If sessionInfo Is Nothing OrElse String.IsNullOrEmpty(sessionInfo.Hostname) Then Continue For
|
||||
sessionList.Add(sessionInfo)
|
||||
Next
|
||||
Return sessionList.ToArray()
|
||||
@@ -85,6 +152,8 @@ Namespace Config
|
||||
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
|
||||
@@ -92,6 +161,7 @@ Namespace Config
|
||||
.Hostname = sessionKey.GetValue("HostName")
|
||||
.Username = sessionKey.GetValue("UserName")
|
||||
Dim protocol As String = sessionKey.GetValue("Protocol")
|
||||
If protocol Is Nothing Then protocol = "ssh"
|
||||
Select Case protocol.ToLowerInvariant()
|
||||
Case "raw"
|
||||
.Protocol = Protocols.RAW
|
||||
@@ -100,11 +170,16 @@ Namespace Config
|
||||
Case "serial"
|
||||
Return Nothing
|
||||
Case "ssh"
|
||||
Dim sshVersion As Integer = sessionKey.GetValue("SshProt")
|
||||
If sshVersion >= 2 Then
|
||||
.Protocol = Protocols.SSH2
|
||||
Dim sshVersionObject As Object = sessionKey.GetValue("SshProt")
|
||||
If sshVersionObject IsNot Nothing Then
|
||||
Dim sshVersion As Integer = CType(sshVersionObject, Integer)
|
||||
If sshVersion >= 2 Then
|
||||
.Protocol = Protocols.SSH2
|
||||
Else
|
||||
.Protocol = Protocols.SSH1
|
||||
End If
|
||||
Else
|
||||
.Protocol = Protocols.SSH1
|
||||
.Protocol = Protocols.SSH2
|
||||
End If
|
||||
Case "telnet"
|
||||
.Protocol = Protocols.Telnet
|
||||
@@ -117,12 +192,38 @@ Namespace Config
|
||||
Return sessionInfo
|
||||
End Function
|
||||
|
||||
Public Shared Sub StartWatcher()
|
||||
If _eventWatcher IsNot Nothing Then Return
|
||||
|
||||
Try
|
||||
Dim currentUserSid As String = WindowsIdentity.GetCurrent().User.Value
|
||||
Dim key As String = String.Join("\", {currentUserSid, PuttySessionsKey}).Replace("\", "\\")
|
||||
Dim query As New WqlEventQuery(String.Format("SELECT * FROM RegistryTreeChangeEvent WHERE Hive = 'HKEY_USERS' AND RootPath = '{0}'", key))
|
||||
_eventWatcher = New ManagementEventWatcher(query)
|
||||
AddHandler _eventWatcher.EventArrived, AddressOf OnManagementEventArrived
|
||||
_eventWatcher.Start()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage("PuttySessions.Watcher.StartWatching() failed.", ex, MessageClass.WarningMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Shared Sub StopWatcher()
|
||||
If _eventWatcher Is Nothing Then Return
|
||||
_eventWatcher.Stop()
|
||||
_eventWatcher.Dispose()
|
||||
_eventWatcher = Nothing
|
||||
End Sub
|
||||
|
||||
Private Shared Sub OnManagementEventArrived(ByVal sender As Object, ByVal e As EventArrivedEventArgs)
|
||||
AddSessionsToTree()
|
||||
End Sub
|
||||
|
||||
Public Class SessionList
|
||||
Inherits StringConverter
|
||||
|
||||
Public Shared ReadOnly Property Names() As String()
|
||||
Get
|
||||
Return GetSessionNames(True)
|
||||
Return GetSessionNames()
|
||||
End Get
|
||||
End Property
|
||||
|
||||
|
||||
@@ -8,17 +8,17 @@ Namespace Connection
|
||||
Public Class Info
|
||||
#Region "Properties"
|
||||
#Region "1 Display"
|
||||
Private _Name As String = My.Language.strNewConnection
|
||||
Private _name As String = My.Language.strNewConnection
|
||||
<LocalizedCategory("strCategoryDisplay", 1), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayName("strPropertyNameName"), _
|
||||
LocalizedDescription("strPropertyDescriptionName")> _
|
||||
Public Overridable Property Name() As String
|
||||
Get
|
||||
Return Me._Name
|
||||
Return _name
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
Me._Name = value
|
||||
_name = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
@@ -102,17 +102,18 @@ Namespace Connection
|
||||
End Property
|
||||
#End Region
|
||||
#Region "2 Connection"
|
||||
Private _Hostname As String = ""
|
||||
Private _hostname As String = ""
|
||||
<LocalizedCategory("strCategoryConnection", 2), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayName("strPropertyNameAddress"), _
|
||||
LocalizedDescription("strPropertyDescriptionAddress")> _
|
||||
Public Overridable Property Hostname() As String
|
||||
Get
|
||||
Return Me._Hostname.Trim()
|
||||
Return _hostname.Trim()
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
Me._Hostname = value.Trim()
|
||||
If String.IsNullOrEmpty(value) Then _hostname = ""
|
||||
_hostname = value.Trim()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
@@ -384,6 +385,32 @@ Namespace Connection
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _loadBalanceInfo As String = My.Settings.ConDefaultLoadBalanceInfo
|
||||
<LocalizedCategory("strCategoryProtocol", 3), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayName("strPropertyNameLoadBalanceInfo"), _
|
||||
LocalizedDescription("strPropertyDescriptionLoadBalanceInfo")> _
|
||||
Public Property LoadBalanceInfo() As String
|
||||
Get
|
||||
If _Inherit.LoadBalanceInfo And _Parent IsNot Nothing Then
|
||||
Dim parCon As Info = TryCast(_Parent, Container.Info).ConnectionInfo
|
||||
|
||||
If _IsContainer = True Then
|
||||
Dim curCont As Container.Info = _Parent
|
||||
Dim parCont As Container.Info = curCont.Parent
|
||||
parCon = parCont.ConnectionInfo
|
||||
End If
|
||||
|
||||
Return parCon.LoadBalanceInfo.Trim()
|
||||
Else
|
||||
Return _loadBalanceInfo.Trim()
|
||||
End If
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_loadBalanceInfo = value.Trim()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _RenderingEngine As Connection.Protocol.HTTPBase.RenderingEngine = Tools.Misc.StringToEnum(GetType(mRemoteNG.Connection.Protocol.HTTPBase.RenderingEngine), My.Settings.ConDefaultRenderingEngine)
|
||||
<LocalizedCategory("strCategoryProtocol", 3), _
|
||||
Browsable(True), _
|
||||
@@ -626,6 +653,33 @@ Namespace Connection
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _automaticResize As Boolean = My.Settings.ConDefaultAutomaticResize
|
||||
<LocalizedCategory("strCategoryAppearance", 5), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayName("strPropertyNameAutomaticResize"), _
|
||||
LocalizedDescription("strPropertyDescriptionAutomaticResize"), _
|
||||
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
|
||||
Public Property AutomaticResize() As Boolean
|
||||
Get
|
||||
If _Inherit.CacheBitmaps And _Parent IsNot Nothing Then
|
||||
Dim parCon As Info = TryCast(_Parent, Container.Info).ConnectionInfo
|
||||
|
||||
If _IsContainer = True Then
|
||||
Dim curCont As Container.Info = _Parent
|
||||
Dim parCont As Container.Info = curCont.Parent
|
||||
parCon = parCont.ConnectionInfo
|
||||
End If
|
||||
|
||||
Return parCon.AutomaticResize
|
||||
Else
|
||||
Return _automaticResize
|
||||
End If
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_automaticResize = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Colors As Connection.Protocol.RDP.RDPColors = Tools.Misc.StringToEnum(GetType(Connection.Protocol.RDP.RDPColors), My.Settings.ConDefaultColors)
|
||||
<LocalizedCategory("strCategoryAppearance", 5), _
|
||||
Browsable(True), _
|
||||
@@ -1477,9 +1531,10 @@ Namespace Connection
|
||||
#End Region
|
||||
|
||||
#Region "Methods"
|
||||
Public Function Copy() As Connection.Info
|
||||
Dim newConnectionInfo As Connection.Info = MemberwiseClone()
|
||||
newConnectionInfo._OpenConnections = New Connection.Protocol.List
|
||||
Public Function Copy() As Info
|
||||
Dim newConnectionInfo As Info = MemberwiseClone()
|
||||
newConnectionInfo.ConstantID = Tools.Misc.CreateConstantID()
|
||||
newConnectionInfo._OpenConnections = New Protocol.List
|
||||
Return newConnectionInfo
|
||||
End Function
|
||||
|
||||
@@ -1543,8 +1598,8 @@ Namespace Connection
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Function Copy() As Connection.Info.Inheritance
|
||||
Return Me.MemberwiseClone
|
||||
Public Function Copy() As Inheritance
|
||||
Return MemberwiseClone()
|
||||
End Function
|
||||
|
||||
Public Sub TurnOnInheritanceCompletely()
|
||||
@@ -1848,6 +1903,21 @@ Namespace Connection
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _loadBalanceInfo As Boolean = My.Settings.InhDefaultLoadBalanceInfo
|
||||
<LocalizedCategory("strCategoryProtocol", 4), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayNameInheritAttribute("strPropertyNameLoadBalanceInfo"), _
|
||||
LocalizedDescriptionInheritAttribute("strPropertyDescriptionLoadBalanceInfo"), _
|
||||
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
|
||||
Public Property LoadBalanceInfo() As Boolean
|
||||
Get
|
||||
Return _loadBalanceInfo
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_loadBalanceInfo = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _RenderingEngine As Boolean = My.Settings.InhDefaultRenderingEngine
|
||||
<LocalizedCategory("strCategoryProtocol", 4), _
|
||||
Browsable(True), _
|
||||
@@ -2000,6 +2070,21 @@ Namespace Connection
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _automaticResize As Boolean = My.Settings.InhDefaultAutomaticResize
|
||||
<LocalizedCategory("strCategoryAppearance", 6), _
|
||||
Browsable(True), _
|
||||
LocalizedDisplayNameInheritAttribute("strPropertyNameAutomaticResize"), _
|
||||
LocalizedDescriptionInheritAttribute("strPropertyDescriptionAutomaticResize"), _
|
||||
TypeConverter(GetType(Tools.Misc.YesNoTypeConverter))> _
|
||||
Public Property AutomaticResize() As Boolean
|
||||
Get
|
||||
Return _automaticResize
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
_automaticResize = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Colors As Boolean = My.Settings.InhDefaultColors
|
||||
<LocalizedCategory("strCategoryAppearance", 6), _
|
||||
Browsable(True), _
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -73,18 +73,6 @@ Namespace Connection
|
||||
End Set
|
||||
End Property
|
||||
|
||||
'Private borderWidth As Integer = frmMain.Size.Width - frmMain.ClientSize.Width
|
||||
'Private borderHeight As Integer = frmMain.Size.Height - frmMain.ClientSize.Height
|
||||
Private Shared _BorderSize As Size
|
||||
Public Shared Property BorderSize() As Size
|
||||
Get
|
||||
Return _BorderSize
|
||||
End Get
|
||||
Set(ByVal value As Size)
|
||||
_BorderSize = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property Focused() As Boolean
|
||||
Get
|
||||
If GetForegroundWindow() = PuttyHandle Then
|
||||
@@ -120,38 +108,45 @@ Namespace Connection
|
||||
arguments.EscapeForShell = False
|
||||
|
||||
arguments.Add("-load", InterfaceControl.Info.PuttySession)
|
||||
arguments.Add("-" & _PuttyProtocol.ToString)
|
||||
|
||||
If _PuttyProtocol = Putty_Protocol.ssh Then
|
||||
Dim username As String = ""
|
||||
Dim password As String = ""
|
||||
If Not TypeOf InterfaceControl.Info Is PuttySession.Info Then
|
||||
arguments.Add("-" & _PuttyProtocol.ToString)
|
||||
|
||||
If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then
|
||||
username = InterfaceControl.Info.Username
|
||||
Else
|
||||
If My.Settings.EmptyCredentials = "windows" Then
|
||||
username = Environment.UserName
|
||||
ElseIf My.Settings.EmptyCredentials = "custom" Then
|
||||
username = My.Settings.DefaultUsername
|
||||
If _PuttyProtocol = Putty_Protocol.ssh Then
|
||||
Dim username As String = ""
|
||||
Dim password As String = ""
|
||||
|
||||
If Not String.IsNullOrEmpty(InterfaceControl.Info.Username) Then
|
||||
username = InterfaceControl.Info.Username
|
||||
Else
|
||||
If My.Settings.EmptyCredentials = "windows" Then
|
||||
username = Environment.UserName
|
||||
ElseIf My.Settings.EmptyCredentials = "custom" Then
|
||||
username = My.Settings.DefaultUsername
|
||||
End If
|
||||
End If
|
||||
|
||||
If Not String.IsNullOrEmpty(InterfaceControl.Info.Password) Then
|
||||
password = InterfaceControl.Info.Password
|
||||
Else
|
||||
If My.Settings.EmptyCredentials = "custom" Then
|
||||
password = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
End If
|
||||
End If
|
||||
|
||||
arguments.Add("-" & _PuttySSHVersion)
|
||||
If Not String.IsNullOrEmpty(username) Then
|
||||
arguments.Add("-l", username)
|
||||
End If
|
||||
If Not String.IsNullOrEmpty(password) Then
|
||||
arguments.Add("-pw", password)
|
||||
End If
|
||||
End If
|
||||
|
||||
If Not String.IsNullOrEmpty(InterfaceControl.Info.Password) Then
|
||||
password = InterfaceControl.Info.Password
|
||||
Else
|
||||
If My.Settings.EmptyCredentials = "custom" Then
|
||||
password = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
End If
|
||||
End If
|
||||
|
||||
arguments.Add("-" & _PuttySSHVersion)
|
||||
arguments.Add("-l", username)
|
||||
arguments.Add("-pw", password)
|
||||
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
|
||||
arguments.Add(InterfaceControl.Info.Hostname)
|
||||
End If
|
||||
|
||||
arguments.Add("-P", InterfaceControl.Info.Port.ToString)
|
||||
arguments.Add(InterfaceControl.Info.Hostname)
|
||||
|
||||
If _isPuttyNg Then
|
||||
arguments.Add("-hwndparent", InterfaceControl.Handle.ToString())
|
||||
End If
|
||||
@@ -252,19 +247,6 @@ Namespace Connection
|
||||
End Try
|
||||
Return isPuttyNg
|
||||
End Function
|
||||
|
||||
Public Shared Sub StartPutty()
|
||||
Try
|
||||
Dim p As Process
|
||||
Dim pSI As New ProcessStartInfo
|
||||
pSI.FileName = PuttyPath
|
||||
|
||||
p = Process.Start(pSI)
|
||||
p.WaitForExit()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strPuttyStartFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Enums"
|
||||
|
||||
@@ -3,31 +3,32 @@ Imports System.Threading
|
||||
Imports AxMSTSCLib
|
||||
Imports EOLWTSCOM
|
||||
Imports System.ComponentModel
|
||||
Imports mRemoteNG.Messages
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports mRemoteNG.Tools.LocalizedAttributes
|
||||
Imports MSTSCLib
|
||||
|
||||
Namespace Connection
|
||||
Namespace Protocol
|
||||
Public Class RDP
|
||||
Inherits Connection.Protocol.Base
|
||||
|
||||
Inherits Base
|
||||
#Region "Properties"
|
||||
Public Property SmartSize() As Boolean
|
||||
Get
|
||||
Return RDP.AdvancedSettings4.SmartSizing
|
||||
Return _rdpClient.AdvancedSettings2.SmartSizing
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
RDP.AdvancedSettings4.SmartSizing = value
|
||||
_rdpClient.AdvancedSettings2.SmartSizing = value
|
||||
ReconnectForResize()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Property Fullscreen() As Boolean
|
||||
Get
|
||||
Return RDP.FullScreen
|
||||
Return _rdpClient.FullScreen
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
RDP.FullScreen = value
|
||||
_rdpClient.FullScreen = value
|
||||
ReconnectForResize()
|
||||
End Set
|
||||
End Property
|
||||
@@ -42,8 +43,8 @@ Namespace Connection
|
||||
Try
|
||||
If Not _redirectKeys Then Return
|
||||
|
||||
Debug.Assert(RDP.SecuredSettingsEnabled)
|
||||
Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = RDP.SecuredSettings2
|
||||
Debug.Assert(_rdpClient.SecuredSettingsEnabled)
|
||||
Dim msRdpClientSecuredSettings As MSTSCLib.IMsRdpClientSecuredSettings = _rdpClient.SecuredSettings2
|
||||
msRdpClientSecuredSettings.KeyboardHookMode = 1 ' Apply key combinations at the remote server.
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectKeysFailed & vbNewLine & ex.Message, True)
|
||||
@@ -53,69 +54,73 @@ Namespace Connection
|
||||
#End Region
|
||||
|
||||
#Region "Private Declarations"
|
||||
Private RDP As AxMsRdpClient6NotSafeForScripting
|
||||
Private Info As Connection.Info
|
||||
Private RDPVersion As Version
|
||||
Private _rdpClient As MsRdpClient5NotSafeForScripting
|
||||
Private _rdpVersion As Version
|
||||
Private _connectionInfo As Info
|
||||
Private _loginComplete As Boolean
|
||||
#End Region
|
||||
|
||||
#Region "Public Methods"
|
||||
Public Sub New()
|
||||
Me.Control = New AxMsRdpClient6NotSafeForScripting
|
||||
Control = New AxMsRdpClient5NotSafeForScripting
|
||||
End Sub
|
||||
|
||||
Public Overrides Function SetProps() As Boolean
|
||||
MyBase.SetProps()
|
||||
|
||||
Try
|
||||
RDP = Me.Control
|
||||
Info = Me.InterfaceControl.Info
|
||||
Control.CreateControl()
|
||||
_connectionInfo = InterfaceControl.Info
|
||||
|
||||
Try
|
||||
RDP.CreateControl()
|
||||
|
||||
Do Until Me.RDP.Created
|
||||
Thread.Sleep(10)
|
||||
Do Until Control.Created
|
||||
Thread.Sleep(0)
|
||||
System.Windows.Forms.Application.DoEvents()
|
||||
Loop
|
||||
Catch comEx As System.Runtime.InteropServices.COMException
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpControlCreationFailed & vbNewLine & vbNewLine & comEx.Message)
|
||||
RDP.Dispose()
|
||||
|
||||
_rdpClient = CType(Control, AxMsRdpClient5NotSafeForScripting).GetOcx()
|
||||
Catch ex As Runtime.InteropServices.COMException
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpControlCreationFailed, ex)
|
||||
Control.Dispose()
|
||||
Return False
|
||||
End Try
|
||||
|
||||
Me.RDPVersion = New Version(RDP.Version)
|
||||
_rdpVersion = New Version(_rdpClient.Version)
|
||||
|
||||
RDP.Server = Me.Info.Hostname
|
||||
_rdpClient.Server = Me._connectionInfo.Hostname
|
||||
|
||||
Me.SetCredentials()
|
||||
Me.SetResolution()
|
||||
Me.RDP.FullScreenTitle = Me.Info.Name
|
||||
Me._rdpClient.FullScreenTitle = Me._connectionInfo.Name
|
||||
|
||||
'not user changeable
|
||||
RDP.AdvancedSettings2.GrabFocusOnConnect = True
|
||||
RDP.AdvancedSettings3.EnableAutoReconnect = True
|
||||
RDP.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount
|
||||
RDP.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds)
|
||||
RDP.AdvancedSettings5.AuthenticationLevel = 0
|
||||
RDP.AdvancedSettings2.EncryptionEnabled = 1
|
||||
_rdpClient.AdvancedSettings2.GrabFocusOnConnect = True
|
||||
_rdpClient.AdvancedSettings3.EnableAutoReconnect = True
|
||||
_rdpClient.AdvancedSettings3.MaxReconnectAttempts = My.Settings.RdpReconnectionCount
|
||||
_rdpClient.AdvancedSettings2.keepAliveInterval = 60000 'in milliseconds (10.000 = 10 seconds)
|
||||
_rdpClient.AdvancedSettings5.AuthenticationLevel = 0
|
||||
_rdpClient.AdvancedSettings2.EncryptionEnabled = 1
|
||||
|
||||
RDP.AdvancedSettings2.overallConnectionTimeout = 20
|
||||
_rdpClient.AdvancedSettings2.overallConnectionTimeout = 20
|
||||
|
||||
RDP.AdvancedSettings2.BitmapPeristence = Me.Info.CacheBitmaps
|
||||
RDP.AdvancedSettings7.EnableCredSspSupport = Info.UseCredSsp
|
||||
_rdpClient.AdvancedSettings2.BitmapPeristence = Me._connectionInfo.CacheBitmaps
|
||||
If _rdpVersion >= Versions.RDC61 Then
|
||||
_rdpClient.AdvancedSettings7.EnableCredSspSupport = _connectionInfo.UseCredSsp
|
||||
End If
|
||||
|
||||
Me.SetUseConsoleSession()
|
||||
Me.SetPort()
|
||||
RedirectKeys = Info.RedirectKeys
|
||||
RedirectKeys = _connectionInfo.RedirectKeys
|
||||
Me.SetRedirection()
|
||||
Me.SetAuthenticationLevel()
|
||||
Me.SetRDGateway()
|
||||
SetLoadBalanceInfo()
|
||||
Me.SetRdGateway()
|
||||
|
||||
RDP.ColorDepth = Int(Me.Info.Colors)
|
||||
_rdpClient.ColorDepth = Int(Me._connectionInfo.Colors)
|
||||
|
||||
Me.SetPerformanceFlags()
|
||||
|
||||
RDP.ConnectingText = My.Language.strConnecting
|
||||
_rdpClient.ConnectingText = My.Language.strConnecting
|
||||
|
||||
Control.Anchor = AnchorStyles.None
|
||||
|
||||
@@ -127,10 +132,11 @@ Namespace Connection
|
||||
End Function
|
||||
|
||||
Public Overrides Function Connect() As Boolean
|
||||
Me.SetEventHandlers()
|
||||
_loginComplete = False
|
||||
SetEventHandlers()
|
||||
|
||||
Try
|
||||
RDP.Connect()
|
||||
_rdpClient.Connect()
|
||||
MyBase.Connect()
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
@@ -142,7 +148,7 @@ Namespace Connection
|
||||
|
||||
Public Overrides Sub Disconnect()
|
||||
Try
|
||||
RDP.Disconnect()
|
||||
_rdpClient.Disconnect()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpDisconnectFailed & vbNewLine & ex.Message, True)
|
||||
MyBase.Close()
|
||||
@@ -167,8 +173,8 @@ Namespace Connection
|
||||
|
||||
Public Overrides Sub Focus()
|
||||
Try
|
||||
If RDP.ContainsFocus = False Then
|
||||
RDP.Focus()
|
||||
If Control.ContainsFocus = False Then
|
||||
Control.Focus()
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpFocusFailed & vbNewLine & ex.Message, True)
|
||||
@@ -208,11 +214,16 @@ Namespace Connection
|
||||
End Function
|
||||
|
||||
Private Sub ReconnectForResize()
|
||||
If RDPVersion < Versions.RDC80 Then Return
|
||||
If _rdpVersion < Versions.RDC80 Then Return
|
||||
|
||||
If Not _loginComplete Then Return
|
||||
|
||||
If Not InterfaceControl.Info.AutomaticResize Then Return
|
||||
|
||||
If Not (InterfaceControl.Info.Resolution = RDPResolutions.FitToWindow Or _
|
||||
InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Or _
|
||||
SmartSize Then Return
|
||||
InterfaceControl.Info.Resolution = RDPResolutions.Fullscreen) Then Return
|
||||
|
||||
If SmartSize Then Return
|
||||
|
||||
Dim size As Size
|
||||
If Not Fullscreen Then
|
||||
@@ -221,109 +232,104 @@ Namespace Connection
|
||||
size = Screen.FromControl(Control).Bounds.Size
|
||||
End If
|
||||
|
||||
Dim msRdpClient8 As MSTSCLib.IMsRdpClient8 = RDP.GetOcx()
|
||||
Dim msRdpClient8 As IMsRdpClient8 = _rdpClient
|
||||
msRdpClient8.Reconnect(size.Width, size.Height)
|
||||
End Sub
|
||||
|
||||
Private Sub SetRDGateway()
|
||||
Private Sub SetRdGateway()
|
||||
Try
|
||||
If RDP.TransportSettings.GatewayIsSupported = 1 Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True)
|
||||
If Info.RDGatewayUsageMethod <> RDGatewayUsageMethod.Never Then
|
||||
RDP.TransportSettings2.GatewayProfileUsageMethod = 1
|
||||
RDP.TransportSettings.GatewayUsageMethod = Info.RDGatewayUsageMethod
|
||||
RDP.TransportSettings.GatewayHostname = Info.RDGatewayHostname
|
||||
If Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then
|
||||
RDP.TransportSettings.GatewayUsername = Info.Username
|
||||
RDP.TransportSettings.GatewayPassword = Info.Password
|
||||
RDP.TransportSettings.GatewayDomain = Info.Domain
|
||||
ElseIf Info.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
|
||||
RDP.TransportSettings2.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD
|
||||
RDP.TransportSettings2.GatewayCredSharing = 0
|
||||
If _rdpClient.TransportSettings.GatewayIsSupported = 0 Then Return
|
||||
MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayIsSupported, True)
|
||||
If Not _connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Never Then
|
||||
_rdpClient.TransportSettings.GatewayUsageMethod = _connectionInfo.RDGatewayUsageMethod
|
||||
_rdpClient.TransportSettings.GatewayHostname = _connectionInfo.RDGatewayHostname
|
||||
_rdpClient.TransportSettings.GatewayProfileUsageMethod = 1 ' TSC_PROXY_PROFILE_MODE_EXPLICIT
|
||||
If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
|
||||
_rdpClient.TransportSettings.GatewayCredsSource = 1 ' TSC_PROXY_CREDS_MODE_SMARTCARD
|
||||
End If
|
||||
If _rdpVersion >= Versions.RDC61 Then
|
||||
If _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes Then
|
||||
_rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.Username
|
||||
_rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.Password
|
||||
_rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.Domain
|
||||
ElseIf _connectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard Then
|
||||
_rdpClient.TransportSettings2.GatewayCredSharing = 0
|
||||
Else
|
||||
RDP.TransportSettings.GatewayUsername = Info.RDGatewayUsername
|
||||
RDP.TransportSettings.GatewayPassword = Info.RDGatewayPassword
|
||||
RDP.TransportSettings.GatewayDomain = Info.RDGatewayDomain
|
||||
RDP.TransportSettings2.GatewayCredSharing = 0
|
||||
_rdpClient.TransportSettings2.GatewayUsername = _connectionInfo.RDGatewayUsername
|
||||
_rdpClient.TransportSettings2.GatewayPassword = _connectionInfo.RDGatewayPassword
|
||||
_rdpClient.TransportSettings2.GatewayDomain = _connectionInfo.RDGatewayDomain
|
||||
_rdpClient.TransportSettings2.GatewayCredSharing = 0
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True)
|
||||
MessageCollector.AddMessage(MessageClass.InformationMsg, My.Language.strRdpGatewayNotSupported, True)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetGatewayFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddMessage(MessageClass.ErrorMsg, My.Language.strRdpSetGatewayFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub SetUseConsoleSession()
|
||||
Try
|
||||
If (Me.Force And Connection.Info.Force.UseConsoleSession) = Connection.Info.Force.UseConsoleSession Then
|
||||
If RDPVersion < Versions.RDC61 Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
|
||||
RDP.AdvancedSettings2.ConnectToServerConsole = True
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
|
||||
RDP.AdvancedSettings6.ConnectToAdministerServer = True
|
||||
End If
|
||||
ElseIf (Me.Force And Connection.Info.Force.DontUseConsoleSession) = Connection.Info.Force.DontUseConsoleSession Then
|
||||
If RDPVersion < Versions.RDC61 Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
|
||||
RDP.AdvancedSettings2.ConnectToServerConsole = False
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
|
||||
RDP.AdvancedSettings6.ConnectToAdministerServer = False
|
||||
End If
|
||||
Dim value As Boolean
|
||||
|
||||
If (Force And Info.Force.UseConsoleSession) = Info.Force.UseConsoleSession Then
|
||||
value = True
|
||||
ElseIf (Force And Info.Force.DontUseConsoleSession) = Info.Force.DontUseConsoleSession Then
|
||||
value = False
|
||||
Else
|
||||
If RDPVersion < Versions.RDC61 Then
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
|
||||
RDP.AdvancedSettings2.ConnectToServerConsole = Me.Info.UseConsoleSession
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
|
||||
RDP.AdvancedSettings6.ConnectToAdministerServer = Me.Info.UseConsoleSession
|
||||
End If
|
||||
value = _connectionInfo.UseConsoleSession
|
||||
End If
|
||||
|
||||
If _rdpVersion >= Versions.RDC61 Then
|
||||
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.1"), True)
|
||||
_rdpClient.AdvancedSettings7.ConnectToAdministerServer = value
|
||||
Else
|
||||
MessageCollector.AddMessage(MessageClass.InformationMsg, String.Format(My.Language.strRdpSetConsoleSwitch, "6.0"), True)
|
||||
_rdpClient.AdvancedSettings2.ConnectToServerConsole = value
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetConsoleSessionFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpSetConsoleSessionFailed, ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub SetCredentials()
|
||||
Try
|
||||
Dim _user As String = Me.Info.Username
|
||||
Dim _pass As String = Me.Info.Password
|
||||
Dim _dom As String = Me.Info.Domain
|
||||
Dim userName As String = _connectionInfo.Username
|
||||
Dim password As String = _connectionInfo.Password
|
||||
Dim domain As String = _connectionInfo.Domain
|
||||
|
||||
If _user = "" Then
|
||||
If userName = "" Then
|
||||
Select Case My.Settings.EmptyCredentials
|
||||
Case "windows"
|
||||
RDP.UserName = Environment.UserName
|
||||
_rdpClient.UserName = Environment.UserName
|
||||
Case "custom"
|
||||
RDP.UserName = My.Settings.DefaultUsername
|
||||
_rdpClient.UserName = My.Settings.DefaultUsername
|
||||
End Select
|
||||
Else
|
||||
RDP.UserName = _user
|
||||
_rdpClient.UserName = userName
|
||||
End If
|
||||
|
||||
If _pass = "" Then
|
||||
If password = "" Then
|
||||
Select Case My.Settings.EmptyCredentials
|
||||
Case "custom"
|
||||
If My.Settings.DefaultPassword <> "" Then
|
||||
RDP.AdvancedSettings2.ClearTextPassword = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
_rdpClient.AdvancedSettings2.ClearTextPassword = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
End If
|
||||
End Select
|
||||
Else
|
||||
RDP.AdvancedSettings2.ClearTextPassword = _pass
|
||||
_rdpClient.AdvancedSettings2.ClearTextPassword = password
|
||||
End If
|
||||
|
||||
If _dom = "" Then
|
||||
If domain = "" Then
|
||||
Select Case My.Settings.EmptyCredentials
|
||||
Case "windows"
|
||||
RDP.Domain = Environment.UserDomainName
|
||||
_rdpClient.Domain = Environment.UserDomainName
|
||||
Case "custom"
|
||||
RDP.Domain = My.Settings.DefaultDomain
|
||||
_rdpClient.Domain = My.Settings.DefaultDomain
|
||||
End Select
|
||||
Else
|
||||
RDP.Domain = _dom
|
||||
_rdpClient.Domain = domain
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetCredentialsFailed & vbNewLine & ex.Message, True)
|
||||
@@ -333,28 +339,25 @@ Namespace Connection
|
||||
Private Sub SetResolution()
|
||||
Try
|
||||
If (Me.Force And Connection.Info.Force.Fullscreen) = Connection.Info.Force.Fullscreen Then
|
||||
RDP.FullScreen = True
|
||||
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
|
||||
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
|
||||
_rdpClient.FullScreen = True
|
||||
_rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
|
||||
_rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
|
||||
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Select Case Me.InterfaceControl.Info.Resolution
|
||||
Case RDPResolutions.FitToWindow
|
||||
RDP.DesktopWidth = Me.InterfaceControl.Size.Width
|
||||
RDP.DesktopHeight = Me.InterfaceControl.Size.Height
|
||||
Case RDPResolutions.SmartSize
|
||||
RDP.AdvancedSettings.SmartSizing = True
|
||||
RDP.DesktopWidth = Me.InterfaceControl.Size.Width
|
||||
RDP.DesktopHeight = Me.InterfaceControl.Size.Height
|
||||
Case RDPResolutions.FitToWindow, RDPResolutions.SmartSize
|
||||
_rdpClient.DesktopWidth = InterfaceControl.Size.Width
|
||||
_rdpClient.DesktopHeight = InterfaceControl.Size.Height
|
||||
Case RDPResolutions.Fullscreen
|
||||
RDP.FullScreen = True
|
||||
RDP.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
|
||||
RDP.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
|
||||
_rdpClient.FullScreen = True
|
||||
_rdpClient.DesktopWidth = Screen.FromControl(frmMain).Bounds.Width
|
||||
_rdpClient.DesktopHeight = Screen.FromControl(frmMain).Bounds.Height
|
||||
Case Else
|
||||
RDP.DesktopWidth = Resolutions.Items(Int(Me.Info.Resolution)).Width
|
||||
RDP.DesktopHeight = Resolutions.Items(Int(Me.Info.Resolution)).Height
|
||||
Dim resolution As Rectangle = GetResolutionRectangle(_connectionInfo.Resolution)
|
||||
_rdpClient.DesktopWidth = resolution.Width
|
||||
_rdpClient.DesktopHeight = resolution.Height
|
||||
End Select
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetResolutionFailed & vbNewLine & ex.Message, True)
|
||||
@@ -363,8 +366,8 @@ Namespace Connection
|
||||
|
||||
Private Sub SetPort()
|
||||
Try
|
||||
If Me.Info.Port <> Connection.Protocol.RDP.Defaults.Port Then
|
||||
RDP.AdvancedSettings2.RDPPort = Me.Info.Port
|
||||
If _connectionInfo.Port <> Defaults.Port Then
|
||||
_rdpClient.AdvancedSettings2.RDPPort = _connectionInfo.Port
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPortFailed & vbNewLine & ex.Message, True)
|
||||
@@ -373,11 +376,11 @@ Namespace Connection
|
||||
|
||||
Private Sub SetRedirection()
|
||||
Try
|
||||
RDP.AdvancedSettings2.RedirectDrives = Me.Info.RedirectDiskDrives
|
||||
RDP.AdvancedSettings2.RedirectPorts = Me.Info.RedirectPorts
|
||||
RDP.AdvancedSettings2.RedirectPrinters = Me.Info.RedirectPrinters
|
||||
RDP.AdvancedSettings2.RedirectSmartCards = Me.Info.RedirectSmartCards
|
||||
RDP.SecuredSettings2.AudioRedirectionMode = Int(Me.Info.RedirectSound)
|
||||
_rdpClient.AdvancedSettings2.RedirectDrives = Me._connectionInfo.RedirectDiskDrives
|
||||
_rdpClient.AdvancedSettings2.RedirectPorts = Me._connectionInfo.RedirectPorts
|
||||
_rdpClient.AdvancedSettings2.RedirectPrinters = Me._connectionInfo.RedirectPrinters
|
||||
_rdpClient.AdvancedSettings2.RedirectSmartCards = Me._connectionInfo.RedirectSmartCards
|
||||
_rdpClient.SecuredSettings2.AudioRedirectionMode = Int(Me._connectionInfo.RedirectSound)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetRedirectionFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
@@ -386,23 +389,23 @@ Namespace Connection
|
||||
Private Sub SetPerformanceFlags()
|
||||
Try
|
||||
Dim pFlags As Integer
|
||||
If Me.Info.DisplayThemes = False Then
|
||||
If Me._connectionInfo.DisplayThemes = False Then
|
||||
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableThemes)
|
||||
End If
|
||||
|
||||
If Me.Info.DisplayWallpaper = False Then
|
||||
If Me._connectionInfo.DisplayWallpaper = False Then
|
||||
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.DisableWallpaper)
|
||||
End If
|
||||
|
||||
If Me.Info.EnableFontSmoothing Then
|
||||
If Me._connectionInfo.EnableFontSmoothing Then
|
||||
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableFontSmoothing)
|
||||
End If
|
||||
|
||||
If Me.Info.EnableDesktopComposition Then
|
||||
If Me._connectionInfo.EnableDesktopComposition Then
|
||||
pFlags += Int(Connection.Protocol.RDP.RDPPerformanceFlags.EnableDesktopComposition)
|
||||
End If
|
||||
|
||||
RDP.AdvancedSettings.PerformanceFlags = pFlags
|
||||
_rdpClient.AdvancedSettings2.PerformanceFlags = pFlags
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetPerformanceFlagsFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
@@ -410,19 +413,29 @@ Namespace Connection
|
||||
|
||||
Private Sub SetAuthenticationLevel()
|
||||
Try
|
||||
RDP.AdvancedSettings5.AuthenticationLevel = Me.Info.RDPAuthenticationLevel
|
||||
_rdpClient.AdvancedSettings5.AuthenticationLevel = Me._connectionInfo.RDPAuthenticationLevel
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetAuthenticationLevelFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub SetLoadBalanceInfo()
|
||||
If String.IsNullOrEmpty(_connectionInfo.LoadBalanceInfo) Then Return
|
||||
Try
|
||||
_rdpClient.AdvancedSettings2.LoadBalanceInfo = _connectionInfo.LoadBalanceInfo
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage("Unable to set load balance info.", ex)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub SetEventHandlers()
|
||||
Try
|
||||
AddHandler RDP.OnConnecting, AddressOf RDPEvent_OnConnecting
|
||||
AddHandler RDP.OnConnected, AddressOf RDPEvent_OnConnected
|
||||
AddHandler RDP.OnFatalError, AddressOf RDPEvent_OnFatalError
|
||||
AddHandler RDP.OnDisconnected, AddressOf RDPEvent_OnDisconnected
|
||||
AddHandler RDP.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode
|
||||
AddHandler _rdpClient.OnConnecting, AddressOf RDPEvent_OnConnecting
|
||||
AddHandler _rdpClient.OnConnected, AddressOf RDPEvent_OnConnected
|
||||
AddHandler _rdpClient.OnLoginComplete, AddressOf RDPEvent_OnLoginComplete
|
||||
AddHandler _rdpClient.OnFatalError, AddressOf RDPEvent_OnFatalError
|
||||
AddHandler _rdpClient.OnDisconnected, AddressOf RDPEvent_OnDisconnected
|
||||
AddHandler _rdpClient.OnLeaveFullScreenMode, AddressOf RDPEvent_OnLeaveFullscreenMode
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpSetEventHandlersFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
@@ -430,15 +443,15 @@ Namespace Connection
|
||||
#End Region
|
||||
|
||||
#Region "Private Events & Handlers"
|
||||
Private Sub RDPEvent_OnFatalError(ByVal sender As Object, ByVal e As AxMSTSCLib.IMsTscAxEvents_OnFatalErrorEvent)
|
||||
MyBase.Event_ErrorOccured(Me, e.errorCode)
|
||||
Private Sub RDPEvent_OnFatalError(ByVal errorCode As Integer)
|
||||
Event_ErrorOccured(Me, errorCode)
|
||||
End Sub
|
||||
|
||||
Private Sub RDPEvent_OnDisconnected(ByVal sender As Object, ByVal e As IMsTscAxEvents_OnDisconnectedEvent)
|
||||
Private Sub RDPEvent_OnDisconnected(ByVal discReason As Integer)
|
||||
Const UI_ERR_NORMAL_DISCONNECT As Integer = &HB08
|
||||
If Not e.discReason = UI_ERR_NORMAL_DISCONNECT Then
|
||||
Dim reason As String = RDP.GetErrorDescription(e.discReason, RDP.ExtendedDisconnectReason)
|
||||
Event_Disconnected(Me, e.discReason & vbCrLf & reason)
|
||||
If Not discReason = UI_ERR_NORMAL_DISCONNECT Then
|
||||
Dim reason As String = _rdpClient.GetErrorDescription(discReason, _rdpClient.ExtendedDisconnectReason)
|
||||
Event_Disconnected(Me, discReason & vbCrLf & reason)
|
||||
End If
|
||||
|
||||
If My.Settings.ReconnectOnDisconnect Then
|
||||
@@ -453,17 +466,21 @@ Namespace Connection
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub RDPEvent_OnConnecting(ByVal sender As Object, ByVal e As System.EventArgs)
|
||||
MyBase.Event_Connecting(Me)
|
||||
Private Sub RDPEvent_OnConnecting()
|
||||
Event_Connecting(Me)
|
||||
End Sub
|
||||
|
||||
Private Sub RDPEvent_OnConnected(ByVal sender As Object, ByVal e As System.EventArgs)
|
||||
MyBase.Event_Connected(Me)
|
||||
Private Sub RDPEvent_OnConnected()
|
||||
Event_Connected(Me)
|
||||
End Sub
|
||||
|
||||
Private Sub RDPEvent_OnLeaveFullscreenMode(ByVal sender As Object, ByVal e As System.EventArgs)
|
||||
Private Sub RDPEvent_OnLoginComplete()
|
||||
_loginComplete = True
|
||||
End Sub
|
||||
|
||||
Private Sub RDPEvent_OnLeaveFullscreenMode()
|
||||
Fullscreen = False
|
||||
RaiseEvent LeaveFullscreen(Me, e)
|
||||
RaiseEvent LeaveFullscreen(Me, New EventArgs())
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
@@ -594,82 +611,19 @@ Namespace Connection
|
||||
#End Region
|
||||
|
||||
#Region "Resolution"
|
||||
Public Class Resolution
|
||||
Private _Width As Integer
|
||||
Public Property Width() As Integer
|
||||
Get
|
||||
Return Me._Width
|
||||
End Get
|
||||
Set(ByVal value As Integer)
|
||||
Me._Width = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _Height As Integer
|
||||
Public Property Height() As Integer
|
||||
Get
|
||||
Return Me._Height
|
||||
End Get
|
||||
Set(ByVal value As Integer)
|
||||
Me._Height = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Sub New(ByVal Width As Integer, ByVal Height As Integer)
|
||||
Me._Width = Width
|
||||
Me._Height = Height
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
Public Class Resolutions
|
||||
Public Shared List As New Collection
|
||||
|
||||
Public Shared Sub AddResolutions()
|
||||
Try
|
||||
For Each RDPResolution As RDPResolutions In [Enum].GetValues(GetType(RDPResolutions))
|
||||
If RDPResolution = RDPResolutions.FitToWindow Or RDPResolution = RDPResolutions.SmartSize Or RDPResolution = RDPResolutions.Fullscreen Then
|
||||
Resolutions.Add(New Resolution(0, 0))
|
||||
Else
|
||||
Dim ResSize() As String = Split([Enum].GetName(GetType(RDPResolutions), RDPResolution), "x")
|
||||
Dim ResWidth As String = ResSize(0).Substring(3)
|
||||
Dim ResHeight As String = ResSize(1)
|
||||
Resolutions.Add(New Resolution(ResWidth, ResHeight))
|
||||
End If
|
||||
Next
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddResolutionsFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Public Shared ReadOnly Property Items(ByVal Index As Object) As Resolution
|
||||
Get
|
||||
If TypeOf Index Is Resolution Then
|
||||
Return Index
|
||||
Else
|
||||
Return CType(List.Item(Index + 1), Resolution)
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly Property ItemsCount() As Integer
|
||||
Get
|
||||
Return List.Count
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Shared Function Add(ByVal nRes As Resolution) As Resolution
|
||||
Try
|
||||
List.Add(nRes)
|
||||
|
||||
Return nRes
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddResolutionFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
|
||||
Return Nothing
|
||||
End Function
|
||||
End Class
|
||||
Public Shared Function GetResolutionRectangle(ByVal resolution As RDPResolutions) As Rectangle
|
||||
Dim resolutionParts() As String = Nothing
|
||||
If Not resolution = RDPResolutions.FitToWindow And _
|
||||
Not resolution = RDPResolutions.Fullscreen And _
|
||||
Not resolution = RDPResolutions.SmartSize Then
|
||||
resolutionParts = resolution.ToString.Replace("Res", "").Split("x")
|
||||
End If
|
||||
If resolutionParts Is Nothing OrElse Not resolutionParts.Length = 2 Then
|
||||
Return New Rectangle(0, 0, 0, 0)
|
||||
Else
|
||||
Return New Rectangle(0, 0, resolutionParts(0), resolutionParts(1))
|
||||
End If
|
||||
End Function
|
||||
#End Region
|
||||
|
||||
Public Class Versions
|
||||
@@ -681,77 +635,91 @@ Namespace Connection
|
||||
|
||||
#Region "Terminal Sessions"
|
||||
Public Class TerminalSessions
|
||||
Dim oWTSCOM As New WTSCOM
|
||||
Dim oWTSSessions As New WTSSessions
|
||||
Dim oWTSSession As New WTSSession
|
||||
Public ServerHandle As Long
|
||||
Private ReadOnly _wtsCom As WTSCOM
|
||||
|
||||
Public Function OpenConnection(ByVal SrvName As String) As Boolean
|
||||
Public Sub New()
|
||||
Try
|
||||
ServerHandle = oWTSCOM.WTSOpenServer(SrvName)
|
||||
|
||||
If ServerHandle <> 0 Then
|
||||
Return True
|
||||
End If
|
||||
_wtsCom = New WTSCOM
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpOpenConnectionFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
|
||||
Return False
|
||||
End Function
|
||||
|
||||
Public Sub CloseConnection(ByVal SrvHandle As Long)
|
||||
Try
|
||||
oWTSCOM.WTSCloseServer(ServerHandle)
|
||||
ServerHandle = 0
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpCloseConnectionFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage("TerminalSessions.New() failed.", ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Function GetSessions() As Sessions
|
||||
Dim colSessions As New Sessions
|
||||
Public Function OpenConnection(ByVal hostname As String) As Long
|
||||
If _wtsCom Is Nothing Then Return 0
|
||||
|
||||
Try
|
||||
oWTSSessions = oWTSCOM.WTSEnumerateSessions(ServerHandle)
|
||||
Return _wtsCom.WTSOpenServer(hostname)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpOpenConnectionFailed, ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Dim SessionID As Long
|
||||
Dim SessionUser As String
|
||||
Dim SessionState As Long
|
||||
Dim SessionName As String
|
||||
Public Sub CloseConnection(ByVal serverHandle As Long)
|
||||
If _wtsCom Is Nothing Then Return
|
||||
|
||||
For Each oWTSSession In oWTSSessions
|
||||
SessionID = oWTSSession.SessionId
|
||||
SessionUser = oWTSCOM.WTSQuerySessionInformation(ServerHandle, oWTSSession.SessionId, 5) 'WFUsername = 5
|
||||
SessionState = oWTSSession.State & vbCrLf
|
||||
SessionName = oWTSSession.WinStationName & vbCrLf
|
||||
Try
|
||||
_wtsCom.WTSCloseServer(serverHandle)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpCloseConnectionFailed, ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
If SessionUser <> "" Then
|
||||
If SessionState = 0 Then
|
||||
colSessions.Add(SessionID, My.Language.strActive, SessionUser, SessionName)
|
||||
Public Function GetSessions(ByVal serverHandle As Long) As SessionsCollection
|
||||
If _wtsCom Is Nothing Then Return New SessionsCollection()
|
||||
|
||||
Dim sessions As New SessionsCollection()
|
||||
|
||||
Try
|
||||
Dim wtsSessions As WTSSessions = _wtsCom.WTSEnumerateSessions(serverHandle)
|
||||
|
||||
Dim sessionId As Long
|
||||
Dim sessionUser As String
|
||||
Dim sessionState As Long
|
||||
Dim sessionName As String
|
||||
|
||||
For Each wtsSession As WTSSession In wtsSessions
|
||||
sessionId = wtsSession.SessionId
|
||||
sessionUser = _wtsCom.WTSQuerySessionInformation(serverHandle, wtsSession.SessionId, 5) ' WFUsername = 5
|
||||
sessionState = wtsSession.State & vbCrLf
|
||||
sessionName = wtsSession.WinStationName & vbCrLf
|
||||
|
||||
If Not String.IsNullOrEmpty(sessionUser) Then
|
||||
If sessionState = 0 Then
|
||||
sessions.Add(sessionId, My.Language.strActive, sessionUser, sessionName)
|
||||
Else
|
||||
colSessions.Add(SessionID, My.Language.strInactive, SessionUser, SessionName)
|
||||
sessions.Add(sessionId, My.Language.strInactive, sessionUser, sessionName)
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpGetSessionsFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpGetSessionsFailed, ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
|
||||
Return colSessions
|
||||
Return sessions
|
||||
End Function
|
||||
|
||||
Public Function KillSession(ByVal SessionID As Long) As Boolean
|
||||
Return oWTSCOM.WTSLogoffSession(ServerHandle, SessionID, True)
|
||||
Public Function KillSession(ByVal serverHandle As Long, ByVal sessionId As Long) As Boolean
|
||||
If _wtsCom Is Nothing Then Return False
|
||||
|
||||
Dim result As Boolean = False
|
||||
|
||||
Try
|
||||
result = _wtsCom.WTSLogoffSession(serverHandle, sessionId, True)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage("TerminalSessions.KillSession() failed.", ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
|
||||
Return result
|
||||
End Function
|
||||
End Class
|
||||
|
||||
Public Class Sessions
|
||||
Public Class SessionsCollection
|
||||
Inherits CollectionBase
|
||||
|
||||
Default Public ReadOnly Property Items(ByVal Index As Integer) As Session
|
||||
Default Public ReadOnly Property Items(ByVal index As Integer) As Session
|
||||
Get
|
||||
Return CType(List.Item(Index), Session)
|
||||
Return CType(List.Item(index), Session)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
@@ -761,23 +729,23 @@ Namespace Connection
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Function Add(ByVal SessionID As Long, ByVal SessionState As String, ByVal SessionUser As String, ByVal SessionName As String) As Session
|
||||
Dim newSes As New Session
|
||||
Public Overloads Function Add(ByVal sessionId As Long, ByVal sessionState As String, ByVal sessionUser As String, ByVal sessionName As String) As Session
|
||||
Dim newSession As New Session
|
||||
|
||||
Try
|
||||
With newSes
|
||||
.SessionID = SessionID
|
||||
.SessionState = SessionState
|
||||
.SessionUser = SessionUser
|
||||
.SessionName = SessionName
|
||||
With newSession
|
||||
.SessionId = sessionId
|
||||
.SessionState = sessionState
|
||||
.SessionUser = sessionUser
|
||||
.SessionName = sessionName
|
||||
End With
|
||||
|
||||
List.Add(newSes)
|
||||
List.Add(newSession)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strRdpAddSessionFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage(My.Language.strRdpAddSessionFailed, ex, MessageClass.ErrorMsg, True)
|
||||
End Try
|
||||
|
||||
Return newSes
|
||||
Return newSession
|
||||
End Function
|
||||
|
||||
Public Sub ClearSessions()
|
||||
@@ -788,45 +756,10 @@ Namespace Connection
|
||||
Public Class Session
|
||||
Inherits CollectionBase
|
||||
|
||||
Private lngSessionID As Long
|
||||
Public Property SessionID() As Long
|
||||
Get
|
||||
Return lngSessionID
|
||||
End Get
|
||||
Set(ByVal Value As Long)
|
||||
lngSessionID = Value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private lngSessionState As String
|
||||
Public Property SessionId() As Long
|
||||
Public Property SessionState() As String
|
||||
Get
|
||||
Return lngSessionState
|
||||
End Get
|
||||
Set(ByVal Value As String)
|
||||
lngSessionState = Value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private strSessionUser As String
|
||||
Public Property SessionUser() As String
|
||||
Get
|
||||
Return strSessionUser
|
||||
End Get
|
||||
Set(ByVal Value As String)
|
||||
strSessionUser = Value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private strSessionName As String
|
||||
Public Property SessionName() As String
|
||||
Get
|
||||
Return strSessionName
|
||||
End Get
|
||||
Set(ByVal Value As String)
|
||||
strSessionName = Value
|
||||
End Set
|
||||
End Property
|
||||
End Class
|
||||
#End Region
|
||||
|
||||
@@ -857,7 +790,7 @@ Namespace Connection
|
||||
|
||||
#Region "Reconnect Stuff"
|
||||
Private Sub tmrReconnect_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmrReconnect.Elapsed
|
||||
Dim srvReady As Boolean = Tools.PortScan.Scanner.IsPortOpen(Info.Hostname, Info.Port)
|
||||
Dim srvReady As Boolean = Tools.PortScan.Scanner.IsPortOpen(_connectionInfo.Hostname, _connectionInfo.Port)
|
||||
|
||||
ReconnectGroup.ServerReady = srvReady
|
||||
|
||||
@@ -865,7 +798,7 @@ Namespace Connection
|
||||
tmrReconnect.Enabled = False
|
||||
ReconnectGroup.DisposeReconnectGroup()
|
||||
'SetProps()
|
||||
RDP.Connect()
|
||||
_rdpClient.Connect()
|
||||
End If
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
@@ -1,10 +1,36 @@
|
||||
Imports System.ComponentModel
|
||||
Imports mRemoteNG.Messages
|
||||
Imports mRemoteNG.Tools.LocalizedAttributes
|
||||
Imports mRemoteNG.My
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports mRemoteNG.Tools
|
||||
|
||||
Namespace Connection
|
||||
Namespace PuttySession
|
||||
Public Class Info
|
||||
Inherits Connection.Info
|
||||
Implements IComponent
|
||||
|
||||
#Region "Commands"
|
||||
<Command(),
|
||||
LocalizedDisplayName("strPuttySessionSettings")> _
|
||||
Public Sub SessionSettings()
|
||||
Try
|
||||
Dim puttyProcess As New PuttyProcessController
|
||||
If Not puttyProcess.Start() Then Return
|
||||
If puttyProcess.SelectListBoxItem(PuttySession) Then
|
||||
puttyProcess.ClickButton("&Load")
|
||||
End If
|
||||
puttyProcess.SetControlText("Button", "&Cancel", "&Close")
|
||||
puttyProcess.SetControlVisible("Button", "&Open", False)
|
||||
puttyProcess.WaitForExit()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.strErrorCouldNotLaunchPutty & vbNewLine & ex.Message, False)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Properties"
|
||||
<Browsable(False)> _
|
||||
Public Property RootPuttySessionsInfo() As Root.PuttySessions.Info
|
||||
|
||||
@@ -71,6 +97,24 @@ Namespace Connection
|
||||
<[ReadOnly](True), _
|
||||
Browsable(False)> _
|
||||
Public Overrides Property UserField() As String
|
||||
#End Region
|
||||
|
||||
#Region "IComponent"
|
||||
Public Property Site() As ISite Implements IComponent.Site
|
||||
Get
|
||||
Return New PropertyGridCommandSite(Me)
|
||||
End Get
|
||||
Set(value As ISite)
|
||||
Throw New NotImplementedException()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Sub Dispose() Implements IDisposable.Dispose
|
||||
RaiseEvent Disposed(Me, EventArgs.Empty)
|
||||
End Sub
|
||||
|
||||
Public Event Disposed As EventHandler Implements IComponent.Disposed
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
|
||||
@@ -6,7 +6,6 @@ Namespace Container
|
||||
<DefaultProperty("Name")> _
|
||||
Public Class Info
|
||||
#Region "Properties"
|
||||
Private _Name As String = "New Container"
|
||||
<LocalizedCategory("strCategoryDisplay", 1), _
|
||||
Browsable(True), _
|
||||
[ReadOnly](False), _
|
||||
@@ -18,10 +17,10 @@ Namespace Container
|
||||
Attributes.Container()> _
|
||||
Public Property Name() As String
|
||||
Get
|
||||
Return Me._ConnectionInfo.Name
|
||||
Return ConnectionInfo.Name
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
Me._ConnectionInfo.Name = value
|
||||
ConnectionInfo.Name = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
|
||||
7
mRemoteV1/Forms/frmMain.Designer.vb
generated
7
mRemoteV1/Forms/frmMain.Designer.vb
generated
@@ -120,7 +120,6 @@ Partial Class frmMain
|
||||
Me.ToolStripSplitButton1 = New System.Windows.Forms.ToolStripDropDownButton
|
||||
Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem
|
||||
Me.ToolStripMenuItem2 = New System.Windows.Forms.ToolStripMenuItem
|
||||
Me.tmrShowUpdate = New System.Windows.Forms.Timer(Me.components)
|
||||
Me.tmrAutoSave = New System.Windows.Forms.Timer(Me.components)
|
||||
Me.msMain.SuspendLayout()
|
||||
Me.tsContainer.ContentPanel.SuspendLayout()
|
||||
@@ -793,11 +792,6 @@ Partial Class frmMain
|
||||
Me.ToolStripMenuItem2.Size = New System.Drawing.Size(135, 22)
|
||||
Me.ToolStripMenuItem2.Text = "Ctrl-Esc"
|
||||
'
|
||||
'tmrShowUpdate
|
||||
'
|
||||
Me.tmrShowUpdate.Enabled = True
|
||||
Me.tmrShowUpdate.Interval = 5000
|
||||
'
|
||||
'tmrAutoSave
|
||||
'
|
||||
Me.tmrAutoSave.Interval = 10000
|
||||
@@ -860,7 +854,6 @@ Partial Class frmMain
|
||||
Friend WithEvents mMenViewFullscreen As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents mMenToolsSSHTransfer As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents tsContainer As System.Windows.Forms.ToolStripContainer
|
||||
Friend WithEvents tmrShowUpdate As System.Windows.Forms.Timer
|
||||
Friend WithEvents mMenToolsExternalApps As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents tmrAutoSave As System.Windows.Forms.Timer
|
||||
Friend WithEvents tsExternalTools As System.Windows.Forms.ToolStrip
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
Imports System.IO
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports System.Reflection
|
||||
@@ -23,16 +22,18 @@ Public Class frmMain
|
||||
Private fpChainedWindowHandle As IntPtr
|
||||
|
||||
#Region "Properties"
|
||||
Private _IsClosing As Boolean = False
|
||||
Private _isClosing As Boolean = False
|
||||
Public ReadOnly Property IsClosing() As Boolean
|
||||
Get
|
||||
Return _IsClosing
|
||||
Return _isClosing
|
||||
End Get
|
||||
End Property
|
||||
#End Region
|
||||
|
||||
#Region "Startup & Shutdown"
|
||||
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
|
||||
MainForm = Me
|
||||
|
||||
Startup.CheckCompatibility()
|
||||
|
||||
Startup.CreateLogger()
|
||||
@@ -56,17 +57,22 @@ Public Class frmMain
|
||||
|
||||
MessageCollector = New Messages.Collector(Windows.errorsForm)
|
||||
|
||||
Connection.Protocol.RDP.Resolutions.AddResolutions()
|
||||
Connection.Protocol.PuttyBase.BorderSize = New Size(SystemInformation.FrameBorderSize.Width, SystemInformation.CaptionHeight + SystemInformation.FrameBorderSize.Height) 'Size.Subtract(Me.Size, Me.ClientSize)
|
||||
|
||||
WindowList = New UI.Window.List
|
||||
|
||||
Tools.IeBrowserEmulation.Register()
|
||||
|
||||
Startup.GetConnectionIcons()
|
||||
App.Runtime.GetExtApps()
|
||||
GetExtApps()
|
||||
Windows.treePanel.Focus()
|
||||
|
||||
Tree.Node.TreeView = Windows.treeForm.tvConnections
|
||||
|
||||
If My.Settings.FirstStart And _
|
||||
Not My.Settings.LoadConsFromCustomLocation And _
|
||||
Not IO.File.Exists(GetStartupConnectionFileName()) Then
|
||||
NewConnections(GetStartupConnectionFileName())
|
||||
End If
|
||||
|
||||
'LoadCredentials()
|
||||
LoadConnections()
|
||||
If Not IsConnectionsFileLoaded Then
|
||||
@@ -74,27 +80,13 @@ Public Class frmMain
|
||||
Return
|
||||
End If
|
||||
|
||||
PuttySessions.AddSessionsToTree(Tree.Node.TreeView)
|
||||
PuttySessions.StartWatcher()
|
||||
|
||||
If My.Settings.StartupComponentsCheck Then
|
||||
Windows.Show(UI.Window.Type.ComponentsCheck)
|
||||
End If
|
||||
|
||||
#If Not PORTABLE Then
|
||||
If Not My.Settings.CheckForUpdatesAsked Then
|
||||
Dim CommandButtons() As String = {My.Language.strAskUpdatesCommandRecommended, My.Language.strAskUpdatesCommandCustom, My.Language.strAskUpdatesCommandAskLater}
|
||||
cTaskDialog.ShowTaskDialogBox(Me, My.Application.Info.ProductName, My.Language.strAskUpdatesMainInstruction, String.Format(My.Language.strAskUpdatesContent, My.Application.Info.ProductName), "", "", "", "", String.Join("|", CommandButtons), eTaskDialogButtons.None, eSysIcons.Question, eSysIcons.Question)
|
||||
If cTaskDialog.CommandButtonResult = 0 Or cTaskDialog.CommandButtonResult = 1 Then
|
||||
My.Settings.CheckForUpdatesAsked = True
|
||||
End If
|
||||
If cTaskDialog.CommandButtonResult = 1 Then
|
||||
Windows.ShowUpdatesTab()
|
||||
End If
|
||||
End If
|
||||
|
||||
Startup.UpdateCheck()
|
||||
Startup.AnnouncementCheck()
|
||||
#Else
|
||||
#If PORTABLE Then
|
||||
mMenInfoAnnouncements.Visible = False
|
||||
mMenToolsUpdate.Visible = False
|
||||
mMenInfoSep2.Visible = False
|
||||
@@ -198,7 +190,7 @@ Public Class frmMain
|
||||
End With
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
|
||||
Private Shared Sub ApplyMenuColors(itemCollection As ToolStripItemCollection)
|
||||
With ThemeManager.ActiveTheme
|
||||
Dim menuItem As ToolStripMenuItem
|
||||
For Each item As ToolStripItem In itemCollection
|
||||
@@ -213,6 +205,32 @@ Public Class frmMain
|
||||
End With
|
||||
End Sub
|
||||
|
||||
Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
||||
#If PORTABLE Then
|
||||
Return
|
||||
#End If
|
||||
If Not My.Settings.CheckForUpdatesAsked Then
|
||||
Dim commandButtons() As String = {My.Language.strAskUpdatesCommandRecommended, My.Language.strAskUpdatesCommandCustom, My.Language.strAskUpdatesCommandAskLater}
|
||||
cTaskDialog.ShowTaskDialogBox(Me, My.Application.Info.ProductName, My.Language.strAskUpdatesMainInstruction, String.Format(My.Language.strAskUpdatesContent, My.Application.Info.ProductName), "", "", "", "", String.Join("|", commandButtons), eTaskDialogButtons.None, eSysIcons.Question, eSysIcons.Question)
|
||||
If cTaskDialog.CommandButtonResult = 0 Or cTaskDialog.CommandButtonResult = 1 Then
|
||||
My.Settings.CheckForUpdatesAsked = True
|
||||
End If
|
||||
If cTaskDialog.CommandButtonResult = 1 Then
|
||||
Windows.ShowUpdatesTab()
|
||||
End If
|
||||
Return
|
||||
End If
|
||||
|
||||
If Not My.Settings.CheckForUpdatesOnStartup Then Return
|
||||
|
||||
Dim nextUpdateCheck As Date = My.Settings.CheckForUpdatesLastCheck.Add(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays))
|
||||
If My.Settings.UpdatePending Or Date.UtcNow > nextUpdateCheck Then
|
||||
If Not IsHandleCreated Then CreateHandle() ' Make sure the handle is created so that InvokeRequired returns the correct result
|
||||
Startup.CheckForUpdate()
|
||||
Startup.CheckForAnnouncement()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub frmMain_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
|
||||
If Not (WindowList Is Nothing OrElse WindowList.Count = 0) Then
|
||||
Dim connectionWindow As UI.Window.Connection
|
||||
@@ -234,14 +252,14 @@ Public Class frmMain
|
||||
End If
|
||||
If result = DialogResult.No Then
|
||||
e.Cancel = True
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Shutdown.BeforeQuit()
|
||||
Shutdown.Cleanup()
|
||||
|
||||
_IsClosing = True
|
||||
_isClosing = True
|
||||
|
||||
If WindowList IsNot Nothing Then
|
||||
For Each window As UI.Window.Base In WindowList
|
||||
@@ -249,30 +267,13 @@ Public Class frmMain
|
||||
Next
|
||||
End If
|
||||
|
||||
Shutdown.StartUpdate()
|
||||
|
||||
Debug.Print("[END] - " & Now)
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Timer"
|
||||
Private tmrRuns As Integer = 0
|
||||
Private Sub tmrShowUpdate_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrShowUpdate.Tick
|
||||
If tmrRuns = 5 Then
|
||||
Me.tmrShowUpdate.Enabled = False
|
||||
End If
|
||||
|
||||
If App.Runtime.IsUpdateAvailable Then
|
||||
App.Runtime.Windows.Show(UI.Window.Type.Update)
|
||||
Me.tmrShowUpdate.Enabled = False
|
||||
End If
|
||||
|
||||
If App.Runtime.IsAnnouncementAvailable Then
|
||||
App.Runtime.Windows.Show(UI.Window.Type.Announcement)
|
||||
Me.tmrShowUpdate.Enabled = False
|
||||
End If
|
||||
|
||||
tmrRuns += 1
|
||||
End Sub
|
||||
|
||||
Private Sub tmrAutoSave_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAutoSave.Tick
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Doing AutoSave", True)
|
||||
App.Runtime.SaveConnections()
|
||||
@@ -286,8 +287,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()
|
||||
|
||||
@@ -589,14 +590,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
|
||||
|
||||
@@ -742,7 +739,7 @@ Public Class frmMain
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Sub AddNodeToMenu(ByVal tnc As TreeNodeCollection, ByVal menToolStrip As ToolStripMenuItem)
|
||||
Private Shared Sub AddNodeToMenu(ByVal tnc As TreeNodeCollection, ByVal menToolStrip As ToolStripMenuItem)
|
||||
Try
|
||||
For Each tNode As TreeNode In tnc
|
||||
Dim tMenItem As New ToolStripMenuItem()
|
||||
@@ -763,16 +760,16 @@ Public Class frmMain
|
||||
menToolStrip.DropDownItems.Add(tMenItem)
|
||||
End If
|
||||
|
||||
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown
|
||||
AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
|
||||
Next
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub ConMenItem_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
|
||||
Private Shared Sub ConMenItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
|
||||
If e.Button = MouseButtons.Left Then
|
||||
If TypeOf sender.Tag Is mRemoteNG.Connection.Info Then
|
||||
If TypeOf sender.Tag Is Connection.Info Then
|
||||
App.Runtime.OpenConnection(sender.Tag)
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
Imports System.IO
|
||||
Imports System.ComponentModel
|
||||
Imports mRemoteNG.Messages
|
||||
Imports mRemoteNG.My
|
||||
Imports mRemoteNG.Tools
|
||||
Imports PSTaskDialog
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports mRemoteNG.Themes
|
||||
@@ -1489,6 +1492,7 @@ Public Class frmOptions
|
||||
Me.ThemePropertyGrid.Name = "ThemePropertyGrid"
|
||||
Me.ThemePropertyGrid.Size = New System.Drawing.Size(596, 426)
|
||||
Me.ThemePropertyGrid.TabIndex = 3
|
||||
Me.ThemePropertyGrid.UseCompatibleTextRendering = True
|
||||
'
|
||||
'frmOptions
|
||||
'
|
||||
@@ -1646,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
|
||||
@@ -1779,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
|
||||
@@ -1804,11 +1810,7 @@ Public Class frmOptions
|
||||
ThemeManager.SaveThemes(_themeList)
|
||||
Settings.ThemeName = ThemeManager.ActiveTheme.Name
|
||||
|
||||
If My.Settings.LoadConsFromCustomLocation = False Then
|
||||
App.Runtime.SetMainFormText(App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile)
|
||||
Else
|
||||
App.Runtime.SetMainFormText(My.Settings.CustomConsPath)
|
||||
End If
|
||||
SetMainFormText(GetStartupConnectionFileName())
|
||||
|
||||
App.Runtime.Startup.DestroySQLUpdateHandlerAndStopTimer()
|
||||
|
||||
@@ -1822,8 +1824,9 @@ Public Class frmOptions
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Variables"
|
||||
#Region "Private Fields"
|
||||
Private _initialTab As Integer = 0
|
||||
Private _appUpdate As App.Update
|
||||
Private _themeList As BindingList(Of ThemeInfo)
|
||||
Private _originalTheme As ThemeInfo
|
||||
#End Region
|
||||
@@ -2005,26 +2008,70 @@ Public Class frmOptions
|
||||
End Sub
|
||||
|
||||
Private Sub chkUseCustomPuttyPath_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseCustomPuttyPath.CheckedChanged
|
||||
Me.txtCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked
|
||||
Me.btnBrowseCustomPuttyPath.Enabled = Me.chkUseCustomPuttyPath.Checked
|
||||
txtCustomPuttyPath.Enabled = chkUseCustomPuttyPath.Checked
|
||||
btnBrowseCustomPuttyPath.Enabled = chkUseCustomPuttyPath.Checked
|
||||
SetPuttyLaunchButtonEnabled()
|
||||
End Sub
|
||||
|
||||
Private Sub txtCustomPuttyPath_TextChanged(sender As Object, e As System.EventArgs) Handles txtCustomPuttyPath.TextChanged
|
||||
SetPuttyLaunchButtonEnabled()
|
||||
End Sub
|
||||
|
||||
Private Sub btnBrowseCustomPuttyPath_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnBrowseCustomPuttyPath.Click
|
||||
Using openFileDialog As New OpenFileDialog()
|
||||
With openFileDialog
|
||||
.Filter = String.Format("{0}|*.exe|{1}|*.*", Language.strFilterApplication, Language.strFilterAll)
|
||||
.FileName = Path.GetFileName(App.Info.General.PuttyPath)
|
||||
.CheckFileExists = True
|
||||
.Multiselect = False
|
||||
|
||||
If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
||||
txtCustomPuttyPath.Text = .FileName
|
||||
SetPuttyLaunchButtonEnabled()
|
||||
End If
|
||||
End With
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
Private Sub SetPuttyLaunchButtonEnabled()
|
||||
Dim puttyPath As String
|
||||
If chkUseCustomPuttyPath.Checked Then
|
||||
puttyPath = txtCustomPuttyPath.Text
|
||||
Else
|
||||
puttyPath = App.Info.General.PuttyPath
|
||||
End If
|
||||
|
||||
Dim exists As Boolean = False
|
||||
Try
|
||||
exists = File.Exists(puttyPath)
|
||||
Catch
|
||||
End Try
|
||||
|
||||
If exists Then
|
||||
lblConfigurePuttySessions.Enabled = True
|
||||
btnLaunchPutty.Enabled = True
|
||||
Else
|
||||
lblConfigurePuttySessions.Enabled = False
|
||||
btnLaunchPutty.Enabled = False
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub btnLaunchPutty_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaunchPutty.Click
|
||||
mRemoteNG.Connection.Protocol.PuttyBase.StartPutty()
|
||||
End Sub
|
||||
|
||||
Private Sub btnBrowseCustomPuttyPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseCustomPuttyPath.Click
|
||||
Dim oDlg As New OpenFileDialog()
|
||||
oDlg.Filter = My.Language.strFilterApplication & "|*.exe|" & My.Language.strFilterAll & "|*.*"
|
||||
oDlg.FileName = "PuTTYNG.exe"
|
||||
oDlg.CheckFileExists = True
|
||||
oDlg.Multiselect = False
|
||||
|
||||
If oDlg.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
||||
Me.txtCustomPuttyPath.Text = oDlg.FileName
|
||||
End If
|
||||
|
||||
oDlg.Dispose()
|
||||
Try
|
||||
Dim puttyProcess As New PuttyProcessController
|
||||
Dim fileName As String
|
||||
If chkUseCustomPuttyPath.Checked Then
|
||||
fileName = txtCustomPuttyPath.Text
|
||||
Else
|
||||
fileName = App.Info.General.PuttyPath
|
||||
End If
|
||||
puttyProcess.Start(fileName)
|
||||
puttyProcess.SetControlText("Button", "&Cancel", "&Close")
|
||||
puttyProcess.SetControlVisible("Button", "&Open", False)
|
||||
puttyProcess.WaitForExit()
|
||||
Catch ex As Exception
|
||||
cTaskDialog.MessageBox(Application.Info.ProductName, Language.strErrorCouldNotLaunchPutty, "", ex.Message, "", "", eTaskDialogButtons.OK, eSysIcons.Error, Nothing)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub btnBrowseXulRunnerPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseXulRunnerPath.Click
|
||||
@@ -2063,14 +2110,41 @@ Public Class frmOptions
|
||||
End Sub
|
||||
|
||||
Private Sub btnTestProxy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTestProxy.Click
|
||||
SaveOptions()
|
||||
Dim ud As New App.Update()
|
||||
|
||||
If ud.IsProxyOK Then
|
||||
MsgBox(My.Language.strProxyTestSucceeded, MsgBoxStyle.Information)
|
||||
Else
|
||||
MsgBox(My.Language.strProxyTestFailed, MsgBoxStyle.Exclamation)
|
||||
If _appUpdate IsNot Nothing Then
|
||||
If _appUpdate.IsGetUpdateInfoRunning Then Return
|
||||
End If
|
||||
|
||||
_appUpdate = New App.Update
|
||||
_appUpdate.SetProxySettings(chkUseProxyForAutomaticUpdates.Checked, txtProxyAddress.Text, numProxyPort.Value, chkUseProxyAuthentication.Checked, txtProxyUsername.Text, txtProxyPassword.Text)
|
||||
|
||||
btnTestProxy.Enabled = False
|
||||
btnTestProxy.Text = Language.strOptionsProxyTesting
|
||||
|
||||
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
|
||||
_appUpdate.GetUpdateInfoAsync()
|
||||
End Sub
|
||||
|
||||
Private Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
|
||||
If InvokeRequired Then
|
||||
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted)
|
||||
Invoke(myDelegate, New Object() {sender, e})
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
|
||||
btnTestProxy.Enabled = True
|
||||
btnTestProxy.Text = Language.strButtonTestProxy
|
||||
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
cTaskDialog.ShowCommandBox(Me, Application.Info.ProductName, Language.strProxyTestSucceeded, "", Language.strButtonOK, False)
|
||||
Catch ex As Exception
|
||||
cTaskDialog.ShowCommandBox(Me, Application.Info.ProductName, Language.strProxyTestFailed, Misc.GetExceptionMessageRecursive(ex), "", "", "", Language.strButtonOK, False, eSysIcons.Error, 0)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub chkUseProxyAuthentication_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkUseProxyAuthentication.CheckedChanged
|
||||
|
||||
@@ -118,7 +118,11 @@ CREATE TABLE [dbo].[tblCons] (
|
||||
[InheritRDGatewayUseConnectionCredentials] [bit] NOT NULL ,
|
||||
[InheritRDGatewayUsername] [bit] NOT NULL ,
|
||||
[InheritRDGatewayPassword] [bit] NOT NULL ,
|
||||
[InheritRDGatewayDomain] [bit] NOT NULL
|
||||
[InheritRDGatewayDomain] [bit] NOT NULL ,
|
||||
[LoadBalanceInfo] [varchar] (1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
|
||||
[AutomaticResize] [bit] NOT NULL DEFAULT 1 ,
|
||||
[InheritLoadBalanceInfo] [bit] NOT NULL DEFAULT 0 ,
|
||||
[InheritAutomaticResize] [bit] NOT NULL DEFAULT 0
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
@@ -131,7 +135,7 @@ CREATE TABLE [dbo].[tblRoot] (
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[tblUpdate] (
|
||||
[LastUpdate] [datetime] NULL
|
||||
[LastUpdate] [datetime] NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
|
||||
192
mRemoteV1/Language/Language.Designer.vb
generated
192
mRemoteV1/Language/Language.Designer.vb
generated
@@ -263,7 +263,7 @@ Namespace My
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to Current Version.
|
||||
''' Looks up a localized string similar to Latest version.
|
||||
'''</summary>
|
||||
Friend Shared ReadOnly Property strAvailableVersion() As String
|
||||
Get
|
||||
@@ -561,10 +561,10 @@ Namespace My
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to The (RDP) Sessions feature requires that you have a registered copy of eolwtscom.dll on your system.
|
||||
'''mRemoteNG ships with this component but will not register it automatically unless you run the setup package.
|
||||
'''To do register it manually do this: Open up the run dialog (Start - Run) and enter the following: regsvr32 "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) Session [rest of string was truncated]";.
|
||||
''' 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 "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 feat [rest of string was truncated]";.
|
||||
'''</summary>
|
||||
Friend Shared ReadOnly Property strCcEOLFailed() As String
|
||||
Get
|
||||
@@ -652,9 +652,8 @@ Namespace My
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services Client) 6.1 installed. You can get it here: http://support.microsoft.com/kb/951616
|
||||
'''If you have RDP 6.1 installed and the check still fails, try to register mstscax.dll manually. To do this open up the run dialog (Start - Run) and enter the following: regsvr32 "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 ht [rest of string was truncated]";.
|
||||
''' Looks up a localized string similar to For RDP to work properly you need to have at least Remote Desktop Connection (Terminal Services) Client 6.0 installed. You can download it here: http://support.microsoft.com/kb/925876
|
||||
'''If this check still fails or you are unable to use RDP, please consult the mRemoteNG Forum at http://forum.mremoteng.org/..
|
||||
'''</summary>
|
||||
Friend Shared ReadOnly Property strCcRDPFailed() As String
|
||||
Get
|
||||
@@ -918,6 +917,15 @@ Namespace My
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to E&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't parse command line args!.
|
||||
'''</summary>
|
||||
@@ -927,6 +935,42 @@ Namespace My
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to &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 &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>
|
||||
@@ -1524,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>
|
||||
@@ -2366,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
|
||||
@@ -2374,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>
|
||||
@@ -2950,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>
|
||||
@@ -3257,6 +3328,15 @@ Namespace My
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to Testing....
|
||||
'''</summary>
|
||||
Friend Shared ReadOnly Property strOptionsProxyTesting() As String
|
||||
Get
|
||||
Return ResourceManager.GetString("strOptionsProxyTesting", resourceCulture)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to Theme.
|
||||
'''</summary>
|
||||
@@ -3365,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>
|
||||
@@ -3500,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>
|
||||
@@ -3815,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>
|
||||
@@ -3950,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>
|
||||
@@ -4367,6 +4483,15 @@ Namespace My
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to PuTTY Session Settings.
|
||||
'''</summary>
|
||||
Friend Shared ReadOnly Property strPuttySessionSettings() As String
|
||||
Get
|
||||
Return ResourceManager.GetString("strPuttySessionSettings", resourceCulture)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
'''<summary>
|
||||
''' Looks up a localized string similar to PuTTY Settings.
|
||||
'''</summary>
|
||||
@@ -4836,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
|
||||
@@ -5403,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
|
||||
@@ -5979,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
|
||||
@@ -5988,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
|
||||
|
||||
@@ -6005,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..
|
||||
@@ -6025,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
|
||||
@@ -6034,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
|
||||
@@ -6079,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
|
||||
|
||||
|
||||
@@ -150,6 +150,9 @@
|
||||
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
|
||||
<value>Panel Auswahl Dialog immer anzeigen</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
|
||||
<value>Palettenregister immer anzeigen</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
|
||||
<value>System Tray Icon immer anzeigen</value>
|
||||
</data>
|
||||
@@ -160,7 +163,7 @@
|
||||
<value>Einstellungen jetzt anpassen</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
|
||||
<value>Verwende die empflohlenen Einstellungen</value>
|
||||
<value>Verwende die empfohlenen Einstellungen</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesContent" xml:space="preserve">
|
||||
<value>{0} kann automatisch nach Updates suchen die neue Funktionen und Bug Fixes enthalten können. Es wird empfohlen, dass Sie {0} erlauben wöchentlich nach Updates zu suchen.</value>
|
||||
@@ -414,6 +417,12 @@ VncSharpNG Control Version {0}</value>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>Die Kommandozeilen Parameter kontnen nicht ausgewertet werden!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} hat festgestellt, dass das Lenovo Auto Scroll Utility auf diesem Computer ausgeführt wird. Dieses Dienstprogramm ist dafür bekannt, dass es Probleme mit {0} verursacht. Es wird empfohlen, dass Sie es deaktivieren oder deinstallieren.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Kompatibilitätsproblem entdeckt</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Komponenten Überprüfung</value>
|
||||
</data>
|
||||
@@ -442,7 +451,7 @@ VncSharpNG Control Version {0}</value>
|
||||
<value>Möchten Sie die Verbindung "{0}" schließen?</value>
|
||||
</data>
|
||||
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
|
||||
<value>Sind sie sicher, dass Sie das Panel "{0}" schließen möchten? Alle Verbindung , die es enthält, werden ebenfalls geschlossen.</value>
|
||||
<value>Sind sie sicher, dass Sie das Panel "{0}" schließen möchten? Alle Verbindungen, die es enthält, werden ebenfalls geschlossen.</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteExternalTool" xml:space="preserve">
|
||||
<value>Sind Sie sicher dass Sie das extene Programm "{0}" entfernen möchten?</value>
|
||||
@@ -543,9 +552,15 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
|
||||
<value>Kann keine neue Verbindungsdatei erstellen!</value>
|
||||
</data>
|
||||
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
|
||||
<value>Das ToolStrip-Steuerelement konnte in FilteredPropertyGrid nicht gefunden werden.</value>
|
||||
</data>
|
||||
<data name="strCurrentVersion" xml:space="preserve">
|
||||
<value>Aktuelle Version</value>
|
||||
</data>
|
||||
<data name="strDefaultTheme" xml:space="preserve">
|
||||
<value>Standard-Aussehen</value>
|
||||
</data>
|
||||
<data name="strDetect" xml:space="preserve">
|
||||
<value>Erkennen</value>
|
||||
</data>
|
||||
@@ -616,7 +631,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Verschlüsselung fehlgeschlagen. {0}</value>
|
||||
</data>
|
||||
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
|
||||
<value>Die Sicherheitseinstellung von Windows "Systemkryptografie: Verwenden sie FIPS-konformen Algorithmus für Verschlüsselung, hashing und Signatur", ist aktiviert. Diese Einstellung ist nicht kompatibel mit {0}. Weitere Informationen finden sie im Microsoft Support-Artikel unter http://support.microsoft.com/kb/811833 . {0} wird jetzt beendet.</value>
|
||||
<value>Die Sicherheitseinstellung von Windows "Systemkryptografie: Verwenden sie FIPS-konformen Algorithmus für Verschlüsselung, Hashing und Signatur" ist aktiviert. Diese Einstellung ist nicht kompatibel mit {0}. Weitere Informationen finden sie im Microsoft Support-Artikel unter http://support.microsoft.com/kb/811833. {0} wird jetzt beendet.</value>
|
||||
</data>
|
||||
<data name="strErrors" xml:space="preserve">
|
||||
<value>Fehler</value>
|
||||
@@ -682,7 +697,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Verbindungs Daten von SQL laden ist fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="strGetConnectionInfoFromXmlFailed" xml:space="preserve">
|
||||
<value>Fehler beim Laden des Verbindungseintrag für "{0}" von "{1}". {2}</value>
|
||||
<value>Fehler beim Laden des Verbindungseintrags für "{0}" von "{1}". {2}</value>
|
||||
</data>
|
||||
<data name="strGroupboxAutomaticReconnect" xml:space="preserve">
|
||||
<value>Automatisches wiederverbinden</value>
|
||||
@@ -705,6 +720,9 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strHttpConnectionFailed" xml:space="preserve">
|
||||
<value>Erstellen der HTTP Verbindung fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
|
||||
<value>Fehler beim Ändern des HTTP-Dokumentfensters!</value>
|
||||
</data>
|
||||
<data name="strHttpSetPropsFailed" xml:space="preserve">
|
||||
<value>Setzen der HTTP Parameter fehlgeschlagen!</value>
|
||||
</data>
|
||||
@@ -726,6 +744,9 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strIcaSetResolutionFailed" xml:space="preserve">
|
||||
<value>Setzen der Auflösung fehlgschlagen!</value>
|
||||
</data>
|
||||
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
|
||||
<value>Quick connect Registerkarten identifizieren, indem das Präfix "Quick:" benutzt wird</value>
|
||||
</data>
|
||||
<data name="strImportAD" xml:space="preserve">
|
||||
<value>Aus Active Directory importieren</value>
|
||||
</data>
|
||||
@@ -792,6 +813,9 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strLabelChangeLog" xml:space="preserve">
|
||||
<value>Veränderungsprotokoll:</value>
|
||||
</data>
|
||||
<data name="strLabelClosingConnections" xml:space="preserve">
|
||||
<value>Beim Schliessen der Verbindungen:</value>
|
||||
</data>
|
||||
<data name="strLabelConnect" xml:space="preserve">
|
||||
<value>&Direkt Verbinden:</value>
|
||||
</data>
|
||||
@@ -838,7 +862,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Wählen Sie ein Panel aus der Liste oder klicken Sie auf Neu um ein neues zu erstellen. Klickeen Sie OK um fortzufahren.</value>
|
||||
</data>
|
||||
<data name="strLabelServerStatus" xml:space="preserve">
|
||||
<value>Server Status:</value>
|
||||
<value>Serverstatus:</value>
|
||||
</data>
|
||||
<data name="strLabelSQLDatabaseName" xml:space="preserve">
|
||||
<value>Datenbank:</value>
|
||||
@@ -990,6 +1014,15 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strMenuNotifications" xml:space="preserve">
|
||||
<value>Meldungen</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
|
||||
<value>Alle Kopieren</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDelete" xml:space="preserve">
|
||||
<value>Löschen</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
|
||||
<value>Alle Löschen</value>
|
||||
</data>
|
||||
<data name="strMenuOpenConnectionFile" xml:space="preserve">
|
||||
<value>Konfigurations Datei öffnen...</value>
|
||||
</data>
|
||||
@@ -1000,7 +1033,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Einfügen</value>
|
||||
</data>
|
||||
<data name="strMenuPortScan" xml:space="preserve">
|
||||
<value>Port Scan</value>
|
||||
<value>Port-Scan</value>
|
||||
</data>
|
||||
<data name="strMenuQuickConnectToolbar" xml:space="preserve">
|
||||
<value>Direkt Verbinden Symbolleiste</value>
|
||||
@@ -1050,6 +1083,9 @@ Starte mit neuer Datei.</value>
|
||||
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
|
||||
<value>Sitzungen and Bildschirmschnappschüsse</value>
|
||||
</data>
|
||||
<data name="strMenuShowHelpText" xml:space="preserve">
|
||||
<value>&Hilfetext anzeigen</value>
|
||||
</data>
|
||||
<data name="strMenuShowText" xml:space="preserve">
|
||||
<value>Text anzeigen</value>
|
||||
</data>
|
||||
@@ -1144,6 +1180,15 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strOpenPorts" xml:space="preserve">
|
||||
<value>Offene Ports</value>
|
||||
</data>
|
||||
<data name="strOptionsTabTheme" xml:space="preserve">
|
||||
<value>Aussehen</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
|
||||
<value>&Löschen</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonNew" xml:space="preserve">
|
||||
<value>&Neu</value>
|
||||
</data>
|
||||
<data name="strPanelName" xml:space="preserve">
|
||||
<value>Panel Name</value>
|
||||
</data>
|
||||
@@ -1282,6 +1327,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strPropertyDescriptionUseConsoleSession" xml:space="preserve">
|
||||
<value>Zur Konsolen Sitzung des entfernten Hosts verbinden.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionUseCredSsp" xml:space="preserve">
|
||||
<value>Verwenden Sie den Anmeldeinformationen Security Support Provider (CredSSP) für die Authentifizierung, wenn er verfügbar ist.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionUser1" xml:space="preserve">
|
||||
<value>Dieses Feld ist frei beschreibbar.</value>
|
||||
</data>
|
||||
@@ -1432,6 +1480,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
|
||||
<value>Verwende Konsole</value>
|
||||
</data>
|
||||
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
|
||||
<value>Verwenden Sie CredSSP</value>
|
||||
</data>
|
||||
<data name="strPropertyNameUser1" xml:space="preserve">
|
||||
<value>Benutzer Feld</value>
|
||||
</data>
|
||||
@@ -1448,7 +1499,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<value>Proxy Passwort</value>
|
||||
</data>
|
||||
<data name="strPropertyNameVNCProxyPort" xml:space="preserve">
|
||||
<value>Proxy Port</value>
|
||||
<value>Proxy-Port</value>
|
||||
</data>
|
||||
<data name="strPropertyNameVNCProxyType" xml:space="preserve">
|
||||
<value>Proxy Typ</value>
|
||||
@@ -1497,6 +1548,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>Ändern der Größe fehlgschlagen!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>PuTTY gespeicherte Sitzungen</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>PuTTY Einstellungen</value>
|
||||
</data>
|
||||
@@ -1527,6 +1581,18 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
|
||||
<value>Prüfung auf Direkt Verbindungs Historie fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnAll" xml:space="preserve">
|
||||
<value>&Warnen wenn Verbindungen beendet werden</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnExit" xml:space="preserve">
|
||||
<value>Warne mich nur beim B&eenden von mRemoteNG</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
|
||||
<value>Nur beim Beenden &mehrerer Verbindungen warnen</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnNever" xml:space="preserve">
|
||||
<value>Nicht warnen, wenn Verbindungen beendet werden</value>
|
||||
</data>
|
||||
<data name="strRAW" xml:space="preserve">
|
||||
<value>Rohdaten (RAW)</value>
|
||||
</data>
|
||||
@@ -1743,6 +1809,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strScreenshots" xml:space="preserve">
|
||||
<value>Bilschirmschnappschüsse</value>
|
||||
</data>
|
||||
<data name="strSearchPrompt" xml:space="preserve">
|
||||
<value>Suche</value>
|
||||
</data>
|
||||
<data name="strSendTo" xml:space="preserve">
|
||||
<value>Senden an...</value>
|
||||
</data>
|
||||
@@ -1828,7 +1897,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<value>SSH Abschluss der Übertragung fehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Übertragung fehlgeschlagen!</value>
|
||||
<value>SSH-Übertragung fehlgeschlagen.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>Anfangs IP</value>
|
||||
@@ -1863,6 +1932,117 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strTheFollowing" xml:space="preserve">
|
||||
<value>die folgenden:</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
|
||||
<value>Config-Panel</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
|
||||
<value>Connections Panel</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryGeneral" xml:space="preserve">
|
||||
<value>Allgemein</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe des Config panels.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelCategoryTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes im Bedienfeld "Config".</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelGridLineColor" xml:space="preserve">
|
||||
<value>Die Farbe der Rasterlinien im Configpanel</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelHelpBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe des Bereichs Hilfe des Configpanel.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelHelpTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes auf den Link "Hilfe" des Bereichs Config.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes im Configpanel.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConnectionsPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe des Fensters Verbindungen.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConnectionsPanelTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes im Bereich Verbindungen.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConnectionsPanelTreeLineColor" xml:space="preserve">
|
||||
<value>Die Farbe der Strukturlinien im Bereich Verbindungen.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionMenuBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe der Menüs.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionMenuTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes in den Menüs.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionSearchBoxBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe des Suchfelds.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionSearchBoxTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes in das Suchfeld.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionSearchBoxTextPromptColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes der Eingabeaufforderung in das Suchfeld.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionToolbarBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe der Symbolleisten.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionToolbarTextColor" xml:space="preserve">
|
||||
<value>Die Farbe des Textes in den Symbolleisten.</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionWindowBackgroundColor" xml:space="preserve">
|
||||
<value>Die Hintergrundfarbe des Hauptfensters.</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Config-Panel-Hintergrundfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
|
||||
<value>Config-Panel Kategorie Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelGridLineColor" xml:space="preserve">
|
||||
<value>Config-Panel-Grid-Linienfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelHelpBackgroundColor" xml:space="preserve">
|
||||
<value>Config-Panel Hilfe Hintergrundfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelHelpTextColor" xml:space="preserve">
|
||||
<value>Config-Panel Hilfe Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
|
||||
<value>Config-Panel-Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConnectionsPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Verbindungen-Panel-Hintergrund-Farbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConnectionsPanelTextColor" xml:space="preserve">
|
||||
<value>Verbindungen-Panel-Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameConnectionsPanelTreeLineColor" xml:space="preserve">
|
||||
<value>Verbindungen Panel Baumgrenze Farbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
|
||||
<value>Menü-Hintergrund-Farbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameMenuTextColor" xml:space="preserve">
|
||||
<value>Menü-Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
|
||||
<value>Suchfeld Hintergrundfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
|
||||
<value>Suchfeld Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
|
||||
<value>Suchfeld Prompt Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
|
||||
<value>Symbolleiste-Hintergrundfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
|
||||
<value>Symbolleiste Textfarbe</value>
|
||||
</data>
|
||||
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
|
||||
<value>Fenster-Hintergrundfarbe</value>
|
||||
</data>
|
||||
<data name="strTitleError" xml:space="preserve">
|
||||
<value>Fehler ({0})</value>
|
||||
</data>
|
||||
@@ -1899,6 +2079,9 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungs Datei erstel
|
||||
<data name="strUncheckProperties" xml:space="preserve">
|
||||
<value>Deaktivieren Sie alle Eigenschaften die nicht gespeichert werden sollen.</value>
|
||||
</data>
|
||||
<data name="strUnnamedTheme" xml:space="preserve">
|
||||
<value>Unbenanntes Aussehen</value>
|
||||
</data>
|
||||
<data name="strUpdateAvailable" xml:space="preserve">
|
||||
<value>mRemoteNG Update verfügbar!</value>
|
||||
</data>
|
||||
|
||||
348
mRemoteV1/Language/Language.el.resx
Normal file
348
mRemoteV1/Language/Language.el.resx
Normal file
@@ -0,0 +1,348 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="strAbout" xml:space="preserve">
|
||||
<value>Σχετικά με</value>
|
||||
</data>
|
||||
<data name="strActive" xml:space="preserve">
|
||||
<value>Ενεργό</value>
|
||||
</data>
|
||||
<data name="strActivity" xml:space="preserve">
|
||||
<value>Δραστηριότητα</value>
|
||||
</data>
|
||||
<data name="strAddConnection" xml:space="preserve">
|
||||
<value>Νέα σύνδεση</value>
|
||||
</data>
|
||||
<data name="strAddFolder" xml:space="preserve">
|
||||
<value>Νέος φάκελος</value>
|
||||
</data>
|
||||
<data name="strAddNodeFromXmlFailed" xml:space="preserve">
|
||||
<value>AddNodeFromXML απέτυχε!</value>
|
||||
</data>
|
||||
<data name="strAddNodesFromSqlFailed" xml:space="preserve">
|
||||
<value>AddNodesFromSQL απέτυχε!</value>
|
||||
</data>
|
||||
<data name="strAllowOnlySingleInstance" xml:space="preserve">
|
||||
<value>Επιτρέπετε μόνο ένα μόνο παράδειγμα της εφαρμογής (απαιτείται επανεκκίνηση του mRemoteNG)</value>
|
||||
</data>
|
||||
<data name="strAlways" xml:space="preserve">
|
||||
<value>Πάντα</value>
|
||||
</data>
|
||||
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
|
||||
<value>Πάντοτε να συνδεθεί, ακόμη και αν ο έλεγχος ταυτότητας αποτυγχάνει</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
|
||||
<value>Πάντα Εμφάνιση πίνακα διαλόγου επιλογής κατά το άνοιγμα συνδέσεων</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
|
||||
<value>Να εμφανίζονται πάντα γνωστοποίησης περιοχων εικόνας</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
|
||||
<value>Ρωτήστε με ξανά αργότερα</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandCustom" xml:space="preserve">
|
||||
<value>Προσαρμογή των ρυθμίσεων τώρα</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
|
||||
<value>Χρήση των προτεινόμενων ρυθμίσεων</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesContent" xml:space="preserve">
|
||||
<value>{0} μπορεί να ελέγχει αυτόματα ενημερώσεις που μπορούν να παρέχουν νέα χαρακτηριστικά και διορθώσεις σφαλμάτων. Συνιστάται να επιτρέψετε {0} να ελέγξει για ενημερώσεις σε εβδομαδιαία βάση.</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
|
||||
<value>Ρυθμίσεις αυτόματης ενημέρωσης</value>
|
||||
</data>
|
||||
<data name="strAspect" xml:space="preserve">
|
||||
<value>Πτυχή</value>
|
||||
</data>
|
||||
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
|
||||
<value>Αυτόματη λήψη πληροφοριών περιόδου</value>
|
||||
</data>
|
||||
<data name="strAutoSaveEvery" xml:space="preserve">
|
||||
<value>Αυτόματη αποθήκευση κάθε:</value>
|
||||
</data>
|
||||
<data name="strAutoSaveMins" xml:space="preserve">
|
||||
<value>Λεπτά (0 σημαίνει απενεργοποιημένο)</value>
|
||||
</data>
|
||||
<data name="strAvailableVersion" xml:space="preserve">
|
||||
<value>Τρέχουσα έκδοση</value>
|
||||
</data>
|
||||
<data name="strButtonBrowse" xml:space="preserve">
|
||||
<value>&Αναζήτηση...</value>
|
||||
</data>
|
||||
<data name="strButtonCancel" xml:space="preserve">
|
||||
<value>&Ακύρωση</value>
|
||||
</data>
|
||||
<data name="strButtonChange" xml:space="preserve">
|
||||
<value>Αλλαγή</value>
|
||||
</data>
|
||||
<data name="strButtonClose" xml:space="preserve">
|
||||
<value>&Κλείσιμο</value>
|
||||
</data>
|
||||
<data name="strButtonDefaultInheritance" xml:space="preserve">
|
||||
<value>Προεπιλογή κληρονομικότητας</value>
|
||||
</data>
|
||||
<data name="strButtonDefaultProperties" xml:space="preserve">
|
||||
<value>Προεπιλεγμένες ιδιότητες</value>
|
||||
</data>
|
||||
<data name="strButtonDisconnect" xml:space="preserve">
|
||||
<value>Αποσύνδεση</value>
|
||||
</data>
|
||||
<data name="strButtonIcon" xml:space="preserve">
|
||||
<value>Εικονίδιο</value>
|
||||
</data>
|
||||
<data name="strButtonImport" xml:space="preserve">
|
||||
<value>&Εισαγωγή</value>
|
||||
</data>
|
||||
<data name="strButtonInheritance" xml:space="preserve">
|
||||
<value>Κληρονομιά</value>
|
||||
</data>
|
||||
<data name="strButtonLaunchPutty" xml:space="preserve">
|
||||
<value>Εκκίνηση του PuTTY</value>
|
||||
</data>
|
||||
<data name="strButtonNew" xml:space="preserve">
|
||||
<value>& Νέο</value>
|
||||
</data>
|
||||
<data name="strButtonOK" xml:space="preserve">
|
||||
<value>&ΟΚ</value>
|
||||
</data>
|
||||
<data name="strButtonProperties" xml:space="preserve">
|
||||
<value>Ιδιότητες</value>
|
||||
</data>
|
||||
<data name="strButtonScan" xml:space="preserve">
|
||||
<value>&Σάρωση</value>
|
||||
</data>
|
||||
<data name="strButtonStop" xml:space="preserve">
|
||||
<value>&Διακοπή</value>
|
||||
</data>
|
||||
<data name="strButtonTestProxy" xml:space="preserve">
|
||||
<value>Δοκιμή διακομιστή μεσολάβησης</value>
|
||||
</data>
|
||||
<data name="strCannotImportNormalSessionFile" xml:space="preserve">
|
||||
<value>Δεν μπορείτε να εισαγάγετε ένα κανονικό αρχείο σύνδεσης.
|
||||
Παρακαλούμε χρησιμοποιήστε Αρχείο - Συνδέσεις φορτίου για τα κανονικά αρχεία σύνδεσης!</value>
|
||||
</data>
|
||||
<data name="strCannotStartPortScan" xml:space="preserve">
|
||||
<value>Δεν είναι δυνατή η εκκίνηση της σάρωσης υποδοχων, εσφαλμένη μορφή IP!</value>
|
||||
</data>
|
||||
<data name="strCategoryAppearance" xml:space="preserve">
|
||||
<value>Εμφάνιση</value>
|
||||
</data>
|
||||
<data name="strCategoryConnection" xml:space="preserve">
|
||||
<value>Σύνδεση</value>
|
||||
</data>
|
||||
<data name="strCategoryCredentials" xml:space="preserve">
|
||||
<value>Πιστοποιήσεις</value>
|
||||
</data>
|
||||
<data name="strCategoryDisplay" xml:space="preserve">
|
||||
<value>Οθόνη</value>
|
||||
</data>
|
||||
<data name="strCategoryGateway" xml:space="preserve">
|
||||
<value>Πύλη</value>
|
||||
</data>
|
||||
<data name="strCategoryGeneral" xml:space="preserve">
|
||||
<value>Γενική</value>
|
||||
</data>
|
||||
<data name="strCategoryMiscellaneous" xml:space="preserve">
|
||||
<value>Διάφορα</value>
|
||||
</data>
|
||||
<data name="strCategoryProtocol" xml:space="preserve">
|
||||
<value>Πρωτόκολλο</value>
|
||||
</data>
|
||||
<data name="strCategoryRedirect" xml:space="preserve">
|
||||
<value>Ανακατεύθυνση</value>
|
||||
</data>
|
||||
<data name="strCcAlwaysShowScreen" xml:space="preserve">
|
||||
<value>Πάντα εμφάνιση αυτής της οθόνης κατά την εκκίνηση</value>
|
||||
</data>
|
||||
<data name="strCcCheckAgain" xml:space="preserve">
|
||||
<value>Ανανέωση</value>
|
||||
</data>
|
||||
<data name="strCcCheckFailed" xml:space="preserve">
|
||||
<value>Ο ελέγχος απέτυχε!</value>
|
||||
</data>
|
||||
<data name="strCcCheckSucceeded" xml:space="preserve">
|
||||
<value>Ο ελεγχος πέτυχε!</value>
|
||||
</data>
|
||||
<data name="strCcEOLFailed" xml:space="preserve">
|
||||
<value>Η δυνατότητα (RDP) συνεδρίες προϋποθέτει ότι έχετε μια εγγεγραμμένο αντίγραφο του eolwtscom.dll στο σύστημά σας. mRemoteNG πλοία με αυτό το στοιχείο αλλά θα δεν εγγραφείτε αυτόματα εκτός αν η εκτέλεση του πακέτου εγκατάστασης. Να εγγραφείτε δεν με μη αυτόματο τρόπο αυτό: Ανοίξτε στο τρέχω διάλογος (έναρξη - Run) και πληκτρολογήστε τα παρακάτω: regsvr32 "c:\Program Files\mRemoteNG\eolwtscom.dll" (όπου c:\Program Files\mRemoteNG\ είναι η διαδρομή προς την εγκατάσταση mRemoteNG). Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή να χρησιμοποιήσετε τη δυνατότητα συνεδρίες (RDP) στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/</value>
|
||||
</data>
|
||||
<data name="strCcEOLOK" xml:space="preserve">
|
||||
<value>Το EOLWTSCOM βρέθηκε και φαίνεται να έχει καταχωρηθεί σωστά.</value>
|
||||
</data>
|
||||
<data name="strCcGeckoFailed" xml:space="preserve">
|
||||
<value>Για να χρησιμοποιήσετε το μηχανισμό απόδοσης Gecko πρέπει να έχετε XULrunner 1.8.1.x και ο δρόμος για την εγκατάσταση ορίστε στις επιλογές σας. Μπορείτε να κατεβάσετε XULrunner 1.8.1.3 εδώ: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/ όταν ολοκληρώσετε τη λήψη κάντε εξαγωγή του πακέτου για την πορεία της επιλογής σας. Στη συνέχεια, στο mRemoteNG πηγαίνετε στο εργαλεία - επιλογές - προηγμένες και πληκτρολογήσει τη σωστή διαδρομή στο πεδίο διαδρομή XULrunner. Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή χρησιμοποιούν την μηχανή Gecko στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/</value>
|
||||
</data>
|
||||
<data name="strCcGeckoOK" xml:space="preserve">
|
||||
<value>Το XULrunner βρέθηκε και φαίνεται να έχει εγκατασταθεί σωστά.</value>
|
||||
</data>
|
||||
<data name="strCcICAFailed" xml:space="preserve">
|
||||
<value>ICA απαιτεί ότι είναι εγκατεστημένο το XenDesktop Online Plugin και ότι καταχωρείται η βιβλιοθήκη wfica.ocx. Μπορείτε να κατεβάσετε τον πελάτη εδώ: http://www.citrix.com/download/ αν έχετε το XenDesktop Online Plugin εγκατασταθεί και ο έλεγχος συνεχίσει να αποτυγχάνει, προσπαθήστε να εγγραφείτε wfica.ocx με μη αυτόματο τρόπο. Να κάνει αυτό ανοίγω πάνω στο τρέχω διάλογος (έναρξη - Run) και πληκτρολογήστε τα παρακάτω: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (όπου c:\Program Files\Citrix\ICA Client\ είναι η διαδρομή στην εγκατάσταση XenDesktop Online Plugin). Εάν είστε ακόμα δεν είναι σε θέση να περάσει ο έλεγχος αυτός ή να χρησιμοποιήσετε ICA στο mRemoteNG συμβουλευτείτε το mRemoteNG φόρουμ στο http://forum.mremoteng.org/"</value>
|
||||
</data>
|
||||
<data name="strCcICAOK" xml:space="preserve">
|
||||
<value>Όλα τα συστατικά ICA βρέθηκαν και φαίνεται να καταχωρηθηκαν σωστά. Πρόγραμμα-πελάτη Citrix ICA ελέγχου έκδοση {0}</value>
|
||||
</data>
|
||||
<data name="strCcNotInstalledProperly" xml:space="preserve">
|
||||
<value>δεν έχει εγκατασταθεί σωστά</value>
|
||||
</data>
|
||||
<data name="strConnectInFullscreen" xml:space="preserve">
|
||||
<value>Σύνδεση σε λειτουργία πλήρους οθόνης</value>
|
||||
</data>
|
||||
<data name="strConnecting" xml:space="preserve">
|
||||
<value>Σύνδεση...</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnected" xml:space="preserve">
|
||||
<value>Πρωτόκολλο γεγονός που συνδέεται</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnectedDetail" xml:space="preserve">
|
||||
<value>Σύνδεση με "{0}" μέσω "{1}" από το χρήστη "{2}" (Περιγραφή: «{3}»? Χρήστη το πεδίο: «{4}")</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
|
||||
<value>Η συνδεση απέτυχε!</value>
|
||||
</data>
|
||||
<data name="strConnectionEventErrorOccured" xml:space="preserve">
|
||||
<value>Πρωτόκολλο ErrorOccured εκδήλωση</value>
|
||||
</data>
|
||||
<data name="strConnectionOpenFailed" xml:space="preserve">
|
||||
<value>Άνοιγμα σύνδεσης απέτυχε!</value>
|
||||
</data>
|
||||
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
|
||||
<value>Δεν μπορεί να ανοίχθει η σύνδεση: Το όνομα του κεντρικού υπολογιστή δεν ειναι καθορισμένο!</value>
|
||||
</data>
|
||||
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
|
||||
<value>RDP λάθος!
|
||||
Κωδικός σφάλματος: {0}
|
||||
Περιγραφή σφάλματος: {1}</value>
|
||||
</data>
|
||||
<data name="strConnections" xml:space="preserve">
|
||||
<value>Συνδέσεις</value>
|
||||
</data>
|
||||
<data name="strConnectionSetDefaultPortFailed" xml:space="preserve">
|
||||
<value>Αδυναμία ορισμού προεπιλεγμένης θύρας!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileBackupFailed" xml:space="preserve">
|
||||
<value>Δεν ήταν δυνατή η δημιουργία αντιγράφων ασφαλείας των συνδέσεων αρχείου!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeImported" xml:space="preserve">
|
||||
<value>Δεν ήταν δυνατή η εισαγωγή συνδέσεων αρχείου!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeLoaded" xml:space="preserve">
|
||||
<value>Το αρχείο συνδέσεων "{0}" δεν μπορεί να φορτωθεί!</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -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>
|
||||
|
||||
@@ -416,12 +416,30 @@ Versión de Control {0} de VNCSharpNG</value>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>¡No se pudieron procesar los argumentos de línea de comandos!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Detectado problema de compatibilidad</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Comprobación de Componentes</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
|
||||
<value>¡Error en btnIcon_Click!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
|
||||
<value>¡Fallo en ShowHideGridItems!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
|
||||
<value>¡Fallo en IconMenu_Click!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
|
||||
<value>¡Fallo en el objeto de propiedad de red!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
|
||||
<value>No se pudo definir el estado del host!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
|
||||
<value>¡Fallo en pGrid_PopertyValueChanged!</value>
|
||||
</data>
|
||||
<data name="strConfigUiLoadFailed" xml:space="preserve">
|
||||
<value>Error al Cargar la Interfaz de Configuración de Usuario</value>
|
||||
</data>
|
||||
@@ -521,6 +539,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
|
||||
<data name="strConnenctionClosedByUserDetail" xml:space="preserve">
|
||||
<value>Connexión a {0} via {1} cerrada por el usuario {2}. (Descripción: "{3}"; Campo de Usuario: "{4}")</value>
|
||||
</data>
|
||||
<data name="strConnenctionCloseEvent" xml:space="preserve">
|
||||
<value>Evento de conexión cerrado</value>
|
||||
</data>
|
||||
<data name="strConnenctionCloseEventFailed" xml:space="preserve">
|
||||
<value>¡Ha fallado el evento Closed en Connection!</value>
|
||||
</data>
|
||||
@@ -572,6 +593,9 @@ Arrancando con un nuevo archivo de conexiones.</value>
|
||||
<data name="strEndPort" xml:space="preserve">
|
||||
<value>Puerto Final</value>
|
||||
</data>
|
||||
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
|
||||
<value>Fallo al AddExternalToolsToToolBar (frmMain). {0}</value>
|
||||
</data>
|
||||
<data name="strErrorAddFolderFailed" xml:space="preserve">
|
||||
<value>Añadir Carpeta (UI.Window.Tree) fallida. {0}</value>
|
||||
</data>
|
||||
@@ -687,6 +711,9 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
|
||||
<data name="strHttpConnectionFailed" xml:space="preserve">
|
||||
<value>¡No se pudo crear una nueva conexión HTTP!</value>
|
||||
</data>
|
||||
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
|
||||
<value>¡Fallo al cambiar el azulejo del documento HTTP!</value>
|
||||
</data>
|
||||
<data name="strHttpSetPropsFailed" xml:space="preserve">
|
||||
<value>¡Asignación de Propiedades HTTP fallida!</value>
|
||||
</data>
|
||||
@@ -741,6 +768,21 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
|
||||
<data name="strIntAppFocusFailed" xml:space="preserve">
|
||||
<value>¡No se pudo centrar el foco en Int App!</value>
|
||||
</data>
|
||||
<data name="strIntAppHandle" xml:space="preserve">
|
||||
<value>Manejar aplicación interna: {0}</value>
|
||||
</data>
|
||||
<data name="strIntAppKillFailed" xml:space="preserve">
|
||||
<value>¡Fallo en el proceso de detención de la aplicación interna!</value>
|
||||
</data>
|
||||
<data name="strIntAppParentHandle" xml:space="preserve">
|
||||
<value>Manejar el panel: {0}</value>
|
||||
</data>
|
||||
<data name="strIntAppResizeFailed" xml:space="preserve">
|
||||
<value>¡Fallo al redimensionar la aplicación interna!</value>
|
||||
</data>
|
||||
<data name="strIntAppStuff" xml:space="preserve">
|
||||
<value>--- Cosas de la aplicación interna ---</value>
|
||||
</data>
|
||||
<data name="strIntAppTitle" xml:space="preserve">
|
||||
<value>Título Int App: {0}</value>
|
||||
</data>
|
||||
@@ -964,10 +1006,10 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
|
||||
<value>Copiar todo</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDelete" xml:space="preserve">
|
||||
<value>Eliminar</value>
|
||||
<value>Borrar</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
|
||||
<value>Eliminar todo</value>
|
||||
<value>Borrar todo</value>
|
||||
</data>
|
||||
<data name="strMenuOpenConnectionFile" xml:space="preserve">
|
||||
<value>Abrir Archivo de Conexión...</value>
|
||||
@@ -1029,9 +1071,15 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
|
||||
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
|
||||
<value>Sesiones y Capturas de Pantalla</value>
|
||||
</data>
|
||||
<data name="strMenuShowHelpText" xml:space="preserve">
|
||||
<value>&Mostrar texto de ayuda</value>
|
||||
</data>
|
||||
<data name="strMenuShowText" xml:space="preserve">
|
||||
<value>Mostar Texto</value>
|
||||
</data>
|
||||
<data name="strMenuSmartSize" xml:space="preserve">
|
||||
<value>SmartSize (RDP/VNC)</value>
|
||||
</data>
|
||||
<data name="strMenuSSHFileTransfer" xml:space="preserve">
|
||||
<value>Tranferencia de Archivos por SSH</value>
|
||||
</data>
|
||||
@@ -1467,12 +1515,21 @@ Mensaje:
|
||||
<data name="strPuttyGetSessionsFailed" xml:space="preserve">
|
||||
<value>¡Fallo en la carga de las Sesiones de Putty!</value>
|
||||
</data>
|
||||
<data name="strPuttyHandle" xml:space="preserve">
|
||||
<value>Manejar Putty: {0}</value>
|
||||
</data>
|
||||
<data name="strPuttyKillFailed" xml:space="preserve">
|
||||
<value>¡Kill del Proceso Putty fallido!</value>
|
||||
</data>
|
||||
<data name="strPuttyParentHandle" xml:space="preserve">
|
||||
<value>Manejar el panel: {0}</value>
|
||||
</data>
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>¡Redimensionamiento de Putty fallido!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>Sesiones guardadas de PuTTY</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>Opciones de PuTTY</value>
|
||||
</data>
|
||||
@@ -1482,6 +1539,12 @@ Mensaje:
|
||||
<data name="strPuttyStartFailed" xml:space="preserve">
|
||||
<value>¡Fallo en el arranque de Putty!</value>
|
||||
</data>
|
||||
<data name="strPuttyStuff" xml:space="preserve">
|
||||
<value>--- Cosas de PuTTY ---</value>
|
||||
</data>
|
||||
<data name="strPuttyTitle" xml:space="preserve">
|
||||
<value>Titulo PuTTy: {0}</value>
|
||||
</data>
|
||||
<data name="strQuickConnect" xml:space="preserve">
|
||||
<value>Conexión Rápida</value>
|
||||
</data>
|
||||
@@ -1794,9 +1857,6 @@ Mensaje:
|
||||
<data name="strSSHTransferEndFailed" xml:space="preserve">
|
||||
<value>¡Final de Transferencia SSH (UI.Window.SSHTransfer) fallida!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Tranferencia</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>IP Inicial</value>
|
||||
</data>
|
||||
@@ -1845,15 +1905,30 @@ Mensaje:
|
||||
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Color de fondo del panel de configuración</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelTextColor" xml:space="preserve">
|
||||
<value>Color del texto del panel de configuración</value>
|
||||
</data>
|
||||
<data name="strThemeNameMenuBackgroundColor" xml:space="preserve">
|
||||
<value>Color de fondo del menú</value>
|
||||
</data>
|
||||
<data name="strThemeNameMenuTextColor" xml:space="preserve">
|
||||
<value>Color del texto del menú</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxBackgroundColor" xml:space="preserve">
|
||||
<value>Color de fondo de la caja de búsqueda</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
|
||||
<value>Color del texto de la caja de búsqueda</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
|
||||
<value>Color de fondo de la barra de herramientas</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
|
||||
<value>Color del texto de la barra de herramientas</value>
|
||||
</data>
|
||||
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
|
||||
<value>Color de fondo de la ventana</value>
|
||||
</data>
|
||||
<data name="strTitleError" xml:space="preserve">
|
||||
<value>Error ({0})</value>
|
||||
</data>
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
<value>Toujours se connecter, même si l'authentification échoue</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
|
||||
<value>Toujours afficher la sélection de panneau à l'ouverture d'une connexion</value>
|
||||
<value>Toujours demander la sélection d'un panneau lors de l'ouverture d'une connexion</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
|
||||
<value>Toujours afficher les onglets du panneau</value>
|
||||
@@ -401,7 +401,13 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
|
||||
<value>Attendre avant de quitter</value>
|
||||
</data>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>Impossible de parcourir les arguments de la ligne de commande !</value>
|
||||
<value>Impossible de convertir les arguments de la ligne de commande !</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} a détecté que l'utilitaire Lenovo Auto Scroll Utility est executé sur le système. Cet utilitaire est connu pour générer des problèmes avec {0}. Il est recommandé de le désactiver ou de le désinstaller.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Problème de compatibilité détecté</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Vérifiez les composants</value>
|
||||
@@ -603,7 +609,7 @@ Si la vérification des composants ou l'utilisation d'ICA échoue malgré tout,
|
||||
</data>
|
||||
<data name="strErrorFipsPolicyIncompatible" xml:space="preserve">
|
||||
<value>Les paramètres de sécurité Windows, "Système de cryptographie: Utilise FIPS, algorithmes compatible pour le cryptage, hachage et signature", est activé. Ce paramètre n'est pas compatible avec {0}.
|
||||
Allez sur l'article du support de Microsoft pour plus d'informations http://support.microsoft.com/kb/811833 for more information.
|
||||
Consultez l'article du support de Microsoft pour plus d'informations http://support.microsoft.com/kb/811833
|
||||
|
||||
{0} va maintenant fermer.</value>
|
||||
</data>
|
||||
@@ -719,7 +725,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
|
||||
<value>Échec de ICA Set Resolution !</value>
|
||||
</data>
|
||||
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
|
||||
<value>Identifier les onglets de connexion rapide en ajoutant le préfix "Rapide."</value>
|
||||
<value>Identifier les onglets de connexion rapide en ajoutant le préfixe "Rapide."</value>
|
||||
</data>
|
||||
<data name="strImportAD" xml:space="preserve">
|
||||
<value>Importer à partir d'Active Directory</value>
|
||||
@@ -776,7 +782,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
|
||||
<value>CTRL-ALT-DEL</value>
|
||||
</data>
|
||||
<data name="strKeysCtrlEsc" xml:space="preserve">
|
||||
<value>CTRL-ESC</value>
|
||||
<value>CTRL-Echap</value>
|
||||
</data>
|
||||
<data name="strLabelAddress" xml:space="preserve">
|
||||
<value>Adresse:</value>
|
||||
@@ -989,7 +995,7 @@ Allez sur l'article du support de Microsoft pour plus d'informations http://supp
|
||||
<value>Notifications</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
|
||||
<value>Copiez tout</value>
|
||||
<value>Tout copier</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDelete" xml:space="preserve">
|
||||
<value>Supprimer</value>
|
||||
@@ -1522,6 +1528,9 @@ Message:
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>Échec du redimensionnement de Putty !</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>Sessions PuTTY sauvegardées</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>Paramètres PuTTY</value>
|
||||
</data>
|
||||
@@ -1868,7 +1877,7 @@ Message:
|
||||
<value>Échec de SSH Transfer End (UI.Window.SSHTransfer)!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Transfert</value>
|
||||
<value>Echec du transfert SSH échoué.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>IP de début</value>
|
||||
@@ -1964,7 +1973,7 @@ Message:
|
||||
<value>La couleur d'arrière-plan de la fenêtre principale.</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelBackgroundColor" xml:space="preserve">
|
||||
<value>Couleur de fond de panneau de configuration</value>
|
||||
<value>Couleur de fond du panneau de configuration</value>
|
||||
</data>
|
||||
<data name="strThemeNameConfigPanelCategoryTextColor" xml:space="preserve">
|
||||
<value>Couleur de texte pour le panneau de configuration</value>
|
||||
@@ -2000,16 +2009,16 @@ Message:
|
||||
<value>Couleur de fond de la boite de recherche</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxTextColor" xml:space="preserve">
|
||||
<value>Couleur du texte pour la boite de recherche</value>
|
||||
<value>Couleur du texte de la recherche</value>
|
||||
</data>
|
||||
<data name="strThemeNameSearchBoxTextPromptColor" xml:space="preserve">
|
||||
<value>Couleur du Texte de la Boîte de Recherche</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarBackgroundColor" xml:space="preserve">
|
||||
<value>Couleur de fond de barre d'outils</value>
|
||||
<value>Couleur de fond de la barre d'outils</value>
|
||||
</data>
|
||||
<data name="strThemeNameToolbarTextColor" xml:space="preserve">
|
||||
<value>Couleur du texte pour la barre d'outils</value>
|
||||
<value>Couleur du texte de la barre d'outils</value>
|
||||
</data>
|
||||
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
|
||||
<value>Couleur de fond de la fenêtre</value>
|
||||
|
||||
438
mRemoteV1/Language/Language.hu.resx
Normal file
438
mRemoteV1/Language/Language.hu.resx
Normal file
@@ -0,0 +1,438 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="strAbout" xml:space="preserve">
|
||||
<value>Névjegy</value>
|
||||
</data>
|
||||
<data name="strActive" xml:space="preserve">
|
||||
<value>Aktív</value>
|
||||
</data>
|
||||
<data name="strActivity" xml:space="preserve">
|
||||
<value>Tevékenység</value>
|
||||
</data>
|
||||
<data name="strAddConnection" xml:space="preserve">
|
||||
<value>Új kapcsolat</value>
|
||||
</data>
|
||||
<data name="strAddFolder" xml:space="preserve">
|
||||
<value>Új mappa</value>
|
||||
</data>
|
||||
<data name="strAlways" xml:space="preserve">
|
||||
<value>Mindig</value>
|
||||
</data>
|
||||
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
|
||||
<value>Kapcsolódj mindig, sikertelen hitelesítés esetén is</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
|
||||
<value>Kérdezz rá később</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
|
||||
<value>Javasolt beállítások használata</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
|
||||
<value>Automatikus frissítés beállításai</value>
|
||||
</data>
|
||||
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
|
||||
<value>Munkamenet információk automatikus megszerzése</value>
|
||||
</data>
|
||||
<data name="strAutoSaveEvery" xml:space="preserve">
|
||||
<value>Automatikus mentés minden:</value>
|
||||
</data>
|
||||
<data name="strAutoSaveMins" xml:space="preserve">
|
||||
<value>Perc (0 - kikapcsolva)</value>
|
||||
</data>
|
||||
<data name="strAvailableVersion" xml:space="preserve">
|
||||
<value>Aktuális verzió</value>
|
||||
</data>
|
||||
<data name="strButtonBrowse" xml:space="preserve">
|
||||
<value>&Böngészés...</value>
|
||||
</data>
|
||||
<data name="strButtonCancel" xml:space="preserve">
|
||||
<value>&Mégsem</value>
|
||||
</data>
|
||||
<data name="strButtonChange" xml:space="preserve">
|
||||
<value>Módosít</value>
|
||||
</data>
|
||||
<data name="strButtonClose" xml:space="preserve">
|
||||
<value>Be&zár</value>
|
||||
</data>
|
||||
<data name="strButtonDisconnect" xml:space="preserve">
|
||||
<value>Kapcsolat bontása</value>
|
||||
</data>
|
||||
<data name="strButtonIcon" xml:space="preserve">
|
||||
<value>Ikon</value>
|
||||
</data>
|
||||
<data name="strButtonImport" xml:space="preserve">
|
||||
<value>&Improtálás</value>
|
||||
</data>
|
||||
<data name="strButtonLaunchPutty" xml:space="preserve">
|
||||
<value>PuTTY indítása</value>
|
||||
</data>
|
||||
<data name="strButtonNew" xml:space="preserve">
|
||||
<value>&Új</value>
|
||||
</data>
|
||||
<data name="strButtonOK" xml:space="preserve">
|
||||
<value>&OK</value>
|
||||
</data>
|
||||
<data name="strButtonProperties" xml:space="preserve">
|
||||
<value>Tulajdonságok</value>
|
||||
</data>
|
||||
<data name="strCannotStartPortScan" xml:space="preserve">
|
||||
<value>Helytelen IP cím, a port szkennelés nem indítható!</value>
|
||||
</data>
|
||||
<data name="strCategoryAppearance" xml:space="preserve">
|
||||
<value>Megjelenés</value>
|
||||
</data>
|
||||
<data name="strCategoryConnection" xml:space="preserve">
|
||||
<value>Kapcsolat</value>
|
||||
</data>
|
||||
<data name="strCategoryCredentials" xml:space="preserve">
|
||||
<value>Hitelesítés</value>
|
||||
</data>
|
||||
<data name="strCategoryDisplay" xml:space="preserve">
|
||||
<value>Képernyő</value>
|
||||
</data>
|
||||
<data name="strCategoryGateway" xml:space="preserve">
|
||||
<value>Átjáró</value>
|
||||
</data>
|
||||
<data name="strCategoryGeneral" xml:space="preserve">
|
||||
<value>Általános</value>
|
||||
</data>
|
||||
<data name="strCategoryMiscellaneous" xml:space="preserve">
|
||||
<value>Egyéb</value>
|
||||
</data>
|
||||
<data name="strCategoryProtocol" xml:space="preserve">
|
||||
<value>Protokoll</value>
|
||||
</data>
|
||||
<data name="strCategoryRedirect" xml:space="preserve">
|
||||
<value>Átirányítás</value>
|
||||
</data>
|
||||
<data name="strCcCheckFailed" xml:space="preserve">
|
||||
<value>Az ellenőrzés sikertelen!</value>
|
||||
</data>
|
||||
<data name="strCcCheckSucceeded" xml:space="preserve">
|
||||
<value>Az ellenőrzés sikeres!</value>
|
||||
</data>
|
||||
<data name="strCheckboxDomain" xml:space="preserve">
|
||||
<value>Tartomány</value>
|
||||
</data>
|
||||
<data name="strCheckboxDoNotShowThisMessageAgain" xml:space="preserve">
|
||||
<value>Többé ne mutasd ezt az üzenetet.</value>
|
||||
</data>
|
||||
<data name="strColumnFilename" xml:space="preserve">
|
||||
<value>Fájlnév</value>
|
||||
</data>
|
||||
<data name="strColumnHostnameIP" xml:space="preserve">
|
||||
<value>Kiszolgálónév/IP cím</value>
|
||||
</data>
|
||||
<data name="strColumnMessage" xml:space="preserve">
|
||||
<value>Üzenet</value>
|
||||
</data>
|
||||
<data name="strColumnUsername" xml:space="preserve">
|
||||
<value>Felhasználónév</value>
|
||||
</data>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>Nem értelmezhető parancssori argumentum!</value>
|
||||
</data>
|
||||
<data name="strConnecting" xml:space="preserve">
|
||||
<value>Kapcsolódás...</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
|
||||
<value>Sikertelen kapcsolódás!</value>
|
||||
</data>
|
||||
<data name="strConnections" xml:space="preserve">
|
||||
<value>Kapcsolatok</value>
|
||||
</data>
|
||||
<data name="strCurrentVersion" xml:space="preserve">
|
||||
<value>Telepített verzió</value>
|
||||
</data>
|
||||
<data name="strDontConnectWhenAuthFails" xml:space="preserve">
|
||||
<value>Ne kapcsolódj sikertelen hitelesítéskor</value>
|
||||
</data>
|
||||
<data name="strDoubleClickTabClosesIt" xml:space="preserve">
|
||||
<value>Duplaklikk a fülön bezárja azt</value>
|
||||
</data>
|
||||
<data name="strExperimental" xml:space="preserve">
|
||||
<value>Kísérleti</value>
|
||||
</data>
|
||||
<data name="strFullscreen" xml:space="preserve">
|
||||
<value>Teljes képernyő</value>
|
||||
</data>
|
||||
<data name="strGeneral" xml:space="preserve">
|
||||
<value>Általános</value>
|
||||
</data>
|
||||
<data name="strGroupboxFiles" xml:space="preserve">
|
||||
<value>Fájlok</value>
|
||||
</data>
|
||||
<data name="strHttpConnectFailed" xml:space="preserve">
|
||||
<value>A HTTP csatlakozás nem sikerült!</value>
|
||||
</data>
|
||||
<data name="strImportExport" xml:space="preserve">
|
||||
<value>Importálás/Exportálás</value>
|
||||
</data>
|
||||
<data name="strKeysCtrlAltDel" xml:space="preserve">
|
||||
<value>CTRL-ALT-DEL</value>
|
||||
</data>
|
||||
<data name="strKeysCtrlEsc" xml:space="preserve">
|
||||
<value>CONTROL-ESC</value>
|
||||
</data>
|
||||
<data name="strLabelAddress" xml:space="preserve">
|
||||
<value>Cím:</value>
|
||||
</data>
|
||||
<data name="strLabelDisplayName" xml:space="preserve">
|
||||
<value>Megjelenítendő név</value>
|
||||
</data>
|
||||
<data name="strLabelDomain" xml:space="preserve">
|
||||
<value>Tartomány:</value>
|
||||
</data>
|
||||
<data name="strLabelFilename" xml:space="preserve">
|
||||
<value>Fájlnév:</value>
|
||||
</data>
|
||||
<data name="strLabelHostname" xml:space="preserve">
|
||||
<value>Hosztnév:</value>
|
||||
</data>
|
||||
<data name="strLabelOptions" xml:space="preserve">
|
||||
<value>Opciók:</value>
|
||||
</data>
|
||||
<data name="strLabelPassword" xml:space="preserve">
|
||||
<value>Jelszó:</value>
|
||||
</data>
|
||||
<data name="strLabelPort" xml:space="preserve">
|
||||
<value>Port:</value>
|
||||
</data>
|
||||
<data name="strLabelPortableEdition" xml:space="preserve">
|
||||
<value>Hordozható kiadás</value>
|
||||
</data>
|
||||
<data name="strLabelProtocol" xml:space="preserve">
|
||||
<value>Protokoll:</value>
|
||||
</data>
|
||||
<data name="strLabelServerStatus" xml:space="preserve">
|
||||
<value>Szerver állapot:</value>
|
||||
</data>
|
||||
<data name="strLabelSQLDatabaseName" xml:space="preserve">
|
||||
<value>Adatbázis:</value>
|
||||
</data>
|
||||
<data name="strLabelSQLServerDatabaseName" xml:space="preserve">
|
||||
<value>Adatbázis:</value>
|
||||
</data>
|
||||
<data name="strLabelUsername" xml:space="preserve">
|
||||
<value>Felhasználónév:</value>
|
||||
</data>
|
||||
<data name="strLabelVerify" xml:space="preserve">
|
||||
<value>Ellenőrzés:</value>
|
||||
</data>
|
||||
<data name="strLanguage" xml:space="preserve">
|
||||
<value>Nyelv</value>
|
||||
</data>
|
||||
<data name="strLanguageDefault" xml:space="preserve">
|
||||
<value>(Automatikus észlelés)</value>
|
||||
</data>
|
||||
<data name="strMenuAbout" xml:space="preserve">
|
||||
<value>Névjegy</value>
|
||||
</data>
|
||||
<data name="strMenuCheckForUpdates" xml:space="preserve">
|
||||
<value>Frissítés keresése</value>
|
||||
</data>
|
||||
<data name="strMenuJumpTo" xml:space="preserve">
|
||||
<value>Ugrás</value>
|
||||
</data>
|
||||
<data name="strMenuLaunchExternalTool" xml:space="preserve">
|
||||
<value>Külső eszköz indítása</value>
|
||||
</data>
|
||||
<data name="strMenuNewConnectionFile" xml:space="preserve">
|
||||
<value>Új kapcsolatfájl</value>
|
||||
</data>
|
||||
<data name="strMenuNewExternalTool" xml:space="preserve">
|
||||
<value>Új külső eszköz</value>
|
||||
</data>
|
||||
<data name="strMenuNotifications" xml:space="preserve">
|
||||
<value>Értesítések</value>
|
||||
</data>
|
||||
<data name="strMenuOpenConnectionFile" xml:space="preserve">
|
||||
<value>Kapcsolatfájl megnyitása...</value>
|
||||
</data>
|
||||
<data name="strMenuOptions" xml:space="preserve">
|
||||
<value>Opciók</value>
|
||||
</data>
|
||||
<data name="strMenuReconnect" xml:space="preserve">
|
||||
<value>Újrakapcsolódás</value>
|
||||
</data>
|
||||
<data name="strMenuRename" xml:space="preserve">
|
||||
<value>Átnevezés</value>
|
||||
</data>
|
||||
<data name="strMenuRenameConnection" xml:space="preserve">
|
||||
<value>Kapcsolat átnevezése</value>
|
||||
</data>
|
||||
<data name="strMenuRenameFolder" xml:space="preserve">
|
||||
<value>Könyvtár átnevezése</value>
|
||||
</data>
|
||||
<data name="strMenuRenameTab" xml:space="preserve">
|
||||
<value>Fül átnevezése</value>
|
||||
</data>
|
||||
<data name="strMenuReportBug" xml:space="preserve">
|
||||
<value>Hibabejelentés</value>
|
||||
</data>
|
||||
<data name="strMenuResetLayout" xml:space="preserve">
|
||||
<value>Elrendezés alaphelyzetbe állítása</value>
|
||||
</data>
|
||||
<data name="strMenuSaveConnectionFile" xml:space="preserve">
|
||||
<value>Kapcsolatfájl mentése</value>
|
||||
</data>
|
||||
<data name="strMenuSaveConnectionFileAs" xml:space="preserve">
|
||||
<value>Kapcsolatfájl mentése, mint...</value>
|
||||
</data>
|
||||
<data name="strMenuScreenshot" xml:space="preserve">
|
||||
<value>Képernyőmentés</value>
|
||||
</data>
|
||||
<data name="strMenuScreenshotManager" xml:space="preserve">
|
||||
<value>Képernyőmentés kezelő</value>
|
||||
</data>
|
||||
<data name="strMenuSessions" xml:space="preserve">
|
||||
<value>Munkamenetek</value>
|
||||
</data>
|
||||
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
|
||||
<value>Munkamanetek és képernyőmentések</value>
|
||||
</data>
|
||||
<data name="strMenuWebsite" xml:space="preserve">
|
||||
<value>Honlap</value>
|
||||
</data>
|
||||
<data name="strNever" xml:space="preserve">
|
||||
<value>Soha</value>
|
||||
</data>
|
||||
<data name="strNewConnection" xml:space="preserve">
|
||||
<value>Új kapcsolat</value>
|
||||
</data>
|
||||
<data name="strNewFolder" xml:space="preserve">
|
||||
<value>Új mappa</value>
|
||||
</data>
|
||||
<data name="strNewPanel" xml:space="preserve">
|
||||
<value>Új panel</value>
|
||||
</data>
|
||||
<data name="strNewRoot" xml:space="preserve">
|
||||
<value>Új gyökérelem</value>
|
||||
</data>
|
||||
<data name="strNewTitle" xml:space="preserve">
|
||||
<value>Új cím</value>
|
||||
</data>
|
||||
<data name="strNo" xml:space="preserve">
|
||||
<value>Nem</value>
|
||||
</data>
|
||||
<data name="strUseSQLServer" xml:space="preserve">
|
||||
<value>SQL szerver használata a kapcsolatok kezelésére</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1876,9 +1876,6 @@ Messaggio:
|
||||
<data name="strSSHTransferEndFailed" xml:space="preserve">
|
||||
<value>SSH Transfer End (UI.Window.SSHTransfer) fallito!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Trasferimento</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>IP iniziale</value>
|
||||
</data>
|
||||
|
||||
2195
mRemoteV1/Language/Language.nb-NO.resx
Normal file
2195
mRemoteV1/Language/Language.nb-NO.resx
Normal file
File diff suppressed because it is too large
Load Diff
@@ -417,6 +417,12 @@ VncSharpNG Versie {0}</value>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>Kan opdrachtprompt argumenten niet parsen!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} heeft de Lenovo Auto Scroll Utility op het systeem ontdekt. Deze utility staat bekend om problemen met {0}. Het wordt aangeraden om het uit te schakelen of te deïnstalleren.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Compatibiliteits probleem ontdekt</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Controle Componenten</value>
|
||||
</data>
|
||||
@@ -1541,6 +1547,9 @@ Bericht:
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>PuTTy Formaat Wijzigen Mislukt!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>PuTTY opgeslagen sessies</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>PuTTY Instellingen</value>
|
||||
</data>
|
||||
@@ -1887,7 +1896,7 @@ Bericht:
|
||||
<value>SSH Overdracht (UI.Window.SSHTransfer) mislukt!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Overdracht</value>
|
||||
<value>SSH overdracht heeft gefaald.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>Start IP</value>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
490
mRemoteV1/Language/Language.pt-BR.resx
Normal file
490
mRemoteV1/Language/Language.pt-BR.resx
Normal file
@@ -0,0 +1,490 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="strAbout" xml:space="preserve">
|
||||
<value>Sobre</value>
|
||||
</data>
|
||||
<data name="strActive" xml:space="preserve">
|
||||
<value>Ativo</value>
|
||||
</data>
|
||||
<data name="strActivity" xml:space="preserve">
|
||||
<value>Atividade</value>
|
||||
</data>
|
||||
<data name="strAddConnection" xml:space="preserve">
|
||||
<value>Nova conexão</value>
|
||||
</data>
|
||||
<data name="strAddFolder" xml:space="preserve">
|
||||
<value>Nova pasta</value>
|
||||
</data>
|
||||
<data name="strAddNodeFromXmlFailed" xml:space="preserve">
|
||||
<value>AddNodeFromXML falhou!</value>
|
||||
</data>
|
||||
<data name="strAddNodesFromSqlFailed" xml:space="preserve">
|
||||
<value>AddNodesFromSQL falhou!</value>
|
||||
</data>
|
||||
<data name="strAllowOnlySingleInstance" xml:space="preserve">
|
||||
<value>Permitir apenas uma única instância do aplicativo (É necessário reiniciar o mRemoteNG)</value>
|
||||
</data>
|
||||
<data name="strAlways" xml:space="preserve">
|
||||
<value>Sempre</value>
|
||||
</data>
|
||||
<data name="strAlwaysConnectEvenIfAuthFails" xml:space="preserve">
|
||||
<value>Conectar sempre, mesmo se a autenticação falhar</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelSelection" xml:space="preserve">
|
||||
<value>Sempre mostrar a caixa de diálogo de seleção de painel ao abrir conexões</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
|
||||
<value>Sempre mostrar ícone da área de notificação</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
|
||||
<value>Me pergunte novamente mais tarde</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandCustom" xml:space="preserve">
|
||||
<value>Personalizar as configurações agora</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandRecommended" xml:space="preserve">
|
||||
<value>Usar as configurações recomendadas</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesContent" xml:space="preserve">
|
||||
<value>{0} pode verificar automaticamente as atualizações que podem fornecer novas funcionalidades e correções de bugs. É recomendável que você permita {0} verificar atualizações semanais.</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesMainInstruction" xml:space="preserve">
|
||||
<value>Configurações de atualização automática</value>
|
||||
</data>
|
||||
<data name="strAspect" xml:space="preserve">
|
||||
<value>Aspecto</value>
|
||||
</data>
|
||||
<data name="strAutomaticallyGetSessionInfo" xml:space="preserve">
|
||||
<value>Obter automaticamente informações de sessão</value>
|
||||
</data>
|
||||
<data name="strAutoSaveEvery" xml:space="preserve">
|
||||
<value>Salvar automaticamente a cada:</value>
|
||||
</data>
|
||||
<data name="strAutoSaveMins" xml:space="preserve">
|
||||
<value>Minutos (0 significa desativado)</value>
|
||||
</data>
|
||||
<data name="strAvailableVersion" xml:space="preserve">
|
||||
<value>Versão atual</value>
|
||||
</data>
|
||||
<data name="strButtonBrowse" xml:space="preserve">
|
||||
<value>& Procurar...</value>
|
||||
</data>
|
||||
<data name="strButtonCancel" xml:space="preserve">
|
||||
<value>& Cancelar</value>
|
||||
</data>
|
||||
<data name="strButtonChange" xml:space="preserve">
|
||||
<value>Alterar</value>
|
||||
</data>
|
||||
<data name="strButtonClose" xml:space="preserve">
|
||||
<value>& 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>& 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>& Novo</value>
|
||||
</data>
|
||||
<data name="strButtonOK" xml:space="preserve">
|
||||
<value>& OK</value>
|
||||
</data>
|
||||
<data name="strButtonProperties" xml:space="preserve">
|
||||
<value>Propriedades</value>
|
||||
</data>
|
||||
<data name="strButtonScan" xml:space="preserve">
|
||||
<value>& Scanear</value>
|
||||
</data>
|
||||
<data name="strButtonStop" xml:space="preserve">
|
||||
<value>& Parar</value>
|
||||
</data>
|
||||
<data name="strButtonTestProxy" xml:space="preserve">
|
||||
<value>Testar Proxy</value>
|
||||
</data>
|
||||
<data name="strCannotImportNormalSessionFile" xml:space="preserve">
|
||||
<value>Você não pode importar um arquivo de conexão normal. Por favor, use Arquivo - Carregar Conexões para os arquivos de conexão normal!</value>
|
||||
</data>
|
||||
<data name="strCannotStartPortScan" xml:space="preserve">
|
||||
<value>Não é possível iniciar a varredura de portas, formato IP incorreto!</value>
|
||||
</data>
|
||||
<data name="strCategoryAppearance" xml:space="preserve">
|
||||
<value>Aparência</value>
|
||||
</data>
|
||||
<data name="strCategoryConnection" xml:space="preserve">
|
||||
<value>Conexão</value>
|
||||
</data>
|
||||
<data name="strCategoryCredentials" xml:space="preserve">
|
||||
<value>Credenciais</value>
|
||||
</data>
|
||||
<data name="strCategoryDisplay" xml:space="preserve">
|
||||
<value>Mostrar</value>
|
||||
</data>
|
||||
<data name="strCategoryGateway" xml:space="preserve">
|
||||
<value>Gateway</value>
|
||||
</data>
|
||||
<data name="strCategoryGeneral" xml:space="preserve">
|
||||
<value>Geral</value>
|
||||
</data>
|
||||
<data name="strCategoryMiscellaneous" xml:space="preserve">
|
||||
<value>Diversos</value>
|
||||
</data>
|
||||
<data name="strCategoryProtocol" xml:space="preserve">
|
||||
<value>Protocolo</value>
|
||||
</data>
|
||||
<data name="strCategoryRedirect" xml:space="preserve">
|
||||
<value>Redirecionar</value>
|
||||
</data>
|
||||
<data name="strCcAlwaysShowScreen" xml:space="preserve">
|
||||
<value>Sempre mostrar esta tela na inicialização</value>
|
||||
</data>
|
||||
<data name="strCcCheckAgain" xml:space="preserve">
|
||||
<value>Atualizar</value>
|
||||
</data>
|
||||
<data name="strCcCheckFailed" xml:space="preserve">
|
||||
<value>Falha na verificação!</value>
|
||||
</data>
|
||||
<data name="strCcCheckSucceeded" xml:space="preserve">
|
||||
<value>Verificação com sucesso!</value>
|
||||
</data>
|
||||
<data name="strCcEOLFailed" xml:space="preserve">
|
||||
<value>O recurso de sessões (RDP) requer que você tenha uma cópia registrada do eolwtscom.dll no seu sistema.
|
||||
mRemoteNG vem com este componente mas não o registra automaticamente a menos que você instale o pacote.
|
||||
Para registrá-lo manualmente faça isso: Abra a caixa de diálogo Executar (Iniciar - Executar) e digite o seguinte: regsvr32 "c:\Program Files\mRemoteNG\eolwtscom.dll" (onde c:\Program Files\mRemoteNG\ é o caminho para a instalação de mRemoteNG).
|
||||
Se você ainda não conseguir passar por esta verificação ou não conseguir usar o recurso de sessões (RDP) no mRemoteNG, por favor, consulte o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
|
||||
</data>
|
||||
<data name="strCcEOLOK" xml:space="preserve">
|
||||
<value>EOLWTSCOM foi encontrada e parece ser registrado corretamente.</value>
|
||||
</data>
|
||||
<data name="strCcGeckoFailed" xml:space="preserve">
|
||||
<value>Para usar o motor de renderização Gecko, você precisa ter o XULrunner 1.8.1.x e o caminho para a instalação do conjunto em suas opções.
|
||||
Você pode baixar o XULrunner 1.8.1.3 em: ftp://ftp.mozilla.org/pub/xulrunner/releases/1.8.1.3/contrib/win32/
|
||||
Quando terminar de baixar o pacote, extraia o pacote para um caminho de sua escolha.
|
||||
Em seguida, emtre no mRemoteNG e vá em ferramentas - opções - avançadas e digite o caminho correto no campo caminho XULrunner.
|
||||
Se ainda não conseguir passar esta verificação ou usar o motor Gecko em mRemoteNG por favor consultar o fórum de mRemoteNG em http://forum.mremoteng.org/</value>
|
||||
</data>
|
||||
<data name="strCcGeckoOK" xml:space="preserve">
|
||||
<value>XULrunner foi encontrado e aparenta estar instalado corretamente.</value>
|
||||
</data>
|
||||
<data name="strCcICAFailed" xml:space="preserve">
|
||||
<value>ICA requer que o XenDesktop Online Plugin esteja instalado e a biblioteca wfica.ocs registrada. Você pode baixar o cliente aqui: http://www.citrix.com/download/
|
||||
Se você tiver o Plugin Online XenDesktop instalado e a verificação ainda falhar, tente registrar manualmente o wfica.ocx
|
||||
Para fazer isso abra a caixa de diálogo Executar (Iniciar - Executar) e digite o seguinte: regsvr32 "c:\Program Files\Citrix\ICA Client\wfica.ocx" (onde c:\Program Files\Citrix\ICA Client\ é o caminho para a instalação do Plugin Online do XenDesktop).
|
||||
Se você ainda não puder passar por esta verificação ou usar ICA em mRemoteNG, por favor, consulte o fórum de mRemoteNG no http://forum.mremoteng.org/"</value>
|
||||
</data>
|
||||
<data name="strCcICAOK" xml:space="preserve">
|
||||
<value>Todos os componentes de ICA, foram encontrados e parecem ser registrado corretamente. Citrix ICA cliente controle versão {0}</value>
|
||||
</data>
|
||||
<data name="strCcNotInstalledProperly" xml:space="preserve">
|
||||
<value>não instalado corretamente</value>
|
||||
</data>
|
||||
<data name="strCcPuttyFailed" xml:space="preserve">
|
||||
<value>O SSH, Telnet, Rlogin e protocolos RAW precisam PuTTY para trabalhar. PuTTY vem com cada pacote de mRemoteNG e está localizado no caminho de instalação.
|
||||
Por favor, certifique-se de que você tem o Putty.exe em seu diretório mRemoteNG (padrão: c:\Program Files\mRemoteNG\) ou que você tenha especificado um caminho válido para seu executável PuTTY nas opções (ferramentas - opções - avançadas - caminho personalizado PuTTY)</value>
|
||||
</data>
|
||||
<data name="strCcPuttyOK" xml:space="preserve">
|
||||
<value>O executável PuTTY foi encontrado e está pronto para usar.</value>
|
||||
</data>
|
||||
<data name="strCheckboxDomain" xml:space="preserve">
|
||||
<value>Domínio</value>
|
||||
</data>
|
||||
<data name="strCheckboxDoNotShowThisMessageAgain" xml:space="preserve">
|
||||
<value>Não mostre esta mensagem novamente.</value>
|
||||
</data>
|
||||
<data name="strCheckboxInheritance" xml:space="preserve">
|
||||
<value>Herança</value>
|
||||
</data>
|
||||
<data name="strCheckboxPassword" xml:space="preserve">
|
||||
<value>Senha</value>
|
||||
</data>
|
||||
<data name="strCheckboxProxyAuthentication" xml:space="preserve">
|
||||
<value>Este servidor proxy requer autenticação</value>
|
||||
</data>
|
||||
<data name="strCheckboxPuttyPath" xml:space="preserve">
|
||||
<value>Use o caminho personalizado para o PuTTY:</value>
|
||||
</data>
|
||||
<data name="strCheckboxReconnectWhenReady" xml:space="preserve">
|
||||
<value>Reconectar quando estiver pronto</value>
|
||||
</data>
|
||||
<data name="strCheckboxUpdateUseProxy" xml:space="preserve">
|
||||
<value>Usar um servidor proxy para se conectar</value>
|
||||
</data>
|
||||
<data name="strCheckboxUsername" xml:space="preserve">
|
||||
<value>Nome de usuário</value>
|
||||
</data>
|
||||
<data name="strCheckboxWaitForExit" xml:space="preserve">
|
||||
<value>Esperar para sair</value>
|
||||
</data>
|
||||
<data name="strCheckForUpdate" xml:space="preserve">
|
||||
<value>Verificar novamente</value>
|
||||
</data>
|
||||
<data name="strCheckForUpdatesOnStartup" xml:space="preserve">
|
||||
<value>Verificar se há atualizações e anúncios na inicialização</value>
|
||||
</data>
|
||||
<data name="strCheckNow" xml:space="preserve">
|
||||
<value>Verificar agora</value>
|
||||
</data>
|
||||
<data name="strClosedPorts" xml:space="preserve">
|
||||
<value>Portas fechadas</value>
|
||||
</data>
|
||||
<data name="strCollapseAllFolders" xml:space="preserve">
|
||||
<value>Recolher todas as pastas</value>
|
||||
</data>
|
||||
<data name="strColumnArguments" xml:space="preserve">
|
||||
<value>Argumentos</value>
|
||||
</data>
|
||||
<data name="strColumnDisplayName" xml:space="preserve">
|
||||
<value>Nome de exibição</value>
|
||||
</data>
|
||||
<data name="strColumnFilename" xml:space="preserve">
|
||||
<value>Nome do arquivo</value>
|
||||
</data>
|
||||
<data name="strColumnHostnameIP" xml:space="preserve">
|
||||
<value>HostName/IP</value>
|
||||
</data>
|
||||
<data name="strColumnMessage" xml:space="preserve">
|
||||
<value>Mensagem</value>
|
||||
</data>
|
||||
<data name="strColumnUsername" xml:space="preserve">
|
||||
<value>Nome de usuário</value>
|
||||
</data>
|
||||
<data name="strColumnWaitForExit" xml:space="preserve">
|
||||
<value>Esperar para sair</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Validação de componentes</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
|
||||
<value>btnIcon_Click falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridHideItemsFailed" xml:space="preserve">
|
||||
<value>ShowHideGridItems falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridMenuClickFailed" xml:space="preserve">
|
||||
<value>IconMenu_Click falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridObjectFailed" xml:space="preserve">
|
||||
<value>Propriedade do Objeto de grade falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridSetHostStatusFailed" xml:space="preserve">
|
||||
<value>SetHostStatus falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridValueFailed" xml:space="preserve">
|
||||
<value>pGrid_PopertyValueChanged falhou!</value>
|
||||
</data>
|
||||
<data name="strConfigUiLoadFailed" xml:space="preserve">
|
||||
<value>Config UI carregamento falhou!</value>
|
||||
</data>
|
||||
<data name="strConfirmCloseConnectionMainInstruction" xml:space="preserve">
|
||||
<value>Você quer fechar a conexão, "{0}"?</value>
|
||||
</data>
|
||||
<data name="strConfirmCloseConnectionPanelMainInstruction" xml:space="preserve">
|
||||
<value>Tem certeza que deseja fechar o painel, "{0}"? Todas as ligações ativas serão fechadas.</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteExternalTool" xml:space="preserve">
|
||||
<value>Tem certeza que deseja excluir a ferramenta externa, "{0}"?</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteExternalToolMultiple" xml:space="preserve">
|
||||
<value>Tem certeza que deseja excluir as ferramentas externas {0} selecionadas?</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteNodeConnection" xml:space="preserve">
|
||||
<value>Tem certeza que deseja excluir a ligação, "{0}"?</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteNodeFolder" xml:space="preserve">
|
||||
<value>Tem certeza que deseja excluir a pasta vazia, "{0}"?</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteNodeFolderNotEmpty" xml:space="preserve">
|
||||
<value>Tem certeza que deseja excluir a pasta, "{0}"? Pastas ou ligações que ele contém também serão excluídas.</value>
|
||||
</data>
|
||||
<data name="strConfirmExitMainInstruction" xml:space="preserve">
|
||||
<value>Você quer fechar todas as conexões abertas?</value>
|
||||
</data>
|
||||
<data name="strConfirmResetLayout" xml:space="preserve">
|
||||
<value>Tem certeza de que deseja redefinir os painéis para o layout padrão?</value>
|
||||
</data>
|
||||
<data name="strConnect" xml:space="preserve">
|
||||
<value>Conectar-se</value>
|
||||
</data>
|
||||
<data name="strConnectInFullscreen" xml:space="preserve">
|
||||
<value>Se conectar em modo fullscreen</value>
|
||||
</data>
|
||||
<data name="strConnecting" xml:space="preserve">
|
||||
<value>Conectando...</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnected" xml:space="preserve">
|
||||
<value>Protocolo evento conectado</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnectedDetail" xml:space="preserve">
|
||||
<value>Conexão para "{0}" via "{1}" estabelecido pelo usuário "{2}" (Descrição: "{3}"; Campo usuário: "{4}")</value>
|
||||
</data>
|
||||
<data name="strConnectionEventConnectionFailed" xml:space="preserve">
|
||||
<value>Conexão falhou!</value>
|
||||
</data>
|
||||
<data name="strConnectionEventErrorOccured" xml:space="preserve">
|
||||
<value>Erro no evento de protocolo</value>
|
||||
</data>
|
||||
<data name="strConnectionOpenFailed" xml:space="preserve">
|
||||
<value>Abrir conexão falhou!</value>
|
||||
</data>
|
||||
<data name="strConnectionOpenFailedNoHostname" xml:space="preserve">
|
||||
<value>Não é possível abrir a conexão: nenhum nome de host especificado!</value>
|
||||
</data>
|
||||
<data name="strConnectionRdpErrorDetail" xml:space="preserve">
|
||||
<value>Erro RDP!
|
||||
Código de erro: {0}
|
||||
Descrição do erro: {1}</value>
|
||||
</data>
|
||||
<data name="strConnections" xml:space="preserve">
|
||||
<value>Conexões</value>
|
||||
</data>
|
||||
<data name="strConnectionSetDefaultPortFailed" xml:space="preserve">
|
||||
<value>Impossível definir porta padrão!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileBackupFailed" xml:space="preserve">
|
||||
<value>Não foi possível criar o backup do arquivo de conexões!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeImported" xml:space="preserve">
|
||||
<value>Falha na importação do arquivo de conexões!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeLoaded" xml:space="preserve">
|
||||
<value>Arquivo de conexões "{0}" não pôde ser carregado!</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeLoadedNew" xml:space="preserve">
|
||||
<value>Arquivo de conexões "{0}" não pôde ser carregado! Começando com o novo arquivo de conexões.</value>
|
||||
</data>
|
||||
<data name="strConnectionsFileCouldNotBeSaved" xml:space="preserve">
|
||||
<value>Não consegui salvar o arquivo de conexões!</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -606,7 +606,7 @@ Descrição do erro: {1}</value>
|
||||
<value>Erros</value>
|
||||
</data>
|
||||
<data name="strErrorStartupConnectionFileLoad" xml:space="preserve">
|
||||
<value>O arquivo de inicialização de ligação não pôde ser carregado.{0}{0}(2){0}{3}{0}{0}A fim de evitar perda de dados, {1} vai sair agora.</value>
|
||||
<value>O arquivo de inicialização de ligação não pôde ser carregado.{0}{0}{2}{0}{3}{0}{0}A fim de evitar perda de dados, {1} vai sair agora.</value>
|
||||
</data>
|
||||
<data name="strErrorVerifyDatabaseVersionFailed" xml:space="preserve">
|
||||
<value>VerifyDatabaseVersion (Config.Connections.Save) falhou. {0}</value>
|
||||
@@ -1856,9 +1856,6 @@ Descrição do erro: {1}</value>
|
||||
<data name="strSSHTransferEndFailed" xml:space="preserve">
|
||||
<value>SSH transferência final (interface do usuário.Window.SSHTransfer) falhou!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Transferência</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>IP de início</value>
|
||||
</data>
|
||||
|
||||
@@ -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>&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&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>&Open a connection file</value>
|
||||
</data>
|
||||
<data name="strCommandTryAgain" xml:space="preserve">
|
||||
<value>&Try again</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} has detected the Lenovo Auto Scroll Utility running on this system. This utility is known to cause problems with {0}. It is recommended that you disable or uninstall it.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Compatibility problem detected</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Components Check</value>
|
||||
</data>
|
||||
@@ -543,9 +560,15 @@ Starting with new connections file.</value>
|
||||
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
|
||||
<value>Couldn't create new connections file!</value>
|
||||
</data>
|
||||
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
|
||||
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
|
||||
</data>
|
||||
<data name="strCurrentVersion" xml:space="preserve">
|
||||
<value>Installed version</value>
|
||||
</data>
|
||||
<data name="strDefaultTheme" xml:space="preserve">
|
||||
<value>Default Theme</value>
|
||||
</data>
|
||||
<data name="strDetect" xml:space="preserve">
|
||||
<value>Detect</value>
|
||||
</data>
|
||||
@@ -609,6 +632,9 @@ Starting with new connections file.</value>
|
||||
<data name="strErrorConnectionListSaveFailed" xml:space="preserve">
|
||||
<value>The connection list could not be saved.</value>
|
||||
</data>
|
||||
<data name="strErrorCouldNotLaunchPutty" xml:space="preserve">
|
||||
<value>PuTTY could not be launched.</value>
|
||||
</data>
|
||||
<data name="strErrorDecryptionFailed" xml:space="preserve">
|
||||
<value>Decryption failed. {0}</value>
|
||||
</data>
|
||||
@@ -751,6 +777,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<data name="strIcaSetResolutionFailed" xml:space="preserve">
|
||||
<value>ICA Set Resolution Failed!</value>
|
||||
</data>
|
||||
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
|
||||
<value>Identify quick connect tabs by adding the prefix "Quick:"</value>
|
||||
</data>
|
||||
<data name="strImportAD" xml:space="preserve">
|
||||
<value>Import from Active Directory</value>
|
||||
</data>
|
||||
@@ -817,6 +846,9 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<data name="strLabelChangeLog" xml:space="preserve">
|
||||
<value>Change Log:</value>
|
||||
</data>
|
||||
<data name="strLabelClosingConnections" xml:space="preserve">
|
||||
<value>When closing connections:</value>
|
||||
</data>
|
||||
<data name="strLabelConnect" xml:space="preserve">
|
||||
<value>&Connect:</value>
|
||||
</data>
|
||||
@@ -887,7 +919,10 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<value>{0} must be restarted before changes to the language will take effect.</value>
|
||||
</data>
|
||||
<data name="strLoadFromSqlFailed" xml:space="preserve">
|
||||
<value>Load From SQL failed!</value>
|
||||
<value>Load from SQL failed</value>
|
||||
</data>
|
||||
<data name="strLoadFromSqlFailedContent" xml:space="preserve">
|
||||
<value>The connection information could not be loaded from the SQL server.</value>
|
||||
</data>
|
||||
<data name="strLoadFromXmlFailed" xml:space="preserve">
|
||||
<value>Load From XML failed!</value>
|
||||
@@ -1018,6 +1053,15 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<data name="strMenuNotifications" xml:space="preserve">
|
||||
<value>Notifications</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
|
||||
<value>Copy All</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDelete" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
|
||||
<value>Delete All</value>
|
||||
</data>
|
||||
<data name="strMenuOpenConnectionFile" xml:space="preserve">
|
||||
<value>Open Connection File...</value>
|
||||
</data>
|
||||
@@ -1072,12 +1116,18 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<data name="strMenuSendSpecialKeys" xml:space="preserve">
|
||||
<value>Send Special Keys (VNC)</value>
|
||||
</data>
|
||||
<data name="strMenuSessionRetrieve" xml:space="preserve">
|
||||
<value>Retrieve</value>
|
||||
</data>
|
||||
<data name="strMenuSessions" xml:space="preserve">
|
||||
<value>Sessions</value>
|
||||
</data>
|
||||
<data name="strMenuSessionsAndScreenshots" xml:space="preserve">
|
||||
<value>Sessions and Screenshots</value>
|
||||
</data>
|
||||
<data name="strMenuShowHelpText" xml:space="preserve">
|
||||
<value>&Show Help Text</value>
|
||||
</data>
|
||||
<data name="strMenuShowText" xml:space="preserve">
|
||||
<value>Show Text</value>
|
||||
</data>
|
||||
@@ -1172,6 +1222,18 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="strOpenPorts" xml:space="preserve">
|
||||
<value>Open Ports</value>
|
||||
</data>
|
||||
<data name="strOptionsProxyTesting" xml:space="preserve">
|
||||
<value>Testing...</value>
|
||||
</data>
|
||||
<data name="strOptionsTabTheme" xml:space="preserve">
|
||||
<value>Theme</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
|
||||
<value>&Delete</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonNew" xml:space="preserve">
|
||||
<value>&New</value>
|
||||
</data>
|
||||
<data name="strPanelName" xml:space="preserve">
|
||||
<value>Panel Name</value>
|
||||
</data>
|
||||
@@ -1199,6 +1261,9 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="strPropertyDescriptionAuthenticationMode" xml:space="preserve">
|
||||
<value>Select how you want to authenticate against the VNC server.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionAutomaticResize" xml:space="preserve">
|
||||
<value>Select whether to automatically resize the connection when the window is resized or when fullscreen mode is toggled. Requires RDC 8.0 or higher.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionCacheBitmaps" xml:space="preserve">
|
||||
<value>Select whether to use bitmap caching or not.</value>
|
||||
</data>
|
||||
@@ -1244,6 +1309,9 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="strPropertyDescriptionIcon" xml:space="preserve">
|
||||
<value>Choose a icon that will be displayed when connected to the host.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionLoadBalanceInfo" xml:space="preserve">
|
||||
<value>Specifies the load balancing information for use by load balancing routers to choose the best server.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionMACAddress" xml:space="preserve">
|
||||
<value>Enter the MAC address of the remote host if you wish to use it in an external tool.</value>
|
||||
</data>
|
||||
@@ -1349,6 +1417,9 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="strPropertyNameAuthenticationMode" xml:space="preserve">
|
||||
<value>Authentication Mode</value>
|
||||
</data>
|
||||
<data name="strPropertyNameAutomaticResize" xml:space="preserve">
|
||||
<value>Automatic Resize</value>
|
||||
</data>
|
||||
<data name="strPropertyNameCacheBitmaps" xml:space="preserve">
|
||||
<value>Cache Bitmaps</value>
|
||||
</data>
|
||||
@@ -1394,6 +1465,9 @@ If you run into such an error, please create a new connection file!</value>
|
||||
<data name="strPropertyNameIcon" xml:space="preserve">
|
||||
<value>Icon</value>
|
||||
</data>
|
||||
<data name="strPropertyNameLoadBalanceInfo" xml:space="preserve">
|
||||
<value>Load Balance Info</value>
|
||||
</data>
|
||||
<data name="strPropertyNameMACAddress" xml:space="preserve">
|
||||
<value>MAC Address</value>
|
||||
</data>
|
||||
@@ -1532,6 +1606,12 @@ Message:
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>Putty Resize Failed!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>PuTTY Saved Sessions</value>
|
||||
</data>
|
||||
<data name="strPuttySessionSettings" xml:space="preserve">
|
||||
<value>PuTTY Session Settings</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>PuTTY Settings</value>
|
||||
</data>
|
||||
@@ -1562,6 +1642,18 @@ Message:
|
||||
<data name="strQuickConnectHistoryExistsFailed" xml:space="preserve">
|
||||
<value>Quick Connect History Exists Failed!</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnAll" xml:space="preserve">
|
||||
<value>&Warn me when closing connections</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnExit" xml:space="preserve">
|
||||
<value>Warn me only when e&xiting mRemoteNG</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
|
||||
<value>Warn me only when closing &multiple connections</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnNever" xml:space="preserve">
|
||||
<value>Do &not warn me when closing connections</value>
|
||||
</data>
|
||||
<data name="strRAW" xml:space="preserve">
|
||||
<value>RAW</value>
|
||||
</data>
|
||||
@@ -1677,7 +1769,7 @@ Message:
|
||||
<value>GetSessions failed!</value>
|
||||
</data>
|
||||
<data name="strRdpOpenConnectionFailed" xml:space="preserve">
|
||||
<value>Open RDP Connectin failed!</value>
|
||||
<value>Open RDP Connection failed!</value>
|
||||
</data>
|
||||
<data name="strRdpReconnectCount" xml:space="preserve">
|
||||
<value>RDP reconnection count:</value>
|
||||
@@ -1778,6 +1870,9 @@ Message:
|
||||
<data name="strScreenshots" xml:space="preserve">
|
||||
<value>Screenshots</value>
|
||||
</data>
|
||||
<data name="strSearchPrompt" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="strSendTo" xml:space="preserve">
|
||||
<value>Send To...</value>
|
||||
</data>
|
||||
@@ -1863,7 +1958,7 @@ Message:
|
||||
<value>SSH Transfer End (UI.Window.SSHTransfer) failed!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Transfer</value>
|
||||
<value>SSH transfer failed.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>Start IP</value>
|
||||
@@ -1898,216 +1993,14 @@ Message:
|
||||
<data name="strTheFollowing" xml:space="preserve">
|
||||
<value>The following:</value>
|
||||
</data>
|
||||
<data name="strTitleError" xml:space="preserve">
|
||||
<value>Error ({0})</value>
|
||||
</data>
|
||||
<data name="strTitleInformation" xml:space="preserve">
|
||||
<value>Information ({0})</value>
|
||||
</data>
|
||||
<data name="strTitlePassword" xml:space="preserve">
|
||||
<value>Password</value>
|
||||
</data>
|
||||
<data name="strTitleSelectPanel" xml:space="preserve">
|
||||
<value>Select Panel</value>
|
||||
</data>
|
||||
<data name="strTitleWarning" xml:space="preserve">
|
||||
<value>Warning ({0})</value>
|
||||
</data>
|
||||
<data name="strTransfer" xml:space="preserve">
|
||||
<value>Transfer</value>
|
||||
</data>
|
||||
<data name="strTransferFailed" xml:space="preserve">
|
||||
<value>Transfer failed!</value>
|
||||
</data>
|
||||
<data name="strTryIntegrate" xml:space="preserve">
|
||||
<value>Try to integrate</value>
|
||||
</data>
|
||||
<data name="strType" xml:space="preserve">
|
||||
<value>Type</value>
|
||||
</data>
|
||||
<data name="strUltraVncRepeater" xml:space="preserve">
|
||||
<value>Ultra VNC Repeater</value>
|
||||
</data>
|
||||
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
|
||||
<value>UltraVNC SingleClick port:</value>
|
||||
</data>
|
||||
<data name="strUncheckProperties" xml:space="preserve">
|
||||
<value>Uncheck the properties you want not to be saved!</value>
|
||||
</data>
|
||||
<data name="strUpdateAvailable" xml:space="preserve">
|
||||
<value>mRemoteNG requires an update</value>
|
||||
</data>
|
||||
<data name="strUpdateCheck" xml:space="preserve">
|
||||
<value>mRemoteNG can periodically connect to the mRemoteNG website to check for updates and product announcements.</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckCompleteFailed" xml:space="preserve">
|
||||
<value>Check for update completion failed!</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckFailed" xml:space="preserve">
|
||||
<value>Check For Update failed!</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
|
||||
<value>mRemoteNG Portable Edition does not currently support automatic updates.</value>
|
||||
</data>
|
||||
<data name="strUpdateDeleteFailed" xml:space="preserve">
|
||||
<value>Error deleting update file!</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadComplete" xml:space="preserve">
|
||||
<value>Download complete!
|
||||
mRemoteNG will now quit and begin with the installation.</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadCompleteFailed" xml:space="preserve">
|
||||
<value>Download complete failed!</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadFailed" xml:space="preserve">
|
||||
<value>Download Update failed!</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyCustom" xml:space="preserve">
|
||||
<value>Every {0} days</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyDaily" xml:space="preserve">
|
||||
<value>Daily</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyMonthly" xml:space="preserve">
|
||||
<value>Monthly</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyWeekly" xml:space="preserve">
|
||||
<value>Weekly</value>
|
||||
</data>
|
||||
<data name="strUpdateStartFailed" xml:space="preserve">
|
||||
<value>Error starting update!</value>
|
||||
</data>
|
||||
<data name="strUseDifferentUsernameAndPassword" xml:space="preserve">
|
||||
<value>Use a different username and password</value>
|
||||
</data>
|
||||
<data name="strUseOnlyErrorsAndInfosPanel" xml:space="preserve">
|
||||
<value>Use only Notifications panel (no messagebox popups)</value>
|
||||
</data>
|
||||
<data name="strUser" xml:space="preserve">
|
||||
<value>User</value>
|
||||
</data>
|
||||
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
|
||||
<value>Use the same username and password</value>
|
||||
</data>
|
||||
<data name="strUseSmartCard" xml:space="preserve">
|
||||
<value>Use a smart card</value>
|
||||
</data>
|
||||
<data name="strUseSQLServer" xml:space="preserve">
|
||||
<value>Use SQL Server to load && save connections</value>
|
||||
</data>
|
||||
<data name="strVersion" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="strVnc" xml:space="preserve">
|
||||
<value>VNC</value>
|
||||
</data>
|
||||
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
|
||||
<value>VNC disconnect failed!</value>
|
||||
</data>
|
||||
<data name="strVncConnectionOpenFailed" xml:space="preserve">
|
||||
<value>Opening connection failed!</value>
|
||||
</data>
|
||||
<data name="strVncRefreshFailed" xml:space="preserve">
|
||||
<value>VNC Refresh Screen Failed!</value>
|
||||
</data>
|
||||
<data name="strVncSendSpecialKeysFailed" xml:space="preserve">
|
||||
<value>VNC SendSpecialKeys failed!</value>
|
||||
</data>
|
||||
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
|
||||
<value>VNC Set Event Handlers failed!</value>
|
||||
</data>
|
||||
<data name="strVncSetPropsFailed" xml:space="preserve">
|
||||
<value>VNC Set Props Failed!</value>
|
||||
</data>
|
||||
<data name="strVncStartChatFailed" xml:space="preserve">
|
||||
<value>VNC Start Chat Failed!</value>
|
||||
</data>
|
||||
<data name="strVncToggleSmartSizeFailed" xml:space="preserve">
|
||||
<value>VNC Toggle SmartSize Failed!</value>
|
||||
</data>
|
||||
<data name="strVncToggleViewOnlyFailed" xml:space="preserve">
|
||||
<value>VNC Toggle ViewOnly Failed!</value>
|
||||
</data>
|
||||
<data name="strWarnIfAuthFails" xml:space="preserve">
|
||||
<value>Warn me if authentication fails</value>
|
||||
</data>
|
||||
<data name="strWarnings" xml:space="preserve">
|
||||
<value>Warnings</value>
|
||||
</data>
|
||||
<data name="strWeifenLuoAttribution" xml:space="preserve">
|
||||
<value>Uses the DockPanel Suite by [Weifen Luo]</value>
|
||||
</data>
|
||||
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
|
||||
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
|
||||
</data>
|
||||
<data name="strWriteLogFile" xml:space="preserve">
|
||||
<value>Write log file (mRemoteNG.log)</value>
|
||||
</data>
|
||||
<data name="strXULrunnerPath" xml:space="preserve">
|
||||
<value>XULrunner path:</value>
|
||||
</data>
|
||||
<data name="strYes" xml:space="preserve">
|
||||
<value>Yes</value>
|
||||
</data>
|
||||
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
|
||||
<value>Could not find ToolStrip control in FilteredPropertyGrid.</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
|
||||
<value>Always show panel tabs</value>
|
||||
</data>
|
||||
<data name="strIdentifyQuickConnectTabs" xml:space="preserve">
|
||||
<value>Identify quick connect tabs by adding the prefix "Quick:"</value>
|
||||
</data>
|
||||
<data name="strSearchPrompt" xml:space="preserve">
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsCopyAll" xml:space="preserve">
|
||||
<value>Copy All</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDelete" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="strMenuNotificationsDeleteAll" xml:space="preserve">
|
||||
<value>Delete All</value>
|
||||
</data>
|
||||
<data name="strLabelClosingConnections" xml:space="preserve">
|
||||
<value>When closing connections:</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnAll" xml:space="preserve">
|
||||
<value>&Warn me when closing connections</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnExit" xml:space="preserve">
|
||||
<value>Warn me only when e&xiting mRemoteNG</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnMultiple" xml:space="preserve">
|
||||
<value>Warn me only when closing &multiple connections</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnNever" xml:space="preserve">
|
||||
<value>Do &not warn me when closing connections</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryGeneral" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryConfigPanel" xml:space="preserve">
|
||||
<value>Config Panel</value>
|
||||
</data>
|
||||
<data name="strThemeCategoryConnectionsPanel" xml:space="preserve">
|
||||
<value>Connections Panel</value>
|
||||
</data>
|
||||
<data name="strDefaultTheme" xml:space="preserve">
|
||||
<value>Default Theme</value>
|
||||
</data>
|
||||
<data name="strOptionsTabTheme" xml:space="preserve">
|
||||
<value>Theme</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonDelete" xml:space="preserve">
|
||||
<value>&Delete</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeButtonNew" xml:space="preserve">
|
||||
<value>&New</value>
|
||||
</data>
|
||||
<data name="strUnnamedTheme" xml:space="preserve">
|
||||
<value>Unnamed Theme</value>
|
||||
<data name="strThemeCategoryGeneral" xml:space="preserve">
|
||||
<value>General</value>
|
||||
</data>
|
||||
<data name="strThemeDescriptionConfigPanelBackgroundColor" xml:space="preserve">
|
||||
<value>The background colour of the config panel.</value>
|
||||
@@ -2211,10 +2104,161 @@ mRemoteNG will now quit and begin with the installation.</value>
|
||||
<data name="strThemeNameWindowBackgroundColor" xml:space="preserve">
|
||||
<value>Window Background Colour</value>
|
||||
</data>
|
||||
<data name="strMenuShowHelpText" xml:space="preserve">
|
||||
<value>&Show Help Text</value>
|
||||
<data name="strTitleError" xml:space="preserve">
|
||||
<value>Error ({0})</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>PuTTY Saved Sessions</value>
|
||||
<data name="strTitleInformation" xml:space="preserve">
|
||||
<value>Information ({0})</value>
|
||||
</data>
|
||||
<data name="strTitlePassword" xml:space="preserve">
|
||||
<value>Password</value>
|
||||
</data>
|
||||
<data name="strTitleSelectPanel" xml:space="preserve">
|
||||
<value>Select Panel</value>
|
||||
</data>
|
||||
<data name="strTitleWarning" xml:space="preserve">
|
||||
<value>Warning ({0})</value>
|
||||
</data>
|
||||
<data name="strTransfer" xml:space="preserve">
|
||||
<value>Transfer</value>
|
||||
</data>
|
||||
<data name="strTransferFailed" xml:space="preserve">
|
||||
<value>Transfer failed!</value>
|
||||
</data>
|
||||
<data name="strTryIntegrate" xml:space="preserve">
|
||||
<value>Try to integrate</value>
|
||||
</data>
|
||||
<data name="strType" xml:space="preserve">
|
||||
<value>Type</value>
|
||||
</data>
|
||||
<data name="strUltraVncRepeater" xml:space="preserve">
|
||||
<value>Ultra VNC Repeater</value>
|
||||
</data>
|
||||
<data name="strUltraVNCSCListeningPort" xml:space="preserve">
|
||||
<value>UltraVNC SingleClick port:</value>
|
||||
</data>
|
||||
<data name="strUncheckProperties" xml:space="preserve">
|
||||
<value>Uncheck the properties you want not to be saved!</value>
|
||||
</data>
|
||||
<data name="strUnnamedTheme" xml:space="preserve">
|
||||
<value>Unnamed Theme</value>
|
||||
</data>
|
||||
<data name="strUpdateAvailable" xml:space="preserve">
|
||||
<value>mRemoteNG requires an update</value>
|
||||
</data>
|
||||
<data name="strUpdateCheck" xml:space="preserve">
|
||||
<value>mRemoteNG can periodically connect to the mRemoteNG website to check for updates and product announcements.</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckCompleteFailed" xml:space="preserve">
|
||||
<value>The update information could not be downloaded.</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckFailedLabel" xml:space="preserve">
|
||||
<value>Check failed</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckingLabel" xml:space="preserve">
|
||||
<value>Checking for updates...</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
|
||||
<value>mRemoteNG Portable Edition does not currently support automatic updates.</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadComplete" xml:space="preserve">
|
||||
<value>Download complete!
|
||||
mRemoteNG will now quit and begin with the installation.</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadCompleteFailed" xml:space="preserve">
|
||||
<value>The update could not be downloaded.</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadFailed" xml:space="preserve">
|
||||
<value>The update download could not be initiated.</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyCustom" xml:space="preserve">
|
||||
<value>Every {0} days</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyDaily" xml:space="preserve">
|
||||
<value>Daily</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyMonthly" xml:space="preserve">
|
||||
<value>Monthly</value>
|
||||
</data>
|
||||
<data name="strUpdateFrequencyWeekly" xml:space="preserve">
|
||||
<value>Weekly</value>
|
||||
</data>
|
||||
<data name="strUpdateGetAnnouncementInfoFailed" xml:space="preserve">
|
||||
<value>The announcement information could not be downloaded.</value>
|
||||
</data>
|
||||
<data name="strUpdateGetChangeLogFailed" xml:space="preserve">
|
||||
<value>The change log could not be downloaded.</value>
|
||||
</data>
|
||||
<data name="strUseDifferentUsernameAndPassword" xml:space="preserve">
|
||||
<value>Use a different username and password</value>
|
||||
</data>
|
||||
<data name="strUseOnlyErrorsAndInfosPanel" xml:space="preserve">
|
||||
<value>Use only Notifications panel (no messagebox popups)</value>
|
||||
</data>
|
||||
<data name="strUser" xml:space="preserve">
|
||||
<value>User</value>
|
||||
</data>
|
||||
<data name="strUseSameUsernameAndPassword" xml:space="preserve">
|
||||
<value>Use the same username and password</value>
|
||||
</data>
|
||||
<data name="strUseSmartCard" xml:space="preserve">
|
||||
<value>Use a smart card</value>
|
||||
</data>
|
||||
<data name="strUseSQLServer" xml:space="preserve">
|
||||
<value>Use SQL Server to load && save connections</value>
|
||||
</data>
|
||||
<data name="strVersion" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="strVnc" xml:space="preserve">
|
||||
<value>VNC</value>
|
||||
</data>
|
||||
<data name="strVncConnectionDisconnectFailed" xml:space="preserve">
|
||||
<value>VNC disconnect failed!</value>
|
||||
</data>
|
||||
<data name="strVncConnectionOpenFailed" xml:space="preserve">
|
||||
<value>Opening connection failed!</value>
|
||||
</data>
|
||||
<data name="strVncRefreshFailed" xml:space="preserve">
|
||||
<value>VNC Refresh Screen Failed!</value>
|
||||
</data>
|
||||
<data name="strVncSendSpecialKeysFailed" xml:space="preserve">
|
||||
<value>VNC SendSpecialKeys failed!</value>
|
||||
</data>
|
||||
<data name="strVncSetEventHandlersFailed" xml:space="preserve">
|
||||
<value>VNC Set Event Handlers failed!</value>
|
||||
</data>
|
||||
<data name="strVncSetPropsFailed" xml:space="preserve">
|
||||
<value>VNC Set Props Failed!</value>
|
||||
</data>
|
||||
<data name="strVncStartChatFailed" xml:space="preserve">
|
||||
<value>VNC Start Chat Failed!</value>
|
||||
</data>
|
||||
<data name="strVncToggleSmartSizeFailed" xml:space="preserve">
|
||||
<value>VNC Toggle SmartSize Failed!</value>
|
||||
</data>
|
||||
<data name="strVncToggleViewOnlyFailed" xml:space="preserve">
|
||||
<value>VNC Toggle ViewOnly Failed!</value>
|
||||
</data>
|
||||
<data name="strWarnIfAuthFails" xml:space="preserve">
|
||||
<value>Warn me if authentication fails</value>
|
||||
</data>
|
||||
<data name="strWarnings" xml:space="preserve">
|
||||
<value>Warnings</value>
|
||||
</data>
|
||||
<data name="strWeifenLuoAttribution" xml:space="preserve">
|
||||
<value>Uses the DockPanel Suite by [Weifen Luo]</value>
|
||||
</data>
|
||||
<data name="strWeifenLuoAttributionURL" xml:space="preserve">
|
||||
<value>http://sourceforge.net/projects/dockpanelsuite/</value>
|
||||
</data>
|
||||
<data name="strWriteLogFile" xml:space="preserve">
|
||||
<value>Write log file (mRemoteNG.log)</value>
|
||||
</data>
|
||||
<data name="strXULrunnerPath" xml:space="preserve">
|
||||
<value>XULrunner path:</value>
|
||||
</data>
|
||||
<data name="strYes" xml:space="preserve">
|
||||
<value>Yes</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -417,6 +417,12 @@
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>Невозможно разобрать аргументы командной строки!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} обнаружено что на этой системе работает утилита Lenovo Auto Scroll. Известно, что эта утилита вызвает проблемы с {0}. Рекомендуется отключить или удалить ее.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Обнаружена проблема совместимости</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Проверка компонентов</value>
|
||||
</data>
|
||||
@@ -1547,6 +1553,9 @@
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>Ошибка изменения размера окна Putty!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>Сохраненные сессии PuTTY</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>Настройки PuTTY</value>
|
||||
</data>
|
||||
@@ -1893,7 +1902,7 @@
|
||||
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Передача</value>
|
||||
<value>SSH ошибка передачи.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>Начальный IP</value>
|
||||
|
||||
@@ -1139,6 +1139,9 @@ VncSharpNG Control Version {0}</value>
|
||||
<data name="strOpenPorts" xml:space="preserve">
|
||||
<value>Відкриті порти</value>
|
||||
</data>
|
||||
<data name="strOptionsTabTheme" xml:space="preserve">
|
||||
<value>Тема</value>
|
||||
</data>
|
||||
<data name="strPanelName" xml:space="preserve">
|
||||
<value>Назва групи</value>
|
||||
</data>
|
||||
@@ -1815,7 +1818,7 @@ VncSharpNG Control Version {0}</value>
|
||||
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>Передача</value>
|
||||
<value>Помилка передавання SSH.</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>Початковий IP</value>
|
||||
|
||||
@@ -412,6 +412,12 @@ VncSharpNG 版本 {0}</value>
|
||||
<data name="strCommandLineArgsCouldNotBeParsed" xml:space="preserve">
|
||||
<value>无法解析命令行参数!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} 检测到联想Auto Scroll程序在本机上运行。该程序程序明确会导致问题 {0} 的出现。建议您禁用或卸载该程序。</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>检测到系统存在兼容性问题</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>组件检查</value>
|
||||
</data>
|
||||
@@ -541,6 +547,9 @@ VncSharpNG 版本 {0}</value>
|
||||
<data name="strCouldNotCreateNewConnectionsFile" xml:space="preserve">
|
||||
<value>无法新建连接配置文件!</value>
|
||||
</data>
|
||||
<data name="strCouldNotFindToolStripInFilteredPropertyGrid" xml:space="preserve">
|
||||
<value>在 FilteredPropertyGrid 中找不到 ToolStrip 控件。</value>
|
||||
</data>
|
||||
<data name="strCurrentVersion" xml:space="preserve">
|
||||
<value>已安装版本</value>
|
||||
</data>
|
||||
@@ -702,6 +711,9 @@ VncSharpNG 版本 {0}</value>
|
||||
<data name="strHttpConnectionFailed" xml:space="preserve">
|
||||
<value>无法创建新的 HTTP 连接!</value>
|
||||
</data>
|
||||
<data name="strHttpDocumentTileChangeFailed" xml:space="preserve">
|
||||
<value>更改HTTP文档标题失败!</value>
|
||||
</data>
|
||||
<data name="strHttpSetPropsFailed" xml:space="preserve">
|
||||
<value>设置 HTTP 属性失败!</value>
|
||||
</data>
|
||||
@@ -1452,6 +1464,9 @@ VncSharpNG 版本 {0}</value>
|
||||
<data name="strPropertyNameUseConsoleSession" xml:space="preserve">
|
||||
<value>使用控制台会话。</value>
|
||||
</data>
|
||||
<data name="strPropertyNameUseCredSsp" xml:space="preserve">
|
||||
<value>使用CredSSP方式</value>
|
||||
</data>
|
||||
<data name="strPropertyNameUser1" xml:space="preserve">
|
||||
<value>自定义信息</value>
|
||||
</data>
|
||||
@@ -1518,6 +1533,9 @@ VncSharpNG 版本 {0}</value>
|
||||
<data name="strPuttyResizeFailed" xml:space="preserve">
|
||||
<value>Putty 窗口大小调整失败!</value>
|
||||
</data>
|
||||
<data name="strPuttySavedSessionsRootName" xml:space="preserve">
|
||||
<value>PuTTY 会话已保存</value>
|
||||
</data>
|
||||
<data name="strPuttySettings" xml:space="preserve">
|
||||
<value>PuTTY 设置</value>
|
||||
</data>
|
||||
@@ -1864,7 +1882,7 @@ VncSharpNG 版本 {0}</value>
|
||||
<value>SSH 传输结束(UI.Window.SSHTransfer)失败!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferFailed" xml:space="preserve">
|
||||
<value>传输</value>
|
||||
<value>SSH 传输失败。</value>
|
||||
</data>
|
||||
<data name="strStartIP" xml:space="preserve">
|
||||
<value>起始IP</value>
|
||||
|
||||
2164
mRemoteV1/Language/Language.zh-TW.resx
Normal file
2164
mRemoteV1/Language/Language.zh-TW.resx
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
92
mRemoteV1/My Project/Settings.Designer.vb
generated
92
mRemoteV1/My Project/Settings.Designer.vb
generated
@@ -1,7 +1,7 @@
|
||||
'------------------------------------------------------------------------------
|
||||
' <auto-generated>
|
||||
' This code was generated by a tool.
|
||||
' Runtime Version:4.0.30319.296
|
||||
' Runtime Version:4.0.30319.1008
|
||||
'
|
||||
' Changes to this file may cause incorrect behavior and will be lost if
|
||||
' the code is regenerated.
|
||||
@@ -2080,7 +2080,7 @@ Namespace My
|
||||
|
||||
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN")> _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("de,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW")> _
|
||||
Public ReadOnly Property SupportedUICultures() As String
|
||||
Get
|
||||
Return CType(Me("SupportedUICultures"),String)
|
||||
@@ -2384,6 +2384,94 @@ Namespace My
|
||||
Me("PuttySavedSessionsPanel") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
|
||||
Public Property CompatibilityWarnLenovoAutoScrollUtility() As Boolean
|
||||
Get
|
||||
Return CType(Me("CompatibilityWarnLenovoAutoScrollUtility"),Boolean)
|
||||
End Get
|
||||
Set
|
||||
Me("CompatibilityWarnLenovoAutoScrollUtility") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.ApplicationScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/announcement.txt")> _
|
||||
Public ReadOnly Property AnnouncementAddress() As String
|
||||
Get
|
||||
Return CType(Me("AnnouncementAddress"),String)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("https://update.mremoteng.org/")> _
|
||||
Public Property UpdateAddress() As String
|
||||
Get
|
||||
Return CType(Me("UpdateAddress"),String)
|
||||
End Get
|
||||
Set
|
||||
Me("UpdateAddress") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("")> _
|
||||
Public Property ConDefaultLoadBalanceInfo() As String
|
||||
Get
|
||||
Return CType(Me("ConDefaultLoadBalanceInfo"),String)
|
||||
End Get
|
||||
Set
|
||||
Me("ConDefaultLoadBalanceInfo") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("True")> _
|
||||
Public Property ConDefaultAutomaticResize() As Boolean
|
||||
Get
|
||||
Return CType(Me("ConDefaultAutomaticResize"),Boolean)
|
||||
End Get
|
||||
Set
|
||||
Me("ConDefaultAutomaticResize") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
|
||||
Public Property InhDefaultLoadBalanceInfo() As Boolean
|
||||
Get
|
||||
Return CType(Me("InhDefaultLoadBalanceInfo"),Boolean)
|
||||
End Get
|
||||
Set
|
||||
Me("InhDefaultLoadBalanceInfo") = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
<Global.System.Configuration.UserScopedSettingAttribute(), _
|
||||
Global.System.Configuration.SettingsProviderAttribute(GetType(mRemoteNG.Config.Settings.Providers.ChooseProvider)), _
|
||||
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
|
||||
Global.System.Configuration.DefaultSettingValueAttribute("False")> _
|
||||
Public Property InhDefaultAutomaticResize() As Boolean
|
||||
Get
|
||||
Return CType(Me("InhDefaultAutomaticResize"),Boolean)
|
||||
End Get
|
||||
Set
|
||||
Me("InhDefaultAutomaticResize") = value
|
||||
End Set
|
||||
End Property
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
|
||||
@@ -471,7 +471,7 @@
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="SupportedUICultures" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN</Value>
|
||||
<Value Profile="(Default)">de,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW</Value>
|
||||
</Setting>
|
||||
<Setting Name="ConDefaultRDGatewayHostname" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
@@ -542,5 +542,26 @@
|
||||
<Setting Name="PuttySavedSessionsPanel" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="CompatibilityWarnLenovoAutoScrollUtility" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="AnnouncementAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">https://update.mremoteng.org/announcement.txt</Value>
|
||||
</Setting>
|
||||
<Setting Name="UpdateAddress" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">https://update.mremoteng.org/</Value>
|
||||
</Setting>
|
||||
<Setting Name="ConDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
<Setting Name="ConDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="InhDefaultLoadBalanceInfo" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="InhDefaultAutomaticResize" Provider="mRemoteNG.Config.Settings.Providers.ChooseProvider" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
Binary file not shown.
Binary file not shown.
@@ -114,7 +114,7 @@ Namespace Themes
|
||||
Return _toolbarBackgroundColor
|
||||
End Get
|
||||
Set(value As Color)
|
||||
If _toolbarBackgroundColor = value Then Return
|
||||
If _toolbarBackgroundColor = value Or value.A < 255 Then Return
|
||||
_toolbarBackgroundColor = value
|
||||
NotifyPropertyChanged("ToolbarBackgroundColor")
|
||||
End Set
|
||||
@@ -147,7 +147,7 @@ Namespace Themes
|
||||
Return _connectionsPanelBackgroundColor
|
||||
End Get
|
||||
Set(value As Color)
|
||||
If _connectionsPanelBackgroundColor = value Or value = Color.Transparent Then Return
|
||||
If _connectionsPanelBackgroundColor = value Or value.A < 255 Then Return
|
||||
_connectionsPanelBackgroundColor = value
|
||||
NotifyPropertyChanged("ConnectionsPanelBackgroundColor")
|
||||
End Set
|
||||
@@ -192,7 +192,7 @@ Namespace Themes
|
||||
Return _searchBoxBackgroundColor
|
||||
End Get
|
||||
Set(value As Color)
|
||||
If _searchBoxBackgroundColor = value Or value = Color.Transparent Then Return
|
||||
If _searchBoxBackgroundColor = value Or value.A < 255 Then Return
|
||||
_searchBoxBackgroundColor = value
|
||||
NotifyPropertyChanged("SearchBoxBackgroundColor")
|
||||
End Set
|
||||
@@ -239,7 +239,7 @@ Namespace Themes
|
||||
Return _configPanelBackgroundColor
|
||||
End Get
|
||||
Set(value As Color)
|
||||
If _configPanelBackgroundColor = value Or value = Color.Transparent Then Return
|
||||
If _configPanelBackgroundColor = value Or value.A < 255 Then Return
|
||||
_configPanelBackgroundColor = value
|
||||
NotifyPropertyChanged("ConfigPanelBackgroundColor")
|
||||
End Set
|
||||
@@ -284,7 +284,7 @@ Namespace Themes
|
||||
Return _configPanelHelpBackgroundColor
|
||||
End Get
|
||||
Set(value As Color)
|
||||
If _configPanelHelpBackgroundColor = value Or value = Color.Transparent Then Return
|
||||
If _configPanelHelpBackgroundColor = value Or value.A < 255 Then Return
|
||||
_configPanelHelpBackgroundColor = value
|
||||
NotifyPropertyChanged("ConfigPanelHelpBackgroundColor")
|
||||
End Set
|
||||
|
||||
@@ -24,7 +24,11 @@ Namespace Themes
|
||||
Public Shared Function LoadThemes() As List(Of ThemeInfo)
|
||||
Dim themes As New List(Of ThemeInfo)
|
||||
themes.Add(DefaultTheme)
|
||||
themes.AddRange(ThemeSerializer.LoadFromXmlFile(Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName)))
|
||||
Try
|
||||
themes.AddRange(ThemeSerializer.LoadFromXmlFile(Path.Combine(App.Info.Settings.SettingsPath, App.Info.Settings.ThemesFileName)))
|
||||
Catch ex As FileNotFoundException
|
||||
End Try
|
||||
|
||||
Return themes
|
||||
End Function
|
||||
|
||||
@@ -66,19 +70,25 @@ Namespace Themes
|
||||
Private Shared _activeThemeHandlerSet As Boolean = False
|
||||
Public Shared Property ActiveTheme As ThemeInfo
|
||||
Get
|
||||
If _activeTheme Is Nothing Then Return DefaultTheme
|
||||
Return _activeTheme
|
||||
End Get
|
||||
Set(value As ThemeInfo)
|
||||
If _activeTheme Is Nothing OrElse Not _activeTheme.Equals(value) Then
|
||||
If _activeThemeHandlerSet Then RemoveHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
|
||||
|
||||
_activeTheme = value
|
||||
|
||||
AddHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
|
||||
_activeThemeHandlerSet = True
|
||||
|
||||
NotifyThemeChanged(_activeTheme, New PropertyChangedEventArgs(""))
|
||||
' We need to set ActiveTheme to the new theme to make sure it references the right object.
|
||||
' However, if both themes have the same properties, we don't need to raise a notification event.
|
||||
Dim needNotify As Boolean = True
|
||||
If _activeTheme IsNot Nothing Then
|
||||
If _activeTheme.Equals(value) Then needNotify = False
|
||||
End If
|
||||
|
||||
If _activeThemeHandlerSet Then RemoveHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
|
||||
|
||||
_activeTheme = value
|
||||
|
||||
AddHandler _activeTheme.PropertyChanged, AddressOf NotifyThemeChanged
|
||||
_activeThemeHandlerSet = True
|
||||
|
||||
If needNotify Then NotifyThemeChanged(_activeTheme, New PropertyChangedEventArgs(""))
|
||||
End Set
|
||||
End Property
|
||||
#End Region
|
||||
|
||||
@@ -39,7 +39,7 @@ Namespace Themes
|
||||
color = propertyInfo.GetValue(themeInfo, Nothing)
|
||||
xmlTextWriter.WriteStartElement("Color")
|
||||
xmlTextWriter.WriteAttributeString("Name", propertyInfo.Name)
|
||||
xmlTextWriter.WriteAttributeString("Value", color.Name)
|
||||
xmlTextWriter.WriteAttributeString("Value", EncodeColorName(color))
|
||||
xmlTextWriter.WriteEndElement() ' Color
|
||||
Next
|
||||
|
||||
@@ -91,12 +91,29 @@ Namespace Themes
|
||||
colorValue = colorNode.Attributes("Value").Value
|
||||
propertyInfo = themeType.GetProperty(colorName)
|
||||
If propertyInfo Is Nothing OrElse Not propertyInfo.PropertyType Is colorType Then Continue For
|
||||
propertyInfo.SetValue(themeInfo, Color.FromName(colorValue), Nothing)
|
||||
propertyInfo.SetValue(themeInfo, DecodeColorName(colorValue), Nothing)
|
||||
Next
|
||||
themes.Add(themeInfo)
|
||||
Next
|
||||
|
||||
Return themes
|
||||
End Function
|
||||
|
||||
Private Shared Function EncodeColorName(ByVal color As Color) As String
|
||||
If color.IsNamedColor Then
|
||||
Return color.Name
|
||||
Else
|
||||
Return Hex(color.ToArgb()).PadLeft(8, "0")
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Shared Function DecodeColorName(ByVal name As String) As Color
|
||||
Dim regex As New System.Text.RegularExpressions.Regex("^[0-9a-fA-F]{8}$")
|
||||
If regex.Match(name).Success Then
|
||||
Return Color.FromArgb(Convert.ToInt32(name, 16))
|
||||
Else
|
||||
Return Color.FromName(name)
|
||||
End If
|
||||
End Function
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
248
mRemoteV1/Tools/Authenticode.vb
Normal file
248
mRemoteV1/Tools/Authenticode.vb
Normal 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
|
||||
40
mRemoteV1/Tools/EnumWindows.vb
Normal file
40
mRemoteV1/Tools/EnumWindows.vb
Normal 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
|
||||
43
mRemoteV1/Tools/EnvironmentInfo.vb
Normal file
43
mRemoteV1/Tools/EnvironmentInfo.vb
Normal 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
|
||||
|
||||
39
mRemoteV1/Tools/IeBrowserEmulation.vb
Normal file
39
mRemoteV1/Tools/IeBrowserEmulation.vb
Normal 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
|
||||
|
||||
181
mRemoteV1/Tools/ProcessController.vb
Normal file
181
mRemoteV1/Tools/ProcessController.vb
Normal 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
|
||||
|
||||
143
mRemoteV1/Tools/PropertyGridCommandSite.vb
Normal file
143
mRemoteV1/Tools/PropertyGridCommandSite.vb
Normal 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
|
||||
17
mRemoteV1/Tools/PuttyProcessController.vb
Normal file
17
mRemoteV1/Tools/PuttyProcessController.vb
Normal 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
|
||||
|
||||
@@ -125,14 +125,15 @@ Namespace Tools
|
||||
|
||||
menToolStrip.DropDownItems.Add(tMenItem)
|
||||
AddNodeToMenu(tNode.Nodes, tMenItem)
|
||||
Else
|
||||
tMenItem.Image = My.Resources.Play
|
||||
ElseIf Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Or _
|
||||
Tree.Node.GetNodeType(tNode) = Tree.Node.Type.PuttySession Then
|
||||
tMenItem.Image = Windows.treeForm.imgListTree.Images(tNode.ImageIndex)
|
||||
tMenItem.Tag = tNode.Tag
|
||||
|
||||
menToolStrip.DropDownItems.Add(tMenItem)
|
||||
End If
|
||||
|
||||
AddHandler tMenItem.MouseDown, AddressOf ConMenItem_MouseDown
|
||||
AddHandler tMenItem.MouseUp, AddressOf ConMenItem_MouseUp
|
||||
Next
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AddNodeToMenu failed" & vbNewLine & ex.Message, True)
|
||||
@@ -162,12 +163,10 @@ Namespace Tools
|
||||
frmMain.PreviousWindowState = frmMain.WindowState
|
||||
End Sub
|
||||
|
||||
Private Sub ConMenItem_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
|
||||
Private Sub ConMenItem_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
|
||||
If e.Button = MouseButtons.Left Then
|
||||
If TypeOf sender.Tag Is mRemoteNG.Connection.Info Then
|
||||
If frmMain.Visible = False Then
|
||||
ShowForm()
|
||||
End If
|
||||
If TypeOf sender.Tag Is Connection.Info Then
|
||||
If frmMain.Visible = False Then ShowForm()
|
||||
App.Runtime.OpenConnection(sender.Tag)
|
||||
End If
|
||||
End If
|
||||
@@ -211,13 +210,13 @@ Namespace Tools
|
||||
Return lDlg
|
||||
End Function
|
||||
|
||||
Public Shared Function ConnectionsRDPImportDialog() As OpenFileDialog
|
||||
Dim lDlg As New OpenFileDialog()
|
||||
lDlg.CheckFileExists = True
|
||||
'lDlg.InitialDirectory = App.Info.Connections.DefaultConnectionsPath
|
||||
lDlg.Filter = My.Language.strFilterRDP & "|*.rdp|" & My.Language.strFilterAll & "|*.*"
|
||||
|
||||
Return lDlg
|
||||
Public Shared Function ImportConnectionsRdpFileDialog() As OpenFileDialog
|
||||
Dim openFileDialog As New OpenFileDialog()
|
||||
openFileDialog.CheckFileExists = True
|
||||
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
|
||||
openFileDialog.Filter = String.Join("|", {My.Language.strFilterRDP, "*.rdp", My.Language.strFilterAll, "*.*"})
|
||||
openFileDialog.Multiselect = True
|
||||
Return openFileDialog
|
||||
End Function
|
||||
|
||||
Public Class TreeNodeSorter
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
Imports System.Threading
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports System.Net.NetworkInformation
|
||||
Imports System.Net
|
||||
|
||||
Namespace Tools
|
||||
Namespace PortScan
|
||||
@@ -81,47 +82,34 @@ Namespace Tools
|
||||
End Set
|
||||
End Property
|
||||
|
||||
|
||||
|
||||
Private _HostName As String
|
||||
Private _hostName As String = ""
|
||||
Public Property HostName() As String
|
||||
Get
|
||||
Return _HostName
|
||||
Return _hostName
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_HostName = value
|
||||
_hostName = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property HostNameWithoutDomain() As String
|
||||
Get
|
||||
If _HostName <> _HostIP Then
|
||||
If _HostName IsNot Nothing Then
|
||||
If _HostName.Contains(".") Then
|
||||
Return _HostName.Substring(0, _HostName.IndexOf("."))
|
||||
Else
|
||||
Return _HostName
|
||||
End If
|
||||
Else
|
||||
Return _HostIP
|
||||
End If
|
||||
Else
|
||||
Return _HostIP
|
||||
End If
|
||||
If String.IsNullOrEmpty(HostName) OrElse HostName = HostIp Then Return HostIp
|
||||
Return HostName.Split(".")(0)
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Private _HostIP As String
|
||||
Public Property HostIP() As String
|
||||
Private _hostIp As String
|
||||
Public Property HostIp() As String
|
||||
Get
|
||||
Return _HostIP
|
||||
Return _hostIp
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_HostIP = value
|
||||
_hostIp = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _OpenPorts As New ArrayList
|
||||
Private _openPorts As New ArrayList
|
||||
Public Property OpenPorts() As ArrayList
|
||||
Get
|
||||
Return _OpenPorts
|
||||
@@ -131,7 +119,7 @@ Namespace Tools
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _ClosedPorts As ArrayList
|
||||
Private _closedPorts As ArrayList
|
||||
Public Property ClosedPorts() As ArrayList
|
||||
Get
|
||||
Return _ClosedPorts
|
||||
@@ -214,7 +202,7 @@ Namespace Tools
|
||||
|
||||
#Region "Methods"
|
||||
Public Sub New(ByVal host As String)
|
||||
_HostIP = host
|
||||
_hostIp = host
|
||||
_OpenPorts = New ArrayList
|
||||
_ClosedPorts = New ArrayList
|
||||
End Sub
|
||||
@@ -228,14 +216,14 @@ Namespace Tools
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function ToListViewItem(ByVal Mode As PortScanMode) As ListViewItem
|
||||
Public Function ToListViewItem(ByVal mode As PortScanMode) As ListViewItem
|
||||
Try
|
||||
Dim lvI As New ListViewItem
|
||||
lvI.Tag = Me
|
||||
If _HostName <> "" Then
|
||||
lvI.Text = _HostName
|
||||
If _hostName <> "" Then
|
||||
lvI.Text = _hostName
|
||||
Else
|
||||
lvI.Text = _HostIP
|
||||
lvI.Text = _hostIp
|
||||
End If
|
||||
|
||||
If Mode = PortScanMode.Import Then
|
||||
@@ -250,11 +238,11 @@ Namespace Tools
|
||||
Dim strOpen As String = ""
|
||||
Dim strClosed As String = ""
|
||||
|
||||
For Each p As Integer In _OpenPorts
|
||||
For Each p As Integer In _openPorts
|
||||
strOpen &= p & ", "
|
||||
Next
|
||||
|
||||
For Each p As Integer In _ClosedPorts
|
||||
For Each p As Integer In _closedPorts
|
||||
strClosed &= p & ", "
|
||||
Next
|
||||
|
||||
@@ -269,225 +257,159 @@ Namespace Tools
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Function BoolToYesNo(ByVal Bool As Boolean) As String
|
||||
If Bool = True Then
|
||||
Private Function BoolToYesNo(ByVal value As Boolean) As String
|
||||
If value Then
|
||||
Return My.Language.strYes
|
||||
Else
|
||||
Return My.Language.strNo
|
||||
End If
|
||||
End Function
|
||||
|
||||
Public Sub SetAllProtocols(ByVal Open As Boolean)
|
||||
_VNC = False
|
||||
_Telnet = False
|
||||
_SSH = False
|
||||
_Rlogin = False
|
||||
_RDP = False
|
||||
_HTTPS = False
|
||||
_HTTP = False
|
||||
Public Sub SetAllProtocols(ByVal value As Boolean)
|
||||
_VNC = value
|
||||
_Telnet = value
|
||||
_SSH = value
|
||||
_Rlogin = value
|
||||
_RDP = value
|
||||
_HTTPS = value
|
||||
_HTTP = value
|
||||
End Sub
|
||||
#End Region
|
||||
End Class
|
||||
|
||||
Public Class Scanner
|
||||
#Region "Properties"
|
||||
Private _StartIP As String
|
||||
Public Property StartIP() As String
|
||||
Get
|
||||
Return _StartIP
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_StartIP = value
|
||||
End Set
|
||||
End Property
|
||||
#Region "Private Members"
|
||||
Private ReadOnly _ipAddresses As New List(Of IPAddress)
|
||||
Private ReadOnly _ports As New List(Of Integer)
|
||||
|
||||
Private _EndIP As String
|
||||
Public Property EndIP() As String
|
||||
Get
|
||||
Return _EndIP
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
_EndIP = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _StartPort As Integer
|
||||
Public Property StartPort() As Integer
|
||||
Get
|
||||
Return _StartPort
|
||||
End Get
|
||||
Set(ByVal value As Integer)
|
||||
_StartPort = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _EndPort As Integer
|
||||
Public Property EndPort() As Integer
|
||||
Get
|
||||
Return _EndPort
|
||||
End Get
|
||||
Set(ByVal value As Integer)
|
||||
_EndPort = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
|
||||
|
||||
Private _ScannedHosts As ArrayList
|
||||
Public Property ScannedHosts() As ArrayList
|
||||
Get
|
||||
Return _ScannedHosts
|
||||
End Get
|
||||
Set(ByVal value As ArrayList)
|
||||
_ScannedHosts = value
|
||||
End Set
|
||||
End Property
|
||||
Private _scanThread As Thread
|
||||
Private ReadOnly _scannedHosts As New List(Of ScanHost)
|
||||
#End Region
|
||||
|
||||
#Region "Methods"
|
||||
Public Sub New(ByVal startIP As String, ByVal endIP As String)
|
||||
Mode = PortScanMode.Import
|
||||
#Region "Public Methods"
|
||||
Public Sub New(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress)
|
||||
Dim ipAddressStart As IPAddress = IpAddressMin(ipAddress1, ipAddress2)
|
||||
Dim ipAddressEnd As IPAddress = IpAddressMax(ipAddress1, ipAddress2)
|
||||
|
||||
_StartIP = startIP
|
||||
_EndIP = endIP
|
||||
|
||||
Ports = New ArrayList()
|
||||
Ports.AddRange(New Integer() {ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, _
|
||||
_ports.Clear()
|
||||
_ports.AddRange(New Integer() {ScanHost.SSHPort, ScanHost.TelnetPort, ScanHost.HTTPPort, _
|
||||
ScanHost.HTTPSPort, ScanHost.RloginPort, ScanHost.RDPPort, _
|
||||
ScanHost.VNCPort})
|
||||
|
||||
Hosts = GetIPRange(_StartIP, _EndIP)
|
||||
_ipAddresses.Clear()
|
||||
_ipAddresses.AddRange(IpAddressArrayFromRange(ipAddressStart, ipAddressEnd))
|
||||
|
||||
_ScannedHosts = New ArrayList()
|
||||
_scannedHosts.Clear()
|
||||
End Sub
|
||||
|
||||
Public Sub New(ByVal startIP As String, ByVal endIP As String, ByVal startPort As String, ByVal endPort As String)
|
||||
Mode = PortScanMode.Normal
|
||||
Public Sub New(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress, ByVal port1 As Integer, ByVal port2 As Integer)
|
||||
Me.New(ipAddress1, ipAddress2)
|
||||
|
||||
_StartIP = startIP
|
||||
_EndIP = endIP
|
||||
Dim portStart As Integer = Math.Min(port1, port2)
|
||||
Dim portEnd As Integer= Math.Max(port1, port2)
|
||||
|
||||
_StartPort = startPort
|
||||
_EndPort = endPort
|
||||
|
||||
Ports = New ArrayList()
|
||||
For p As Integer = startPort To endPort
|
||||
Ports.Add(p)
|
||||
_ports.Clear()
|
||||
For port As Integer = portStart To portEnd
|
||||
_ports.Add(port)
|
||||
Next
|
||||
|
||||
Hosts = GetIPRange(_StartIP, _EndIP)
|
||||
|
||||
_ScannedHosts = New ArrayList()
|
||||
End Sub
|
||||
|
||||
Public Event BeginHostScan(ByVal Host As String)
|
||||
Public Event HostScanned(ByVal SHost As ScanHost, ByVal HostsAlreadyScanned As Integer, ByVal HostsToBeScanned As Integer)
|
||||
Public Event ScanComplete(ByVal Hosts As ArrayList)
|
||||
|
||||
|
||||
Private Hosts As ArrayList
|
||||
Private Ports As ArrayList
|
||||
|
||||
Private Mode As PortScanMode
|
||||
|
||||
Private sThread As Thread
|
||||
|
||||
|
||||
Public Sub StartScan()
|
||||
sThread = New Thread(AddressOf StartScanBG)
|
||||
sThread.SetApartmentState(Threading.ApartmentState.STA)
|
||||
sThread.IsBackground = True
|
||||
sThread.Start()
|
||||
_scanThread = New Thread(AddressOf ScanAsync)
|
||||
_scanThread.SetApartmentState(ApartmentState.STA)
|
||||
_scanThread.IsBackground = True
|
||||
_scanThread.Start()
|
||||
End Sub
|
||||
|
||||
Public Sub StopScan()
|
||||
sThread.Abort()
|
||||
_scanThread.Abort()
|
||||
End Sub
|
||||
|
||||
Public Shared Function IsPortOpen(ByVal Hostname As String, ByVal Port As String) As Boolean
|
||||
Public Shared Function IsPortOpen(ByVal hostname As String, ByVal port As String) As Boolean
|
||||
Try
|
||||
Dim tcpClient As New System.Net.Sockets.TcpClient(Hostname, Port)
|
||||
' ReSharper disable UnusedVariable
|
||||
Dim tcpClient As New Sockets.TcpClient(hostname, port)
|
||||
' ReSharper restore UnusedVariable
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
#End Region
|
||||
|
||||
Private Sub StartScanBG()
|
||||
#Region "Private Methods"
|
||||
Private Sub ScanAsync()
|
||||
Try
|
||||
Dim hCount As Integer = 0
|
||||
Dim hostCount As Integer = 0
|
||||
|
||||
For Each Host As String In Hosts
|
||||
RaiseEvent BeginHostScan(Host)
|
||||
For Each ipAddress As IPAddress In _ipAddresses
|
||||
RaiseEvent BeginHostScan(ipAddress.ToString())
|
||||
|
||||
Dim sHost As New ScanHost(Host)
|
||||
hCount += 1
|
||||
Dim scanHost As New ScanHost(ipAddress.ToString())
|
||||
hostCount += 1
|
||||
|
||||
Dim HostAlive As Boolean = False
|
||||
|
||||
HostAlive = IsHostAlive(Host)
|
||||
|
||||
If HostAlive = False Then
|
||||
sHost.ClosedPorts.AddRange(Ports)
|
||||
sHost.SetAllProtocols(False)
|
||||
If Not IsHostAlive(ipAddress) Then
|
||||
scanHost.ClosedPorts.AddRange(_ports)
|
||||
scanHost.SetAllProtocols(False)
|
||||
Else
|
||||
For Each Port As Integer In Ports
|
||||
Dim err As Boolean = False
|
||||
For Each port As Integer In _ports
|
||||
Dim isPortOpen As Boolean
|
||||
|
||||
Try
|
||||
Dim tcpClient As New System.Net.Sockets.TcpClient(Host, Port)
|
||||
' ReSharper disable UnusedVariable
|
||||
Dim tcpClient As New Sockets.TcpClient(ipAddress.ToString, port)
|
||||
' ReSharper restore UnusedVariable
|
||||
|
||||
err = False
|
||||
sHost.OpenPorts.Add(Port)
|
||||
isPortOpen = True
|
||||
scanHost.OpenPorts.Add(port)
|
||||
Catch ex As Exception
|
||||
err = True
|
||||
sHost.ClosedPorts.Add(Port)
|
||||
isPortOpen = False
|
||||
scanHost.ClosedPorts.Add(port)
|
||||
End Try
|
||||
|
||||
Select Case Port
|
||||
Select Case port
|
||||
Case ScanHost.SSHPort
|
||||
sHost.SSH = Not err
|
||||
scanHost.SSH = isPortOpen
|
||||
Case ScanHost.TelnetPort
|
||||
sHost.Telnet = Not err
|
||||
scanHost.Telnet = isPortOpen
|
||||
Case ScanHost.HTTPPort
|
||||
sHost.HTTP = Not err
|
||||
scanHost.HTTP = isPortOpen
|
||||
Case ScanHost.HTTPSPort
|
||||
sHost.HTTPS = Not err
|
||||
scanHost.HTTPS = isPortOpen
|
||||
Case ScanHost.RloginPort
|
||||
sHost.Rlogin = Not err
|
||||
scanHost.Rlogin = isPortOpen
|
||||
Case ScanHost.RDPPort
|
||||
sHost.RDP = Not err
|
||||
scanHost.RDP = isPortOpen
|
||||
Case ScanHost.VNCPort
|
||||
sHost.VNC = Not err
|
||||
scanHost.VNC = isPortOpen
|
||||
End Select
|
||||
Next
|
||||
End If
|
||||
|
||||
If HostAlive = True Then
|
||||
Try
|
||||
sHost.HostName = Net.Dns.GetHostEntry(sHost.HostIP).HostName
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
End If
|
||||
Try
|
||||
scanHost.HostName = Dns.GetHostEntry(scanHost.HostIp).HostName
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
If String.IsNullOrEmpty(scanHost.HostName) Then scanHost.HostName = scanHost.HostIp
|
||||
|
||||
_ScannedHosts.Add(sHost)
|
||||
RaiseEvent HostScanned(sHost, hCount, Hosts.Count)
|
||||
_scannedHosts.Add(scanHost)
|
||||
RaiseEvent HostScanned(scanHost, hostCount, _ipAddresses.Count)
|
||||
Next
|
||||
|
||||
RaiseEvent ScanComplete(_ScannedHosts)
|
||||
RaiseEvent ScanComplete(_scannedHosts)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "StartScanBG failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Function IsHostAlive(ByVal Host As String) As Boolean
|
||||
Private Shared Function IsHostAlive(ByVal ipAddress As IPAddress) As Boolean
|
||||
Dim pingSender As New Ping
|
||||
Dim pReply As PingReply
|
||||
Dim pingReply As PingReply
|
||||
|
||||
Try
|
||||
pReply = pingSender.Send(Host)
|
||||
pingReply = pingSender.Send(ipAddress)
|
||||
|
||||
If pReply.Status = IPStatus.Success Then
|
||||
If pingReply.Status = IPStatus.Success Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
@@ -497,60 +419,67 @@ Namespace Tools
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Shared Function IpAddressArrayFromRange(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress()
|
||||
Dim startIpAddress As IPAddress = IpAddressMin(ipAddress1, ipAddress2)
|
||||
Dim endIpAddress As IPAddress = IpAddressMax(ipAddress1, ipAddress2)
|
||||
|
||||
Private Function GetIPRange(ByVal fromIP As String, ByVal toIP As String) As ArrayList
|
||||
Try
|
||||
Dim arrIPs As New ArrayList
|
||||
Dim startAddress As Int32 = IpAddressToInt32(startIpAddress)
|
||||
Dim endAddress As Int32 = IpAddressToInt32(endIpAddress)
|
||||
Dim addressCount As Integer = endAddress - startAddress
|
||||
|
||||
Dim ipFrom As String() = fromIP.Split(".")
|
||||
Dim ipTo As String() = toIP.Split(".")
|
||||
Dim addressArray(addressCount) As IPAddress
|
||||
Dim index As Integer = 0
|
||||
For address As Int32 = startAddress To endAddress
|
||||
addressArray(index) = IpAddressFromInt32(address)
|
||||
index = index + 1
|
||||
Next
|
||||
|
||||
While Not matchIP(ipFrom, ipTo)
|
||||
arrIPs.Add(String.Format("{0}.{1}.{2}.{3}", ipFrom(0), ipFrom(1), ipFrom(2), ipFrom(3)))
|
||||
ipFrom(3) += 1
|
||||
If ipFrom(3) > 255 Then
|
||||
ipFrom(3) = 0
|
||||
ipFrom(2) += 1
|
||||
If ipFrom(2) > 255 Then
|
||||
ipFrom(2) = 0
|
||||
ipFrom(1) += 1
|
||||
If ipFrom(1) > 255 Then
|
||||
ipFrom(1) = 0
|
||||
ipFrom(0) += 1
|
||||
If ipFrom(0) > 255 Then
|
||||
ipFrom(0) = 0
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
End While
|
||||
|
||||
Return arrIPs
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "GetIPRange failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
|
||||
Return Nothing
|
||||
End Try
|
||||
Return addressArray
|
||||
End Function
|
||||
|
||||
Private Function matchIP(ByVal fromIP As String(), ByVal toIP As String()) As Boolean
|
||||
Try
|
||||
For c As Integer = 0 To fromIP.Length - 1
|
||||
If c = fromIP.Length - 1 Then
|
||||
If Not fromIP(c) = toIP(c) + 1 Then
|
||||
Return False
|
||||
End If
|
||||
Else
|
||||
If Not fromIP(c) = toIP(c) Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.WarningMsg, "matchIP failed (Tools.PortScan)" & vbNewLine & ex.Message, True)
|
||||
Return False
|
||||
End Try
|
||||
Private Shared Function IpAddressMin(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress
|
||||
If (IpAddressCompare(ipAddress1, ipAddress2) < 0) Then ' ipAddress1 < ipAddress2
|
||||
Return ipAddress1
|
||||
Else
|
||||
Return ipAddress2
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Shared Function IpAddressMax(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As IPAddress
|
||||
If (IpAddressCompare(ipAddress1, ipAddress2) > 0) Then ' ipAddress1 > ipAddress2
|
||||
Return ipAddress1
|
||||
Else
|
||||
Return ipAddress2
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Shared Function IpAddressCompare(ByVal ipAddress1 As IPAddress, ByVal ipAddress2 As IPAddress) As Integer
|
||||
Return IpAddressToInt32(ipAddress1) - IpAddressToInt32(ipAddress2)
|
||||
End Function
|
||||
|
||||
Private Shared Function IpAddressToInt32(ByVal ipAddress As IPAddress) As Int32
|
||||
If Not ipAddress.AddressFamily = Sockets.AddressFamily.InterNetwork Then Throw New ArgumentException("ipAddress")
|
||||
|
||||
Dim addressBytes As Byte() = ipAddress.GetAddressBytes() ' in network order (big-endian)
|
||||
If BitConverter.IsLittleEndian Then Array.Reverse(addressBytes) ' to host order (little-endian)
|
||||
Debug.Assert(addressBytes.Length = 4)
|
||||
|
||||
Return BitConverter.ToInt32(addressBytes, 0)
|
||||
End Function
|
||||
|
||||
Private Shared Function IpAddressFromInt32(ByVal ipAddress As Int32) As IPAddress
|
||||
Dim addressBytes As Byte() = BitConverter.GetBytes(ipAddress) ' in host order
|
||||
If BitConverter.IsLittleEndian Then Array.Reverse(addressBytes) ' to network order (big-endian)
|
||||
Debug.Assert(addressBytes.Length = 4)
|
||||
|
||||
Return New IPAddress(addressBytes)
|
||||
End Function
|
||||
#End Region
|
||||
|
||||
#Region "Events"
|
||||
Public Event BeginHostScan(ByVal host As String)
|
||||
Public Event HostScanned(ByVal scanHost As ScanHost, ByVal scannedHostCount As Integer, ByVal totalHostCount As Integer)
|
||||
Public Event ScanComplete(ByVal hosts As List(Of ScanHost))
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
@@ -190,7 +190,7 @@ Namespace Tree
|
||||
Dim nNode As New TreeNode
|
||||
|
||||
Select Case NodeType
|
||||
Case Type.Connection Or Type.PuttySession
|
||||
Case Type.Connection, Type.PuttySession
|
||||
nNode.Text = My.Language.strNewConnection
|
||||
nNode.ImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
nNode.SelectedImageIndex = Images.Enums.TreeImage.ConnectionClosed
|
||||
@@ -305,9 +305,9 @@ Namespace Tree
|
||||
Public Shared Sub CloneNode(ByVal oldTreeNode As TreeNode, Optional ByVal parentNode As TreeNode = Nothing)
|
||||
Try
|
||||
If GetNodeType(oldTreeNode) = Type.Connection Then
|
||||
Dim oldConnectionInfo As Connection.Info = oldTreeNode.Tag
|
||||
Dim oldConnectionInfo As Connection.Info = DirectCast(oldTreeNode.Tag, Connection.Info)
|
||||
|
||||
Dim newConnectionInfo As Connection.Info = oldConnectionInfo.Copy
|
||||
Dim newConnectionInfo As Connection.Info = oldConnectionInfo.Copy()
|
||||
Dim newInheritance As Connection.Info.Inheritance = oldConnectionInfo.Inherit.Copy()
|
||||
newInheritance.Parent = newConnectionInfo
|
||||
newConnectionInfo.Inherit = newInheritance
|
||||
@@ -332,8 +332,10 @@ Namespace Tree
|
||||
parentNode.Nodes.Add(newTreeNode)
|
||||
End If
|
||||
ElseIf GetNodeType(oldTreeNode) = Type.Container Then
|
||||
Dim newContainerInfo As Container.Info = TryCast(oldTreeNode.Tag, Container.Info).Copy
|
||||
Dim newConnectionInfo As Connection.Info = TryCast(oldTreeNode.Tag, Container.Info).ConnectionInfo.Copy
|
||||
Dim oldContainerInfo As Container.Info = DirectCast(oldTreeNode.Tag, Container.Info)
|
||||
|
||||
Dim newContainerInfo As Container.Info = oldContainerInfo.Copy()
|
||||
Dim newConnectionInfo As Connection.Info = oldContainerInfo.ConnectionInfo.Copy()
|
||||
newContainerInfo.ConnectionInfo = newConnectionInfo
|
||||
|
||||
Dim newTreeNode As New TreeNode(newContainerInfo.Name)
|
||||
|
||||
35
mRemoteV1/UI/UI.Window.Announcement.Designer.vb
generated
Normal file
35
mRemoteV1/UI/UI.Window.Announcement.Designer.vb
generated
Normal 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
|
||||
74
mRemoteV1/UI/UI.Window.Announcement.vb
Normal file
74
mRemoteV1/UI/UI.Window.Announcement.vb
Normal 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
|
||||
@@ -1,112 +0,0 @@
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports mRemoteNG.App.Runtime
|
||||
Imports System.Threading
|
||||
|
||||
Namespace UI
|
||||
Namespace Window
|
||||
Public Class Announcement
|
||||
Inherits UI.Window.Base
|
||||
|
||||
#Region "Form Init"
|
||||
Friend WithEvents wBrowser As System.Windows.Forms.WebBrowser
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Me.wBrowser = New System.Windows.Forms.WebBrowser
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'wBrowser
|
||||
'
|
||||
Me.wBrowser.Dock = System.Windows.Forms.DockStyle.Fill
|
||||
Me.wBrowser.Location = New System.Drawing.Point(0, 0)
|
||||
Me.wBrowser.MinimumSize = New System.Drawing.Size(20, 20)
|
||||
Me.wBrowser.Name = "wBrowser"
|
||||
Me.wBrowser.Size = New System.Drawing.Size(549, 474)
|
||||
Me.wBrowser.TabIndex = 0
|
||||
'
|
||||
'Announcement
|
||||
'
|
||||
Me.ClientSize = New System.Drawing.Size(549, 474)
|
||||
Me.Controls.Add(Me.wBrowser)
|
||||
Me.Name = "Announcement"
|
||||
Me.TabText = "Announcement"
|
||||
Me.Text = "Announcement"
|
||||
Me.Icon = My.Resources.News_Icon
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Public Methods"
|
||||
Public Sub New(ByVal Panel As DockContent)
|
||||
Me.WindowType = Type.Announcement
|
||||
Me.DockPnl = Panel
|
||||
Me.InitializeComponent()
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Methods"
|
||||
Private Sub Announcement_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
|
||||
ApplyLanguage()
|
||||
|
||||
Me.CheckForAnnouncement()
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLanguage()
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub Announcement_Shown(sender As Object, e As EventArgs) Handles Me.Shown
|
||||
' This can only be set once the WebBrowser control is shown, it will throw a COM exception otherwise.
|
||||
wBrowser.AllowWebBrowserDrop = False
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
Private aN As App.Announcement
|
||||
Private uT As Thread
|
||||
|
||||
Public Event AnnouncementCheckCompleted(ByVal AnnouncementAvailable As Boolean)
|
||||
|
||||
Private IsAnnouncementCheckHandlerDeclared As Boolean = False
|
||||
|
||||
Public Sub CheckForAnnouncement()
|
||||
Try
|
||||
uT = New Thread(AddressOf CheckForAnnouncementBG)
|
||||
uT.SetApartmentState(ApartmentState.STA)
|
||||
uT.IsBackground = True
|
||||
|
||||
If Me.IsAnnouncementCheckHandlerDeclared = False Then
|
||||
AddHandler AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
|
||||
Me.IsAnnouncementCheckHandlerDeclared = True
|
||||
End If
|
||||
|
||||
uT.Start()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CheckForAnnouncement (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub CheckForAnnouncementBG()
|
||||
Try
|
||||
aN = New App.Announcement
|
||||
|
||||
If aN.IsAnnouncementAvailable = True Then
|
||||
RaiseEvent AnnouncementCheckCompleted(True)
|
||||
Else
|
||||
RaiseEvent AnnouncementCheckCompleted(False)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "CheckForAnnouncementBG (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
|
||||
Try
|
||||
wBrowser.Navigate(aN.CurrentAnnouncementInfo.Url)
|
||||
My.Settings.LastAnnouncement = aN.CurrentAnnouncementInfo.Name
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "AnnouncementCheckComplete (UI.Window.Announcement) failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
@@ -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()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
Imports mRemoteNG.My
|
||||
Imports mRemoteNG.Connection.Protocol
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports System.Net.NetworkInformation
|
||||
Imports mRemoteNG.App.Runtime
|
||||
@@ -710,6 +711,10 @@ Namespace UI
|
||||
strHide.Add("RDGatewayPassword")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
End If
|
||||
If Not (conI.Resolution = RDP.RDPResolutions.FitToWindow Or _
|
||||
conI.Resolution = RDP.RDPResolutions.Fullscreen) Then
|
||||
strHide.Add("AutomaticResize")
|
||||
End If
|
||||
Case mRemoteNG.Connection.Protocol.Protocols.VNC
|
||||
strHide.Add("CacheBitmaps")
|
||||
strHide.Add("Colors")
|
||||
@@ -727,6 +732,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -735,6 +741,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
If conI.VNCAuthMode = mRemoteNG.Connection.Protocol.VNC.AuthMode.AuthVNC Then
|
||||
@@ -764,6 +771,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -772,6 +780,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
@@ -802,6 +811,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -810,6 +820,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
@@ -841,6 +852,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -849,6 +861,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("Username")
|
||||
@@ -881,6 +894,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -889,6 +903,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("Username")
|
||||
@@ -921,6 +936,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -929,6 +945,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("Username")
|
||||
@@ -961,6 +978,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -968,6 +986,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSmartCards")
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
@@ -999,12 +1018,14 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
strHide.Add("RedirectPrinters")
|
||||
strHide.Add("RedirectSmartCards")
|
||||
strHide.Add("RedirectSound;Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
@@ -1033,6 +1054,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -1040,6 +1062,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSmartCards")
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
@@ -1070,6 +1093,7 @@ Namespace UI
|
||||
strHide.Add("RDGatewayUseConnectionCredentials")
|
||||
strHide.Add("RDGatewayUsername")
|
||||
strHide.Add("RDPAuthenticationLevel")
|
||||
strHide.Add("LoadBalanceInfo")
|
||||
strHide.Add("RedirectDiskDrives")
|
||||
strHide.Add("RedirectKeys")
|
||||
strHide.Add("RedirectPorts")
|
||||
@@ -1078,6 +1102,7 @@ Namespace UI
|
||||
strHide.Add("RedirectSound")
|
||||
strHide.Add("RenderingEngine")
|
||||
strHide.Add("Resolution")
|
||||
strHide.Add("AutomaticResize")
|
||||
strHide.Add("UseConsoleSession")
|
||||
strHide.Add("UseCredSsp")
|
||||
strHide.Add("VNCAuthMode")
|
||||
|
||||
@@ -38,34 +38,34 @@ Namespace UI
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(PortScan))
|
||||
Me.ipStart = New IPTextBox.IPTextBox
|
||||
Me.ipEnd = New IPTextBox.IPTextBox
|
||||
Me.lblStartIP = New System.Windows.Forms.Label
|
||||
Me.lblEndIP = New System.Windows.Forms.Label
|
||||
Me.btnScan = New System.Windows.Forms.Button
|
||||
Me.pnlDivider = New System.Windows.Forms.Panel
|
||||
Me.splContainer = New System.Windows.Forms.SplitContainer
|
||||
Me.lvHosts = New System.Windows.Forms.ListView
|
||||
Me.btnCancel = New System.Windows.Forms.Button
|
||||
Me.btnImport = New System.Windows.Forms.Button
|
||||
Me.cbProtocol = New System.Windows.Forms.ComboBox
|
||||
Me.lblOnlyImport = New System.Windows.Forms.Label
|
||||
Me.clmHost = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmSSH = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmTelnet = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmHTTP = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmHTTPS = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmRlogin = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmRDP = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmVNC = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmOpenPorts = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmClosedPorts = New System.Windows.Forms.ColumnHeader
|
||||
Me.prgBar = New System.Windows.Forms.ProgressBar
|
||||
Me.pnlPorts = New System.Windows.Forms.Panel
|
||||
Me.portEnd = New System.Windows.Forms.NumericUpDown
|
||||
Me.portStart = New System.Windows.Forms.NumericUpDown
|
||||
Me.Label2 = New System.Windows.Forms.Label
|
||||
Me.Label1 = New System.Windows.Forms.Label
|
||||
Me.ipStart = New IPTextBox.IPTextBox()
|
||||
Me.ipEnd = New IPTextBox.IPTextBox()
|
||||
Me.lblStartIP = New System.Windows.Forms.Label()
|
||||
Me.lblEndIP = New System.Windows.Forms.Label()
|
||||
Me.btnScan = New System.Windows.Forms.Button()
|
||||
Me.pnlDivider = New System.Windows.Forms.Panel()
|
||||
Me.splContainer = New System.Windows.Forms.SplitContainer()
|
||||
Me.lvHosts = New System.Windows.Forms.ListView()
|
||||
Me.btnCancel = New System.Windows.Forms.Button()
|
||||
Me.btnImport = New System.Windows.Forms.Button()
|
||||
Me.cbProtocol = New System.Windows.Forms.ComboBox()
|
||||
Me.lblOnlyImport = New System.Windows.Forms.Label()
|
||||
Me.clmHost = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmSSH = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmTelnet = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmHTTP = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmHTTPS = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmRlogin = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmRDP = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmVNC = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmOpenPorts = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.clmClosedPorts = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.prgBar = New System.Windows.Forms.ProgressBar()
|
||||
Me.pnlPorts = New System.Windows.Forms.Panel()
|
||||
Me.portEnd = New System.Windows.Forms.NumericUpDown()
|
||||
Me.portStart = New System.Windows.Forms.NumericUpDown()
|
||||
Me.Label2 = New System.Windows.Forms.Label()
|
||||
Me.Label1 = New System.Windows.Forms.Label()
|
||||
Me.splContainer.Panel1.SuspendLayout()
|
||||
Me.splContainer.Panel2.SuspendLayout()
|
||||
Me.splContainer.SuspendLayout()
|
||||
@@ -125,7 +125,7 @@ Namespace UI
|
||||
'pnlDivider
|
||||
'
|
||||
Me.pnlDivider.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.pnlDivider.BackColor = System.Drawing.Color.DimGray
|
||||
Me.pnlDivider.Location = New System.Drawing.Point(0, 0)
|
||||
Me.pnlDivider.Name = "pnlDivider"
|
||||
@@ -135,8 +135,8 @@ Namespace UI
|
||||
'splContainer
|
||||
'
|
||||
Me.splContainer.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.splContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2
|
||||
Me.splContainer.IsSplitterFixed = True
|
||||
Me.splContainer.Location = New System.Drawing.Point(0, 74)
|
||||
@@ -161,8 +161,8 @@ Namespace UI
|
||||
'lvHosts
|
||||
'
|
||||
Me.lvHosts.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.lvHosts.BorderStyle = System.Windows.Forms.BorderStyle.None
|
||||
Me.lvHosts.FullRowSelect = True
|
||||
Me.lvHosts.GridLines = True
|
||||
@@ -271,7 +271,7 @@ Namespace UI
|
||||
'prgBar
|
||||
'
|
||||
Me.prgBar.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.prgBar.Location = New System.Drawing.Point(7, 50)
|
||||
Me.prgBar.Name = "prgBar"
|
||||
Me.prgBar.Size = New System.Drawing.Size(432, 16)
|
||||
@@ -338,6 +338,7 @@ Namespace UI
|
||||
Me.Controls.Add(Me.lblStartIP)
|
||||
Me.Controls.Add(Me.ipEnd)
|
||||
Me.Controls.Add(Me.ipStart)
|
||||
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.Name = "PortScan"
|
||||
Me.TabText = "Port Scan"
|
||||
@@ -460,6 +461,7 @@ Namespace UI
|
||||
Else
|
||||
btnScan.Text = My.Language.strButtonScan
|
||||
End If
|
||||
SetPrgBar(0, 100)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
@@ -480,13 +482,15 @@ Namespace UI
|
||||
Try
|
||||
scanning = True
|
||||
SwitchButtonText()
|
||||
SetPrgBar(0, 100)
|
||||
lvHosts.Items.Clear()
|
||||
|
||||
Dim ipAddressStart As Net.IPAddress = Net.IPAddress.Parse(ipStart.Text)
|
||||
Dim ipAddressEnd As Net.IPAddress = Net.IPAddress.Parse(ipEnd.Text)
|
||||
|
||||
If psMode = Tools.PortScan.PortScanMode.Import Then
|
||||
pScanner = New Tools.PortScan.Scanner(ipStart.Text, ipEnd.Text)
|
||||
pScanner = New Tools.PortScan.Scanner(ipAddressStart, ipAddressEnd)
|
||||
Else
|
||||
pScanner = New Tools.PortScan.Scanner(ipStart.Text, ipEnd.Text, portStart.Value, portEnd.Value)
|
||||
pScanner = New Tools.PortScan.Scanner(ipAddressStart, ipAddressEnd, portStart.Value, portEnd.Value)
|
||||
End If
|
||||
|
||||
AddHandler pScanner.BeginHostScan, AddressOf Event_BeginHostScan
|
||||
@@ -500,7 +504,7 @@ Namespace UI
|
||||
End Sub
|
||||
|
||||
Private Sub StopScan()
|
||||
pScanner.StopScan()
|
||||
If pScanner IsNot Nothing Then pScanner.StopScan()
|
||||
scanning = False
|
||||
SwitchButtonText()
|
||||
End Sub
|
||||
@@ -534,11 +538,19 @@ Namespace UI
|
||||
SetPrgBar(AlreadyScanned, ToBeScanned)
|
||||
End Sub
|
||||
|
||||
Private Sub Event_ScanComplete(ByVal Hosts As ArrayList)
|
||||
Private Sub Event_ScanComplete(ByVal hosts As List(Of Tools.PortScan.ScanHost))
|
||||
scanning = False
|
||||
SwitchButtonText()
|
||||
MessageCollector.AddMessage(Messages.MessageClass.InformationMsg, "Scan complete!")
|
||||
End Sub
|
||||
|
||||
Private Sub portStart_Enter(sender As System.Object, e As EventArgs) Handles portStart.Enter
|
||||
portStart.Select(0, portStart.Text.Length)
|
||||
End Sub
|
||||
|
||||
Private Sub portEnd_Enter(sender As System.Object, e As System.EventArgs) Handles portEnd.Enter
|
||||
portEnd.Select(0, portEnd.Text.Length)
|
||||
End Sub
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
|
||||
99
mRemoteV1/UI/UI.Window.Sessions.Designer.vb
generated
Normal file
99
mRemoteV1/UI/UI.Window.Sessions.Designer.vb
generated
Normal file
@@ -0,0 +1,99 @@
|
||||
Namespace UI
|
||||
Namespace Window
|
||||
Partial Public Class Sessions
|
||||
#Region " Windows Form Designer generated code "
|
||||
Private components As System.ComponentModel.IContainer
|
||||
Friend WithEvents sessionMenuRetrieve As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents sessionMenuLogoff As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents sessionList As System.Windows.Forms.ListView
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Me.components = New System.ComponentModel.Container()
|
||||
Dim sessionMenu As System.Windows.Forms.ContextMenuStrip
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Sessions))
|
||||
Me.sessionMenuRetrieve = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.sessionMenuLogoff = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.sessionList = New System.Windows.Forms.ListView()
|
||||
Me.sessionUsernameColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.sessionActivityColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
Me.sessionTypeColumn = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
|
||||
sessionMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||
sessionMenu.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'sessionMenu
|
||||
'
|
||||
sessionMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.sessionMenuRetrieve, Me.sessionMenuLogoff})
|
||||
sessionMenu.Name = "cMenSession"
|
||||
sessionMenu.Size = New System.Drawing.Size(153, 70)
|
||||
AddHandler sessionMenu.Opening, AddressOf Me.menuSession_Opening
|
||||
'
|
||||
'sessionMenuRetrieve
|
||||
'
|
||||
Me.sessionMenuRetrieve.Image = Global.mRemoteNG.My.Resources.Resources.Refresh
|
||||
Me.sessionMenuRetrieve.Name = "sessionMenuRetrieve"
|
||||
Me.sessionMenuRetrieve.Size = New System.Drawing.Size(152, 22)
|
||||
Me.sessionMenuRetrieve.Text = "Retrieve"
|
||||
'
|
||||
'sessionMenuLogoff
|
||||
'
|
||||
Me.sessionMenuLogoff.Image = Global.mRemoteNG.My.Resources.Resources.Session_LogOff
|
||||
Me.sessionMenuLogoff.Name = "sessionMenuLogoff"
|
||||
Me.sessionMenuLogoff.Size = New System.Drawing.Size(152, 22)
|
||||
Me.sessionMenuLogoff.Text = Global.mRemoteNG.My.Language.strLogOff
|
||||
'
|
||||
'sessionList
|
||||
'
|
||||
Me.sessionList.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.sessionList.BorderStyle = System.Windows.Forms.BorderStyle.None
|
||||
Me.sessionList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.sessionUsernameColumn, Me.sessionActivityColumn, Me.sessionTypeColumn})
|
||||
Me.sessionList.ContextMenuStrip = sessionMenu
|
||||
Me.sessionList.FullRowSelect = True
|
||||
Me.sessionList.GridLines = True
|
||||
Me.sessionList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
|
||||
Me.sessionList.Location = New System.Drawing.Point(0, -1)
|
||||
Me.sessionList.MultiSelect = False
|
||||
Me.sessionList.Name = "sessionList"
|
||||
Me.sessionList.ShowGroups = False
|
||||
Me.sessionList.Size = New System.Drawing.Size(242, 174)
|
||||
Me.sessionList.TabIndex = 0
|
||||
Me.sessionList.UseCompatibleStateImageBehavior = False
|
||||
Me.sessionList.View = System.Windows.Forms.View.Details
|
||||
'
|
||||
'sessionUsernameColumn
|
||||
'
|
||||
Me.sessionUsernameColumn.Text = Global.mRemoteNG.My.Language.strColumnUsername
|
||||
Me.sessionUsernameColumn.Width = 80
|
||||
'
|
||||
'sessionActivityColumn
|
||||
'
|
||||
Me.sessionActivityColumn.Text = Global.mRemoteNG.My.Language.strActivity
|
||||
'
|
||||
'sessionTypeColumn
|
||||
'
|
||||
Me.sessionTypeColumn.Text = Global.mRemoteNG.My.Language.strType
|
||||
Me.sessionTypeColumn.Width = 80
|
||||
'
|
||||
'Sessions
|
||||
'
|
||||
Me.ClientSize = New System.Drawing.Size(242, 173)
|
||||
Me.Controls.Add(Me.sessionList)
|
||||
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.HideOnClose = True
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.Name = "Sessions"
|
||||
Me.TabText = Global.mRemoteNG.My.Language.strMenuSessions
|
||||
Me.Text = "Sessions"
|
||||
sessionMenu.ResumeLayout(False)
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
Friend WithEvents sessionUsernameColumn As System.Windows.Forms.ColumnHeader
|
||||
Friend WithEvents sessionActivityColumn As System.Windows.Forms.ColumnHeader
|
||||
Friend WithEvents sessionTypeColumn As System.Windows.Forms.ColumnHeader
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
@@ -117,7 +117,10 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="cMenSession.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<metadata name="sessionMenu.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</metadata>
|
||||
<metadata name="sessionMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>14, 16</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
|
||||
@@ -1,412 +1,274 @@
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports System.Threading
|
||||
Imports mRemoteNG.My
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports mRemoteNG.App.Runtime
|
||||
|
||||
Namespace UI
|
||||
Namespace Window
|
||||
Public Class Sessions
|
||||
Inherits UI.Window.Base
|
||||
|
||||
#Region "Form Init"
|
||||
Friend WithEvents clmSesType As System.Windows.Forms.ColumnHeader
|
||||
Friend WithEvents clmSesUsername As System.Windows.Forms.ColumnHeader
|
||||
Friend WithEvents clmSesActivity As System.Windows.Forms.ColumnHeader
|
||||
Friend WithEvents cMenSession As System.Windows.Forms.ContextMenuStrip
|
||||
Private components As System.ComponentModel.IContainer
|
||||
Friend WithEvents cMenSessionRefresh As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents cMenSessionLogOff As System.Windows.Forms.ToolStripMenuItem
|
||||
Friend WithEvents lvSessions As System.Windows.Forms.ListView
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Me.components = New System.ComponentModel.Container
|
||||
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Sessions))
|
||||
Me.lvSessions = New System.Windows.Forms.ListView
|
||||
Me.clmSesUsername = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmSesActivity = New System.Windows.Forms.ColumnHeader
|
||||
Me.clmSesType = New System.Windows.Forms.ColumnHeader
|
||||
Me.cMenSession = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||
Me.cMenSessionRefresh = New System.Windows.Forms.ToolStripMenuItem
|
||||
Me.cMenSessionLogOff = New System.Windows.Forms.ToolStripMenuItem
|
||||
Me.cMenSession.SuspendLayout()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'lvSessions
|
||||
'
|
||||
Me.lvSessions.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.lvSessions.BorderStyle = System.Windows.Forms.BorderStyle.None
|
||||
Me.lvSessions.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.clmSesUsername, Me.clmSesActivity, Me.clmSesType})
|
||||
Me.lvSessions.ContextMenuStrip = Me.cMenSession
|
||||
Me.lvSessions.FullRowSelect = True
|
||||
Me.lvSessions.GridLines = True
|
||||
Me.lvSessions.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
|
||||
Me.lvSessions.Location = New System.Drawing.Point(0, -1)
|
||||
Me.lvSessions.MultiSelect = False
|
||||
Me.lvSessions.Name = "lvSessions"
|
||||
Me.lvSessions.ShowGroups = False
|
||||
Me.lvSessions.Size = New System.Drawing.Size(242, 174)
|
||||
Me.lvSessions.TabIndex = 0
|
||||
Me.lvSessions.UseCompatibleStateImageBehavior = False
|
||||
Me.lvSessions.View = System.Windows.Forms.View.Details
|
||||
'
|
||||
'clmSesUsername
|
||||
'
|
||||
Me.clmSesUsername.Text = My.Language.strColumnUsername
|
||||
Me.clmSesUsername.Width = 80
|
||||
'
|
||||
'clmSesActivity
|
||||
'
|
||||
Me.clmSesActivity.Text = My.Language.strActivity
|
||||
'
|
||||
'clmSesType
|
||||
'
|
||||
Me.clmSesType.Text = My.Language.strType
|
||||
Me.clmSesType.Width = 80
|
||||
'
|
||||
'cMenSession
|
||||
'
|
||||
Me.cMenSession.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cMenSessionRefresh, Me.cMenSessionLogOff})
|
||||
Me.cMenSession.Name = "cMenSession"
|
||||
Me.cMenSession.Size = New System.Drawing.Size(124, 48)
|
||||
'
|
||||
'cMenSessionRefresh
|
||||
'
|
||||
Me.cMenSessionRefresh.Image = Global.mRemoteNG.My.Resources.Resources.Refresh
|
||||
Me.cMenSessionRefresh.Name = "cMenSessionRefresh"
|
||||
Me.cMenSessionRefresh.Size = New System.Drawing.Size(123, 22)
|
||||
Me.cMenSessionRefresh.Text = My.Language.strRefresh
|
||||
'
|
||||
'cMenSessionLogOff
|
||||
'
|
||||
Me.cMenSessionLogOff.Image = Global.mRemoteNG.My.Resources.Resources.Session_LogOff
|
||||
Me.cMenSessionLogOff.Name = "cMenSessionLogOff"
|
||||
Me.cMenSessionLogOff.Size = New System.Drawing.Size(123, 22)
|
||||
Me.cMenSessionLogOff.Text = My.Language.strLogOff
|
||||
'
|
||||
'Sessions
|
||||
'
|
||||
Me.ClientSize = New System.Drawing.Size(242, 173)
|
||||
Me.Controls.Add(Me.lvSessions)
|
||||
Me.HideOnClose = True
|
||||
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
|
||||
Me.Name = "Sessions"
|
||||
Me.TabText = My.Language.strMenuSessions
|
||||
Me.Text = My.Language.strMenuSessions
|
||||
Me.cMenSession.ResumeLayout(False)
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Properties"
|
||||
Private tServerName As String
|
||||
Private tUserName As String
|
||||
Private tPassword As String
|
||||
Private tDomain As String
|
||||
Private tSessionID As Long
|
||||
Private tKillingSession As Boolean
|
||||
Private threadSessions As Threading.Thread
|
||||
Private tServerHandle As Long
|
||||
#End Region
|
||||
|
||||
#Region "Public Properties"
|
||||
Private _CurrentHost As String
|
||||
Public Property CurrentHost() As String
|
||||
Get
|
||||
Return Me._CurrentHost
|
||||
End Get
|
||||
Set(ByVal value As String)
|
||||
Me._CurrentHost = value
|
||||
End Set
|
||||
End Property
|
||||
#End Region
|
||||
|
||||
#Region "Form Stuff"
|
||||
Private Sub Sessions_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
|
||||
ApplyLanguage()
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLanguage()
|
||||
clmSesUsername.Text = My.Language.strColumnUsername
|
||||
clmSesActivity.Text = My.Language.strActivity
|
||||
clmSesType.Text = My.Language.strType
|
||||
cMenSessionRefresh.Text = My.Language.strRefresh
|
||||
cMenSessionLogOff.Text = My.Language.strLogOff
|
||||
TabText = My.Language.strMenuSessions
|
||||
Text = My.Language.strMenuSessions
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Methods"
|
||||
Private Sub GetSessionsBG()
|
||||
Try
|
||||
Dim tS As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
|
||||
Dim sU As New Security.Impersonator
|
||||
Dim tsSessions As New mRemoteNG.Connection.Protocol.RDP.Sessions
|
||||
|
||||
sU.StartImpersonation(tDomain, tUserName, tPassword)
|
||||
|
||||
Try
|
||||
'Trace.WriteLine("Opening connection to server: " & tServerName)
|
||||
If tS.OpenConnection(tServerName) = True Then
|
||||
tServerHandle = tS.ServerHandle
|
||||
'Trace.WriteLine("Trying to get sessions")
|
||||
tsSessions = tS.GetSessions
|
||||
End If
|
||||
Catch ex As Exception
|
||||
End Try
|
||||
|
||||
Dim i As Integer = 0
|
||||
|
||||
'Trace.WriteLine("Sessions Count: " & tsSessions.Count)
|
||||
|
||||
If tServerName = Me._CurrentHost Then
|
||||
For i = 0 To tsSessions.ItemsCount - 1
|
||||
Dim lItem As New ListViewItem
|
||||
lItem.Tag = tsSessions(i).SessionID
|
||||
lItem.Text = tsSessions(i).SessionUser
|
||||
lItem.SubItems.Add(tsSessions(i).SessionState)
|
||||
lItem.SubItems.Add(Replace(tsSessions(i).SessionName, vbNewLine, ""))
|
||||
|
||||
'Trace.WriteLine("Session " & i & ": " & tsSessions(i).SessionUser)
|
||||
|
||||
AddToList(lItem)
|
||||
Next
|
||||
End If
|
||||
|
||||
sU.StopImpersonation()
|
||||
sU = Nothing
|
||||
tS.CloseConnection(tServerHandle)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSessionGetFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub KillSessionBG()
|
||||
Try
|
||||
If tUserName = "" Or tPassword = "" Then
|
||||
'Trace.WriteLine("No Logon Info")
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim ts As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
|
||||
Dim sU As New Security.Impersonator
|
||||
|
||||
sU.StartImpersonation(tDomain, tUserName, tPassword)
|
||||
|
||||
Try
|
||||
If ts.OpenConnection(tServerName) = True Then
|
||||
If ts.KillSession(tSessionID) = True Then
|
||||
sU.StopImpersonation()
|
||||
'Trace.WriteLine("Successfully killed session: " & tSessionID)
|
||||
Else
|
||||
sU.StopImpersonation()
|
||||
'Trace.WriteLine("Killing session " & tSessionID & " failed")
|
||||
End If
|
||||
End If
|
||||
Catch ex As Exception
|
||||
sU.StopImpersonation()
|
||||
End Try
|
||||
|
||||
sU.StopImpersonation()
|
||||
|
||||
ClearList()
|
||||
|
||||
GetSessionsBG()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strSessionKillFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Delegate Sub AddToListCB(ByVal [ListItem] As ListViewItem)
|
||||
Private Sub AddToList(ByVal [ListItem] As ListViewItem)
|
||||
If Me.lvSessions.InvokeRequired Then
|
||||
Dim d As New AddToListCB(AddressOf AddToList)
|
||||
Me.lvSessions.Invoke(d, New Object() {[ListItem]})
|
||||
Else
|
||||
Me.lvSessions.Items.Add(ListItem)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Delegate Sub ClearListCB()
|
||||
Private Sub ClearList()
|
||||
If Me.lvSessions.InvokeRequired Then
|
||||
Dim d As New ClearListCB(AddressOf ClearList)
|
||||
Me.lvSessions.Invoke(d)
|
||||
Else
|
||||
Me.lvSessions.Items.Clear()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub cMenSessionRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenSessionRefresh.Click
|
||||
Me.GetSessions()
|
||||
End Sub
|
||||
|
||||
Private Sub cMenSessionLogOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cMenSessionLogOff.Click
|
||||
Me.KillSession()
|
||||
End Sub
|
||||
Inherits Base
|
||||
#Region "Private Fields"
|
||||
Private _getSessionsThread As Thread
|
||||
Private _retrieved As Boolean = False
|
||||
#End Region
|
||||
|
||||
#Region "Public Methods"
|
||||
Public Sub New(ByVal Panel As DockContent)
|
||||
Me.WindowType = Type.Sessions
|
||||
Me.DockPnl = Panel
|
||||
Me.InitializeComponent()
|
||||
Public Sub New(ByVal panel As DockContent)
|
||||
WindowType = Type.Sessions
|
||||
DockPnl = panel
|
||||
InitializeComponent()
|
||||
End Sub
|
||||
|
||||
Public Sub GetSessionsAuto()
|
||||
Public Sub GetSessions(Optional ByVal auto As Boolean = False)
|
||||
ClearList()
|
||||
If auto Then
|
||||
_retrieved = False
|
||||
If Not Settings.AutomaticallyGetSessionInfo Then Return
|
||||
End If
|
||||
|
||||
Try
|
||||
Dim nowHost As String = ""
|
||||
Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
|
||||
If connectionInfo Is Nothing Then Return
|
||||
|
||||
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
|
||||
nowHost = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info).Hostname
|
||||
Else
|
||||
Me.ClearList()
|
||||
Exit Sub
|
||||
End If
|
||||
If Not (connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
|
||||
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA) Then Return
|
||||
|
||||
If My.Settings.AutomaticallyGetSessionInfo And Me._CurrentHost = nowHost Then
|
||||
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
|
||||
Dim data As New BackgroundData
|
||||
With data
|
||||
.Hostname = connectionInfo.Hostname
|
||||
.Username = connectionInfo.Username
|
||||
.Password = connectionInfo.Password
|
||||
.Domain = connectionInfo.Domain
|
||||
|
||||
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
|
||||
'continue
|
||||
Else
|
||||
Me.ClearList()
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim sUser As String = conI.Username
|
||||
Dim sPass As String = conI.Password
|
||||
Dim sDom As String = conI.Domain
|
||||
|
||||
If My.Settings.EmptyCredentials = "custom" Then
|
||||
If sUser = "" Then
|
||||
sUser = My.Settings.DefaultUsername
|
||||
If Settings.EmptyCredentials = "custom" Then
|
||||
If .Username = "" Then
|
||||
.Username = Settings.DefaultUsername
|
||||
End If
|
||||
|
||||
If sPass = "" Then
|
||||
sPass = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
If .Password = "" Then
|
||||
.Password = Security.Crypt.Decrypt(Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
End If
|
||||
|
||||
If sDom = "" Then
|
||||
sDom = My.Settings.DefaultDomain
|
||||
If .Domain = "" Then
|
||||
.Domain = Settings.DefaultDomain
|
||||
End If
|
||||
End If
|
||||
End With
|
||||
|
||||
Me.GetSessions(conI.Hostname, sUser, sPass, sDom)
|
||||
If _getSessionsThread IsNot Nothing Then
|
||||
If _getSessionsThread.IsAlive Then _getSessionsThread.Abort()
|
||||
End If
|
||||
_getSessionsThread = New Thread(AddressOf GetSessionsBackground)
|
||||
_getSessionsThread.SetApartmentState(ApartmentState.STA)
|
||||
_getSessionsThread.IsBackground = True
|
||||
_getSessionsThread.Start(data)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GetSessionsAuto (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Sub GetSessions()
|
||||
If mRemoteNG.Tree.Node.SelectedNode Is Nothing Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
|
||||
'continue
|
||||
Else
|
||||
Me.ClearList()
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
|
||||
|
||||
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
|
||||
'continue
|
||||
Else
|
||||
Me.ClearList()
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Me._CurrentHost = conI.Hostname
|
||||
|
||||
Dim sUser As String = conI.Username
|
||||
Dim sPass As String = conI.Password
|
||||
Dim sDom As String = conI.Domain
|
||||
|
||||
If My.Settings.EmptyCredentials = "custom" Then
|
||||
If sUser = "" Then
|
||||
sUser = My.Settings.DefaultUsername
|
||||
End If
|
||||
|
||||
If sPass = "" Then
|
||||
sPass = Security.Crypt.Decrypt(My.Settings.DefaultPassword, App.Info.General.EncryptionKey)
|
||||
End If
|
||||
|
||||
If sDom = "" Then
|
||||
sDom = My.Settings.DefaultDomain
|
||||
End If
|
||||
End If
|
||||
|
||||
Me.GetSessions(conI.Hostname, sUser, sPass, sDom)
|
||||
End Sub
|
||||
|
||||
Public Sub GetSessions(ByVal ServerName As String, ByVal Username As String, ByVal Password As String, ByVal Domain As String)
|
||||
Try
|
||||
Me.lvSessions.Items.Clear()
|
||||
|
||||
tServerName = ServerName
|
||||
tUserName = Username
|
||||
tPassword = Password
|
||||
tDomain = Domain
|
||||
|
||||
threadSessions = New Threading.Thread(AddressOf GetSessionsBG)
|
||||
threadSessions.SetApartmentState(Threading.ApartmentState.STA)
|
||||
threadSessions.IsBackground = True
|
||||
threadSessions.Start()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "GetSessions (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Sessions.GetSessions() failed." & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Public Sub KillSession()
|
||||
If TypeOf mRemoteNG.Tree.Node.SelectedNode.Tag Is mRemoteNG.Connection.Info Then
|
||||
'continue
|
||||
Else
|
||||
Exit Sub
|
||||
End If
|
||||
If sessionList.SelectedItems.Count = 0 Then Return
|
||||
|
||||
Dim conI As mRemoteNG.Connection.Info = mRemoteNG.Tree.Node.SelectedNode.Tag
|
||||
Dim connectionInfo As mRemoteNG.Connection.Info = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
|
||||
If connectionInfo Is Nothing Then Return
|
||||
|
||||
If conI.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then
|
||||
'continue
|
||||
Else
|
||||
Exit Sub
|
||||
End If
|
||||
If Not connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Then Return
|
||||
|
||||
If Me.lvSessions.SelectedItems.Count > 0 Then
|
||||
'continue
|
||||
Else
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
For Each lvItem As ListViewItem In Me.lvSessions.SelectedItems
|
||||
Me.KillSession(conI.Hostname, conI.Username, conI.Password, conI.Domain, lvItem.Tag)
|
||||
For Each lvItem As ListViewItem In sessionList.SelectedItems
|
||||
KillSession(connectionInfo.Hostname, connectionInfo.Username, connectionInfo.Password, connectionInfo.Domain, lvItem.Tag)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub KillSession(ByVal ServerName As String, ByVal Username As String, ByVal Password As String, ByVal Domain As String, ByVal SessionID As String)
|
||||
Public Sub KillSession(ByVal hostname As String, ByVal username As String, ByVal password As String, ByVal domain As String, ByVal sessionId As String)
|
||||
Try
|
||||
tServerName = ServerName
|
||||
tUserName = Username
|
||||
tPassword = Password
|
||||
tDomain = Domain
|
||||
tSessionID = SessionID
|
||||
Dim data As New BackgroundData
|
||||
With data
|
||||
.Hostname = hostname
|
||||
.Username = username
|
||||
.Password = password
|
||||
.Domain = domain
|
||||
.SessionId = sessionId
|
||||
End With
|
||||
|
||||
threadSessions = New Threading.Thread(AddressOf KillSessionBG)
|
||||
threadSessions.SetApartmentState(Threading.ApartmentState.STA)
|
||||
threadSessions.IsBackground = True
|
||||
threadSessions.Start()
|
||||
Dim thread As New Thread(AddressOf KillSessionBackground)
|
||||
thread.SetApartmentState(ApartmentState.STA)
|
||||
thread.IsBackground = True
|
||||
thread.Start(data)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "KillSession (UI.Window.Sessions) failed" & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "UI.Window.Sessions.KillSession() failed." & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Methods"
|
||||
#Region "Form Stuff"
|
||||
Private Sub Sessions_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
|
||||
ApplyLanguage()
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLanguage()
|
||||
TabText = Language.strMenuSessions
|
||||
Text = Language.strMenuSessions
|
||||
sessionActivityColumn.Text = Language.strActivity
|
||||
sessionMenuLogoff.Text = Language.strLogOff
|
||||
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
|
||||
sessionTypeColumn.Text = Language.strType
|
||||
sessionUsernameColumn.Text = Language.strColumnUsername
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
Private Sub GetSessionsBackground(ByVal dataObject As Object)
|
||||
Dim data As BackgroundData = TryCast(dataObject, BackgroundData)
|
||||
If data Is Nothing Then Return
|
||||
|
||||
Dim impersonator As New Security.Impersonator
|
||||
Dim terminalSessions As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
|
||||
Dim serverHandle As Long = 0
|
||||
Try
|
||||
With data
|
||||
impersonator.StartImpersonation(.Domain, .Username, .Password)
|
||||
|
||||
serverHandle = terminalSessions.OpenConnection(.Hostname)
|
||||
If serverHandle = 0 Then Return
|
||||
|
||||
GetSessions(terminalSessions, serverHandle)
|
||||
End With
|
||||
|
||||
_retrieved = True
|
||||
Catch ex As ThreadAbortException
|
||||
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionGetFailed & vbNewLine & ex.Message, True)
|
||||
Finally
|
||||
impersonator.StopImpersonation()
|
||||
If Not serverHandle = 0 Then
|
||||
terminalSessions.CloseConnection(serverHandle)
|
||||
End If
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
' Get sessions from an already impersonated and connected TerminalSessions object
|
||||
Private Sub GetSessions(ByVal terminalSessions As mRemoteNG.Connection.Protocol.RDP.TerminalSessions, ByVal serverHandle As Long)
|
||||
Dim rdpSessions As mRemoteNG.Connection.Protocol.RDP.SessionsCollection = terminalSessions.GetSessions(serverHandle)
|
||||
For Each session As mRemoteNG.Connection.Protocol.RDP.Session In rdpSessions
|
||||
Dim item As New ListViewItem
|
||||
item.Tag = session.SessionId
|
||||
item.Text = session.SessionUser
|
||||
item.SubItems.Add(session.SessionState)
|
||||
item.SubItems.Add(Replace(session.SessionName, vbNewLine, ""))
|
||||
AddToList(item)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Sub KillSessionBackground(ByVal dataObject As Object)
|
||||
Dim data As BackgroundData = TryCast(dataObject, BackgroundData)
|
||||
If data Is Nothing Then Return
|
||||
|
||||
Dim impersonator As New Security.Impersonator
|
||||
Dim terminalSessions As New mRemoteNG.Connection.Protocol.RDP.TerminalSessions
|
||||
Dim serverHandle As Long = 0
|
||||
Try
|
||||
With data
|
||||
If String.IsNullOrEmpty(.Username) Or String.IsNullOrEmpty(.Password) Then Return
|
||||
|
||||
impersonator.StartImpersonation(.Domain, .Username, .Password)
|
||||
|
||||
serverHandle = terminalSessions.OpenConnection(.Hostname)
|
||||
If Not serverHandle = 0 Then
|
||||
terminalSessions.KillSession(serverHandle, .SessionId)
|
||||
End If
|
||||
|
||||
ClearList()
|
||||
GetSessions(terminalSessions, serverHandle)
|
||||
|
||||
_retrieved = True
|
||||
End With
|
||||
Catch ex As ThreadAbortException
|
||||
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, Language.strSessionKillFailed & vbNewLine & ex.Message, True)
|
||||
Finally
|
||||
impersonator.StopImpersonation()
|
||||
If Not serverHandle = 0 Then
|
||||
terminalSessions.CloseConnection(serverHandle)
|
||||
End If
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Delegate Sub AddToListCallback(ByVal item As ListViewItem)
|
||||
Private Sub AddToList(ByVal item As ListViewItem)
|
||||
If sessionList.InvokeRequired Then
|
||||
Dim callback As New AddToListCallback(AddressOf AddToList)
|
||||
sessionList.Invoke(callback, New Object() {item})
|
||||
Else
|
||||
sessionList.Items.Add(item)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Delegate Sub ClearListCallback()
|
||||
Private Sub ClearList()
|
||||
If sessionList.InvokeRequired Then
|
||||
Dim callback As New ClearListCallback(AddressOf ClearList)
|
||||
sessionList.Invoke(callback)
|
||||
Else
|
||||
sessionList.Items.Clear()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub menuSession_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
|
||||
Dim connectionInfo As mRemoteNG.Connection.Info
|
||||
If (mRemoteNG.Tree.Node.TreeView Is Nothing OrElse mRemoteNG.Tree.Node.SelectedNode Is Nothing) Then
|
||||
connectionInfo = Nothing
|
||||
Else
|
||||
connectionInfo = TryCast(mRemoteNG.Tree.Node.SelectedNode.Tag, mRemoteNG.Connection.Info)
|
||||
End If
|
||||
|
||||
If connectionInfo Is Nothing Then
|
||||
sessionMenuLogoff.Enabled = False
|
||||
sessionMenuRetrieve.Enabled = False
|
||||
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
|
||||
Return
|
||||
End If
|
||||
|
||||
If connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP And sessionList.SelectedItems.Count > 0 Then
|
||||
sessionMenuLogoff.Enabled = True
|
||||
Else
|
||||
sessionMenuLogoff.Enabled = False
|
||||
End If
|
||||
|
||||
If connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.RDP Or _
|
||||
connectionInfo.Protocol = mRemoteNG.Connection.Protocol.Protocols.ICA Then
|
||||
sessionMenuRetrieve.Enabled = True
|
||||
Else
|
||||
sessionMenuRetrieve.Enabled = False
|
||||
End If
|
||||
|
||||
If Not _retrieved Then
|
||||
sessionMenuRetrieve.Text = Language.strMenuSessionRetrieve
|
||||
Else
|
||||
sessionMenuRetrieve.Text = Language.strRefresh
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub sessionMenuRetrieve_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles sessionMenuRetrieve.Click
|
||||
GetSessions()
|
||||
End Sub
|
||||
|
||||
Private Sub sessionMenuLogoff_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles sessionMenuLogoff.Click
|
||||
KillSession()
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Classes"
|
||||
Private Class BackgroundData
|
||||
Public Hostname As String
|
||||
Public Username As String
|
||||
Public Password As String
|
||||
Public Domain As String
|
||||
Public SessionId As Long
|
||||
End Class
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
@@ -589,7 +589,6 @@ Namespace UI
|
||||
Select Case mRemoteNG.Tree.Node.GetNodeType(e.Node)
|
||||
Case mRemoteNG.Tree.Node.Type.Connection, mRemoteNG.Tree.Node.Type.PuttySession
|
||||
Windows.configForm.SetPropertyGridObject(e.Node.Tag)
|
||||
Windows.sessionsForm.CurrentHost = TryCast(e.Node.Tag, mRemoteNG.Connection.Info).Hostname
|
||||
Case mRemoteNG.Tree.Node.Type.Container
|
||||
Windows.configForm.SetPropertyGridObject(TryCast(e.Node.Tag, Container.Info).ConnectionInfo)
|
||||
Case mRemoteNG.Tree.Node.Type.Root, mRemoteNG.Tree.Node.Type.PuttyRoot
|
||||
@@ -600,7 +599,7 @@ Namespace UI
|
||||
|
||||
Windows.configForm.pGrid_SelectedObjectChanged()
|
||||
ShowHideTreeContextMenuItems(e.Node)
|
||||
Windows.sessionsForm.GetSessionsAuto()
|
||||
Windows.sessionsForm.GetSessions(True)
|
||||
|
||||
LastSelected = mRemoteNG.Tree.Node.GetConstantID(e.Node)
|
||||
Catch ex As Exception
|
||||
@@ -1089,6 +1088,7 @@ Namespace UI
|
||||
End If
|
||||
|
||||
newContainerInfo.ConnectionInfo = New mRemoteNG.Connection.Info(newContainerInfo)
|
||||
newContainerInfo.ConnectionInfo.Name = newNode.Text
|
||||
|
||||
' We can only inherit from a container node, not the root node or connection nodes
|
||||
If mRemoteNG.Tree.Node.GetNodeType(parentNode) = mRemoteNG.Tree.Node.Type.Container Then
|
||||
@@ -1183,7 +1183,7 @@ Namespace UI
|
||||
|
||||
Private Sub ImportFromRDPFiles()
|
||||
Try
|
||||
App.Runtime.ImportConnectionsFromRDPFiles()
|
||||
App.Runtime.ImportConnectionsRdpFile()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, "ImportFromRDPFiles (UI.Window.Tree) failed" & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
|
||||
193
mRemoteV1/UI/UI.Window.Update.Designer.vb
generated
Normal file
193
mRemoteV1/UI/UI.Window.Update.Designer.vb
generated
Normal file
@@ -0,0 +1,193 @@
|
||||
Namespace UI
|
||||
Namespace Window
|
||||
Partial Public Class Update
|
||||
#Region " Windows Form Designer generated code "
|
||||
Friend WithEvents lblStatus As System.Windows.Forms.Label
|
||||
Friend WithEvents txtChangeLog As System.Windows.Forms.TextBox
|
||||
Friend WithEvents prgbDownload As System.Windows.Forms.ProgressBar
|
||||
Friend WithEvents btnDownload As System.Windows.Forms.Button
|
||||
Friend WithEvents lblChangeLogLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents pnlUpdate As System.Windows.Forms.Panel
|
||||
Friend WithEvents lblLatestVersionLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents lblInstalledVersionLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents lblLatestVersion As System.Windows.Forms.Label
|
||||
Friend WithEvents lblInstalledVersion As System.Windows.Forms.Label
|
||||
Friend WithEvents pbUpdateImage As System.Windows.Forms.PictureBox
|
||||
Friend WithEvents btnCheckForUpdate As System.Windows.Forms.Button
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Me.btnCheckForUpdate = New System.Windows.Forms.Button()
|
||||
Me.pnlUpdate = New System.Windows.Forms.Panel()
|
||||
Me.lblChangeLogLabel = New System.Windows.Forms.Label()
|
||||
Me.btnDownload = New System.Windows.Forms.Button()
|
||||
Me.prgbDownload = New System.Windows.Forms.ProgressBar()
|
||||
Me.txtChangeLog = New System.Windows.Forms.TextBox()
|
||||
Me.lblStatus = New System.Windows.Forms.Label()
|
||||
Me.lblLatestVersionLabel = New System.Windows.Forms.Label()
|
||||
Me.lblInstalledVersionLabel = New System.Windows.Forms.Label()
|
||||
Me.lblLatestVersion = New System.Windows.Forms.Label()
|
||||
Me.lblInstalledVersion = New System.Windows.Forms.Label()
|
||||
Me.pbUpdateImage = New System.Windows.Forms.PictureBox()
|
||||
Me.pnlUpdate.SuspendLayout()
|
||||
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'btnCheckForUpdate
|
||||
'
|
||||
Me.btnCheckForUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnCheckForUpdate.Location = New System.Drawing.Point(16, 104)
|
||||
Me.btnCheckForUpdate.Name = "btnCheckForUpdate"
|
||||
Me.btnCheckForUpdate.Size = New System.Drawing.Size(104, 32)
|
||||
Me.btnCheckForUpdate.TabIndex = 5
|
||||
Me.btnCheckForUpdate.Text = "Check Again"
|
||||
Me.btnCheckForUpdate.UseVisualStyleBackColor = True
|
||||
'
|
||||
'pnlUpdate
|
||||
'
|
||||
Me.pnlUpdate.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.pnlUpdate.Controls.Add(Me.lblChangeLogLabel)
|
||||
Me.pnlUpdate.Controls.Add(Me.btnDownload)
|
||||
Me.pnlUpdate.Controls.Add(Me.prgbDownload)
|
||||
Me.pnlUpdate.Controls.Add(Me.txtChangeLog)
|
||||
Me.pnlUpdate.Location = New System.Drawing.Point(16, 152)
|
||||
Me.pnlUpdate.Name = "pnlUpdate"
|
||||
Me.pnlUpdate.Size = New System.Drawing.Size(718, 248)
|
||||
Me.pnlUpdate.TabIndex = 6
|
||||
Me.pnlUpdate.Visible = False
|
||||
'
|
||||
'lblChangeLogLabel
|
||||
'
|
||||
Me.lblChangeLogLabel.AutoSize = True
|
||||
Me.lblChangeLogLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblChangeLogLabel.Location = New System.Drawing.Point(0, 0)
|
||||
Me.lblChangeLogLabel.Name = "lblChangeLogLabel"
|
||||
Me.lblChangeLogLabel.Size = New System.Drawing.Size(79, 13)
|
||||
Me.lblChangeLogLabel.TabIndex = 0
|
||||
Me.lblChangeLogLabel.Text = "Change Log:"
|
||||
'
|
||||
'btnDownload
|
||||
'
|
||||
Me.btnDownload.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnDownload.Location = New System.Drawing.Point(0, 216)
|
||||
Me.btnDownload.Name = "btnDownload"
|
||||
Me.btnDownload.Size = New System.Drawing.Size(144, 32)
|
||||
Me.btnDownload.TabIndex = 2
|
||||
Me.btnDownload.Text = "Download and Install"
|
||||
Me.btnDownload.UseVisualStyleBackColor = True
|
||||
'
|
||||
'prgbDownload
|
||||
'
|
||||
Me.prgbDownload.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.prgbDownload.Location = New System.Drawing.Point(160, 224)
|
||||
Me.prgbDownload.Name = "prgbDownload"
|
||||
Me.prgbDownload.Size = New System.Drawing.Size(542, 23)
|
||||
Me.prgbDownload.TabIndex = 3
|
||||
Me.prgbDownload.Visible = False
|
||||
'
|
||||
'txtChangeLog
|
||||
'
|
||||
Me.txtChangeLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.txtChangeLog.BorderStyle = System.Windows.Forms.BorderStyle.None
|
||||
Me.txtChangeLog.Cursor = System.Windows.Forms.Cursors.Arrow
|
||||
Me.txtChangeLog.Location = New System.Drawing.Point(16, 24)
|
||||
Me.txtChangeLog.Multiline = True
|
||||
Me.txtChangeLog.Name = "txtChangeLog"
|
||||
Me.txtChangeLog.ReadOnly = True
|
||||
Me.txtChangeLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
|
||||
Me.txtChangeLog.Size = New System.Drawing.Size(699, 181)
|
||||
Me.txtChangeLog.TabIndex = 1
|
||||
Me.txtChangeLog.TabStop = False
|
||||
'
|
||||
'lblStatus
|
||||
'
|
||||
Me.lblStatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblStatus.ForeColor = System.Drawing.SystemColors.ControlText
|
||||
Me.lblStatus.Location = New System.Drawing.Point(12, 16)
|
||||
Me.lblStatus.Name = "lblStatus"
|
||||
Me.lblStatus.Size = New System.Drawing.Size(660, 23)
|
||||
Me.lblStatus.TabIndex = 0
|
||||
Me.lblStatus.Text = "Status"
|
||||
Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblLatestVersionLabel
|
||||
'
|
||||
Me.lblLatestVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblLatestVersionLabel.Location = New System.Drawing.Point(16, 72)
|
||||
Me.lblLatestVersionLabel.Name = "lblLatestVersionLabel"
|
||||
Me.lblLatestVersionLabel.Size = New System.Drawing.Size(120, 16)
|
||||
Me.lblLatestVersionLabel.TabIndex = 3
|
||||
Me.lblLatestVersionLabel.Text = "Current version:"
|
||||
Me.lblLatestVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||
'
|
||||
'lblInstalledVersionLabel
|
||||
'
|
||||
Me.lblInstalledVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblInstalledVersionLabel.Location = New System.Drawing.Point(16, 48)
|
||||
Me.lblInstalledVersionLabel.Name = "lblInstalledVersionLabel"
|
||||
Me.lblInstalledVersionLabel.Size = New System.Drawing.Size(120, 16)
|
||||
Me.lblInstalledVersionLabel.TabIndex = 1
|
||||
Me.lblInstalledVersionLabel.Text = "Installed version:"
|
||||
Me.lblInstalledVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||
'
|
||||
'lblLatestVersion
|
||||
'
|
||||
Me.lblLatestVersion.Location = New System.Drawing.Point(136, 72)
|
||||
Me.lblLatestVersion.Name = "lblLatestVersion"
|
||||
Me.lblLatestVersion.Size = New System.Drawing.Size(104, 16)
|
||||
Me.lblLatestVersion.TabIndex = 4
|
||||
Me.lblLatestVersion.Text = "Version"
|
||||
Me.lblLatestVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblInstalledVersion
|
||||
'
|
||||
Me.lblInstalledVersion.Location = New System.Drawing.Point(136, 48)
|
||||
Me.lblInstalledVersion.Name = "lblInstalledVersion"
|
||||
Me.lblInstalledVersion.Size = New System.Drawing.Size(104, 16)
|
||||
Me.lblInstalledVersion.TabIndex = 2
|
||||
Me.lblInstalledVersion.Text = "Version"
|
||||
Me.lblInstalledVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'pbUpdateImage
|
||||
'
|
||||
Me.pbUpdateImage.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.pbUpdateImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
|
||||
Me.pbUpdateImage.Cursor = System.Windows.Forms.Cursors.Hand
|
||||
Me.pbUpdateImage.Location = New System.Drawing.Point(246, 48)
|
||||
Me.pbUpdateImage.Name = "pbUpdateImage"
|
||||
Me.pbUpdateImage.Size = New System.Drawing.Size(468, 60)
|
||||
Me.pbUpdateImage.TabIndex = 45
|
||||
Me.pbUpdateImage.TabStop = False
|
||||
Me.pbUpdateImage.Visible = False
|
||||
'
|
||||
'Update
|
||||
'
|
||||
Me.ClientSize = New System.Drawing.Size(734, 418)
|
||||
Me.Controls.Add(Me.pbUpdateImage)
|
||||
Me.Controls.Add(Me.lblLatestVersionLabel)
|
||||
Me.Controls.Add(Me.lblInstalledVersionLabel)
|
||||
Me.Controls.Add(Me.lblLatestVersion)
|
||||
Me.Controls.Add(Me.btnCheckForUpdate)
|
||||
Me.Controls.Add(Me.lblInstalledVersion)
|
||||
Me.Controls.Add(Me.pnlUpdate)
|
||||
Me.Controls.Add(Me.lblStatus)
|
||||
Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.Icon = Global.mRemoteNG.My.Resources.Resources.Update_Icon
|
||||
Me.Name = "Update"
|
||||
Me.TabText = "Update"
|
||||
Me.Text = "Update"
|
||||
Me.pnlUpdate.ResumeLayout(False)
|
||||
Me.pnlUpdate.PerformLayout()
|
||||
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
#End Region
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
@@ -1,454 +1,205 @@
|
||||
Imports System.ComponentModel
|
||||
Imports mRemoteNG.My
|
||||
Imports WeifenLuo.WinFormsUI.Docking
|
||||
Imports System.Threading
|
||||
Imports System.IO
|
||||
Imports mRemoteNG.App.Runtime
|
||||
|
||||
Namespace UI
|
||||
Namespace Window
|
||||
Public Class Update
|
||||
Inherits UI.Window.Base
|
||||
|
||||
#Region "Form Init"
|
||||
Friend WithEvents lblStatus As System.Windows.Forms.Label
|
||||
Friend WithEvents txtChangeLog As System.Windows.Forms.TextBox
|
||||
Friend WithEvents prgbDownload As System.Windows.Forms.ProgressBar
|
||||
Friend WithEvents btnDownload As System.Windows.Forms.Button
|
||||
Friend WithEvents lblChangeLogLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents pnlUp As System.Windows.Forms.Panel
|
||||
Friend WithEvents lblCurrentVersionLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents lblInstalledVersionLabel As System.Windows.Forms.Label
|
||||
Friend WithEvents lblAvailableVersion As System.Windows.Forms.Label
|
||||
Friend WithEvents lblCurrentVersion As System.Windows.Forms.Label
|
||||
Friend WithEvents pbUpdateImage As System.Windows.Forms.PictureBox
|
||||
Friend WithEvents btnCheckForUpdate As System.Windows.Forms.Button
|
||||
|
||||
Private Sub InitializeComponent()
|
||||
Me.btnCheckForUpdate = New System.Windows.Forms.Button
|
||||
Me.pnlUp = New System.Windows.Forms.Panel
|
||||
Me.lblChangeLogLabel = New System.Windows.Forms.Label
|
||||
Me.btnDownload = New System.Windows.Forms.Button
|
||||
Me.prgbDownload = New System.Windows.Forms.ProgressBar
|
||||
Me.txtChangeLog = New System.Windows.Forms.TextBox
|
||||
Me.lblStatus = New System.Windows.Forms.Label
|
||||
Me.lblCurrentVersionLabel = New System.Windows.Forms.Label
|
||||
Me.lblInstalledVersionLabel = New System.Windows.Forms.Label
|
||||
Me.lblAvailableVersion = New System.Windows.Forms.Label
|
||||
Me.lblCurrentVersion = New System.Windows.Forms.Label
|
||||
Me.pbUpdateImage = New System.Windows.Forms.PictureBox
|
||||
Me.pnlUp.SuspendLayout()
|
||||
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).BeginInit()
|
||||
Me.SuspendLayout()
|
||||
'
|
||||
'btnCheckForUpdate
|
||||
'
|
||||
Me.btnCheckForUpdate.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnCheckForUpdate.Location = New System.Drawing.Point(16, 104)
|
||||
Me.btnCheckForUpdate.Name = "btnCheckForUpdate"
|
||||
Me.btnCheckForUpdate.Size = New System.Drawing.Size(104, 32)
|
||||
Me.btnCheckForUpdate.TabIndex = 5
|
||||
Me.btnCheckForUpdate.Text = "Check Again"
|
||||
Me.btnCheckForUpdate.UseVisualStyleBackColor = True
|
||||
'
|
||||
'pnlUp
|
||||
'
|
||||
Me.pnlUp.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.pnlUp.Controls.Add(Me.lblChangeLogLabel)
|
||||
Me.pnlUp.Controls.Add(Me.btnDownload)
|
||||
Me.pnlUp.Controls.Add(Me.prgbDownload)
|
||||
Me.pnlUp.Controls.Add(Me.txtChangeLog)
|
||||
Me.pnlUp.Location = New System.Drawing.Point(16, 152)
|
||||
Me.pnlUp.Name = "pnlUp"
|
||||
Me.pnlUp.Size = New System.Drawing.Size(718, 248)
|
||||
Me.pnlUp.TabIndex = 6
|
||||
Me.pnlUp.Visible = False
|
||||
'
|
||||
'lblChangeLogLabel
|
||||
'
|
||||
Me.lblChangeLogLabel.AutoSize = True
|
||||
Me.lblChangeLogLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblChangeLogLabel.Location = New System.Drawing.Point(0, 0)
|
||||
Me.lblChangeLogLabel.Name = "lblChangeLogLabel"
|
||||
Me.lblChangeLogLabel.Size = New System.Drawing.Size(79, 13)
|
||||
Me.lblChangeLogLabel.TabIndex = 0
|
||||
Me.lblChangeLogLabel.Text = "Change Log:"
|
||||
'
|
||||
'btnDownload
|
||||
'
|
||||
Me.btnDownload.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
|
||||
Me.btnDownload.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnDownload.Location = New System.Drawing.Point(0, 216)
|
||||
Me.btnDownload.Name = "btnDownload"
|
||||
Me.btnDownload.Size = New System.Drawing.Size(144, 32)
|
||||
Me.btnDownload.TabIndex = 2
|
||||
Me.btnDownload.Text = "Download and Install"
|
||||
Me.btnDownload.UseVisualStyleBackColor = True
|
||||
'
|
||||
'prgbDownload
|
||||
'
|
||||
Me.prgbDownload.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.prgbDownload.Location = New System.Drawing.Point(160, 224)
|
||||
Me.prgbDownload.Name = "prgbDownload"
|
||||
Me.prgbDownload.Size = New System.Drawing.Size(542, 23)
|
||||
Me.prgbDownload.TabIndex = 3
|
||||
'
|
||||
'txtChangeLog
|
||||
'
|
||||
Me.txtChangeLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
|
||||
Or System.Windows.Forms.AnchorStyles.Left) _
|
||||
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.txtChangeLog.BorderStyle = System.Windows.Forms.BorderStyle.None
|
||||
Me.txtChangeLog.Cursor = System.Windows.Forms.Cursors.Arrow
|
||||
Me.txtChangeLog.Location = New System.Drawing.Point(16, 24)
|
||||
Me.txtChangeLog.Multiline = True
|
||||
Me.txtChangeLog.Name = "txtChangeLog"
|
||||
Me.txtChangeLog.ReadOnly = True
|
||||
Me.txtChangeLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
|
||||
Me.txtChangeLog.Size = New System.Drawing.Size(699, 181)
|
||||
Me.txtChangeLog.TabIndex = 1
|
||||
Me.txtChangeLog.TabStop = False
|
||||
'
|
||||
'lblStatus
|
||||
'
|
||||
Me.lblStatus.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblStatus.ForeColor = System.Drawing.SystemColors.ControlText
|
||||
Me.lblStatus.Location = New System.Drawing.Point(12, 16)
|
||||
Me.lblStatus.Name = "lblStatus"
|
||||
Me.lblStatus.Size = New System.Drawing.Size(660, 23)
|
||||
Me.lblStatus.TabIndex = 0
|
||||
Me.lblStatus.Text = "Status"
|
||||
Me.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblCurrentVersionLabel
|
||||
'
|
||||
Me.lblCurrentVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblCurrentVersionLabel.Location = New System.Drawing.Point(16, 72)
|
||||
Me.lblCurrentVersionLabel.Name = "lblCurrentVersionLabel"
|
||||
Me.lblCurrentVersionLabel.Size = New System.Drawing.Size(120, 16)
|
||||
Me.lblCurrentVersionLabel.TabIndex = 3
|
||||
Me.lblCurrentVersionLabel.Text = "Current version:"
|
||||
Me.lblCurrentVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||
'
|
||||
'lblInstalledVersionLabel
|
||||
'
|
||||
Me.lblInstalledVersionLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.lblInstalledVersionLabel.Location = New System.Drawing.Point(16, 48)
|
||||
Me.lblInstalledVersionLabel.Name = "lblInstalledVersionLabel"
|
||||
Me.lblInstalledVersionLabel.Size = New System.Drawing.Size(120, 16)
|
||||
Me.lblInstalledVersionLabel.TabIndex = 1
|
||||
Me.lblInstalledVersionLabel.Text = "Installed version:"
|
||||
Me.lblInstalledVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight
|
||||
'
|
||||
'lblAvailableVersion
|
||||
'
|
||||
Me.lblAvailableVersion.Location = New System.Drawing.Point(136, 72)
|
||||
Me.lblAvailableVersion.Name = "lblAvailableVersion"
|
||||
Me.lblAvailableVersion.Size = New System.Drawing.Size(104, 16)
|
||||
Me.lblAvailableVersion.TabIndex = 4
|
||||
Me.lblAvailableVersion.Text = "Version"
|
||||
Me.lblAvailableVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'lblCurrentVersion
|
||||
'
|
||||
Me.lblCurrentVersion.Location = New System.Drawing.Point(136, 48)
|
||||
Me.lblCurrentVersion.Name = "lblCurrentVersion"
|
||||
Me.lblCurrentVersion.Size = New System.Drawing.Size(104, 16)
|
||||
Me.lblCurrentVersion.TabIndex = 2
|
||||
Me.lblCurrentVersion.Text = "Version"
|
||||
Me.lblCurrentVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
|
||||
'
|
||||
'pbUpdateImage
|
||||
'
|
||||
Me.pbUpdateImage.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
|
||||
Me.pbUpdateImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
|
||||
Me.pbUpdateImage.Cursor = System.Windows.Forms.Cursors.Hand
|
||||
Me.pbUpdateImage.Location = New System.Drawing.Point(246, 48)
|
||||
Me.pbUpdateImage.Name = "pbUpdateImage"
|
||||
Me.pbUpdateImage.Size = New System.Drawing.Size(468, 60)
|
||||
Me.pbUpdateImage.TabIndex = 45
|
||||
Me.pbUpdateImage.TabStop = False
|
||||
Me.pbUpdateImage.Visible = False
|
||||
'
|
||||
'Update
|
||||
'
|
||||
Me.ClientSize = New System.Drawing.Size(734, 418)
|
||||
Me.Controls.Add(Me.pbUpdateImage)
|
||||
Me.Controls.Add(Me.lblCurrentVersionLabel)
|
||||
Me.Controls.Add(Me.lblInstalledVersionLabel)
|
||||
Me.Controls.Add(Me.lblAvailableVersion)
|
||||
Me.Controls.Add(Me.btnCheckForUpdate)
|
||||
Me.Controls.Add(Me.lblCurrentVersion)
|
||||
Me.Controls.Add(Me.pnlUp)
|
||||
Me.Controls.Add(Me.lblStatus)
|
||||
Me.Icon = Global.mRemoteNG.My.Resources.Resources.Update_Icon
|
||||
Me.Name = "Update"
|
||||
Me.TabText = "Update"
|
||||
Me.Text = "Update"
|
||||
Me.pnlUp.ResumeLayout(False)
|
||||
Me.pnlUp.PerformLayout()
|
||||
CType(Me.pbUpdateImage, System.ComponentModel.ISupportInitialize).EndInit()
|
||||
Me.ResumeLayout(False)
|
||||
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Properties"
|
||||
Private uD As App.Update
|
||||
Private uT As Thread
|
||||
|
||||
Private IsUpdateCheckHandlerDeclared As Boolean = False
|
||||
Private IsUpdateDownloadHandlerDeclared As Boolean = False
|
||||
#End Region
|
||||
|
||||
#Region "Public Events"
|
||||
Public Event UpdateCheckCompleted(ByVal UpdateAvailable As Boolean)
|
||||
#End Region
|
||||
|
||||
Inherits Base
|
||||
#Region "Public Methods"
|
||||
Public Sub New(ByVal Panel As DockContent)
|
||||
Me.WindowType = Type.Update
|
||||
Me.DockPnl = Panel
|
||||
Me.InitializeComponent()
|
||||
App.Runtime.FontOverride(Me)
|
||||
End Sub
|
||||
|
||||
Public Sub CheckForUpdate()
|
||||
Try
|
||||
uT = New Thread(AddressOf CheckForUpdateBG)
|
||||
uT.SetApartmentState(ApartmentState.STA)
|
||||
uT.IsBackground = True
|
||||
|
||||
If Me.IsUpdateCheckHandlerDeclared = False Then
|
||||
AddHandler UpdateCheckCompleted, AddressOf UpdateCheckComplete
|
||||
Me.IsUpdateCheckHandlerDeclared = True
|
||||
End If
|
||||
|
||||
uT.Start()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Methods"
|
||||
Private Sub CheckForUpdateBG()
|
||||
Try
|
||||
uD = New App.Update
|
||||
|
||||
If uD.IsUpdateAvailable = True Then
|
||||
RaiseEvent UpdateCheckCompleted(True)
|
||||
Else
|
||||
RaiseEvent UpdateCheckCompleted(False)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
|
||||
Try
|
||||
My.Settings.CheckForUpdatesLastCheck = Date.Now
|
||||
SetCurrentVersionText(My.Application.Info.Version.ToString)
|
||||
|
||||
If UpdateAvailable = True Then
|
||||
My.Settings.UpdatePending = True
|
||||
|
||||
SetStatus(Color.OrangeRed, My.Language.strUpdateAvailable)
|
||||
SetVisible(pnlUp, True)
|
||||
|
||||
Dim uI As App.Update.Info = uD.GetUpdateInfo()
|
||||
SetAvailableVersionText(uI.Version.ToString)
|
||||
SetChangeLogText(uI.ChangeLog)
|
||||
|
||||
If uI.ImageURL <> String.Empty Then
|
||||
SetImageURL(uI.ImageURL)
|
||||
|
||||
If uI.ImageURLLink <> String.Empty Then
|
||||
pbUpdateImage.Tag = uI.ImageURLLink
|
||||
End If
|
||||
|
||||
SetVisible(pbUpdateImage, True)
|
||||
Else
|
||||
SetVisible(pbUpdateImage, False)
|
||||
End If
|
||||
|
||||
FocusDownloadButton()
|
||||
Else
|
||||
My.Settings.UpdatePending = False
|
||||
|
||||
SetStatus(Color.ForestGreen, My.Language.strNoUpdateAvailable)
|
||||
SetVisible(pnlUp, False)
|
||||
|
||||
Dim uI As App.Update.Info = uD.GetUpdateInfo()
|
||||
SetAvailableVersionText(uI.Version.ToString)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateCheckCompleteFailed & vbNewLine & ex.Message, True)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Threading Callbacks"
|
||||
Private Delegate Sub SetImageURLCB(ByVal img As String)
|
||||
Private Sub SetImageURL(ByVal img As String)
|
||||
If Me.pbUpdateImage.InvokeRequired = True Then
|
||||
Dim d As New SetImageURLCB(AddressOf SetImageURL)
|
||||
Me.pbUpdateImage.Invoke(d, New Object() {img})
|
||||
Else
|
||||
Me.pbUpdateImage.ImageLocation = img
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub SetStatusCB(ByVal Color As Color, ByVal Text As String)
|
||||
Private Sub SetStatus(ByVal Color As Color, ByVal Text As String)
|
||||
If Me.lblStatus.InvokeRequired = True Then
|
||||
Dim d As New SetStatusCB(AddressOf SetStatus)
|
||||
Me.lblStatus.Invoke(d, New Object() {Color, Text})
|
||||
Else
|
||||
Me.lblStatus.ForeColor = Color
|
||||
Me.lblStatus.Text = Text
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub SetVisibleCB(ByVal ctrl As Control, ByVal visible As Boolean)
|
||||
Private Sub SetVisible(ByVal ctrl As Control, ByVal visible As Boolean)
|
||||
If ctrl.InvokeRequired Then
|
||||
Dim d As New SetVisibleCB(AddressOf SetVisible)
|
||||
ctrl.Invoke(d, New Object() {ctrl, visible})
|
||||
Else
|
||||
ctrl.Visible = visible
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub SetCurrentVersionTextCB(ByVal Text As String)
|
||||
Private Sub SetCurrentVersionText(ByVal Text As String)
|
||||
If Me.lblCurrentVersion.InvokeRequired = True Then
|
||||
Dim d As New SetCurrentVersionTextCB(AddressOf SetCurrentVersionText)
|
||||
Me.lblCurrentVersion.Invoke(d, New Object() {Text})
|
||||
Else
|
||||
Me.lblCurrentVersion.Text = Text
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub SetAvailableVersionTextCB(ByVal Text As String)
|
||||
Private Sub SetAvailableVersionText(ByVal Text As String)
|
||||
If Me.lblAvailableVersion.InvokeRequired = True Then
|
||||
Dim d As New SetAvailableVersionTextCB(AddressOf SetAvailableVersionText)
|
||||
Me.lblAvailableVersion.Invoke(d, New Object() {Text})
|
||||
Else
|
||||
Me.lblAvailableVersion.Text = Text
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub SetChangeLogTextCB(ByVal Text As String)
|
||||
Private Sub SetChangeLogText(ByVal Text As String)
|
||||
If Me.txtChangeLog.InvokeRequired = True Then
|
||||
Dim d As New SetChangeLogTextCB(AddressOf SetChangeLogText)
|
||||
Me.txtChangeLog.Invoke(d, New Object() {Text})
|
||||
Else
|
||||
Me.txtChangeLog.Text = Text
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Delegate Sub FocusDownloadButtonCB()
|
||||
Private Sub FocusDownloadButton()
|
||||
If Me.btnDownload.InvokeRequired = True Then
|
||||
Dim d As New FocusDownloadButtonCB(AddressOf FocusDownloadButton)
|
||||
Me.btnDownload.Invoke(d)
|
||||
Else
|
||||
Me.btnDownload.Focus()
|
||||
End If
|
||||
Public Sub New(ByVal panel As DockContent)
|
||||
WindowType = Type.Update
|
||||
DockPnl = panel
|
||||
InitializeComponent()
|
||||
FontOverride(Me)
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Form Stuff"
|
||||
Private Sub Update_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
|
||||
Private Sub Update_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
|
||||
ApplyLanguage()
|
||||
|
||||
|
||||
Me.CheckForUpdate()
|
||||
CheckForUpdate()
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLanguage()
|
||||
btnCheckForUpdate.Text = My.Language.strCheckForUpdate
|
||||
lblChangeLogLabel.Text = My.Language.strLabelChangeLog
|
||||
btnDownload.Text = My.Language.strDownloadAndInstall
|
||||
lblCurrentVersionLabel.Text = My.Language.strAvailableVersion & ":"
|
||||
lblInstalledVersionLabel.Text = My.Language.strCurrentVersion & ":"
|
||||
lblAvailableVersion.Text = My.Language.strVersion
|
||||
lblCurrentVersion.Text = My.Language.strVersion
|
||||
TabText = My.Language.strMenuCheckForUpdates
|
||||
Text = My.Language.strMenuCheckForUpdates
|
||||
Text = Language.strMenuCheckForUpdates
|
||||
TabText = Language.strMenuCheckForUpdates
|
||||
btnCheckForUpdate.Text = Language.strCheckForUpdate
|
||||
btnDownload.Text = Language.strDownloadAndInstall
|
||||
lblChangeLogLabel.Text = Language.strLabelChangeLog
|
||||
lblInstalledVersion.Text = Language.strVersion
|
||||
lblInstalledVersionLabel.Text = String.Format("{0}:", Language.strCurrentVersion)
|
||||
lblLatestVersion.Text = Language.strVersion
|
||||
lblLatestVersionLabel.Text = String.Format("{0}:", Language.strAvailableVersion)
|
||||
End Sub
|
||||
|
||||
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckForUpdate.Click
|
||||
Me.CheckForUpdate()
|
||||
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCheckForUpdate.Click
|
||||
CheckForUpdate()
|
||||
End Sub
|
||||
|
||||
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDownload.Click
|
||||
Me.DownloadUpdate()
|
||||
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnDownload.Click
|
||||
DownloadUpdate()
|
||||
End Sub
|
||||
|
||||
Private Sub pbUpdateImage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles pbUpdateImage.Click
|
||||
Dim linkUri As Uri = TryCast(pbUpdateImage.Tag, Uri)
|
||||
If linkUri Is Nothing OrElse linkUri.IsFile Or linkUri.IsUnc Or linkUri.IsLoopback Then Return
|
||||
Process.Start(linkUri.ToString())
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Private Fields"
|
||||
Private _appUpdate As App.Update
|
||||
Private _isUpdateDownloadHandlerDeclared As Boolean = False
|
||||
#End Region
|
||||
|
||||
#Region "Private Methods"
|
||||
Private Sub CheckForUpdate()
|
||||
If _appUpdate Is Nothing Then
|
||||
_appUpdate = New App.Update
|
||||
ElseIf _appUpdate.IsGetUpdateInfoRunning Then
|
||||
Return
|
||||
End If
|
||||
|
||||
lblStatus.Text = Language.strUpdateCheckingLabel
|
||||
lblStatus.ForeColor = SystemColors.WindowText
|
||||
lblLatestVersionLabel.Visible = False
|
||||
lblInstalledVersion.Visible = False
|
||||
lblInstalledVersionLabel.Visible = False
|
||||
lblLatestVersion.Visible = False
|
||||
btnCheckForUpdate.Visible = False
|
||||
pnlUpdate.Visible = False
|
||||
|
||||
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
|
||||
_appUpdate.GetUpdateInfoAsync()
|
||||
End Sub
|
||||
|
||||
Private Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
|
||||
If InvokeRequired Then
|
||||
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted)
|
||||
Invoke(myDelegate, New Object() {sender, e})
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
|
||||
|
||||
lblInstalledVersion.Text = Application.Info.Version.ToString
|
||||
lblInstalledVersion.Visible = True
|
||||
lblInstalledVersionLabel.Visible = True
|
||||
btnCheckForUpdate.Visible = True
|
||||
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
If _appUpdate.IsUpdateAvailable() Then
|
||||
lblStatus.Text = Language.strUpdateAvailable
|
||||
lblStatus.ForeColor = Color.OrangeRed
|
||||
pnlUpdate.Visible = True
|
||||
|
||||
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
|
||||
lblLatestVersion.Text = updateInfo.Version.ToString
|
||||
lblLatestVersionLabel.Visible = True
|
||||
lblLatestVersion.Visible = True
|
||||
|
||||
If updateInfo.ImageAddress Is Nothing OrElse String.IsNullOrEmpty(updateInfo.ImageAddress.ToString()) Then
|
||||
pbUpdateImage.Visible = False
|
||||
Else
|
||||
pbUpdateImage.ImageLocation = updateInfo.ImageAddress.ToString()
|
||||
pbUpdateImage.Tag = updateInfo.ImageLinkAddress
|
||||
pbUpdateImage.Visible = True
|
||||
End If
|
||||
|
||||
AddHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
|
||||
_appUpdate.GetChangeLogAsync()
|
||||
|
||||
btnDownload.Focus()
|
||||
Else
|
||||
lblStatus.Text = Language.strNoUpdateAvailable
|
||||
lblStatus.ForeColor = Color.ForestGreen
|
||||
|
||||
If _appUpdate.CurrentUpdateInfo IsNot Nothing Then
|
||||
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
|
||||
If updateInfo.IsValid And updateInfo.Version IsNot Nothing Then
|
||||
lblLatestVersion.Text = updateInfo.Version.ToString
|
||||
lblLatestVersionLabel.Visible = True
|
||||
lblLatestVersion.Visible = True
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Catch ex As Exception
|
||||
lblStatus.Text = Language.strUpdateCheckFailedLabel
|
||||
lblStatus.ForeColor = Color.OrangeRed
|
||||
|
||||
MessageCollector.AddExceptionMessage(Language.strUpdateCheckCompleteFailed, ex)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub GetChangeLogCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
|
||||
If InvokeRequired Then
|
||||
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetChangeLogCompleted)
|
||||
Invoke(myDelegate, New Object() {sender, e})
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RemoveHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
|
||||
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
txtChangeLog.Text = _appUpdate.ChangeLog
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddExceptionMessage(Language.strUpdateGetChangeLogFailed, ex)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub DownloadUpdate()
|
||||
Try
|
||||
If uD.DownloadUpdate(uD.curUI.DownloadUrl) = True Then
|
||||
Me.btnDownload.Enabled = False
|
||||
btnDownload.Enabled = False
|
||||
prgbDownload.Visible = True
|
||||
prgbDownload.Value = 0
|
||||
|
||||
If Me.IsUpdateDownloadHandlerDeclared = False Then
|
||||
AddHandler uD.DownloadProgressChanged, AddressOf DLProgressChanged
|
||||
AddHandler uD.DownloadCompleted, AddressOf DLCompleted
|
||||
Me.IsUpdateDownloadHandlerDeclared = True
|
||||
End If
|
||||
If _isUpdateDownloadHandlerDeclared = False Then
|
||||
AddHandler _appUpdate.DownloadUpdateProgressChangedEvent, AddressOf DownloadUpdateProgressChanged
|
||||
AddHandler _appUpdate.DownloadUpdateCompletedEvent, AddressOf DownloadUpdateCompleted
|
||||
_isUpdateDownloadHandlerDeclared = True
|
||||
End If
|
||||
|
||||
_appUpdate.DownloadUpdateAsync()
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadFailed, ex)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
#Region "Events"
|
||||
Private Sub DLProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
|
||||
Me.prgbDownload.Value = e.ProgressPercentage
|
||||
Private Sub DownloadUpdateProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs)
|
||||
prgbDownload.Value = e.ProgressPercentage
|
||||
End Sub
|
||||
|
||||
Private Sub DLCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs, ByVal Success As Boolean)
|
||||
Private Sub DownloadUpdateCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
|
||||
Try
|
||||
Me.btnDownload.Enabled = True
|
||||
btnDownload.Enabled = True
|
||||
prgbDownload.Visible = False
|
||||
|
||||
If Success = True Then
|
||||
If MessageBox.Show(My.Language.strUpdateDownloadComplete, My.Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
|
||||
Try
|
||||
App.Runtime.Shutdown.BeforeQuit()
|
||||
If e.Cancelled Then Return
|
||||
If e.Error IsNot Nothing Then Throw e.Error
|
||||
|
||||
Process.Start(uD.curUI.UpdateLocation)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateStartFailed & vbNewLine & ex.Message)
|
||||
End Try
|
||||
|
||||
End
|
||||
Else
|
||||
Try
|
||||
File.Delete(uD.curUI.UpdateLocation)
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDeleteFailed & vbNewLine & ex.Message)
|
||||
End Try
|
||||
End If
|
||||
If MessageBox.Show(Language.strUpdateDownloadComplete, Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
|
||||
Shutdown.Quit(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
|
||||
Return
|
||||
Else
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadFailed)
|
||||
File.Delete(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
|
||||
End If
|
||||
Catch ex As Exception
|
||||
MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg, My.Language.strUpdateDownloadCompleteFailed & vbNewLine & ex.Message, True)
|
||||
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadCompleteFailed, ex)
|
||||
End Try
|
||||
End Sub
|
||||
#End Region
|
||||
|
||||
Private Sub pbUpdateImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
|
||||
If pbUpdateImage.Tag IsNot Nothing Then
|
||||
Process.Start(pbUpdateImage.Tag)
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
End Namespace
|
||||
@@ -577,16 +577,37 @@
|
||||
<setting name="PuttySavedSessionsPanel" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="CompatibilityWarnLenovoAutoScrollUtility" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="UpdateAddress" serializeAs="String">
|
||||
<value>https://update.mremoteng.org/</value>
|
||||
</setting>
|
||||
<setting name="ConDefaultLoadBalanceInfo" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="ConDefaultAutomaticResize" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="InhDefaultLoadBalanceInfo" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="InhDefaultAutomaticResize" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</mRemoteNG.My.MySettings>
|
||||
</userSettings>
|
||||
<applicationSettings>
|
||||
<mRemoteNG.My.MySettings>
|
||||
<setting name="SupportedUICultures" serializeAs="String">
|
||||
<value>de,en,en-US,es-AR,es,fr,it,nl,pt,pl,ru,uk,zh-CN</value>
|
||||
<value>de,el,en,en-US,es-AR,es,fr,hu,it,nb-NO,nl,pt,pt-BR,pl,ru,uk,zh-CN,zh-TW</value>
|
||||
</setting>
|
||||
<setting name="UpdateChannel" serializeAs="String">
|
||||
<value>release</value>
|
||||
</setting>
|
||||
<setting name="AnnouncementAddress" serializeAs="String">
|
||||
<value>https://update.mremoteng.org/announcement.txt</value>
|
||||
</setting>
|
||||
</mRemoteNG.My.MySettings>
|
||||
</applicationSettings>
|
||||
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
|
||||
|
||||
@@ -175,7 +175,6 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ApplicationEvents.vb" />
|
||||
<Compile Include="App\App.Announcement.vb" />
|
||||
<Compile Include="App\App.Info.vb" />
|
||||
<Compile Include="App\App.Native.vb" />
|
||||
<Compile Include="App\App.Runtime.vb" />
|
||||
@@ -188,6 +187,10 @@
|
||||
<Compile Include="Config\Config.Settings.Save.vb" />
|
||||
<Compile Include="Config\ConfirmClose.vb" />
|
||||
<Compile Include="Config\PuttySessions.vb" />
|
||||
<Compile Include="Tools\Authenticode.vb" />
|
||||
<Compile Include="Tools\EnumWindows.vb" />
|
||||
<Compile Include="Tools\EnvironmentInfo.vb" />
|
||||
<Compile Include="Tools\PropertyGridCommandSite.vb" />
|
||||
<Compile Include="Connection\PuttySession.Info.vb" />
|
||||
<Compile Include="Root\PuttySessions.Info.vb" />
|
||||
<Compile Include="Themes\ThemeManager.vb" />
|
||||
@@ -270,6 +273,9 @@
|
||||
<Compile Include="Security\Security.Crypt.vb" />
|
||||
<Compile Include="Security\Security.Impersonator.vb" />
|
||||
<Compile Include="Security\Security.Save.vb" />
|
||||
<Compile Include="Tools\IeBrowserEmulation.vb" />
|
||||
<Compile Include="Tools\ProcessController.vb" />
|
||||
<Compile Include="Tools\PuttyProcessController.vb" />
|
||||
<Compile Include="Tools\ReconnectGroup.Designer.vb">
|
||||
<DependentUpon>ReconnectGroup.vb</DependentUpon>
|
||||
</Compile>
|
||||
@@ -291,7 +297,10 @@
|
||||
<Compile Include="UI\UI.Window.ADImport.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Announcment.vb">
|
||||
<Compile Include="UI\UI.Window.Announcement.Designer.vb">
|
||||
<DependentUpon>UI.Window.Announcement.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Announcement.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Base.vb">
|
||||
@@ -331,6 +340,9 @@
|
||||
<Compile Include="UI\UI.Window.ScreenshotManager.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Sessions.Designer.vb">
|
||||
<DependentUpon>UI.Window.Sessions.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Sessions.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -344,6 +356,9 @@
|
||||
<Compile Include="UI\UI.Window.UltraVNCSC.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Update.Designer.vb">
|
||||
<DependentUpon>UI.Window.Update.vb</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UI\UI.Window.Update.vb">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -364,6 +379,7 @@
|
||||
<EmbeddedResource Include="Language\Language.de.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Language\Language.el.resx" />
|
||||
<EmbeddedResource Include="Language\Language.en-US.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
@@ -371,10 +387,13 @@
|
||||
<EmbeddedResource Include="Language\Language.es.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Language\Language.hu.resx" />
|
||||
<EmbeddedResource Include="Language\Language.it.resx" />
|
||||
<EmbeddedResource Include="Language\Language.nb-NO.resx" />
|
||||
<EmbeddedResource Include="Language\Language.nl.resx">
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Language\Language.pt-BR.resx" />
|
||||
<EmbeddedResource Include="Language\Language.pt.resx" />
|
||||
<EmbeddedResource Include="Language\Language.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
@@ -395,6 +414,7 @@
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Language\Language.zh-CN.resx" />
|
||||
<EmbeddedResource Include="Language\Language.zh-TW.resx" />
|
||||
<EmbeddedResource Include="My Project\Resources.resx">
|
||||
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||
@@ -413,8 +433,8 @@
|
||||
<DependentUpon>UI.Window.ADImport.vb</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\UI.Window.Announcment.resx">
|
||||
<DependentUpon>UI.Window.Announcment.vb</DependentUpon>
|
||||
<EmbeddedResource Include="UI\UI.Window.Announcement.resx">
|
||||
<DependentUpon>UI.Window.Announcement.vb</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="UI\UI.Window.ComponentsCheck.resx">
|
||||
|
||||
Reference in New Issue
Block a user