Compare commits

...

21 Commits

Author SHA1 Message Date
Kim Knight 8e9a3bf182
Update README.md
Updated Google Groups link to GitHub Discussions.
2024-01-09 14:57:14 +11:00
Kim Knight d5f180f01c
Update README.md
Added screenshot of RDPOptionsWindow
2024-01-07 00:20:28 +11:00
Kim Knight 2bb0e37dcf
Update README.md 2024-01-05 00:16:59 +11:00
Kim a457c9fd61 Update version number ready for a release 2024-01-04 23:51:48 +11:00
Kim 9d7057dbd9 Corrected tab order in RDPOptionsWindow 2024-01-04 23:10:07 +11:00
Kim Knight e6b23f7481
Update README.md
Add Windows 11 to description
2024-01-04 00:30:20 +11:00
Kim 502ae16420 RDPOptionsWindow added to allow editing of RDP file settings when using Create Client Connection. Addresses issue #100 2024-01-04 00:11:44 +11:00
Kim eee6ba31e3 Centered the text/icon on the "Create Client Connection..." button 2024-01-04 00:09:24 +11:00
Kim a3c0cff353 App selection saved after adding or editing an app. About window updated. Updated version number - hopefully gtg for a release 2023-09-10 00:16:31 +10:00
Kim 7f851e1fa1 Merge branch 'master' of https://github.com/kimmknight/remoteapptool 2023-09-08 23:47:57 +10:00
Kim 223e36480f Add Duplicate RemoteApp feature in File menu. Issue #52 2023-09-08 23:46:51 +10:00
Kim Knight 7dc5830503
Update WiX Toolset link to v3
WiX v4 is out and RemoteApp Tool is not compatible with it... yet
2023-09-07 00:09:11 +10:00
Kim Knight 6a766fe113
Merge pull request #79 from wk6768/master
Fixed the issue that the RDP file was locked under the administrator …
2023-06-16 23:04:11 +10:00
Kim Knight 64f05f4a8f
Merge pull request #84 from danielb7390/master
Fix wix detection
2023-06-16 23:01:23 +10:00
Daniel Sousa fab2cfbdd4 Fix wix detection 2023-06-14 18:40:47 +01:00
wk6768 92d558b7d6 Fixed the issue that the RDP file was locked under the administrator user 2023-01-08 13:47:58 +08:00
Kim b0272722b9 fixed #65 - Allow colons (:) in the address fields to enable IPv6 2022-02-09 00:54:47 +11:00
Kim Knight ebae885253
Update README.md 2021-03-21 21:39:58 +11:00
Kim Knight be6f3df193
Update README.md 2021-01-27 23:29:24 +11:00
Kim Knight b1c8297f7f
Update README.md 2021-01-27 23:28:24 +11:00
Kim Knight 8b9c631f97
Updated README with v6 download links 2021-01-22 23:14:02 +11:00
21 changed files with 7651 additions and 417 deletions

View File

@ -36,7 +36,9 @@ Public Class RDP
If Not WixInstalled() Then Exit Sub If Not WixInstalled() Then Exit Sub
'Get RDP file parent folder path 'Get RDP file parent folder path
Dim rdpParentFolder = My.Computer.FileSystem.GetParentPath(rdpFilePath) 'Dim rdpParentFolder = My.Computer.FileSystem.GetParentPath(rdpFilePath)
Dim lastSlashIndex = rdpFilePath.LastIndexOf("\")
Dim rdpParentFolder = Left(rdpFilePath, lastSlashIndex)
'Get the RDP filename and filename minus extension 'Get the RDP filename and filename minus extension
Dim rdpFileName = My.Computer.FileSystem.GetFileInfo(rdpFilePath).Name Dim rdpFileName = My.Computer.FileSystem.GetFileInfo(rdpFilePath).Name
@ -152,13 +154,13 @@ Public Class RDP
End Function End Function
Private Function WixPath() Private Function WixPath()
Dim searchExe = "\candle.exe" Dim searchExe = "candle.exe"
WixPath = "" WixPath = ""
If Not Environment.GetEnvironmentVariable("WIX") = "" Then If Not Environment.GetEnvironmentVariable("WIX") = "" Then
WixPath = Environment.GetEnvironmentVariable("WIX") & "bin" WixPath = Environment.GetEnvironmentVariable("WIX") & "bin"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\wix\" & searchExe) Then ElseIf My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\wix\" & searchExe) Then
WixPath = My.Application.Info.DirectoryPath & "\wix" WixPath = My.Application.Info.DirectoryPath & "\wix"
ElseIf My.Computer.FileSystem.DirectoryExists(My.Application.Info.DirectoryPath & "\wix\bin\" & searchExe) Then ElseIf My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & "\wix\bin\" & searchExe) Then
WixPath = My.Application.Info.DirectoryPath & "\wix\bin" WixPath = My.Application.Info.DirectoryPath & "\wix\bin"
End If End If
End Function End Function

View File

@ -16,6 +16,7 @@ Public Class RDPFile
Public bandwidthautodetect As Integer = 1 Public bandwidthautodetect As Integer = 1
Public bitmapcachepersistenable As Integer = 1 Public bitmapcachepersistenable As Integer = 1
Public bitmapcachesize As Integer = 1500 Public bitmapcachesize As Integer = 1500
Public camerastoredirect As String = ""
Public compression As Integer = 1 Public compression As Integer = 1
Public connect_to_console As Integer = 0 Public connect_to_console As Integer = 0
Public connection_type As Integer = 2 Public connection_type As Integer = 2
@ -35,6 +36,7 @@ Public Class RDPFile
Public drivestoredirect As String = "" Public drivestoredirect As String = ""
Public enablecredsspsupport As Integer = 1 Public enablecredsspsupport As Integer = 1
Public enablesuperpan As Integer = 0 Public enablesuperpan As Integer = 0
Public encode_redirected_video_capture As Integer = 1
Public full_address As String = "" Public full_address As String = ""
Public gatewaycredentialssource As Integer = 4 Public gatewaycredentialssource As Integer = 4
Public gatewayhostname As String = "" Public gatewayhostname As String = ""
@ -53,9 +55,12 @@ Public Class RDPFile
Public redirectcomports As Integer = 0 Public redirectcomports As Integer = 0
Public redirectdirectx As Integer = 1 Public redirectdirectx As Integer = 1
Public redirectdrives As Integer = 0 Public redirectdrives As Integer = 0
Public redirected_video_capture_encoding_quality As Integer = 0
Public redirectlocation As Integer = 0
Public redirectposdevices As Integer = 0 Public redirectposdevices As Integer = 0
Public redirectprinters As Integer = 1 Public redirectprinters As Integer = 1
Public redirectsmartcards As Integer = 1 Public redirectsmartcards As Integer = 1
Public redirectwebauthn As Integer = 1
Public remoteapplicationcmdline As String = "" Public remoteapplicationcmdline As String = ""
Public remoteapplicationexpandcmdline As Integer = 1 Public remoteapplicationexpandcmdline As Integer = 1
Public remoteapplicationexpandworkingdir As Integer = 0 Public remoteapplicationexpandworkingdir As Integer = 0
@ -66,9 +71,11 @@ Public Class RDPFile
Public remoteapplicationname As String = "" Public remoteapplicationname As String = ""
Public remoteapplicationprogram As String = "" Public remoteapplicationprogram As String = ""
Public screen_mode_id As Integer = 2 Public screen_mode_id As Integer = 2
Public selectedmonitors As String = ""
Public server_port As Integer = 3389 Public server_port As Integer = 3389
Public session_bpp As Integer = 32 Public session_bpp As Integer = 32
Public shell_working_directory As String = "" Public shell_working_directory As String = ""
Public signscope As String = ""
Public smart_sizing As Integer = 0 Public smart_sizing As Integer = 0
Public span_monitors As Integer = 0 Public span_monitors As Integer = 0
Public superpanaccelerationfactor As Integer = 1 Public superpanaccelerationfactor As Integer = 1
@ -77,8 +84,11 @@ Public Class RDPFile
Public username As String = "" Public username As String = ""
Public videoplaybackmode As Integer = 1 Public videoplaybackmode As Integer = 1
Public winposstr As String = "0,3,0,0,800,600" Public winposstr As String = "0,3,0,0,800,600"
Public workspaceid As String = ""
Public Sub SaveRDPfile(FilePath As String, Optional SaveDefaultSettings As Boolean = False) Public AdditionalOptions As String = ""
Public Sub SaveRDPfile(FilePath As String, Optional IncludeDefaultSettings As Boolean = False)
Dim LockCheck As New LockChecker.LockChecker() Dim LockCheck As New LockChecker.LockChecker()
Dim FileLocked As String Dim FileLocked As String
Dim SkipFile As Boolean = False Dim SkipFile As Boolean = False
@ -94,90 +104,102 @@ Public Class RDPFile
End While End While
If Not (SkipFile) Then If Not (SkipFile) Then
My.Computer.FileSystem.WriteAllText(FilePath, GetRDPstring(SaveDefaultSettings), False) My.Computer.FileSystem.WriteAllText(FilePath, GetRDPstring(IncludeDefaultSettings), False)
End If End If
End Sub End Sub
Public Function GetRDPstring(Optional SaveDefaultSettings As Boolean = False) Public Function GetRDPstring(Optional IncludeDefaultSettings As Boolean = False)
Dim RDPstring As String = "" Dim RDPstring As String = ""
Dim DefaultRDP As New RDPFile Dim DefaultRDP As New RDPFile
If SaveDefaultSettings Or Not DefaultRDP.administrative_session = administrative_session Then RDPstring += "administrative session" & ":" & administrative_session.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & administrative_session.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.administrative_session = administrative_session Then RDPstring += "administrative session" & ":" & administrative_session.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & administrative_session.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.allow_desktop_composition = allow_desktop_composition Then RDPstring += "allow desktop composition" & ":" & allow_desktop_composition.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_desktop_composition.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.allow_desktop_composition = allow_desktop_composition Then RDPstring += "allow desktop composition" & ":" & allow_desktop_composition.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_desktop_composition.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.allow_font_smoothing = allow_font_smoothing Then RDPstring += "allow font smoothing" & ":" & allow_font_smoothing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_font_smoothing.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.allow_font_smoothing = allow_font_smoothing Then RDPstring += "allow font smoothing" & ":" & allow_font_smoothing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & allow_font_smoothing.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.alternate_full_address = alternate_full_address Then RDPstring += "alternate full address" & ":" & alternate_full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_full_address.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.alternate_full_address = alternate_full_address Then RDPstring += "alternate full address" & ":" & alternate_full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_full_address.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.alternate_shell = alternate_shell Then RDPstring += "alternate shell" & ":" & alternate_shell.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_shell.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.alternate_shell = alternate_shell Then RDPstring += "alternate shell" & ":" & alternate_shell.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & alternate_shell.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audiocapturemode = audiocapturemode Then RDPstring += "audiocapturemode" & ":" & audiocapturemode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiocapturemode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.audiocapturemode = audiocapturemode Then RDPstring += "audiocapturemode" & ":" & audiocapturemode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiocapturemode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audiomode = audiomode Then RDPstring += "audiomode" & ":" & audiomode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiomode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.audiomode = audiomode Then RDPstring += "audiomode" & ":" & audiomode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audiomode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.audioqualitymode = audioqualitymode Then RDPstring += "audioqualitymode" & ":" & audioqualitymode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audioqualitymode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.audioqualitymode = audioqualitymode Then RDPstring += "audioqualitymode" & ":" & audioqualitymode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & audioqualitymode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.authentication_level = authentication_level Then RDPstring += "authentication level" & ":" & authentication_level.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & authentication_level.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.authentication_level = authentication_level Then RDPstring += "authentication level" & ":" & authentication_level.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & authentication_level.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.autoreconnect_max_retries = autoreconnect_max_retries Then RDPstring += "autoreconnect max retries" & ":" & autoreconnect_max_retries.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnect_max_retries.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.autoreconnect_max_retries = autoreconnect_max_retries Then RDPstring += "autoreconnect max retries" & ":" & autoreconnect_max_retries.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnect_max_retries.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.autoreconnection_enabled = autoreconnection_enabled Then RDPstring += "autoreconnection enabled" & ":" & autoreconnection_enabled.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnection_enabled.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.autoreconnection_enabled = autoreconnection_enabled Then RDPstring += "autoreconnection enabled" & ":" & autoreconnection_enabled.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & autoreconnection_enabled.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bandwidthautodetect = bandwidthautodetect Then RDPstring += "bandwidthautodetect" & ":" & bandwidthautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bandwidthautodetect.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.bandwidthautodetect = bandwidthautodetect Then RDPstring += "bandwidthautodetect" & ":" & bandwidthautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bandwidthautodetect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bitmapcachepersistenable = bitmapcachepersistenable Then RDPstring += "bitmapcachepersistenable" & ":" & bitmapcachepersistenable.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachepersistenable.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.bitmapcachepersistenable = bitmapcachepersistenable Then RDPstring += "bitmapcachepersistenable" & ":" & bitmapcachepersistenable.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachepersistenable.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.bitmapcachesize = bitmapcachesize Then RDPstring += "bitmapcachesize" & ":" & bitmapcachesize.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachesize.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.bitmapcachesize = bitmapcachesize Then RDPstring += "bitmapcachesize" & ":" & bitmapcachesize.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & bitmapcachesize.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.compression = compression Then RDPstring += "compression" & ":" & compression.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & compression.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.camerastoredirect = camerastoredirect Then RDPstring += "camerastoredirect" & ":" & camerastoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & camerastoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.connect_to_console = connect_to_console Then RDPstring += "connect to console" & ":" & connect_to_console.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connect_to_console.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.compression = compression Then RDPstring += "compression" & ":" & compression.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & compression.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.connection_type = connection_type Then RDPstring += "connection type" & ":" & connection_type.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connection_type.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.connect_to_console = connect_to_console Then RDPstring += "connect to console" & ":" & connect_to_console.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connect_to_console.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktop_size_id = desktop_size_id Then RDPstring += "desktop size id" & ":" & desktop_size_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktop_size_id.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.connection_type = connection_type Then RDPstring += "connection type" & ":" & connection_type.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & connection_type.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktopheight = desktopheight Then RDPstring += "desktopheight" & ":" & desktopheight.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopheight.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.desktop_size_id = desktop_size_id Then RDPstring += "desktop size id" & ":" & desktop_size_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktop_size_id.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.desktopwidth = desktopwidth Then RDPstring += "desktopwidth" & ":" & desktopwidth.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopwidth.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.desktopheight = desktopheight Then RDPstring += "desktopheight" & ":" & desktopheight.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopheight.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.devicestoredirect = devicestoredirect Then RDPstring += "devicestoredirect" & ":" & devicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & devicestoredirect.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.desktopwidth = desktopwidth Then RDPstring += "desktopwidth" & ":" & desktopwidth.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & desktopwidth.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_ctrl_alt_del = disable_ctrl_alt_del Then RDPstring += "disable ctrl+alt+del" & ":" & disable_ctrl_alt_del.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_ctrl_alt_del.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.devicestoredirect = devicestoredirect Then RDPstring += "devicestoredirect" & ":" & devicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & devicestoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_full_window_drag = disable_full_window_drag Then RDPstring += "disable full window drag" & ":" & disable_full_window_drag.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_full_window_drag.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disable_ctrl_alt_del = disable_ctrl_alt_del Then RDPstring += "disable ctrl+alt+del" & ":" & disable_ctrl_alt_del.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_ctrl_alt_del.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_menu_anims = disable_menu_anims Then RDPstring += "disable menu anims" & ":" & disable_menu_anims.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_menu_anims.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disable_full_window_drag = disable_full_window_drag Then RDPstring += "disable full window drag" & ":" & disable_full_window_drag.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_full_window_drag.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_themes = disable_themes Then RDPstring += "disable themes" & ":" & disable_themes.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_themes.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disable_menu_anims = disable_menu_anims Then RDPstring += "disable menu anims" & ":" & disable_menu_anims.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_menu_anims.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disable_wallpaper = disable_wallpaper Then RDPstring += "disable wallpaper" & ":" & disable_wallpaper.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_wallpaper.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disable_themes = disable_themes Then RDPstring += "disable themes" & ":" & disable_themes.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_themes.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disableconnectionsharing = disableconnectionsharing Then RDPstring += "disableconnectionsharing" & ":" & disableconnectionsharing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableconnectionsharing.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disable_wallpaper = disable_wallpaper Then RDPstring += "disable wallpaper" & ":" & disable_wallpaper.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disable_wallpaper.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.disableremoteappcapscheck = disableremoteappcapscheck Then RDPstring += "disableremoteappcapscheck" & ":" & disableremoteappcapscheck.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableremoteappcapscheck.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disableconnectionsharing = disableconnectionsharing Then RDPstring += "disableconnectionsharing" & ":" & disableconnectionsharing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableconnectionsharing.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.displayconnectionbar = displayconnectionbar Then RDPstring += "displayconnectionbar" & ":" & displayconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & displayconnectionbar.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.disableremoteappcapscheck = disableremoteappcapscheck Then RDPstring += "disableremoteappcapscheck" & ":" & disableremoteappcapscheck.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & disableremoteappcapscheck.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.domain = domain Then RDPstring += "domain" & ":" & domain.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & domain.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.displayconnectionbar = displayconnectionbar Then RDPstring += "displayconnectionbar" & ":" & displayconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & displayconnectionbar.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.drivestoredirect = drivestoredirect Then RDPstring += "drivestoredirect" & ":" & drivestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & drivestoredirect.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.domain = domain Then RDPstring += "domain" & ":" & domain.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & domain.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.enablecredsspsupport = enablecredsspsupport Then RDPstring += "enablecredsspsupport" & ":" & enablecredsspsupport.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablecredsspsupport.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.drivestoredirect = drivestoredirect Then RDPstring += "drivestoredirect" & ":" & drivestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & drivestoredirect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.enablesuperpan = enablesuperpan Then RDPstring += "enablesuperpan" & ":" & enablesuperpan.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablesuperpan.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.enablecredsspsupport = enablecredsspsupport Then RDPstring += "enablecredsspsupport" & ":" & enablecredsspsupport.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablecredsspsupport.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.full_address = full_address Then RDPstring += "full address" & ":" & full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & full_address.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.enablesuperpan = enablesuperpan Then RDPstring += "enablesuperpan" & ":" & enablesuperpan.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & enablesuperpan.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewaycredentialssource = gatewaycredentialssource Then RDPstring += "gatewaycredentialssource" & ":" & gatewaycredentialssource.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewaycredentialssource.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.encode_redirected_video_capture = encode_redirected_video_capture Then RDPstring += "encode redirected video capture" & ":" & encode_redirected_video_capture.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & encode_redirected_video_capture.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayhostname = gatewayhostname Then RDPstring += "gatewayhostname" & ":" & gatewayhostname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayhostname.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.full_address = full_address Then RDPstring += "full address" & ":" & full_address.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & full_address.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayprofileusagemethod = gatewayprofileusagemethod Then RDPstring += "gatewayprofileusagemethod" & ":" & gatewayprofileusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayprofileusagemethod.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.gatewaycredentialssource = gatewaycredentialssource Then RDPstring += "gatewaycredentialssource" & ":" & gatewaycredentialssource.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewaycredentialssource.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.gatewayusagemethod = gatewayusagemethod Then RDPstring += "gatewayusagemethod" & ":" & gatewayusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayusagemethod.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.gatewayhostname = gatewayhostname Then RDPstring += "gatewayhostname" & ":" & gatewayhostname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayhostname.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.keyboardhook = keyboardhook Then RDPstring += "keyboardhook" & ":" & keyboardhook.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & keyboardhook.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.gatewayprofileusagemethod = gatewayprofileusagemethod Then RDPstring += "gatewayprofileusagemethod" & ":" & gatewayprofileusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayprofileusagemethod.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.negotiate_security_layer = negotiate_security_layer Then RDPstring += "negotiate security layer" & ":" & negotiate_security_layer.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & negotiate_security_layer.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.gatewayusagemethod = gatewayusagemethod Then RDPstring += "gatewayusagemethod" & ":" & gatewayusagemethod.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & gatewayusagemethod.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.networkautodetect = networkautodetect Then RDPstring += "networkautodetect" & ":" & networkautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & networkautodetect.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.keyboardhook = keyboardhook Then RDPstring += "keyboardhook" & ":" & keyboardhook.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & keyboardhook.ToString & vbCrLf
'If SaveDefaultSettings Or Not DefaultRDP.password_51 = password_51 Then RDPstring += "password 51" & ":" & password_51.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & password_51.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.negotiate_security_layer = negotiate_security_layer Then RDPstring += "negotiate security layer" & ":" & negotiate_security_layer.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & negotiate_security_layer.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.pinconnectionbar = pinconnectionbar Then RDPstring += "pinconnectionbar" & ":" & pinconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & pinconnectionbar.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.networkautodetect = networkautodetect Then RDPstring += "networkautodetect" & ":" & networkautodetect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & networkautodetect.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.prompt_for_credentials = prompt_for_credentials Then RDPstring += "prompt for credentials" & ":" & prompt_for_credentials.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials.ToString & vbCrLf 'If IncludeDefaultSettings Or Not DefaultRDP.password_51 = password_51 Then RDPstring += "password 51" & ":" & password_51.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & password_51.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.prompt_for_credentials_on_client = prompt_for_credentials_on_client Then RDPstring += "prompt for credentials on client" & ":" & prompt_for_credentials_on_client.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials_on_client.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.pinconnectionbar = pinconnectionbar Then RDPstring += "pinconnectionbar" & ":" & pinconnectionbar.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & pinconnectionbar.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.promptcredentialonce = promptcredentialonce Then RDPstring += "promptcredentialonce" & ":" & promptcredentialonce.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & promptcredentialonce.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.prompt_for_credentials = prompt_for_credentials Then RDPstring += "prompt for credentials" & ":" & prompt_for_credentials.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.public_mode = public_mode Then RDPstring += "public mode" & ":" & public_mode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & public_mode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.prompt_for_credentials_on_client = prompt_for_credentials_on_client Then RDPstring += "prompt for credentials on client" & ":" & prompt_for_credentials_on_client.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & prompt_for_credentials_on_client.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectclipboard = redirectclipboard Then RDPstring += "redirectclipboard" & ":" & redirectclipboard.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectclipboard.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.promptcredentialonce = promptcredentialonce Then RDPstring += "promptcredentialonce" & ":" & promptcredentialonce.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & promptcredentialonce.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectcomports = redirectcomports Then RDPstring += "redirectcomports" & ":" & redirectcomports.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectcomports.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.public_mode = public_mode Then RDPstring += "public mode" & ":" & public_mode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & public_mode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectdirectx = redirectdirectx Then RDPstring += "redirectdirectx" & ":" & redirectdirectx.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdirectx.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectclipboard = redirectclipboard Then RDPstring += "redirectclipboard" & ":" & redirectclipboard.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectclipboard.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectdrives = redirectdrives Then RDPstring += "redirectdrives" & ":" & redirectdrives.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdrives.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectcomports = redirectcomports Then RDPstring += "redirectcomports" & ":" & redirectcomports.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectcomports.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectposdevices = redirectposdevices Then RDPstring += "redirectposdevices" & ":" & redirectposdevices.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectposdevices.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectdirectx = redirectdirectx Then RDPstring += "redirectdirectx" & ":" & redirectdirectx.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdirectx.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectprinters = redirectprinters Then RDPstring += "redirectprinters" & ":" & redirectprinters.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectprinters.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectdrives = redirectdrives Then RDPstring += "redirectdrives" & ":" & redirectdrives.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectdrives.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.redirectsmartcards = redirectsmartcards Then RDPstring += "redirectsmartcards" & ":" & redirectsmartcards.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectsmartcards.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirected_video_capture_encoding_quality = redirected_video_capture_encoding_quality Then RDPstring += "redirected_video_capture_encoding_quality" & ":" & redirected_video_capture_encoding_quality.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirected_video_capture_encoding_quality.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationcmdline = remoteapplicationcmdline Then RDPstring += "remoteapplicationcmdline" & ":" & remoteapplicationcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationcmdline.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectlocation = redirectlocation Then RDPstring += "redirectlocation" & ":" & redirectlocation.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectlocation.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationexpandcmdline = remoteapplicationexpandcmdline Then RDPstring += "remoteapplicationexpandcmdline" & ":" & remoteapplicationexpandcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandcmdline.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectposdevices = redirectposdevices Then RDPstring += "redirectposdevices" & ":" & redirectposdevices.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectposdevices.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationexpandworkingdir = remoteapplicationexpandworkingdir Then RDPstring += "remoteapplicationexpandworkingdir" & ":" & remoteapplicationexpandworkingdir.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandworkingdir.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectprinters = redirectprinters Then RDPstring += "redirectprinters" & ":" & redirectprinters.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectprinters.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationfile = remoteapplicationfile Then RDPstring += "remoteapplicationfile" & ":" & remoteapplicationfile.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfile.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectsmartcards = redirectsmartcards Then RDPstring += "redirectsmartcards" & ":" & redirectsmartcards.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectsmartcards.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationfileextensions = remoteapplicationfileextensions Then RDPstring += "remoteapplicationfileextensions" & ":" & remoteapplicationfileextensions.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfileextensions.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.redirectwebauthn = redirectwebauthn Then RDPstring += "redirectwebauthn" & ":" & redirectwebauthn.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & redirectwebauthn.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationicon = remoteapplicationicon Then RDPstring += "remoteapplicationicon" & ":" & remoteapplicationicon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationicon.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationcmdline = remoteapplicationcmdline Then RDPstring += "remoteapplicationcmdline" & ":" & remoteapplicationcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationcmdline.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationmode = remoteapplicationmode Then RDPstring += "remoteapplicationmode" & ":" & remoteapplicationmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationmode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationexpandcmdline = remoteapplicationexpandcmdline Then RDPstring += "remoteapplicationexpandcmdline" & ":" & remoteapplicationexpandcmdline.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandcmdline.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationname = remoteapplicationname Then RDPstring += "remoteapplicationname" & ":" & remoteapplicationname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationname.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationexpandworkingdir = remoteapplicationexpandworkingdir Then RDPstring += "remoteapplicationexpandworkingdir" & ":" & remoteapplicationexpandworkingdir.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationexpandworkingdir.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.remoteapplicationprogram = remoteapplicationprogram Then RDPstring += "remoteapplicationprogram" & ":" & remoteapplicationprogram.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationprogram.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationfile = remoteapplicationfile Then RDPstring += "remoteapplicationfile" & ":" & remoteapplicationfile.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfile.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.screen_mode_id = screen_mode_id Then RDPstring += "screen mode id" & ":" & screen_mode_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & screen_mode_id.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationfileextensions = remoteapplicationfileextensions Then RDPstring += "remoteapplicationfileextensions" & ":" & remoteapplicationfileextensions.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationfileextensions.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.server_port = server_port Then RDPstring += "server port" & ":" & server_port.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & server_port.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationicon = remoteapplicationicon Then RDPstring += "remoteapplicationicon" & ":" & remoteapplicationicon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationicon.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.session_bpp = session_bpp Then RDPstring += "session bpp" & ":" & session_bpp.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & session_bpp.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationmode = remoteapplicationmode Then RDPstring += "remoteapplicationmode" & ":" & remoteapplicationmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationmode.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.shell_working_directory = shell_working_directory Then RDPstring += "shell working directory" & ":" & shell_working_directory.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & shell_working_directory.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationname = remoteapplicationname Then RDPstring += "remoteapplicationname" & ":" & remoteapplicationname.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationname.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.smart_sizing = smart_sizing Then RDPstring += "smart sizing" & ":" & smart_sizing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & smart_sizing.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.remoteapplicationprogram = remoteapplicationprogram Then RDPstring += "remoteapplicationprogram" & ":" & remoteapplicationprogram.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & remoteapplicationprogram.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.span_monitors = span_monitors Then RDPstring += "span monitors" & ":" & span_monitors.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & span_monitors.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.screen_mode_id = screen_mode_id Then RDPstring += "screen mode id" & ":" & screen_mode_id.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & screen_mode_id.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.superpanaccelerationfactor = superpanaccelerationfactor Then RDPstring += "superpanaccelerationfactor" & ":" & superpanaccelerationfactor.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & superpanaccelerationfactor.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.selectedmonitors = selectedmonitors Then RDPstring += "selectedmonitors" & ":" & selectedmonitors.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & selectedmonitors.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.usbdevicestoredirect = usbdevicestoredirect Then RDPstring += "usbdevicestoredirect" & ":" & usbdevicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & usbdevicestoredirect.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.server_port = server_port Then RDPstring += "server port" & ":" & server_port.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & server_port.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.use_multimon = use_multimon Then RDPstring += "use multimon" & ":" & use_multimon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & use_multimon.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.session_bpp = session_bpp Then RDPstring += "session bpp" & ":" & session_bpp.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & session_bpp.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.username = username Then RDPstring += "username" & ":" & username.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & username.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.shell_working_directory = shell_working_directory Then RDPstring += "shell working directory" & ":" & shell_working_directory.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & shell_working_directory.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.videoplaybackmode = videoplaybackmode Then RDPstring += "videoplaybackmode" & ":" & videoplaybackmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & videoplaybackmode.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.signscope = signscope Then RDPstring += "signscope" & ":" & signscope.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & signscope.ToString & vbCrLf
If SaveDefaultSettings Or Not DefaultRDP.winposstr = winposstr Then RDPstring += "winposstr" & ":" & winposstr.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & winposstr.ToString & vbCrLf If IncludeDefaultSettings Or Not DefaultRDP.smart_sizing = smart_sizing Then RDPstring += "smart sizing" & ":" & smart_sizing.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & smart_sizing.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.span_monitors = span_monitors Then RDPstring += "span monitors" & ":" & span_monitors.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & span_monitors.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.superpanaccelerationfactor = superpanaccelerationfactor Then RDPstring += "superpanaccelerationfactor" & ":" & superpanaccelerationfactor.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & superpanaccelerationfactor.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.usbdevicestoredirect = usbdevicestoredirect Then RDPstring += "usbdevicestoredirect" & ":" & usbdevicestoredirect.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & usbdevicestoredirect.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.use_multimon = use_multimon Then RDPstring += "use multimon" & ":" & use_multimon.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & use_multimon.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.username = username Then RDPstring += "username" & ":" & username.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & username.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.videoplaybackmode = videoplaybackmode Then RDPstring += "videoplaybackmode" & ":" & videoplaybackmode.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & videoplaybackmode.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.winposstr = winposstr Then RDPstring += "winposstr" & ":" & winposstr.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & winposstr.ToString & vbCrLf
If IncludeDefaultSettings Or Not DefaultRDP.workspaceid = workspaceid Then RDPstring += "workspaceid" & ":" & workspaceid.GetType().ToString.Replace("System.", "").ToLower.Substring(0, 1) & ":" & workspaceid.ToString & vbCrLf
If AdditionalOptions <> "" Then
RDPstring += AdditionalOptions
End If
Return RDPstring Return RDPstring
End Function End Function
@ -204,6 +226,7 @@ Public Class RDPFile
If SplitLine(0) = "bandwidthautodetect" Then bandwidthautodetect = SplitLine(2) If SplitLine(0) = "bandwidthautodetect" Then bandwidthautodetect = SplitLine(2)
If SplitLine(0) = "bitmapcachepersistenable" Then bitmapcachepersistenable = SplitLine(2) If SplitLine(0) = "bitmapcachepersistenable" Then bitmapcachepersistenable = SplitLine(2)
If SplitLine(0) = "bitmapcachesize" Then bitmapcachesize = SplitLine(2) If SplitLine(0) = "bitmapcachesize" Then bitmapcachesize = SplitLine(2)
If SplitLine(0) = "camerastoredirect" Then camerastoredirect = SplitLine(2)
If SplitLine(0) = "compression" Then compression = SplitLine(2) If SplitLine(0) = "compression" Then compression = SplitLine(2)
If SplitLine(0) = "connect to console" Then connect_to_console = SplitLine(2) If SplitLine(0) = "connect to console" Then connect_to_console = SplitLine(2)
If SplitLine(0) = "connection type" Then connection_type = SplitLine(2) If SplitLine(0) = "connection type" Then connection_type = SplitLine(2)
@ -223,6 +246,7 @@ Public Class RDPFile
If SplitLine(0) = "drivestoredirect" Then drivestoredirect = SplitLine(2) If SplitLine(0) = "drivestoredirect" Then drivestoredirect = SplitLine(2)
If SplitLine(0) = "enablecredsspsupport" Then enablecredsspsupport = SplitLine(2) If SplitLine(0) = "enablecredsspsupport" Then enablecredsspsupport = SplitLine(2)
If SplitLine(0) = "enablesuperpan" Then enablesuperpan = SplitLine(2) If SplitLine(0) = "enablesuperpan" Then enablesuperpan = SplitLine(2)
If SplitLine(0) = "encode redirected video capture" Then encode_redirected_video_capture = SplitLine(2)
If SplitLine(0) = "full address" Then full_address = SplitLine(2) If SplitLine(0) = "full address" Then full_address = SplitLine(2)
If SplitLine(0) = "gatewaycredentialssource" Then gatewaycredentialssource = SplitLine(2) If SplitLine(0) = "gatewaycredentialssource" Then gatewaycredentialssource = SplitLine(2)
If SplitLine(0) = "gatewayhostname" Then gatewayhostname = SplitLine(2) If SplitLine(0) = "gatewayhostname" Then gatewayhostname = SplitLine(2)
@ -241,9 +265,12 @@ Public Class RDPFile
If SplitLine(0) = "redirectcomports" Then redirectcomports = SplitLine(2) If SplitLine(0) = "redirectcomports" Then redirectcomports = SplitLine(2)
If SplitLine(0) = "redirectdirectx" Then redirectdirectx = SplitLine(2) If SplitLine(0) = "redirectdirectx" Then redirectdirectx = SplitLine(2)
If SplitLine(0) = "redirectdrives" Then redirectdrives = SplitLine(2) If SplitLine(0) = "redirectdrives" Then redirectdrives = SplitLine(2)
If SplitLine(0) = "redirected video capture encoding quality" Then redirected_video_capture_encoding_quality = SplitLine(2)
If SplitLine(0) = "redirectlocation" Then redirectlocation = SplitLine(2)
If SplitLine(0) = "redirectposdevices" Then redirectposdevices = SplitLine(2) If SplitLine(0) = "redirectposdevices" Then redirectposdevices = SplitLine(2)
If SplitLine(0) = "redirectprinters" Then redirectprinters = SplitLine(2) If SplitLine(0) = "redirectprinters" Then redirectprinters = SplitLine(2)
If SplitLine(0) = "redirectsmartcards" Then redirectsmartcards = SplitLine(2) If SplitLine(0) = "redirectsmartcards" Then redirectsmartcards = SplitLine(2)
If SplitLine(0) = "redirectwebauthn" Then redirectwebauthn = SplitLine(2)
If SplitLine(0) = "remoteapplicationcmdline" Then remoteapplicationcmdline = SplitLine(2) If SplitLine(0) = "remoteapplicationcmdline" Then remoteapplicationcmdline = SplitLine(2)
If SplitLine(0) = "remoteapplicationexpandcmdline" Then remoteapplicationexpandcmdline = SplitLine(2) If SplitLine(0) = "remoteapplicationexpandcmdline" Then remoteapplicationexpandcmdline = SplitLine(2)
If SplitLine(0) = "remoteapplicationexpandworkingdir" Then remoteapplicationexpandworkingdir = SplitLine(2) If SplitLine(0) = "remoteapplicationexpandworkingdir" Then remoteapplicationexpandworkingdir = SplitLine(2)
@ -254,9 +281,11 @@ Public Class RDPFile
If SplitLine(0) = "remoteapplicationname" Then remoteapplicationname = SplitLine(2) If SplitLine(0) = "remoteapplicationname" Then remoteapplicationname = SplitLine(2)
If SplitLine(0) = "remoteapplicationprogram" Then remoteapplicationprogram = SplitLine(2) If SplitLine(0) = "remoteapplicationprogram" Then remoteapplicationprogram = SplitLine(2)
If SplitLine(0) = "screen mode id" Then screen_mode_id = SplitLine(2) If SplitLine(0) = "screen mode id" Then screen_mode_id = SplitLine(2)
If SplitLine(0) = "selectedmonitors" Then selectedmonitors = SplitLine(2)
If SplitLine(0) = "server port" Then server_port = SplitLine(2) If SplitLine(0) = "server port" Then server_port = SplitLine(2)
If SplitLine(0) = "session bpp" Then session_bpp = SplitLine(2) If SplitLine(0) = "session bpp" Then session_bpp = SplitLine(2)
If SplitLine(0) = "shell working directory" Then shell_working_directory = SplitLine(2) If SplitLine(0) = "shell working directory" Then shell_working_directory = SplitLine(2)
If SplitLine(0) = "signscope" Then signscope = SplitLine(2)
If SplitLine(0) = "smart sizing" Then smart_sizing = SplitLine(2) If SplitLine(0) = "smart sizing" Then smart_sizing = SplitLine(2)
If SplitLine(0) = "span monitors" Then span_monitors = SplitLine(2) If SplitLine(0) = "span monitors" Then span_monitors = SplitLine(2)
If SplitLine(0) = "superpanaccelerationfactor" Then superpanaccelerationfactor = SplitLine(2) If SplitLine(0) = "superpanaccelerationfactor" Then superpanaccelerationfactor = SplitLine(2)
@ -265,6 +294,7 @@ Public Class RDPFile
If SplitLine(0) = "username" Then username = SplitLine(2) If SplitLine(0) = "username" Then username = SplitLine(2)
If SplitLine(0) = "videoplaybackmode" Then videoplaybackmode = SplitLine(2) If SplitLine(0) = "videoplaybackmode" Then videoplaybackmode = SplitLine(2)
If SplitLine(0) = "winposstr" Then winposstr = SplitLine(2) If SplitLine(0) = "winposstr" Then winposstr = SplitLine(2)
If SplitLine(0) = "workspaceid" Then workspaceid = SplitLine(2)
End If End If

View File

@ -1,11 +1,14 @@
<meta name="google-site-verification" content="MGrMbBi28Ut57MeqKI6srDSmlrprH0lug6rwNMIi0_A" />
# RemoteApp Tool # RemoteApp Tool
With Microsoft RemoteApp technology, you can seamlessly use an application that is running on another computer. With Microsoft RemoteApp technology, you can seamlessly use an application that is running on another computer.
RemoteApp Tool is a utility that allows you to create/manage RemoteApps hosted on Windows (7, 8, 10, XP and Server) as well as generate RDP and MSI files for clients. RemoteApp Tool is a utility that allows you to create/manage RemoteApps hosted on Windows (7, 8, 10, 11, XP and Server) as well as generate RDP and MSI files for clients.
If you want your RemoteApps to appear in the Start Menu of your clients, or via a web interface, check out [RAWeb](https://github.com/kimmknight/raweb)! If you want your RemoteApps to appear in the Start Menu of your clients, or via a web interface, check out [RAWeb](https://github.com/kimmknight/raweb)!
If you have questions, comments or suggestions about RemoteApp Tool, please visit the [forum](https://groups.google.com/forum/embed/?place=forum/remoteapptool). If you have questions, comments or suggestions about RemoteApp Tool, please visit [Discussions](https://github.com/kimmknight/remoteapptool/discussions).
## Features ## Features
@ -16,20 +19,26 @@ If you have questions, comments or suggestions about RemoteApp Tool, please visi
* Set options such as session timeouts * Set options such as session timeouts
* Select icons for your apps * Select icons for your apps
* File type associations for deployed apps * File type associations for deployed apps
* Sign RDP files
* Backup RemoteApps
## Requirements ## Requirements
* Microsoft .Net Framework 4 * Microsoft .Net Framework 4
* [WiX Toolset](http://wixtoolset.org/) (If you want to create MSIs. Reboot after installing.) * [WiX Toolset v3](https://wixtoolset.org/docs/wix3/) (If you want to create MSIs. Reboot after installing.)
* A **supported** edition of Windows XP, 7, 8, 10, or Server. See the [compatibility chart](https://github.com/kimmknight/remoteapptool/wiki/Windows-Compatibility). * A **supported** edition of Windows XP, 7, 8, 10, or Server. See the [compatibility chart](https://github.com/kimmknight/remoteapptool/wiki/Windows-Compatibility).
**Note:** If you try to host RemoteApps on an incompatible edition of Windows (eg. Windows 10 Home), the tool will run but RemoteApps ***will not work***. The RDP client will appear to be connecting, then just disappear with no error shown. **Note:** If you try to host RemoteApps on an incompatible edition of Windows (eg. Windows 10 Home), the tool will run but RemoteApps ***will not work***. The RDP client will appear to be connecting, then just disappear with no error shown.
## Download ## Download
[Latest Installer](http://www.kimknight.net/remoteapptool/RemoteApp%20Tool%205300.msi) **Latest:**
[Latest Portable](http://www.kimknight.net/remoteapptool/remoteapptool5300.zip) [RemoteApp Tool 6.1.0.0 Installer](https://github.com/kimmknight/remoteapptool/releases/download/v6.1.0.0/RemoteApp.Tool.6100.msi)
[RemoteApp Tool 6.1.0.0 Zip](https://github.com/kimmknight/remoteapptool/releases/download/v6.1.0.0/RemoteApp.Tool.6100.zip)
Please note: The latest installer no longer works on Windows XP, use the Zip instead.
## User guide ## User guide
@ -39,8 +48,14 @@ If you have questions, comments or suggestions about RemoteApp Tool, please visi
![Screenshot 1](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss1.png) ![Screenshot 1](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss1.png)
![Screenshot 2](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss2.png) ![Screenshot 2](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss2.png)
![Screenshot 3](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss3.png) ![Screenshot 3](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss3.png)
![Screenshot 4](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss5.png)
![Screenshot 4](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss4.png) ![Screenshot 4](https://raw.githubusercontent.com/wiki/kimmknight/remoteapptool/images/screenshots/ss4.png)

View File

@ -76,6 +76,15 @@
<setting name="SavedCertSelected" serializeAs="String"> <setting name="SavedCertSelected" serializeAs="String">
<value>0</value> <value>0</value>
</setting> </setting>
<setting name="SavedRDPOptions" serializeAs="String">
<value>disableremoteappcapscheck|disableremoteappcapscheck|i|1
drivestoredirect|drivestoredirect|s|*
prompt_for_credentials|prompt for credentials|i|1
promptcredentialonce|promptcredentialonce|i|0
redirectcomports|redirectcomports|i|1
span_monitors|span monitors|i|1
use_multimon|use multimon|i|1</value>
</setting>
</RemoteApp_Tool.My.MySettings> </RemoteApp_Tool.My.MySettings>
</userSettings> </userSettings>
</configuration> </configuration>

View File

@ -10,7 +10,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyTitle("RemoteApp Tool")> <Assembly: AssemblyTitle("RemoteApp Tool")>
<Assembly: AssemblyDescription("")> <Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Kim Knight")> <Assembly: AssemblyCompany("kimmknight, MrBrianGale, wk6768, danielb7390")>
<Assembly: AssemblyProduct("RemoteApp Tool")> <Assembly: AssemblyProduct("RemoteApp Tool")>
<Assembly: AssemblyCopyright("")> <Assembly: AssemblyCopyright("")>
<Assembly: AssemblyTrademark("")> <Assembly: AssemblyTrademark("")>
@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("6.0.0.0")> <Assembly: AssemblyVersion("6.1.0.0")>
<Assembly: AssemblyFileVersion("6.0.0.0")> <Assembly: AssemblyFileVersion("6.1.0.0")>

View File

@ -15,7 +15,7 @@ Option Explicit On
Namespace My Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _ <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0"), _ Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _ Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase Inherits Global.System.Configuration.ApplicationSettingsBase
@ -317,6 +317,21 @@ Namespace My
Me("SavedCertSelected") = value Me("SavedCertSelected") = value
End Set End Set
End Property End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("disableremoteappcapscheck|disableremoteappcapscheck|i|1"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"drivestoredirect|drivest"& _
"oredirect|s|*"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"prompt_for_credentials|prompt for credentials|i|1"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"promptcredenti"& _
"alonce|promptcredentialonce|i|0"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"redirectcomports|redirectcomports|i|1"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"span_mon"& _
"itors|span monitors|i|1"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"use_multimon|use multimon|i|1")> _
Public Property SavedRDPOptions() As String
Get
Return CType(Me("SavedRDPOptions"),String)
End Get
Set
Me("SavedRDPOptions") = value
End Set
End Property
End Class End Class
End Namespace End Namespace

View File

@ -68,5 +68,14 @@
<Setting Name="SavedCertSelected" Type="System.Int32" Scope="User"> <Setting Name="SavedCertSelected" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value> <Value Profile="(Default)">0</Value>
</Setting> </Setting>
<Setting Name="SavedRDPOptions" Type="System.String" Scope="User">
<Value Profile="(Default)">disableremoteappcapscheck|disableremoteappcapscheck|i|1
drivestoredirect|drivestoredirect|s|*
prompt_for_credentials|prompt for credentials|i|1
promptcredentialonce|promptcredentialonce|i|0
redirectcomports|redirectcomports|i|1
span_monitors|span monitors|i|1
use_multimon|use multimon|i|1</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -0,0 +1,244 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class RDPOptionsWindow
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(RDPOptionsWindow))
Me.OptionsListBox = New System.Windows.Forms.ListBox()
Me.DescriptionTextBox = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.ValueTextBox = New System.Windows.Forms.TextBox()
Me.ChangedOptionsListView = New System.Windows.Forms.ListView()
Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.SaveButton = New System.Windows.Forms.Button()
Me.SmallerIcons = New System.Windows.Forms.ImageList(Me.components)
Me.ResetButton = New System.Windows.Forms.Button()
Me.Label2 = New System.Windows.Forms.Label()
Me.DefaultsButton = New System.Windows.Forms.Button()
Me.ResetValueButton = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'OptionsListBox
'
Me.OptionsListBox.FormattingEnabled = True
Me.OptionsListBox.ItemHeight = 15
Me.OptionsListBox.Location = New System.Drawing.Point(11, 12)
Me.OptionsListBox.Margin = New System.Windows.Forms.Padding(2)
Me.OptionsListBox.Name = "OptionsListBox"
Me.OptionsListBox.Size = New System.Drawing.Size(213, 169)
Me.OptionsListBox.TabIndex = 0
'
'DescriptionTextBox
'
Me.DescriptionTextBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.DescriptionTextBox.Location = New System.Drawing.Point(228, 12)
Me.DescriptionTextBox.Margin = New System.Windows.Forms.Padding(2)
Me.DescriptionTextBox.Multiline = True
Me.DescriptionTextBox.Name = "DescriptionTextBox"
Me.DescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
Me.DescriptionTextBox.Size = New System.Drawing.Size(347, 169)
Me.DescriptionTextBox.TabIndex = 1
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(11, 188)
Me.Label1.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(57, 15)
Me.Label1.TabIndex = 2
Me.Label1.Text = "Set value:"
'
'ValueTextBox
'
Me.ValueTextBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ValueTextBox.Location = New System.Drawing.Point(72, 185)
Me.ValueTextBox.Margin = New System.Windows.Forms.Padding(2)
Me.ValueTextBox.Name = "ValueTextBox"
Me.ValueTextBox.Size = New System.Drawing.Size(476, 23)
Me.ValueTextBox.TabIndex = 3
'
'ChangedOptionsListView
'
Me.ChangedOptionsListView.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.ChangedOptionsListView.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3})
Me.ChangedOptionsListView.FullRowSelect = True
Me.ChangedOptionsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable
Me.ChangedOptionsListView.HideSelection = False
Me.ChangedOptionsListView.Location = New System.Drawing.Point(11, 238)
Me.ChangedOptionsListView.Margin = New System.Windows.Forms.Padding(2)
Me.ChangedOptionsListView.MultiSelect = False
Me.ChangedOptionsListView.Name = "ChangedOptionsListView"
Me.ChangedOptionsListView.Size = New System.Drawing.Size(564, 117)
Me.ChangedOptionsListView.Sorting = System.Windows.Forms.SortOrder.Ascending
Me.ChangedOptionsListView.TabIndex = 6
Me.ChangedOptionsListView.UseCompatibleStateImageBehavior = False
Me.ChangedOptionsListView.View = System.Windows.Forms.View.Details
'
'ColumnHeader1
'
Me.ColumnHeader1.Text = "Option"
Me.ColumnHeader1.Width = 200
'
'ColumnHeader2
'
Me.ColumnHeader2.Text = "Type"
'
'ColumnHeader3
'
Me.ColumnHeader3.Text = "Value"
Me.ColumnHeader3.Width = 282
'
'SaveButton
'
Me.SaveButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.SaveButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.SaveButton.ImageList = Me.SmallerIcons
Me.SaveButton.Location = New System.Drawing.Point(511, 366)
Me.SaveButton.Margin = New System.Windows.Forms.Padding(2)
Me.SaveButton.Name = "SaveButton"
Me.SaveButton.Size = New System.Drawing.Size(64, 29)
Me.SaveButton.TabIndex = 9
Me.SaveButton.Text = "Close"
Me.SaveButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.SaveButton.UseVisualStyleBackColor = False
'
'SmallerIcons
'
Me.SmallerIcons.ImageStream = CType(resources.GetObject("SmallerIcons.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.SmallerIcons.TransparentColor = System.Drawing.Color.Transparent
Me.SmallerIcons.Images.SetKeyName(0, "save-as_16x16.png")
Me.SmallerIcons.Images.SetKeyName(1, "msi small.ico")
Me.SmallerIcons.Images.SetKeyName(2, "doc_file_document_manager_paper_phone.ico")
Me.SmallerIcons.Images.SetKeyName(3, "16.ico")
Me.SmallerIcons.Images.SetKeyName(4, "cross.ico")
Me.SmallerIcons.Images.SetKeyName(5, "pictures (1).ico")
Me.SmallerIcons.Images.SetKeyName(6, "Remote Desktop Connection.ico")
'
'ResetButton
'
Me.ResetButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ResetButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.ResetButton.ImageIndex = 4
Me.ResetButton.ImageList = Me.SmallerIcons
Me.ResetButton.Location = New System.Drawing.Point(417, 366)
Me.ResetButton.Margin = New System.Windows.Forms.Padding(2)
Me.ResetButton.Name = "ResetButton"
Me.ResetButton.Size = New System.Drawing.Size(90, 29)
Me.ResetButton.TabIndex = 8
Me.ResetButton.Text = "Clear all"
Me.ResetButton.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.ResetButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.ResetButton.UseVisualStyleBackColor = False
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(12, 221)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(97, 15)
Me.Label2.TabIndex = 5
Me.Label2.Text = "Selected options:"
'
'DefaultsButton
'
Me.DefaultsButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.DefaultsButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.DefaultsButton.ImageIndex = 3
Me.DefaultsButton.ImageList = Me.SmallerIcons
Me.DefaultsButton.Location = New System.Drawing.Point(324, 366)
Me.DefaultsButton.Margin = New System.Windows.Forms.Padding(2)
Me.DefaultsButton.Name = "DefaultsButton"
Me.DefaultsButton.Size = New System.Drawing.Size(89, 29)
Me.DefaultsButton.TabIndex = 7
Me.DefaultsButton.Text = "Defaults"
Me.DefaultsButton.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.DefaultsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.DefaultsButton.UseVisualStyleBackColor = False
'
'ResetValueButton
'
Me.ResetValueButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.ResetValueButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.ResetValueButton.ImageIndex = 4
Me.ResetValueButton.ImageList = Me.SmallerIcons
Me.ResetValueButton.Location = New System.Drawing.Point(552, 184)
Me.ResetValueButton.Margin = New System.Windows.Forms.Padding(2)
Me.ResetValueButton.Name = "ResetValueButton"
Me.ResetValueButton.Size = New System.Drawing.Size(25, 25)
Me.ResetValueButton.TabIndex = 4
Me.ResetValueButton.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.ResetValueButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.ResetValueButton.UseVisualStyleBackColor = False
'
'RDPOptionsWindow
'
Me.AcceptButton = Me.SaveButton
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(586, 406)
Me.Controls.Add(Me.ResetValueButton)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.DefaultsButton)
Me.Controls.Add(Me.ResetButton)
Me.Controls.Add(Me.SaveButton)
Me.Controls.Add(Me.ChangedOptionsListView)
Me.Controls.Add(Me.ValueTextBox)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.DescriptionTextBox)
Me.Controls.Add(Me.OptionsListBox)
Me.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Margin = New System.Windows.Forms.Padding(2)
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.Name = "RDPOptionsWindow"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
Me.Text = "Additional RDP Options"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents OptionsListBox As ListBox
Friend WithEvents DescriptionTextBox As TextBox
Friend WithEvents Label1 As Label
Friend WithEvents ValueTextBox As TextBox
Friend WithEvents ChangedOptionsListView As ListView
Friend WithEvents ColumnHeader1 As ColumnHeader
Friend WithEvents ColumnHeader2 As ColumnHeader
Friend WithEvents ColumnHeader3 As ColumnHeader
Friend WithEvents SaveButton As Button
Friend WithEvents SmallerIcons As ImageList
Friend WithEvents ResetButton As Button
Friend WithEvents Label2 As Label
Friend WithEvents DefaultsButton As Button
Friend WithEvents ResetValueButton As Button
End Class

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,275 @@
Public Class RDPOptionsWindow
' Array to store the all RDP options
' Each row represents an RDP option with its name, type, default value, and description
Dim optionsList As String(,) = {
{"administrative_session", "administrative session", "i", "0", "Connect to the administrative session of the remote computer.\n\n0 - Do not use the administrative session.\n1 - Connect to the administrative session."},
{"allow_desktop_composition", "allow desktop composition", "i", "0", "Determines whether desktop composition (needed for Aero) is permitted when you log on to the remote computer.\n\n0 - Disable desktop composition in the remote session.\n1 - Desktop composition is permitted."},
{"allow_font_smoothing", "allow font smoothing", "i", "0", "Determines whether font smoothing may be used in the remote session.\n\n0 - Disable font smoothing in the remote session.\n1 - Font smoothing is permitted."},
{"audiocapturemode", "audiocapturemode", "i", "0", "Determines how sounds captured (recorded) on the local computer are handled when you are connected to the remote computer.\n\n0 - Do not capture audio from the local computer.\n1 - Capture audio from the local computer and send to the remote computer."},
{"audiomode", "audiomode", "i", "0", "Determines how sounds on a remote computer are handled when you are connected to the remote computer.\n\n0 - Play sounds on the local computer.\n1 - Play sounds on the remote computer.\n2 - Do not play sounds."},
{"audioqualitymode", "audioqualitymode", "i", "0", "Determines the quality of the audio played in the remote session.\n\n0 - Dynamically adjust audio quality based on available bandwidth.\n1 - Always use medium audio quality.\n2 - Always use uncompressed audio quality."},
{"authentication_level", "authentication level", "i", "2", "Determines what should happen when server authentication fails.\n\n0 - If server authentication fails, connect without giving a warning.\n1 - If server authentication fails, do not connect.\n2 - If server authentication fails, show a warning and allow the user to connect or not.\n3 - Server authentication is not required."},
{"autoreconnect_max_retries", "autoreconnect max retries", "i", "20", "Determines the maximum number of times the client computer will try to reconnect to the remote computer if the connection is dropped.\n\nNote: The maximum value Remote Desktop can handle is 200."},
{"autoreconnection_enabled", "autoreconnection enabled", "i", "1", "Determines whether the client computer will automatically try to reconnect to the remote computer if the connection is dropped.\n\n0 - Do not attempt to reconnect.\n1 - Attempt to reconnect."},
{"bandwidthautodetect", "bandwidthautodetect", "i", "1", "Enables the option for automatic detection of the network type. Used in conjunction with networkautodetect. Also see connection type.\n\n0 - Do not enable the option for automatic network detection.\n1 - Enable the option for automatic network detection."},
{"bitmapcachepersistenable", "bitmapcachepersistenable", "i", "1", "Determines whether bitmaps are cached on the local computer (disk-based cache). Bitmap caching can improve the performance of your remote session.\n\n0 - Do not cache bitmaps.\n1 - Cache bitmaps."},
{"bitmapcachesize", "bitmapcachesize", "i", "1500", "Specifies the size in kilobytes of the memory-based bitmap cache. The maximum value is 32000."},
{"camerastoredirect", "camerastoredirect", "s", "", "Configures which cameras to redirect. This setting uses a semicolon-delimited list of KSCATEGORY_VIDEO_CAMERA interfaces of cameras enabled for redirection."},
{"compression", "compression", "i", "1", "Determines whether the connection should use bulk compression.\n\n0 - Do not use bulk compression.\n1 - Use bulk compression."},
{"connection_type", "connection type", "i", "2", "Specifies pre-defined performance settings for the Remote Desktop session.\n\n1 - Modem (56 Kbps).\n2 - Low-speed broadband (256 Kbps - 2 Mbps).\n3 - Satellite (2 Mbps - 16 Mbps with high latency).\n4 - High-speed broadband (2 Mbps - 10 Mbps).\n5 - WAN (10 Mbps or higher with high latency).\n6 - LAN (10 Mbps or higher).\n7 - Automatic bandwidth detection. Requires bandwidthautodetect.\n\nBy itself, this setting does nothing. When selected in the RDC GUI, this option changes several performance related settings (themes, animation, font smoothing, etcetera). These separate settings always overrule the connection type setting."},
{"desktopheight", "desktopheight", "i", "600", "The height (in pixels) of the remote session desktop."},
{"desktop_size_id", "desktop size id", "i", "0", "Specifies pre-defined dimensions of the remote session desktop.\n\n0 - 640x480.\n1 - 800x600.\n2 - 1024x768.\n3 - 1280x1024.\n4 - 1600x1200.\n\nThis setting is ignored when either /w and /h, or desktopwidth and desktopheight are already specified."},
{"desktopwidth", "desktopwidth", "i", "800", "The width (in pixels) of the remote session desktop."},
{"devicestoredirect", "devicestoredirect", "s", "", "Determines which supported Plug and Play devices on the client computer will be redirected and available in the remote session.\n\nNo value specified - Do not redirect any supported Plug and Play devices.\n* - Redirect all supported Plug and Play devices, including ones that are connected later.\nDynamicDevices - Redirect any supported Plug and Play devices that are connected later.\nThe hardware ID for one or more Plug and Play devices - Redirect the specified supported Plug and Play device(s)."},
{"disable_ctrl_alt_del", "disable ctrl+alt+del", "i", "1", "Determines whether you have to press CTRL+ALT+DELETE before entering credentials after you are connected to the remote computer.\n\n0 - CTRL+ALT+DELETE is required before logging in.\n1 - CTRL+ALT+DELETE is not required. You can logon immediately.\n\nNote: When disabled, this setting will also delay the autologin until the user has pressed CTRL+ALT+DELETE."},
{"disable_full_window_drag", "disable full window drag", "i", "1", "Determines whether window content is displayed when you drag the window to a new location.\n\n0 - Show the contents of the window while dragging.\n1 - Show an outline of the window while dragging."},
{"disable_menu_anims", "disable menu anims", "i", "1", "Determines whether menus and windows can be displayed with animation effects in the remote session.\n\n0 - Menu and window animation is permitted.\n1 - No menu and window animation."},
{"disable_themes", "disable themes", "i", "0", "Determines whether themes are permitted when you log on to the remote computer.\n\n0 - Themes are permitted.\n1 - Disable theme in the remote session."},
{"disable_wallpaper", "disable wallpaper", "i", "1", "Determines whether the desktop background is displayed in the remote session.\n\n0 - Display the wallpaper.\n1 - Do not show any wallpaper."},
{"disableconnectionsharing", "disableconnectionsharing", "i", "0", "Determines whether a new Terminal Server session is started with every launch of a RemoteApp to the same computer and with the same credentials.\n\n0 - No new session is started. The currently active session of the user is shared.\n1 - A new login session is started for the RemoteApp."},
{"disableremoteappcapscheck", "disableremoteappcapscheck", "i", "0", "Specifies whether the Remote Desktop client should check the remote computer for RemoteApp capabilities.\n\n0 - Check the remote computer for RemoteApp capabilities before logging in.\n1 - Do not check the remote computer for RemoteApp capabilities.\n\nNote: This setting must be set to 1 when connecting to Windows XP SP3, Vista or 7 computers with RemoteApps configured on them."},
{"displayconnectionbar", "displayconnectionbar", "i", "1", "Determines whether the connection bar appears when you are in full screen mode.\n\n0 - Do not show the connection bar.\n1 - Show the connection bar."},
{"domain", "domain", "s", "", "Specifies the name of the domain of the user."},
{"drivestoredirect", "drivestoredirect", "s", "", "Determines which local disk drives on the client computer will be redirected and available in the remote session.\n\nNo value specified - Do not redirect any drives.\n* - Redirect all disk drives, including drives that are connected later.\nDynamicDrives - Redirect any drives that are connected later.\nThe drive and labels for one or more drives - Redirect the specified drive(s)."},
{"enablecredsspsupport", "enablecredsspsupport", "i", "1", "Determines whether Remote Desktop will use CredSSP for authentication if it's available.\n\n0 - Do not use CredSSP, even if the operating system supports it.\n1 - Use CredSSP, if the operating system supports it."},
{"enablesuperpan", "enablesuperpan", "i", "0", "Determines whether SuperPan is enabled or disabled. SuperPan allows the user to navigate a remote desktop in full-screen mode without scroll bars, when the dimensions of the remote desktop are larger than the dimensions of the current client window. The user can point to the window border, and the desktop view will scroll automatically in that direction.\n\n0 - Do not use SuperPan. The remote session window is sized to the client window size.\n1 - Enable SuperPan. The remote session window is sized to the dimensions specified through /w and /h, or through desktopwidth and desktopheight."},
{"encode_redirected_video_capture", "encode redirected video capture", "i", "1", "Enables or disables encoding of redirected video.\n\n0 - Disable encoding of redirected video.\n\n1 - Enable encoding of redirected video."},
{"gatewaycredentialssource", "gatewaycredentialssource", "i", "4", "Specifies the credentials that should be used to validate the connection with the RD Gateway.\n\n0 - Ask for password (NTLM).\n1 - Use smart card.\n4 - Allow user to select later."},
{"keyboardhook", "keyboardhook", "i", "2", "Determines how Windows key combinations are applied when you are connected to a remote computer.\n\n0 - Windows key combinations are applied on the local computer.\n1 - Windows key combinations are applied on the remote computer.\n2 - Windows key combinations are applied in full-screen mode only."},
{"negotiate_security_layer", "negotiate security layer", "i", "1", "Determines whether the level of security is negotiated or not.\n\n0 - Security layer negotiation is not enabled and the session is started by using Secure Sockets Layer (SSL).\n1 - Security layer negotiation is enabled and the session is started by using x.224 encryption."},
{"networkautodetect", "networkautodetect", "i", "1", "Determines whether to use automatic network bandwidth detection or not. Requires the option bandwidthautodetect to be set and correlates with connection type 7.\n\n0 - Use automatic network bandwitdh detection.\n1 - Do not use automatic network bandwitdh detection."},
{"pinconnectionbar", "pinconnectionbar", "i", "1", "Determines whether or not the connection bar should be pinned to the top of the remote session upon connection when in full screen mode.\n\n0 - The connection bar should not be pinned to the top of the remote session.\n1 - The connection bar should be pinned to the top of the remote session."},
{"prompt_for_credentials", "prompt for credentials", "i", "0", "Determines whether Remote Desktop Connection will prompt for credentials when connecting to a remote computer for which the credentials have been previously saved.\n\n0 - Remote Desktop will use the saved credentials and will not prompt for credentials.\n1 - Remote Desktop will prompt for credentials."},
{"prompt_for_credentials_on_client", "prompt for credentials on client", "i", "0", "Determines whether Remote Desktop Connection will prompt for credentials when connecting to a server that does not support server authentication.\n\n0 - Remote Desktop will not prompt for credentials.\n1 - Remote Desktop will prompt for credentials."},
{"promptcredentialonce", "promptcredentialonce", "i", "1", "When connecting through an RD Gateway, determines whether RDC should use the same credentials for both the RD Gateway and the remote computer.\n\n0 - Remote Desktop will not use the same credentials .\n1 - Remote Desktop will use the same credentials for both the RD gateway and the remote computer."},
{"public_mode", "public mode", "i", "0", "Determines whether Remote Desktop Connection will be started in public mode.\n\n0 - Remote Desktop will not start in public mode .\n1 - Remote Desktop will start in public mode and will not save any user data (credentials, bitmap cache, MRU) on the local machine."},
{"redirected_video_capture_encoding_quality", "redirected video capture encoding quality", "i", "0", "Controls the quality of encoded video.\n\n0 - High compression video. Quality may suffer when there's a lot of motion.\n1 - Medium compression.\n2 - Low compression video with high picture quality."},
{"redirectclipboard", "redirectclipboard", "i", "1", "Determines whether the clipboard on the client computer will be redirected and available in the remote session and vice versa.\n\n0 - Do not redirect the clipboard.\n1 - Redirect the clipboard."},
{"redirectcomports", "redirectcomports", "i", "0", "Determines whether the COM (serial) ports on the client computer will be redirected and available in the remote session.\n\n0 - The COM ports on the local computer are not available in the remote session.\n1 - The COM ports on the local computer are available in the remote session."},
{"redirectdirectx", "redirectdirectx", "i", "1", "Determines whether DirectX will be enabled for the remote session.\n\n0 - Do not enable DirectX rendering.\n1 - Enable DirectX rendering in the remote session."},
{"redirectlocation", "redirectlocation", "i", "0", "Determines whether the location of the local device will be redirected and available in the remote session.\n\n0 - The remote session uses the location of the remote computer.\n1 - The remote session uses the location of the local device."},
{"redirectposdevices", "redirectposdevices", "i", "0", "Determines whether Microsoft Point of Service (POS) for .NET devices connected to the client computer will be redirected and available in the remote session.\n\n0 - The POS devices from the local computer are not available in the remote session.\n1 - The POS devices from the local computer are available in the remote session."},
{"redirectprinters", "redirectprinters", "i", "1", "Determines whether printers configured on the client computer will be redirected and available in the remote session.\n\n0 - The printers on the local computer are not available in the remote session.\n1 - The printers on the local computer are available in the remote session."},
{"redirectsmartcards", "redirectsmartcards", "i", "1", "Determines whether smart card devices on the client computer will be redirected and available in the remote session.\n\n0 - The smart card device on the local computer is not available in the remote session.\n1 - The smart card device on the local computer is available in the remote session."},
{"redirectwebauthn", "redirectwebauthn", "i", "1", "Determines whether WebAuthn requests on the remote computer will be redirected to the local computer allowing the use of local authenticators (such as Windows Hello for Business and security key).\n\n0 - WebAuthn requests from the remote session aren't sent to the local computer for authentication and must be completed in the remote session.\n1 - WebAuthn requests from the remote session are sent to the local computer for authentication."},
{"remoteapplicationfile", "remoteapplicationfile", "s", "", "Specifies a file to be opened on the remote computer by the RemoteApp.\n\nNote: For local files to be opened, you must also enable drive redirection for (at least) the source drive."},
{"remoteapplicationexpandcmdline", "remoteapplicationexpandcmdline", "i", "1", "Determines whether environment variables contained in the RemoteApp command line parameter should be expanded locally or remotely.\n\n0 - Environment variables should be expanded to the values of the local computer.\n1 - Environment variables should be expanded on the remote computer to the values of the remote computer."},
{"remoteapplicationexpandworkingdir", "remoteapplicationexpandworkingdir", "i", "0", "Determines whether environment variables contained in the RemoteApp working directory parameter should be expanded locally or remotely.\n\n0 - Environment variables should be expanded to the values of the local computer.\n1 - Environment variables should be expanded on the remote computer to the values of the remote computer.\n\nNote: The RemoteApp working directory is specified through the shell working directory parameter."},
{"remoteapplicationicon", "remoteapplicationicon", "s", "", "Specifies the file name of an icon file to be displayed in the Remote Desktop interface while starting the RemoteApp. By default RDC will show the standard Remote Desktop icon.\n\nNote: Only .ico files are supported."},
{"screen_mode_id", "screen mode id", "i", "2", "Determines whether the remote session window appears full screen when you connect to the remote computer.\n\n1 - The remote session will appear in a window.\n2 - The remote session will appear full screen."},
{"selectedmonitors", "selectedmonitors", "s", "", "Specifies which local displays to use for the remote session. The selected displays must be contiguous. Requires use multimon to be set to 1.\n\nComma separated list of machine-specific display IDs. You can retrieve IDs by calling mstsc.exe /l. The first ID listed will be set as the primary display in the session. Defaults to all displays."},
{"session_bpp", "session bpp", "i", "32", "Determines the color depth (in bits) on the remote computer when you connect.\n\n8 - 256 colors (8 bit).\n15 - High color (15 bit).\n16 - High color (16 bit).\n24 - True color (24 bit).\n32 - Highest quality (32 bit)."},
{"shell_working_directory", "shell working directory", "s", "", "The working directory on the remote computer to be used if an alternate shell is specified."},
{"signscope", "signscope", "s", "", "Comma-delimited list of .rdp file settings for which the signature is generated when using .rdp file signing."},
{"smart_sizing", "smart sizing", "i", "0", "Determines whether the client computer should scale the content on the remote computer to fit the window size of the client computer when the window is resized.\n\n0 - The client window display will not be scaled when resized.\n1 - The client window display will be scaled when resized."},
{"span_monitors", "span monitors", "i", "0", "Determines whether the remote session window will be spanned across multiple monitors when you connect to the remote computer.\n\n0 - Monitor spanning is not enabled.\n1 - Monitor spanning is enabled.\n\nNote: When using Remote Desktop Connection 7 (Windows 7/2008), the use multimon setting is recommended."},
{"superpanaccelerationfactor", "superpanaccelerationfactor", "i", "1", "Specifies the number of pixels that the screen view scrolls in a given direction for every pixel of mouse movement by the client when in SuperPan mode"},
{"usbdevicestoredirect", "usbdevicestoredirect", "s", "", "Determines which supported RemoteFX USB devices on the client computer will be redirected and available in the remote session when you connect to a remote session that supports RemoteFX USB redirection.\n\nNo value specified - Do not redirect any supported RemoteFX USB devices.\n* - Redirect all supported RemoteFX USB devices for redirection that are not redirected by high-level redirection mechanisms.\n{Device Setup Class GUID} - Redirect all supported RemoteFX USB devices that are members of the specified device setup class.\nUSB\InstanceID - Redirect the supported RemoteFX USB device specified by the given instance ID.\n-USB\InstanceID - Do not redirect the supported RemoteFX USB device specified by the given instance ID, even if the device is in a device setup class that is redirected.."},
{"use_multimon", "use multimon", "i", "0", "Determines whether the session should use true multiple monitor support when connecting to the remote computer.\n\n0 - Do not enable multiple monitor support.\n1 - Enable multiple monitor support."},
{"username", "username", "s", "", "Specifies the name of the user account that will be used to log on to the remote computer."},
{"videoplaybackmode", "videoplaybackmode", "i", "1", "Determines whether RDC will use RDP efficient multimedia streaming for video playback.\n\n0 - Do not use RDP efficient multimedia streaming for video playback.\n1 - Use RDP efficient multimedia streaming for video playback when possible."},
{"winposstr", "winposstr", "s", "0,3,0,0,800,600", "Specifies the position and dimensions of the session window on the client computer."},
{"workspaceid", "workspaceid", "s", "", "This setting defines the RemoteApp and Desktop ID associated with the RDP file that contains this setting."}
}
' Array to store recommended default options
Public RecommendedDefaultOptions As String(,) = {
{"disableremoteappcapscheck", "disableremoteappcapscheck", "i", "1"},
{"drivestoredirect", "drivestoredirect", "s", "*"},
{"prompt_for_credentials", "prompt for credentials", "i", "1"},
{"promptcredentialonce", "promptcredentialonce", "i", "0"},
{"redirectcomports", "redirectcomports", "i", "1"},
{"span_monitors", "span monitors", "i", "1"},
{"use_multimon", "use multimon", "i", "1"}
}
' Array to store changed options during editing
Dim changedOptions As String(,)
' Index of the currently selected row in the OptionsListBox
Dim selectedRow As Integer = 0
' Copy the original options to the changedOptions array
Private Sub CopyOptions()
changedOptions = New String(optionsList.GetLength(0) - 1, optionsList.GetLength(1) - 1) {}
Array.Copy(optionsList, changedOptions, optionsList.Length)
End Sub
' Main function that prepares and opens the window (to be called from elsewhere)
Public Function EditAdditionalOptions(additionalOptions As String(,))
' Copy options, load additional options, and update the changed options
CopyOptions()
LoadAdditionalOptions(additionalOptions)
UpdateChangedOptions()
' Load options into the OptionsListBox
OptionsListBox.Items.Clear()
For row As Integer = 0 To optionsList.GetLength(0) - 1
OptionsListBox.Items.Add(optionsList(row, 1))
Next
' Set the selected item in OptionsListBox and load the selected option
OptionsListBox.SelectedIndex = selectedRow
LoadSelected()
' Show the form
ShowDialog()
' Export saved options and return the result
Dim SavedOptions As String(,) = ExportSavedOptionsAsArray()
Return SavedOptions
' Dispose of the form
Dispose()
End Function
' Load additional options and update the changed options array
Private Sub LoadAdditionalOptions(additionalOptions As String(,))
If additionalOptions.Length > 1 Then
For row As Integer = 0 To optionsList.GetLength(0) - 1
For additionalOptionRow As Integer = 0 To additionalOptions.GetLength(0) - 1
If optionsList(row, 1) = additionalOptions(additionalOptionRow, 1) Then
changedOptions(row, 3) = additionalOptions(additionalOptionRow, 3)
End If
Next
Next
End If
End Sub
' Handle the selection change in OptionsListBox
Private Sub OptionsListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles OptionsListBox.SelectedIndexChanged
If OptionsListBox.SelectedItems.Count = 1 Then
selectedRow = OptionsListBox.SelectedIndex
LoadSelected()
End If
End Sub
' Load the details of the selected option into the description and value textboxes
Private Sub LoadSelected()
Dim descriptionText = "# " & optionsList(selectedRow, 1) & vbCrLf & vbCrLf
descriptionText = descriptionText & optionsList(selectedRow, 4).Replace("\n", vbCrLf)
Dim valueText = changedOptions(selectedRow, 3)
If optionsList(selectedRow, 3) <> "" Then
descriptionText = descriptionText & vbCrLf & vbCrLf & "Default: " & optionsList(selectedRow, 3)
End If
DescriptionTextBox.Text = descriptionText
ValueTextBox.Text = valueText
End Sub
' Handle the change in the value textbox
Private Sub ValueTextBox_TextChanged(sender As Object, e As EventArgs) Handles ValueTextBox.TextChanged
If changedOptions(selectedRow, 3) <> ValueTextBox.Text Then
changedOptions(selectedRow, 3) = ValueTextBox.Text
UpdateChangedOptions()
End If
End Sub
' Update the ChangedOptionsListView with any changes
Private Sub UpdateChangedOptions()
ChangedOptionsListView.Items.Clear()
For row As Integer = 0 To optionsList.GetLength(0) - 1
If optionsList(row, 3) <> changedOptions(row, 3) Then
Dim newItem As ListViewItem = ChangedOptionsListView.Items.Add(changedOptions(row, 1))
newItem.SubItems.Add(changedOptions(row, 2))
newItem.SubItems.Add(changedOptions(row, 3))
End If
Next
End Sub
' Export only the modified options as an array
Private Function ExportSavedOptionsAsArray()
Dim selectedIndicesList As New List(Of Integer)
For row As Integer = 0 To optionsList.GetLength(0) - 1
If optionsList(row, 3) <> changedOptions(row, 3) Then
selectedIndicesList.Add(row)
End If
Next
Dim selectedIndices() As Integer = selectedIndicesList.ToArray()
Dim changedOptionsNoDesc As String(,) = RemoveDescriptions(changedOptions)
Return SelectRows(changedOptionsNoDesc, selectedIndices)
End Function
' Select specific rows from the array
Function SelectRows(originalArray As String(,), selectedIndices() As Integer) As String(,)
Dim numSelectedRows As Integer = selectedIndices.Length
Dim numCols As Integer = originalArray.GetLength(1)
' Create a new array with the selected rows
Dim newArray(numSelectedRows - 1, numCols - 1) As String
' Copy the selected rows from the original array
For i As Integer = 0 To numSelectedRows - 1
Dim rowIndex As Integer = selectedIndices(i)
For j As Integer = 0 To numCols - 1
newArray(i, j) = originalArray(rowIndex, j)
Next
Next
Return newArray
End Function
' Remove descriptions from the array
Function RemoveDescriptions(originalArray(,) As String) As String(,)
Dim numRows As Integer = originalArray.GetLength(0)
Dim numColumns As Integer = Math.Min(originalArray.GetLength(1), 4)
Dim newArray(numRows - 1, numColumns - 1) As String
For i As Integer = 0 To numRows - 1
For j As Integer = 0 To numColumns - 1
newArray(i, j) = originalArray(i, j)
Next
Next
Return newArray
End Function
' Handle the Close button being clicked
Private Sub SaveButton_Click(sender As Object, e As EventArgs) Handles SaveButton.Click
Me.Close()
End Sub
' Handles the Reset button being clicked, resets all options to RDP defaults (so they are not active)
Private Sub ResetButton_Click(sender As Object, e As EventArgs) Handles ResetButton.Click
CopyOptions()
UpdateChangedOptions()
LoadSelected()
End Sub
' Handles the Defaults button being clicked, clears all options and adds all recommended default options
Private Sub DefaultsButton_Click(sender As Object, e As EventArgs) Handles DefaultsButton.Click
CopyOptions()
LoadAdditionalOptions(RecommendedDefaultOptions)
UpdateChangedOptions()
LoadSelected()
End Sub
' Handles items in the Changed Options ListView being clicked/selected, scrolls to the selected option in the main Options ListBox
Private Sub ChangedOptionsListView_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ChangedOptionsListView.SelectedIndexChanged
ScrollToSelectedOption()
ChangedOptionsListView.Focus()
End Sub
' As above, scrolls to the selected option in the main Options ListBox
Private Sub ScrollToSelectedOption()
If ChangedOptionsListView.SelectedItems.Count > 0 Then
Dim selectedOptionName As String = ChangedOptionsListView.SelectedItems(0).Text
OptionsListBox.SelectedItem = selectedOptionName
End If
End Sub
Private Sub ResetValueButton_Click(sender As Object, e As EventArgs) Handles ResetValueButton.Click
If ValueTextBox.Text <> optionsList(selectedRow, 3) Then
changedOptions(selectedRow, 3) = optionsList(selectedRow, 3)
LoadSelected()
UpdateChangedOptions()
End If
End Sub
End Class

View File

@ -126,6 +126,12 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ApplicationEvents.vb" /> <Compile Include="ApplicationEvents.vb" />
<Compile Include="RDPOptionsWindow.Designer.vb">
<DependentUpon>RDPOptionsWindow.vb</DependentUpon>
</Compile>
<Compile Include="RDPOptionsWindow.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="HelpSystem.vb" /> <Compile Include="HelpSystem.vb" />
<Compile Include="IconModule.vb" /> <Compile Include="IconModule.vb" />
<Compile Include="LocalFtaModule.vb" /> <Compile Include="LocalFtaModule.vb" />
@ -176,6 +182,7 @@
<Compile Include="My Project\Application.Designer.vb"> <Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon> <DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile> </Compile>
<Compile Include="My Project\Resources.Designer.vb"> <Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
@ -189,11 +196,15 @@
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="RDPOptionsWindow.resx">
<DependentUpon>RDPOptionsWindow.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="RemoteAppAboutWindow.resx"> <EmbeddedResource Include="RemoteAppAboutWindow.resx">
<DependentUpon>RemoteAppAboutWindow.vb</DependentUpon> <DependentUpon>RemoteAppAboutWindow.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="RemoteAppCreateClientConnection.resx"> <EmbeddedResource Include="RemoteAppCreateClientConnection.resx">
<DependentUpon>RemoteAppCreateClientConnection.vb</DependentUpon> <DependentUpon>RemoteAppCreateClientConnection.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="RemoteAppFileTypeAssociation.resx"> <EmbeddedResource Include="RemoteAppFileTypeAssociation.resx">
<DependentUpon>RemoteAppFileTypeAssociation.vb</DependentUpon> <DependentUpon>RemoteAppFileTypeAssociation.vb</DependentUpon>
@ -209,6 +220,7 @@
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="RemoteAppMainWindow.resx"> <EmbeddedResource Include="RemoteAppMainWindow.resx">
<DependentUpon>RemoteAppMainWindow.vb</DependentUpon> <DependentUpon>RemoteAppMainWindow.vb</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx"> <EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator> <Generator>VbMyResourcesResXFileCodeGenerator</Generator>

View File

@ -38,9 +38,9 @@ Partial Class RemoteAppAboutWindow
' '
Me.TitleLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.TitleLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.TitleLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.TitleLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TitleLabel.Location = New System.Drawing.Point(17, 9) Me.TitleLabel.Location = New System.Drawing.Point(16, 9)
Me.TitleLabel.Name = "TitleLabel" Me.TitleLabel.Name = "TitleLabel"
Me.TitleLabel.Size = New System.Drawing.Size(263, 30) Me.TitleLabel.Size = New System.Drawing.Size(350, 30)
Me.TitleLabel.TabIndex = 0 Me.TitleLabel.TabIndex = 0
Me.TitleLabel.Text = "RemoteApp Tool" Me.TitleLabel.Text = "RemoteApp Tool"
Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.TitleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -48,9 +48,9 @@ Partial Class RemoteAppAboutWindow
'VersionLabel 'VersionLabel
' '
Me.VersionLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.VersionLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.VersionLabel.Location = New System.Drawing.Point(17, 39) Me.VersionLabel.Location = New System.Drawing.Point(16, 39)
Me.VersionLabel.Name = "VersionLabel" Me.VersionLabel.Name = "VersionLabel"
Me.VersionLabel.Size = New System.Drawing.Size(263, 30) Me.VersionLabel.Size = New System.Drawing.Size(350, 30)
Me.VersionLabel.TabIndex = 0 Me.VersionLabel.TabIndex = 0
Me.VersionLabel.Text = "Version 0.0.0.0" Me.VersionLabel.Text = "Version 0.0.0.0"
Me.VersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.VersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -58,9 +58,9 @@ Partial Class RemoteAppAboutWindow
'CopyrightLabel 'CopyrightLabel
' '
Me.CopyrightLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.CopyrightLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.CopyrightLabel.Location = New System.Drawing.Point(17, 69) Me.CopyrightLabel.Location = New System.Drawing.Point(16, 69)
Me.CopyrightLabel.Name = "CopyrightLabel" Me.CopyrightLabel.Name = "CopyrightLabel"
Me.CopyrightLabel.Size = New System.Drawing.Size(263, 30) Me.CopyrightLabel.Size = New System.Drawing.Size(350, 53)
Me.CopyrightLabel.TabIndex = 0 Me.CopyrightLabel.TabIndex = 0
Me.CopyrightLabel.Text = "Kim Knight, Brian Gale" Me.CopyrightLabel.Text = "Kim Knight, Brian Gale"
Me.CopyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.CopyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -68,9 +68,9 @@ Partial Class RemoteAppAboutWindow
'SiteLinkLabel 'SiteLinkLabel
' '
Me.SiteLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.SiteLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.SiteLinkLabel.Location = New System.Drawing.Point(15, 129) Me.SiteLinkLabel.Location = New System.Drawing.Point(16, 152)
Me.SiteLinkLabel.Name = "SiteLinkLabel" Me.SiteLinkLabel.Name = "SiteLinkLabel"
Me.SiteLinkLabel.Size = New System.Drawing.Size(271, 30) Me.SiteLinkLabel.Size = New System.Drawing.Size(350, 30)
Me.SiteLinkLabel.TabIndex = 1 Me.SiteLinkLabel.TabIndex = 1
Me.SiteLinkLabel.TabStop = True Me.SiteLinkLabel.TabStop = True
Me.SiteLinkLabel.Text = "https://github.com/kimmknight/remoteapptool" Me.SiteLinkLabel.Text = "https://github.com/kimmknight/remoteapptool"
@ -79,9 +79,9 @@ Partial Class RemoteAppAboutWindow
'IconLibCreatedByLabel 'IconLibCreatedByLabel
' '
Me.IconLibCreatedByLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.IconLibCreatedByLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibCreatedByLabel.Location = New System.Drawing.Point(17, 189) Me.IconLibCreatedByLabel.Location = New System.Drawing.Point(16, 212)
Me.IconLibCreatedByLabel.Name = "IconLibCreatedByLabel" Me.IconLibCreatedByLabel.Name = "IconLibCreatedByLabel"
Me.IconLibCreatedByLabel.Size = New System.Drawing.Size(263, 30) Me.IconLibCreatedByLabel.Size = New System.Drawing.Size(350, 30)
Me.IconLibCreatedByLabel.TabIndex = 4 Me.IconLibCreatedByLabel.TabIndex = 4
Me.IconLibCreatedByLabel.Text = "Created by CastorTiu" Me.IconLibCreatedByLabel.Text = "Created by CastorTiu"
Me.IconLibCreatedByLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.IconLibCreatedByLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -90,9 +90,9 @@ Partial Class RemoteAppAboutWindow
' '
Me.IconLibLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.IconLibLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.IconLibLabel.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.IconLibLabel.Location = New System.Drawing.Point(17, 159) Me.IconLibLabel.Location = New System.Drawing.Point(16, 182)
Me.IconLibLabel.Name = "IconLibLabel" Me.IconLibLabel.Name = "IconLibLabel"
Me.IconLibLabel.Size = New System.Drawing.Size(263, 30) Me.IconLibLabel.Size = New System.Drawing.Size(350, 30)
Me.IconLibLabel.TabIndex = 5 Me.IconLibLabel.TabIndex = 5
Me.IconLibLabel.Text = "IconLib" Me.IconLibLabel.Text = "IconLib"
Me.IconLibLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.IconLibLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -100,9 +100,9 @@ Partial Class RemoteAppAboutWindow
'IconLibLinkLabel 'IconLibLinkLabel
' '
Me.IconLibLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.IconLibLinkLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLinkLabel.Location = New System.Drawing.Point(12, 249) Me.IconLibLinkLabel.Location = New System.Drawing.Point(16, 309)
Me.IconLibLinkLabel.Name = "IconLibLinkLabel" Me.IconLibLinkLabel.Name = "IconLibLinkLabel"
Me.IconLibLinkLabel.Size = New System.Drawing.Size(274, 30) Me.IconLibLinkLabel.Size = New System.Drawing.Size(350, 30)
Me.IconLibLinkLabel.TabIndex = 1 Me.IconLibLinkLabel.TabIndex = 1
Me.IconLibLinkLabel.TabStop = True Me.IconLibLinkLabel.TabStop = True
Me.IconLibLinkLabel.Text = "https://creativecommons.org/licenses/by-sa/3.0/" Me.IconLibLinkLabel.Text = "https://creativecommons.org/licenses/by-sa/3.0/"
@ -111,9 +111,9 @@ Partial Class RemoteAppAboutWindow
'IconLibLicenceTextLabel 'IconLibLicenceTextLabel
' '
Me.IconLibLicenceTextLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.IconLibLicenceTextLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.IconLibLicenceTextLabel.Location = New System.Drawing.Point(17, 219) Me.IconLibLicenceTextLabel.Location = New System.Drawing.Point(16, 242)
Me.IconLibLicenceTextLabel.Name = "IconLibLicenceTextLabel" Me.IconLibLicenceTextLabel.Name = "IconLibLicenceTextLabel"
Me.IconLibLicenceTextLabel.Size = New System.Drawing.Size(263, 30) Me.IconLibLicenceTextLabel.Size = New System.Drawing.Size(350, 67)
Me.IconLibLicenceTextLabel.TabIndex = 4 Me.IconLibLicenceTextLabel.TabIndex = 4
Me.IconLibLicenceTextLabel.Text = "Licensed under a Creative Commons" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Attribution-Share Alike 3.0 Unported License" Me.IconLibLicenceTextLabel.Text = "Licensed under a Creative Commons" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Attribution-Share Alike 3.0 Unported License"
Me.IconLibLicenceTextLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.IconLibLicenceTextLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
@ -121,19 +121,19 @@ Partial Class RemoteAppAboutWindow
'RemoteAppToolLicenceTextLabel 'RemoteAppToolLicenceTextLabel
' '
Me.RemoteAppToolLicenceTextLabel.Anchor = System.Windows.Forms.AnchorStyles.Top Me.RemoteAppToolLicenceTextLabel.Anchor = System.Windows.Forms.AnchorStyles.Top
Me.RemoteAppToolLicenceTextLabel.Location = New System.Drawing.Point(17, 99) Me.RemoteAppToolLicenceTextLabel.Location = New System.Drawing.Point(16, 122)
Me.RemoteAppToolLicenceTextLabel.Name = "RemoteAppToolLicenceTextLabel" Me.RemoteAppToolLicenceTextLabel.Name = "RemoteAppToolLicenceTextLabel"
Me.RemoteAppToolLicenceTextLabel.Size = New System.Drawing.Size(263, 30) Me.RemoteAppToolLicenceTextLabel.Size = New System.Drawing.Size(350, 30)
Me.RemoteAppToolLicenceTextLabel.TabIndex = 6 Me.RemoteAppToolLicenceTextLabel.TabIndex = 6
Me.RemoteAppToolLicenceTextLabel.Text = "Licensed under The MIT License" Me.RemoteAppToolLicenceTextLabel.Text = "Licensed under The MIT License"
Me.RemoteAppToolLicenceTextLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter Me.RemoteAppToolLicenceTextLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
' '
'RemoteAppAboutWindow 'RemoteAppAboutWindow
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 15.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 20.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.BackColor = System.Drawing.Color.White Me.BackColor = System.Drawing.Color.White
Me.ClientSize = New System.Drawing.Size(298, 296) Me.ClientSize = New System.Drawing.Size(378, 357)
Me.Controls.Add(Me.RemoteAppToolLicenceTextLabel) Me.Controls.Add(Me.RemoteAppToolLicenceTextLabel)
Me.Controls.Add(Me.IconLibLicenceTextLabel) Me.Controls.Add(Me.IconLibLicenceTextLabel)
Me.Controls.Add(Me.IconLibCreatedByLabel) Me.Controls.Add(Me.IconLibCreatedByLabel)

View File

@ -7,6 +7,7 @@ Public Class RemoteAppAboutWindow
Me.Text = "About " & My.Application.Info.Title Me.Text = "About " & My.Application.Info.Title
Me.TitleLabel.Text = My.Application.Info.Title Me.TitleLabel.Text = My.Application.Info.Title
Me.VersionLabel.Text = "Version " & My.Application.Info.Version.ToString Me.VersionLabel.Text = "Version " & My.Application.Info.Version.ToString
Me.CopyrightLabel.Text = My.Application.Info.CompanyName.ToString
End Sub End Sub
Private Sub SiteLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles SiteLinkLabel.LinkClicked Private Sub SiteLinkLabel_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles SiteLinkLabel.LinkClicked

View File

@ -69,6 +69,7 @@ Partial Class RemoteAppCreateClientConnection
Me.TabControl = New System.Windows.Forms.TabControl() Me.TabControl = New System.Windows.Forms.TabControl()
Me.HostTabPage = New System.Windows.Forms.TabPage() Me.HostTabPage = New System.Windows.Forms.TabPage()
Me.OptionsTabPage = New System.Windows.Forms.TabPage() Me.OptionsTabPage = New System.Windows.Forms.TabPage()
Me.RDPOptionsButton = New System.Windows.Forms.Button()
Me.GatewayTabPage = New System.Windows.Forms.TabPage() Me.GatewayTabPage = New System.Windows.Forms.TabPage()
Me.FileTypesTabPage = New System.Windows.Forms.TabPage() Me.FileTypesTabPage = New System.Windows.Forms.TabPage()
Me.MSIOptionsTabPage = New System.Windows.Forms.TabPage() Me.MSIOptionsTabPage = New System.Windows.Forms.TabPage()
@ -544,6 +545,7 @@ Partial Class RemoteAppCreateClientConnection
' '
'OptionsTabPage 'OptionsTabPage
' '
Me.OptionsTabPage.Controls.Add(Me.RDPOptionsButton)
Me.OptionsTabPage.Controls.Add(Me.MSIRadioButton) Me.OptionsTabPage.Controls.Add(Me.MSIRadioButton)
Me.OptionsTabPage.Controls.Add(Me.RDPRadioButton) Me.OptionsTabPage.Controls.Add(Me.RDPRadioButton)
Me.OptionsTabPage.Controls.Add(Me.EditAfterSave) Me.OptionsTabPage.Controls.Add(Me.EditAfterSave)
@ -556,6 +558,19 @@ Partial Class RemoteAppCreateClientConnection
Me.OptionsTabPage.Text = "Options" Me.OptionsTabPage.Text = "Options"
Me.OptionsTabPage.UseVisualStyleBackColor = True Me.OptionsTabPage.UseVisualStyleBackColor = True
' '
'RDPOptionsButton
'
Me.RDPOptionsButton.BackColor = System.Drawing.Color.WhiteSmoke
Me.RDPOptionsButton.ImageIndex = 6
Me.RDPOptionsButton.ImageList = Me.SmallerIcons
Me.RDPOptionsButton.Location = New System.Drawing.Point(12, 69)
Me.RDPOptionsButton.Name = "RDPOptionsButton"
Me.RDPOptionsButton.Size = New System.Drawing.Size(118, 29)
Me.RDPOptionsButton.TabIndex = 5
Me.RDPOptionsButton.Text = "RDP options..."
Me.RDPOptionsButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.RDPOptionsButton.UseVisualStyleBackColor = False
'
'GatewayTabPage 'GatewayTabPage
' '
Me.GatewayTabPage.Controls.Add(Me.AttemptDirectCheckBox) Me.GatewayTabPage.Controls.Add(Me.AttemptDirectCheckBox)
@ -719,4 +734,5 @@ Partial Class RemoteAppCreateClientConnection
Friend WithEvents MSIOptionsTabPage As TabPage Friend WithEvents MSIOptionsTabPage As TabPage
Friend WithEvents SigningTabPage As TabPage Friend WithEvents SigningTabPage As TabPage
Friend WithEvents RdpsignErrorLabel As Label Friend WithEvents RdpsignErrorLabel As Label
Friend WithEvents RDPOptionsButton As Button
End Class End Class

View File

@ -124,151 +124,151 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACY ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACO
IQAAAk1TRnQBSQFMAgEBBwEAAWABAgFgAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA IQAAAk1TRnQBSQFMAgEBBwEAAYABAgGAAQIBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIF4AAyABLwMjATMDIwEzAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAxkBIysA AwABIAMAAQEBAAEgBgABIF4AAyABLwMjATMDIwEzAyMBMwMjATMDIwEzAyMBMwMjATMDIwEzAxkBIysA
AQEDQgF0A1gBwQNYAe8DWAHvA1gBwQNCAXQDAAEBUAADKgFBAwYBCBgAAwYBCAMqAUEUAAMIAQsCXQFU AQEDQgF0A1gBwQNYAe8DWAHvA1gBwQNCAXQDAAEBUAADKgFBAwYBCBgAAwYBCAMqAUEUAAMIAQsCXQFU
AfABtgGEASwB/wG1AYMBKAH/AbYBggEnAf8BtgGCAScB/wG2AYIBJwH/AbYBggEnAf8BtQGDASgB/wG2 AfABtgGEASgB/wG1AYMBJAH/AbYBggEjAf8BtgGCASMB/wG2AYIBIwH/AbYBggEjAf8BtQGDASQB/wG2
AYQBLAH/AloBWAHAJwABAQNaAcADiwH/AbkCugH/A9wB/wPZAf8DtQH/AYYChwH/A1oBwAMAAQFIAAMq AYQBKAH/AloBWAHAJwABAQNaAcADiwH/AbkCugH/A9wB/wPZAf8DtQH/AYYChwH/A1oBwAMAAQFIAAMq
AUEBLgErAfIB/wJAAa0B/QMGAQgQAAMGAQgCKwGFAfwBEAEOAeoB/wMqAUEQAAMpAT8BtgGEASwh/wG2 AUEBKgEnAfIB/wJAAakB/QMGAQgQAAMGAQgCKwF9AfwBDAEKAeoB/wMqAUEQAAMpAT8BtgGEASgh/wG2
AYQBLAH/GAABuQK/Af8BuQK/Af8BsgK3Af8BiwGNAY4B/wGNAY4BjQH/AcUB4AHLAf8BzgHjAdIB/wHu AYQBKAH/GAABuQK/Af8BuQK/Af8BsgK3Af8BiwGNAY4B/wGNAY4BjQH/AcUB4AHLAf8BzgHjAdIB/wHu
Au8B/wHsAe0B7AH/AeoC6QH/A+cB/wOHAf8DQgF0RAADKgFBATcBNQH1Af8BQgFAAfoB/wE3ATQB9gH/ Au8B/wHsAe0B7AH/AeoC6QH/A+cB/wOHAf8DQgF0RAADKgFBATMBMQH1Af8BPgE8AfoB/wEzATAB9gH/
AisBiwH8AwYBCAgAAwYBCAIrAYYB/AEgAR4B8QH/ASsBKQH2Af8BEAEOAeoB/wMqAUEMAAMnATsBtQGD AisBfwH8AwYBCAgAAwYBCAIrAX0B/AEcARoB8QH/AScBJQH2Af8BDAEKAeoB/wMqAUEMAAMnATsBtQGD
ASgF/wEAAR8B8gH/AQABRQHzAf8BBAGaAfYB/wEIAaYB+AH/AQABVAH0Af8BAAEaAfIF/wG1AYMBKAH/ ASQF/wEAARsB8gH/AQABQQHzAf8BAAGaAfYB/wEEAaYB+AH/AQABUAH0Af8BAAEWAfIF/wG1AYMBJAH/
GAADRwGCA9gB/wHNAdQB1QH/AV0BXgFfAf8DwwH/AUsBuQFaAf8BAAGOAQIB/wHdAesB4AH/A/EB/wHX GAADRwGCA9gB/wHNAdQB1QH/AVkBWgFbAf8DwwH/AUcBuQFWAf8BAAGOAQAB/wHdAesB4AH/A/EB/wHX
AeUB2gH/Ad8B5wHhAf8CtwG4Af8DWAHBRAADHgErAToBNwH2Af8BRAFBAfoB/wFQAU8C/wE4ATUB9gH/ AeUB2gH/Ad8B5wHhAf8CtwG4Af8DWAHBRAADHgErATYBMwH2Af8BQAE9AfoB/wFMAUsC/wE0ATEB9gH/
AisBiwH8AwYBCAMGAQgCKwGIAfwBJgEkAfIB/wFCAUEC/wEpAScB9AH/AQ4BDAHpAf8DHgErDAADJAE2 AisBfwH8AwYBCAMGAQgCKwF+AfwBIgEgAfIB/wE+AT0C/wElASMB9AH/AQoBCAHpAf8DHgErDAADJAE2
AbYBgwEoBf8BCgExAfIB/wEUAVgB8gH/AQ0BkwH0Af8BEQGaAfQB/wEEAVYB8QH/AQABHQHwBf8BtgGD AbYBgwEkBf8BBgEtAfIB/wEQAVQB8gH/AQkBkwH0Af8BDQGaAfQB/wEAAVIB8QH/AQABGQHwBf8BtgGD
AScB/wMjATMDIwEzAxkBIxAAAyQBNgNHAYIDPwH/A+wB/wP7Af8BAQGYARcB/wE2AbABRwH/A/UB/wEA ASMB/wMjATMDIwEzAxkBIxAAAyQBNgNHAYIDOwH/A+wB/wP7Af8BAAGYARMB/wEyAbABQwH/A/UB/wEA
AZABBgH/AT4BsQFOAf8B3gHfAd4B/wNYAe9IAAMeASsBOgE4AfYB/wFFAUIB+gH/AVMBUAL/ATkBNwH2 AZABAgH/AToBsQFKAf8B3gHfAd4B/wNYAe9IAAMeASsBNgE0AfYB/wFBAT4B+gH/AU8BTAL/ATUBMwH2
Af8CKwGLAfwCQAGtAf0BLwEsAfQB/wFHAUYC/wEvAS0B9QH/ARUBEwHrAf8DHgErCAADGQQjATMDMQFP Af8CKwF/AfwCQAGpAf0BKwEoAfQB/wFDAUIC/wErASkB9QH/AREBDwHrAf8DHgErCAADGQQjATMDMQFP
AbYBgwEoA/8B/AH/AQABHgHwAf8BMAFeAfIB/wExAZMB9AH/ARYBgwHyAf8BAAE8AfAB/wEAARIB8AP/ AbYBgwEkA/8B/AH/AQABGgHwAf8BLAFaAfIB/wEtAZMB9AH/ARIBgwHyAf8BAAE4AfAB/wEAAQ4B8AP/
AfsB/wG1AYABJAH/AbUBgwErAf8BtgGEAS0B/wJaAVgBwANIAYYBvgLEAf8BvALBAf8BuQG9Ab4B/wG3 AfsB/wG1AYABIAH/AbUBgwEnAf8BtgGEASkB/wJaAVgBwANIAYYBvgLEAf8BvALBAf8BuQG9Ab4B/wG3
AboBuwH/AbQCuAH/A0AB/wPuAf8BUAG9AV4B/wEAAZQBDgH/AeUB8QHmAf8BAAGQAQUB/wEFAZoBGwH/ AboBuwH/AbQCuAH/AzwB/wPuAf8BTAG9AVoB/wEAAZQBCgH/AeUB8QHmAf8BAAGQAQEB/wEBAZoBFwH/
AekB7wHqAf8D4gH/A1gB70wAAx4BKwE7ATkB9gH/AUYBQwH6Af8BUwFRAv8BUgFPAv8BTwFNAv8BTQFL AekB7wHqAf8D4gH/A1gB70wAAx4BKwE3ATUB9gH/AUIBPwH6Af8BTwFNAv8BTgFLAv8BSwFJAv8BSQFH
Av8BNgE0AfcB/wEeARwB7gH/Ax4BKwwAAloBWAHAAbUBhQEuAf8BtQGEAS0B/wG1AYIBJQP/AfsB/wEA Av8BMgEwAfcB/wEaARgB7gH/Ax4BKwwAAloBWAHAAbUBhQEqAf8BtQGEASkB/wG1AYIBIQP/AfsB/wIA
AQMB7gH/AR8BQQHwAf8BPAGFAfMB/wFTAZUB9AH/AYMBmgH2Af8BgAGNAfkD/wH5Af8BtQFbAR8J/wG2 Ae4B/wEbAT0B8AH/ATgBhQHzAf8BTwGVAfQB/wGDAZoB9gH/AYABjQH5A/8B+QH/AbUBVwEbCf8BtgGE
AYQBLAH/AcoB0gHTAf8ByQHSAdMB/wHJAdAB0wH/AcgB0QHSAf8BxwHQAdEB/wHGAdAB0QH/AV0CYAH/ ASgB/wHKAdIB0wH/AckB0gHTAf8ByQHQAdMB/wHIAdEB0gH/AccB0AHRAf8BxgHQAdEB/wFZAlwB/wPG
A8YB/wHPAekB1AH/AeYB9AHpAf8B/QL+Af8BywHmAc8B/wEAAY0BAAH/AUIBtQFSAf8BwAHBAcAB/wNY Af8BzwHpAdQB/wHmAfQB6QH/Af0C/gH/AcsB5gHPAf8BAAGNAQAB/wE+AbUBTgH/AcABwQHAAf8DWAHB
AcFQAAMeASsBPAE6AfcB/wFYAVUC/wE4ATUC/wE2ATMC/wFRAU8C/wEnASUB8AH/Ax4BKxAAAbUBhAEt UAADHgErATgBNgH3Af8BVAFRAv8BNAExAv8BMgEvAv8BTQFLAv8BIwEhAfAB/wMeASsQAAG1AYQBKQX/
Bf8B9gHwAekB/wGyAV4BIgP/Af0B/wIAAewB/wEMAR8B7QH/ASgBPwHwAf8BOwFSAfIB/wFLAVoB9AH/ AfYB8AHpAf8BsgFaAR4D/wH9Af8CAAHsAf8BCAEbAe0B/wEkATsB8AH/ATcBTgHyAf8BRwFWAfQB/wFN
AVEBVAH2A/8B/AH/AbwBWwEfAf8BAAGuAYAF/wG2AYIBKgH/AcoB0gHUAf8BrAKvAf8BhgIAAf8BiwIA AVAB9gP/AfwB/wG8AVcBGwH/AQABrgGABf8BtgGCASYB/wHKAdIB1AH/AawCrwH/AYYCAAH/AYsCAAH/
Af8BhwIAAf8BiwIAAf8BhgILAf8DkAH/AfIB+QHzCf8B/gH/Af4B/wHLAecB0QH/AasB0QGyAf8DjwH/ AYcCAAH/AYsCAAH/AYYCBwH/A5AB/wHyAfkB8wn/Af4B/wH+Af8BywHnAdEB/wGrAdEBsgH/A48B/wNC
A0IBdFAAAwYBCAJAAbAB/QFcAVgC/wE9AToC/wE6ATcC/wFVAVMC/wJAAa4B/QMGAQgQAAG0AYIBKgX/ AXRQAAMGAQgCQAGsAf0BWAFUAv8BOQE2Av8BNgEzAv8BUQFPAv8CQAGqAf0DBgEIEAABtAGCASYF/wHn
AecBmwEUAf8BsQFeASUF/wIAAe0B/wIAAe4B/wEGAQ0B8AH/ARwBJAHyAf8BLwExAfUB/wE9ATwB9wX/ AZsBEAH/AbEBWgEhBf8CAAHtAf8CAAHuAf8BAgEJAfAB/wEYASAB8gH/ASsBLQH1Af8BOQE4AfcF/wHA
AcABXAEiAf8BAAGtAYEF/wG2AYIBKgH/AcwB0wHVAf8BqgGsAa0B/wGbAQoBAAH/AZwBDgECAf8BmwIA AVgBHgH/AQABrQGBBf8BtgGCASYB/wHMAdMB1QH/AaoBrAGtAf8BmwEGAQAB/wGcAQoBAAH/AZsCAAH/
Af8BqAIAAf8BsgIAAf8BnAFgAVsB/wOQAf8DxgH/A+4B/wPuAf8DxgH/A5AB/wNaAcADAAEBTAADBgEI AagCAAH/AbICAAH/AZwBXAFXAf8DkAH/A8YB/wPuAf8D7gH/A8YB/wOQAf8DWgHAAwABAUwAAwYBCAE2
AToBNwGRAfwBTwFMAfsB/wGAAV0C/wFdAVoC/wFbAVgC/wFYAVYC/wE9ATsB9wH/AisBiwH8AwYBCAwA ATMBhQH8AUsBSAH7Af8BgAFZAv8BWQFWAv8BVwFUAv8BVAFSAv8BOQE3AfcB/wIrAX8B/AMGAQgMAAGz
AbMBggErBf8B5gGeAR0B/wGvAYABKwP/AfYD/wHtA/8B6wP/AeoD/wHqA/8B6gP/AewD/wHzAf8BwgFc AYIBJwX/AeYBngEZAf8BrwGAAScD/wH2A/8B7QP/AesD/wHqA/8B6gP/AeoD/wHsA/8B8wH/AcIBWAEf
ASMB/wEAAasBXQX/AbYBggEqAf8BzAHTAdUB/wGoAqoB/wGlASIBGAH/AZ8BDQECAf8BowIAAf8BsgIA Af8BAAGrAVkF/wG2AYIBJgH/AcwB0wHVAf8BqAKqAf8BpQEeARQB/wGfAQkBAAH/AaMCAAH/AbICAAH/
Af8BwAIAAf8B3wFYAUYB/wG3AYoBggH/AYgBVAFQAf8BRgFAAT8B/wFFAT8BPQH/AV8CYgH/AY8CkAH/ AcACAAH/Ad8BVAFCAf8BtwGKAYIB/wGIAVABTAH/AUIBPAE7Af8BQQE7ATkB/wFbAl4B/wGPApAB/wMA
AwABAUwAAwYBCAFFAT8BlAH8AVYBUwH9Af8BhgGCAv8BVQFSAfwB/wFDAUEB+AH/AT8BPAH3Af8BTAFJ AQFMAAMGAQgBPgE7AYgB/AFSAU8B/QH/AYYBggL/AVEBTgH8Af8BPwE9AfgB/wE7ATgB9wH/AUgBRQH6
AfoB/wFaAVgC/wE/ATwB9wH/AisBiwH8AwYBCAgAAbMBggErBf8B8gGhARAB/wG9AYsBNAH/Aa8BgAEt Af8BVgFUAv8BOwE4AfcB/wIrAX8B/AMGAQgIAAGzAYIBJwX/AfIBoQEMAf8BvQGLATAB/wGvAYABKQH/
Af8BrwFeAScB/wGwAV0BJQH/Aa8BXAEjAf8BsQFcASEB/wG3AV4BJAH/Ab0BXgEkAf8BwQFdASQB/wGm Aa8BWgEjAf8BsAFZASEB/wGvAVgBHwH/AbEBWAEdAf8BtwFaASAB/wG9AVoBIAH/AcEBWQEgAf8BpgGf
AZ8BUQH/AVQB0wG9Bf8BtQGCASoB/wHOAdQB1QH/AaICpAH/AawBKQEgAf8BoQIAAf8BrQIAAf8BvgIA AU0B/wFQAdMBvQX/AbUBggEmAf8BzgHUAdUB/wGiAqQB/wGsASUBHAH/AaECAAH/Aa0CAAH/Ab4CAAH/
Af8BzwELAQAB/wHwAZoBiwH/AfcBtAGoAf8B+QGuAZ4B/wH+AbUBpwH/AfgBpQGSAf8BwgHOAc8B/wGq Ac8BBwEAAf8B8AGaAYsB/wH3AbQBqAH/AfkBrgGeAf8B/gG1AacB/wH4AaUBkgH/AcIBzgHPAf8BqgKs
AqwB/0wAAwYBCAFEAUIBswH9AVwBWQH+Af8BigGHAv8BWwFYAf0B/wFLAUgB+wH/Ax4BKwMeASsBQAE9 Af9MAAMGAQgCQAGvAf0BWAFVAf4B/wGKAYcC/wFXAVQB/QH/AUcBRAH7Af8DHgErAx4BKwE8ATkB+AH/
AfgB/wFNAUsB+gH/AVwBWQL/AUABPgH3Af8CKwGMAfwDBAEFBAABswGCASsF/wHxAZcBAAH/AfgBsgEx AUkBRwH6Af8BWAFVAv8BPAE6AfcB/wIrAYAB/AMEAQUEAAGzAYIBJwX/AfEBlwEAAf8B+AGyAS0B/wH9
Af8B/QHBAVEB/wH+AcoBggH/Af4BzgGKAf8B/QHLAYUF/wG8AV4BJwH/AQwBwAGgAf8BLAHIAaoB/wFC AcEBTQH/Af4BygGCAf8B/gHOAYoB/wH9AcsBhQX/AbwBWgEjAf8BCAHAAaAB/wEoAcgBqgH/AT4ByQGv
AckBrwH/AUoBygGwBf8BtQGBASkB/wHNAdQB1gH/AaECowH/AagBEAEGAf8BqwIAAf8BwgIAAf8B1QIA Af8BRgHKAbAF/wG1AYEBJQH/Ac0B1AHWAf8BoQKjAf8BqAEMAQIB/wGrAgAB/wHCAgAB/wHVAgAB/wHq
Af8B6gElAQgB/wH+AcEBtAL/AcoBvQL/AckBuAL/Ac8BwAH/AfwBvwGrAf8BwwHOAc8B/wGsAa4BrwH/ ASEBBAH/Af4BwQG0Av8BygG9Av8ByQG4Av8BzwHAAf8B/AG/AasB/wHDAc4BzwH/AawBrgGvAf9MAAMW
TAADFgEfAVkBVgL/AYEBXQL/AYEBXQH+Af8BUwFQAf0B/wMeASsIAAMeASsBQQE+AfgB/wFOAUwB+wH/ AR8BVQFSAv8BgQFZAv8BgQFZAf4B/wFPAUwB/QH/Ax4BKwgAAx4BKwE9AToB+AH/AUoBSAH7Af8BWQFX
AV0BWwL/AUEBPgH4Af8DQAFvAwEBAgGzAYMBKwX/AewBigEAAf8B8QGhARUB/wH1AbEBNAH/AfYBuQFF Av8BPQE6AfgB/wNAAW8DAQECAbMBgwEnBf8B7AGKAQAB/wHxAaEBEQH/AfUBsQEwAf8B9gG5AUEB/wH3
Af8B9wG/AVEB/wH2Ab8BUQX/AboBWwEjAf8BAAGvAYsB/wETAbYBkwH/ASgBugGdAf8BOAHBAaUF/wG1 Ab8BTQH/AfYBvwFNBf8BugFXAR8B/wEAAa8BiwH/AQ8BtgGTAf8BJAG6AZ0B/wE0AcEBpQX/AbUBggEm
AYIBKgH/Ac4B1AHWAf8BoAKhAf8BqAIAAf8BuQIAAf8B0AEGAQAB/wHiAgAB/wH4AU8BOgL/AeYB4AL/ Af8BzgHUAdYB/wGgAqEB/wGoAgAB/wG5AgAB/wHQAQIBAAH/AeICAAH/AfgBSwE2Av8B5gHgAv8B4AHY
AeAB2AL/AeUB3AL/AesB4gH/Af0B1QHIAf8BxAHOAdAB/wGvArIB/1AAAxYBHwFZAVYC/wFYAVUB/gH/ Av8B5QHcAv8B6wHiAf8B/QHVAcgB/wHEAc4B0AH/Aa8CsgH/UAADFgEfAVUBUgL/AVQBUQH+Af8DHgEr
Ax4BKxAAAx4BKwFDAUAB+AH/AUkBRwH5Af8BUwFSAVMBqAMdASkEAAG0AYMBLAX/AekBXAEAAf8B7QGP EAADHgErAT8BPAH4Af8BRQFDAfkB/wFTAVIBUwGoAx0BKQQAAbQBgwEoBf8B6QFYAQAB/wHtAY8BAAH/
AQAB/wHvAZ4BCwH/AfEBqAEhAf8B8wGvATAB/wH0AbUBPQX/AbQBWwEjA/8B+wP/AfYD/wHzA/8B8gP/ Ae8BngEHAf8B8QGoAR0B/wHzAa8BLAH/AfQBtQE5Bf8BtAFXAR8D/wH7A/8B9gP/AfMD/wHyA/8B+AH/
AfgB/wG1AYQBLgH/Ac4B1AHWAf8BoAKhAf8BrQIAAf8BxAIAAf8B2gIAAf8B8gIAAv8BiAFOAv8B1AG+ AbUBhAEqAf8BzgHUAdYB/wGgAqEB/wGtAgAB/wHEAgAB/wHaAgAB/wHyAgAC/wGIAUoC/wHUAb4C/wHG
Av8BxgGqAv8BxAGmAv8BwAGfAf8B+wGvAY0B/wHFAc4B0AH/AbEBtAG1Af9UAAMWAR8DHgErGAADHgEr AaoC/wHEAaYC/wHAAZ8B/wH7Aa8BjQH/AcUBzgHQAf8BsQG0AbUB/1QAAxYBHwMeASsYAAMeASsDQAFv
A0ABbwMpAT4IAAG1AYUBLwP/AfwD/wH9B/8B/gP/AfwD/wH6A/8B9wP/AfkB/wG0AYIBKgH/AbYBhAEt AykBPggAAbUBhQErA/8B/AP/Af0H/wH+A/8B/AP/AfoD/wH3A/8B+QH/AbQBggEmAf8BtgGEASkB/wG2
Af8BtgGDASsB/wG1AYIBKwH/AbUBgwErAf8BtQGEAS4B/wNVAbABzgHUAdYB/wGgAqEB/wGgAqEB/wGg AYMBJwH/AbUBggEnAf8BtQGDAScB/wG1AYQBKgH/A1UBsAHOAdQB1gH/AaACoQH/AaACoQH/AaACoQH/
AqEB/wGhAaIBowH/AaMCpQH/AaUCpwH/AawCrwH/Aa8CsQH/AbEBtAG1Af8BtAK4Af8BtgG7AbwB/wHF AaEBogGjAf8BowKlAf8BpQKnAf8BrAKvAf8BrwKxAf8BsQG0AbUB/wG0ArgB/wG2AbsBvAH/AcUBzwHR
Ac8B0QH/AbMBtwG4Af94AAMHAQoMAAJiAVgB7wG1AYUBLwH/AbMBgwEtAf8BswGDAS0B/wGzAYMBLQH/ Af8BswG3AbgB/3gAAwcBCgwAAmIBWAHvAbUBhQErAf8BswGDASkB/wGzAYMBKQH/AbMBgwEpAf8BswGD
AbMBgwEsAf8BswGDASwB/wGzAYMBLAH/AbUBhAEuAf8CZAFcAecYAANDAXgBzgHUAdYB/wHOAdQB1gH/ ASgB/wGzAYMBKAH/AbMBgwEoAf8BtQGEASoB/wJkAVwB5xgAA0MBeAHOAdQB1gH/Ac4B1AHWAf8BzgHU
Ac4B1AHWAf8BzQHUAdYB/wHNAdMB1QH/Ac0B0wHVAf8BygHSAdQB/wHKAdIB0wH/AckB0QHTAf8ByAHR AdYB/wHNAdQB1gH/Ac0B0wHVAf8BzQHTAdUB/wHKAdIB1AH/AcoB0gHTAf8ByQHRAdMB/wHIAdEB0gH/
AdIB/wHHAdAB0QH/AcYBzwHRAf8DTgGVTAADHwEtAzABSwMvAUoDLwFKAy8BSQMyAVEDNgFZAzYBWQM2 AccB0AHRAf8BxgHPAdEB/wNOAZVMAAMfAS0DMAFLAy8BSgMvAUoDLwFJAzIBUQM2AVkDNgFZAzYBWQM2
AVkDNgFZAzYBWQM1AVcDMQFOAyYBOQsAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/GAADFAEc AVkDNgFZAzUBVwMxAU4DJgE5CwAB/wMAAf8DAAH/CwAB/wMAAf8DAAH/AwAB/wMAAf8YAAMUARwDIAEu
AyABLgMgAS4DIAEuARABEwEfAf8DWQHHA0IBdAM3AVsDNQFYAzMBUgMvAUoDKwFCAyABLgMUARxIAANS AyABLgMgAS4BDAEPARsB/wNZAccDQgF0AzcBWwM1AVgDMwFSAy8BSgMrAUIDIAEuAxQBHEgAA1IBpAT/
AaQE/wH1AfQB8wH/AfYB9QH0Bf8BMgExATMB/wEJAQgBCwX/AfsC+gH/AvsB+gH/AfsC+gX/ApYBlwH/ AfUB9AHzAf8B9gH1AfQF/wEuAS0BLwH/AQUBBAEHBf8B+wL6Af8C+wH6Af8B+wL6Bf8ClgGXAf8DWgHY
A1oB2AgAA4YB/wPAAf8DAAH/AwAB/wOGCf8DwAH/AQAD/wEAAf8BAAH/AwAB/xgAAeIBuAGZAf8B4gG5 CAADhgH/A8AB/wMAAf8DAAH/A4YJ/wPAAf8BAAP/AQAB/wEAAf8DAAH/GAAB4gG4AZkB/wHiAbkBmAH/
AZgB/wHiAbgBmQH/AT0BTAGdAf8BNQFFAZIB/wExAUABkgH/ASABQwGeAf8BygGsAZgB/wHiAbgBmAH/ AeIBuAGZAf8BOQFIAZ0B/wExAUEBkgH/AS0BPAGSAf8BHAE/AZ4B/wHKAawBmAH/AeIBuAGYAf8B4gG5
AeIBuQGZAf8B4gG5AZgB/wHiAbgBmAH/GAADDAEQA0QBewJdAVoBygJZAUIB9QFiAV4BSAH2AlwBWQHM AZkB/wHiAbkBmAH/AeIBuAGYAf8YAAMMARADRAF7Al0BWgHKAlkBQgH1AWIBXgFIAfYCXAFZAcwDRQF9
A0UBfQMNAREUAANQAZ4B+wH6AfkB/wHuAu0B/wHwAe8B7gH/Af4B/QH8Af8BMQEwATIB/wQAAvAB7wH/ Aw0BERQAA1ABngH7AfoB+QH/Ae4C7QH/AfAB7wHuAf8B/gH9AfwB/wEtASwBLgH/BAAC8AHvAf8C6AHn
AugB5wH/AugB5wH/AugB5wH/AfUB9AHzAf8BjwGOAY8B/wNaAeQIAAOGAf8DwAH/AwAB/wOGAf8DwAH/ Af8C6AHnAf8C6AHnAf8B9QH0AfMB/wGPAY4BjwH/A1oB5AgAA4YB/wPAAf8DAAH/A4YB/wPAAf8DwAX/
A8AF/wPAAf8BAAH/AQAB/wPAAf8DwAH/AwAB/xQAAeMBuwGbAf8B+AHgAb4B/wH4AeABvgH/AZsBnwGu A8AB/wEAAf8BAAH/A8AB/wPAAf8DAAH/FAAB4wG7AZsB/wH4AeABvgH/AfgB4AG+Af8BmwGfAa4B/wFF
Af8BSQFbAakB/wE3AVMBoAH/AQABSgGwAf8BAAFTAb8B/wH4AeEBvgH/AfgB4AG/Af8B+AHhAb4B/wHj AVcBqQH/ATMBTwGgAf8BAAFGAbAB/wEAAU8BvwH/AfgB4QG+Af8B+AHgAb8B/wH4AeEBvgH/AeMBugGa
AboBmgH/FAADNAFUAl0BTgHwAYABRAEAAf8BgAFEAQAB/wGAAUQBAAH/AYABRAEAAf8BgAFEAQAB/wJf Af8UAAM0AVQCXQFOAfABgAFAAQAB/wGAAUABAAH/AYABQAEAAf8BgAFAAQAB/wGAAUABAAH/Al8BTAHz
AUwB8wJYAVYBwQMhATAQAANQAZ4B+wL6Af8B7wHuAe0B/wLwAe8B/wH+Af0B/AH/AYYBhAGFAf8BFQEU AlgBVgHBAyEBMBAAA1ABngH7AvoB/wHvAe4B7QH/AvAB7wH/Af4B/QH8Af8BhgGEAYUB/wERARABEQH/
ARUB/wL1AfQB/wLtAewB/wLtAewB/wHuAe0B7AH/AvoB+QH/AZQBkwGUAf8DWwHhCAADhgH/A8AB/wMA AvUB9AH/Au0B7AH/Au0B7AH/Ae4B7QHsAf8C+gH5Af8BlAGTAZQB/wNbAeEIAAOGAf8DwAH/AwAB/wOG
Af8DhgH/A8AB/wPAAf8DwAH/AwAB/wEAAf8BAAP/AQAD/wEAAf8DAAH/FAAB5AG9AZwB/wH4AeEBvwH/ Af8DwAH/A8AB/wPAAf8DAAH/AQAB/wEAA/8BAAP/AQAB/wMAAf8UAAHkAb0BnAH/AfgB4QG/Af8B8wHW
AfMB1gGyAf8BwgG4Aa4B/wE2AVYBrAH/AQgBwAH4Af8BAAGXAdcB/wEAAVUB1AH/AQABVQHBAf8B8wHW AbIB/wHCAbgBrgH/ATIBUgGsAf8BBAHAAfgB/wEAAZcB1wH/AQABUQHUAf8BAAFRAcEB/wHzAdYBsgH/
AbIB/wH4AeEBvwH/AeQBvQGdAf8QAAM0AVQBhAFHAQAB/wGHAUoBAAH/AYcBSgEAAf8BhwFKAQAB/wGH AfgB4QG/Af8B5AG9AZ0B/xAAAzQBVAGEAUMBAAH/AYcBRgEAAf8BhwFGAQAB/wGHAUYBAAH/AYcBRgEA
AUoBAAH/AX8BawESAf4CXQFOAfACWgFXAcUDSwGOAjUBNAFVAwoBDQwAA1ABngH9AfwB+wH/AvAB7wH/ Af8BfwFrARIB/gJdAU4B8AJaAVcBxQNLAY4CNQE0AVUDCgENDAADUAGeAf0B/AH7Af8C8AHvAf8B8gLx
AfIC8QH/Af4C/QH/AZIBkAGRAf8BBwEFAQYB/wGsAasBqgH/AawBqwGqAf8BrAGrAaoB/wGqAqkB/wGt Af8B/gL9Af8BkgGQAZEB/wEDAQEBAgH/AawBqwGqAf8BrAGrAaoB/wGsAasBqgH/AaoCqQH/Aa0BrAGr
AawBqwH/AR8BHQEeAf8DWwHhCAADhgH/A8AB/wMAAf8DhgH/A8AB/wPAA/8BAAH/AwAB/wMAAf8DwAH/ Af8BGwEZARoB/wNbAeEIAAOGAf8DwAH/AwAB/wOGAf8DwAH/A8AD/wEAAf8DAAH/AwAB/wPAAf8DwAH/
A8AB/wMAAf8UAAHmAcABnwH/AfgB4gHBAf8B2QG+AZ0B/wHZAb4BngH/AZYBpwGrAf8BAAFRAcQB/wED AwAB/xQAAeYBwAGfAf8B+AHiAcEB/wHZAb4BnQH/AdkBvgGeAf8BlgGnAasB/wEAAU0BxAH/AQAB0wL/
AdMC/wEAAbMB7gH/AQABVQHUAf8BAAFXAcIB/wH4AeEBwAH/AeYBwAGfAf8MAAMNARICXQFOAfABkAFR AQABswHuAf8BAAFRAdQB/wEAAVMBwgH/AfgB4QHAAf8B5gHAAZ8B/wwAAw0BEgJdAU4B8AGQAU0BAAH/
AQAB/wGQAVEBAAH/AZABUQEAAf8BmQFYAQAB/wGWAVYBAAH/AmABWQHrAlkBVgG+A0gBhgIxATABTQMU AZABTQEAAf8BkAFNAQAB/wGZAVQBAAH/AZYBUgEAAf8CYAFZAesCWQFWAb4DSAGGAjEBMAFNAxQBHAMB
ARwDAQECDAADUAGeAf4C/QH/AfIB8QHwAf8C8wHyAv8C/gH/AZ0CnAH/AwAB/wELAQkBCAH/AQ0BCgEJ AQIMAANQAZ4B/gL9Af8B8gHxAfAB/wLzAfIC/wL+Af8BnQKcAf8DAAH/AQcBBQEEAf8BCQEGAQUB/wEJ
Af8BDQIKAf8BCgIIAf8BAgIAAf8DAAH/A1sB4QgAA4YF/wMAAf8DhgP/AQAB/wPAA/8BAAH/AQAH/wPA AgYB/wEGAgQB/wMAAf8DAAH/A1sB4QgAA4YF/wMAAf8DhgP/AQAB/wPAA/8BAAH/AQAH/wPAAf8DwAH/
Af8DwAH/AwAB/wMAAf8DAAH/DAAB5wHDAaIB/wH4AeMBwgH/AfYB3QG6Af8B+AHjAcMB/wH4AeMBwgH/ AwAB/wMAAf8DAAH/DAAB5wHDAaIB/wH4AeMBwgH/AfYB3QG6Af8B+AHjAcMB/wH4AeMBwgH/AbYBxQHD
AbYBxQHDAf8BAAFRAcQB/wEDAdMC/wEEAcYB9gH/AQABVQHUAf8BAAFbAcoB/wHoAcMBogH/AwABAQgA Af8BAAFNAcQB/wEAAdMC/wEAAcYB9gH/AQABUQHUAf8BAAFXAcoB/wHoAcMBogH/AwABAQgAA0UBfQGZ
A0UBfQGZAVgBAAH/AZkBWQEAAf8BmgFZAQAB/wJkAVMB8QM7AWMDDQERAwoBDQMkATUDKwFCAxABFgMA AVQBAAH/AZkBVQEAAf8BmgFVAQAB/wJkAVMB8QM7AWMDDQERAwoBDQMkATUDKwFCAxABFgMAAQEQAANQ
AQEQAANQAZ4C/wH+Af8B8wLyAf8C9AHzA/8B/gH/AaMCogH/AQkBBgEFAf8BMQEvAS0B/wHPAc4BzQH/ AZ4C/wH+Af8B8wLyAf8C9AHzA/8B/gH/AaMCogH/AQUBAgEBAf8BLQErASkB/wHPAc4BzQH/AccBxQHE
AccBxQHEAf8BqQGnAaYB/wGdAZsBmgH/AYsBiQGKAf8DWwHhCAADhgX/AwAB/wPAAf8DhgP/AQAD/wEA Af8BqQGnAaYB/wGdAZsBmgH/AYsBiQGKAf8DWwHhCAADhgX/AwAB/wPAAf8DhgP/AQAD/wEAAf8BAAv/
Af8BAAv/AwAB/wPAAf8DwAH/A8AB/wMAAf8IAAHqAcYBpAH/AfgB5AHEAf8B3AHCAaQB/wHcAcQBpgH/ AwAB/wPAAf8DwAH/A8AB/wMAAf8IAAHqAcYBpAH/AfgB5AHEAf8B3AHCAaQB/wHcAcQBpgH/AdwBxAGm
AdwBxAGmAf8B3AHFAaYB/wGhAa4BrwH/AQABUQHEAf8BmAHsAv8BBAHGAfYB/wEAAVUB1AH/Al0BVAH/ Af8B3AHFAaYB/wGhAa4BrwH/AQABTQHEAf8BmAHsAv8BAAHGAfYB/wEAAVEB1AH/AlkBUAH/AygBPAgA
AygBPAgAAlwBWgHNAaMBggEAAf8BowGCAQAB/wGlAYMBAAH/AzsBYxAAAwQBBRgAA1ABngT/AfQC8wH/ AlwBWgHNAaMBggEAAf8BowGCAQAB/wGlAYMBAAH/AzsBYxAAAwQBBRgAA1ABngT/AfQC8wH/A/UF/wGo
A/UF/wGoAaYBpQH/AQECAAH/ASMCIgH/AeYC5QH/AfEC8AH/AacBpgGlAf8BKwEoAScB/wGaApgB/wNc AaYBpQH/AwAB/wEfAh4B/wHmAuUB/wHxAvAB/wGnAaYBpQH/AScBJAEjAf8BmgKYAf8DXAHnCAADhgX/
AecIAAOGBf8DAAH/A8AB/wPAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wOGAf8DhgH/A4YB/wPAAf8DAAH/ AwAB/wPAAf8DwAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DhgH/A4YB/wOGAf8DwAH/AwAB/wgAAewBygGo
CAAB7AHKAagB/wH4AeUBxgH/AfkB5AHGAf8B+QHlAcUB/wH5AeQBxgH/AfgB5AHGAf8B9wHjAcUB/wG8 Af8B+AHlAcYB/wH5AeQBxgH/AfkB5QHFAf8B+QHkAcYB/wH4AeQBxgH/AfcB4wHFAf8BvAHIAcYB/wEA
AcgBxgH/AQABUQHEAf8BlgHqAf4B/wK3AawB/wFNAU4BQAH/Al0BVAH/CAACWQFCAfUBrgGLAQAB/wGu AU0BxAH/AZYB6gH+Af8CtwGsAf8BSQFKATwB/wJZAVAB/wgAAlkBQgH1Aa4BiwEAAf8BrgGLAQAB/wGf
AYsBAAH/AZ8BXQEAAf8DDQERLAADUAGeBP8C9QH0Af8C9wH2Bf8BrAKqAf8BBgEEAQMB/wEkASIBIwH/ AVkBAAH/Aw0BESwAA1ABngT/AvUB9AH/AvcB9gX/AawCqgH/AQICAAH/ASABHgEfAf8BzwHNAcwB/wHU
Ac8BzQHMAf8B1AHSAdEB/wG0ArIB/wGqAacBpgH/A2oB+QNXAb0IAAOGAf8DhgH/AwAB/wPAAf8DwAH/ AdIB0QH/AbQCsgH/AaoBpwGmAf8DagH5A1cBvQgAA4YB/wOGAf8DAAH/A8AB/wPAAf8DhgH/A4YB/wOG
A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DwAH/AwAB/wgAAe4BzQGrAf8B+AHmAccB/wHf Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wPAAf8DAAH/CAAB7gHNAasB/wH4AeYBxwH/Ad8ByAGqAf8B3gHI
AcgBqgH/Ad4ByAGqAf8B3wHIAasB/wHfAccBqwH/AdsBwwGmAf8B2gHCAaQB/wGrAbABqwH/AY4BjwGE AaoB/wHfAcgBqwH/Ad8BxwGrAf8B2wHDAaYB/wHaAcIBpAH/AasBsAGrAf8BjgGPAYQB/wHgAeIB0wH/
Af8B4AHiAdMB/wKJAV4B/wEAAUQB3gH/AVUCXAHqBAACWQFCAfUBuQGUAQAB/wG5AZQBAAH/AacBhAEA AokBWgH/AQABQAHeAf8BVQJcAeoEAAJZAUIB9QG5AZQBAAH/AbkBlAEAAf8BpwGEAQAB/wMNAREIAANM
Af8DDQERCAADTAGSAakBhgEAAf8BowGCAQAB/wGjAYIBAAH/AaMBggEAAf8BowGCAQAB/wJfAUwB8wgA AZIBqQGGAQAB/wGjAYIBAAH/AaMBggEAAf8BowGCAQAB/wGjAYIBAAH/Al8BTAHzCAADUAGeBP8B9wL2
A1ABngT/AfcC9gH/A/gB/wP6Af8D8AH/AeoC6QH/A/AB/wP3Af8D9gH/AvoB+QH/A1gBuQMXASADBwEJ Af8D+AH/A/oB/wPwAf8B6gLpAf8D8AH/A/cB/wP2Af8C+gH5Af8DWAG5AxcBIAMHAQkEAAOGCf8DhgH/
BAADhgn/A4YB/wPAAf8DwAH/A4YB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DhgH/AwAB/wgA A8AB/wPAAf8DhgH/A8AB/wPAAf8DwAH/A8AB/wPAAf8DwAH/A8AB/wOGAf8DAAH/CAAB8AHQAa0B/wH5
AfAB0AGtAf8B+QHmAckB/wH4AeYByQH/AfkB5gHJAf8B+QHmAckB/wH3AeUByQH/AfAB2QG9Af8B6QHP AeYByQH/AfgB5gHJAf8B+QHmAckB/wH5AeYByQH/AfcB5QHJAf8B8AHZAb0B/wHpAc8BswH/AegBzgGy
AbMB/wHoAc4BsgH/AcwBuQGvAf8CiQFeAf8BMwGWAeoB/wEhAYUB4AH/AVoCXQHTBAACXAFaAc0BwwGc Af8BzAG5Aa8B/wKJAVoB/wEvAZYB6gH/AR0BhQHgAf8BWgJdAdMEAAJcAVoBzQHDAZwBAAH/AcMBnAEA
AQAB/wHDAZwBAAH/Ab8BmAEAAf8DOwFjCAADDAEQAlsBWALLAaIBAgH/AcMBnAEAAf8BwwGcAQAB/wHD Af8BvwGYAQAB/wM7AWMIAAMMARACWwFYAssBogEAAf8BwwGcAQAB/wHDAZwBAAH/AcMBnAEAAf8BqQGG
AZwBAAH/AakBhgEAAf8IAANQAZ4E/wL4AfcB/wP5Af8D+gH/Av4B/RX/A1YBqxAAA4YB/wOGAf8DhgH/ AQAB/wgAA1ABngT/AvgB9wH/A/kB/wP6Af8C/gH9Ff8DVgGrEAADhgH/A4YB/wOGAf8DhgH/A8AB/wOG
A4YB/wPAAf8DhgH/AcwCLAL/AcwBLAH/AcwBmQEAAf8BzAGZAQAC/wEsAQAB/wHMASwBAAX/A4YB/wMA Af8BzAIoAv8BzAEoAf8BzAGZAQAB/wHMAZkBAAL/ASgBAAH/AcwBKAEABf8DhgH/AwAB/wgAAfEB0wGx
Af8IAAHxAdMBsQH/AfkB5wHLAf8B4gHMAbAB/wHiAcsBrwH/AeEBzAGvAf8B4QHKAa8B/wHXAb4BoQH/ Af8B+QHnAcsB/wHiAcwBsAH/AeIBywGvAf8B4QHMAa8B/wHhAcoBrwH/AdcBvgGhAf8B1QG6AZwB/wHU
AdUBugGcAf8B1AG5AZ0B/wHUAbkBnQH/AbYBrwG0Af8BUwGSAcQB/wNIAYYIAAJGAUUBfgHSAagBAwH/ AbkBnQH/AdQBuQGdAf8BtgGvAbQB/wFPAZIBxAH/A0gBhggAAkYBRQF+AdIBqAEAAf8BzQGkAQAB/wHN
Ac0BpAEDAf8BzQGkAQMB/wJkAVMB8QM7AWMDDQERAw0BEQNBAXIBvwGYAQAB/wHNAaQBAwH/Ac0BpAED AaQBAAH/AmQBUwHxAzsBYwMNAREDDQERA0EBcgG/AZgBAAH/Ac0BpAEAAf8BzQGkAQAB/wHNAaQBAAH/
Af8BzQGkAQMB/wGwAYwBAAH/CAADUAGeBP8C+QH4Af8D+gH/A/wB/wP9Af8D/gX/AfwC/QH/AfQC9QH/ AbABjAEAAf8IAANQAZ4E/wL5AfgB/wP6Af8D/AH/A/0B/wP+Bf8B/AL9Af8B9AL1Af8D+gH/A1YBsxgA
A/oB/wNWAbMYAAOGCf8DhgH/AcwCLAP/ASwC/wHMASwB/wHMAZkBAAH/AcwBmQEAAv8BLAEABf8DhgH/ A4YJ/wOGAf8BzAIoA/8BKAL/AcwBKAH/AcwBmQEAAf8BzAGZAQAC/wEoAQAF/wOGAf8DAAH/CAAB8wHX
AwAB/wgAAfMB1wG0Af8B+QHnAcwB/wH4AecBzAH/AfkB6AHMAf8B+QHoAcwB/wH3AeUBygH/AecBzwG1 AbQB/wH5AecBzAH/AfgB5wHMAf8B+QHoAcwB/wH5AegBzAH/AfcB5QHKAf8B5wHPAbUB/wHyAd4BxgH/
Af8B8gHeAcYB/wHzAeAByAH/AfcB6AHTAf8DWgHFAe8B0AGuAf8DAQECAwABAQQAAw8BFAJdAU4B8AHY AfMB4AHIAf8B9wHoAdMB/wNaAcUB7wHQAa4B/wMBAQIDAAEBBAADDwEUAl0BTgHwAdgBrQEBAf8B1wGs
Aa0BBQH/AdcBrAEFAf8B1wGsAQUB/wHRAacBAwH/Ab0BlwEAAf8BvQGXAQAB/wHRAacBAwH/AdcBrAEF AQEB/wHXAawBAQH/AdEBpwEAAf8BvQGXAQAB/wG9AZcBAAH/AdEBpwEAAf8B1wGsAQEB/wHXAawBAQH/
Af8B1wGsAQUB/wHXAawBBQH/AdcBrAEFAf8BtgGRAQAB/wgAA1ABngT/A/oB/wP8Af8D/QH/A/4F/wH+ AdcBrAEBAf8B1wGsAQEB/wG2AZEBAAH/CAADUAGeBP8D+gH/A/wB/wP9Af8D/gX/Af4B/wH+Af8D6gH/
Af8B/gH/A+oB/wLXAdgB/wHdAt4B/wM7AWQcAAOGAf8DhgH/A4YB/wHMAiwD/wEsA/8BLAL/AcwBLAH/ AtcB2AH/Ad0C3gH/AzsBZBwAA4YB/wOGAf8DhgH/AcwCKAP/ASgD/wEoAv8BzAEoAf8BzAGZAQAB/wHM
AcwBmQEAAf8BzAGZAQAF/wOGAf8DAAH/CAAB9AHZAbUB/wH5AegBzQH/AeQBzwG0Af8B5AHPAbQB/wHk AZkBAAX/A4YB/wMAAf8IAAH0AdkBtQH/AfkB6AHNAf8B5AHPAbQB/wHkAc8BtAH/AeQBzwG0Af8B4wHO
Ac8BtAH/AeMBzgGzAf8B3QHGAakB/wH5AegBzgH/AfkB6AHOAf8DXAHMAfEB0wGxAf8DJgE4EAACNQE0 AbMB/wHdAcYBqQH/AfkB6AHOAf8B+QHoAc4B/wNcAcwB8QHTAbEB/wMmATgQAAI1ATQBVQHbAbEBAQH/
AVUB2wGxAQUB/wHfAbMBBwH/Ad4BswEHAf8B3gGzAQcB/wHeAbMBBwH/Ad4BswEHAf8B3gGzAQcB/wHe Ad8BswEDAf8B3gGzAQMB/wHeAbMBAwH/Ad4BswEDAf8B3gGzAQMB/wHeAbMBAwH/Ad4BswEDAf8B3wGz
AbMBBwH/Ad8BswEHAf8B3AGyAQUB/wHmAboBCQH/AbsBlQEAAf8IAANQAZ4E/wP8Af8D/Qn/A/0B/wL6 AQMB/wHcAbIBAQH/AeYBugEFAf8BuwGVAQAB/wgAA1ABngT/A/wB/wP9Cf8D/QH/AvoB+wH/AesC7AH/
AfsB/wHrAuwB/wL6AfsB/wNCAXMoAAOGAf8BzAIsAv8BzAEsA/8BLAP/ASwC/wHMASwB/wHMAZkBAAX/ AvoB+wH/A0IBcygAA4YB/wHMAigC/wHMASgD/wEoA/8BKAL/AcwBKAH/AcwBmQEABf8DhgH/AwAB/wgA
A4YB/wMAAf8IAAH2AdsBuAH/AfkB6QHPAf8B+QHpAc4B/wH5AegBzgH/AfgB6AHOAf8B9gHlAcwB/wHu AfYB2wG4Af8B+QHpAc8B/wH5AekBzgH/AfkB6AHOAf8B+AHoAc4B/wH2AeUBzAH/Ae4B2gG/Af8B+QHo
AdoBvwH/AfkB6AHOAf8DYAHeAfQB2QG1Af8DJgE4GAACNQE0AVUCXQFOAfAB7QHCAQsB/wHmAbkBCQH/ Ac4B/wNgAd4B9AHZAbUB/wMmATgYAAI1ATQBVQJdAU4B8AHtAcIBBwH/AeYBuQEFAf8B5gG4AQUB/wHm
AeYBuAEJAf8B5gG4AQkB/wHmAbkBCQH/Ae0BwgELAf8CZAFTAfECOgE5AWACWwFYAcsBxwGgAQAB/wgA AbgBBQH/AeYBuQEFAf8B7QHCAQcB/wJkAVMB8QI6ATkBYAJbAVgBywHHAaABAAH/CAADVAGmHP8B6wLs
A1QBphz/AesC7AH/A0IBcywAA4YB/wHMAiwB/wHMASwBAAH/AcwBLAEAAf8BzAEsAQAB/wHMASwBAAH/ Af8DQgFzLAADhgH/AcwCKAH/AcwBKAEAAf8BzAEoAQAB/wHMASgBAAH/AcwBKAEAAf8BzAEoAQAF/wOG
AcwBLAEABf8DhgH/AwAB/wgAAfcB3QG6Af8B+QHpAc8B/wH5AekBzwH/AfkB6QHPAf8B+QHpAc8B/wH3 Af8DAAH/CAAB9wHdAboB/wH5AekBzwH/AfkB6QHPAf8B+QHpAc8B/wH5AekBzwH/AfcB5gHNAf8B7QHY
AeYBzQH/Ae0B2AG9Af8B+QHoAc4B/wH3Ad0BuAH/AyYBOCAAAwwBEANFAX0CXAFZAcwBcwFuAT4B+AF6 Ab0B/wH5AegBzgH/AfcB3QG4Af8DJgE4IAADDAEQA0UBfQJcAVkBzAFvAWcBPgH4AW4BagFBAfkCXgFc
AWoBQQH5Al4BXAHOAkYBRQF+Aw0BEgQAAwwBEANMAZIIAAMmBDgBXAM4AVwDOAFcAzgBXAM4AVwDOAFc Ac4CRgFFAX4DDQESBAADDAEQA0wBkggAAyYEOAFcAzgBXAM4AVwDOAFcAzgBXAM4AVwDOAFcAykBPzAA
AzgBXAMpAT8wAAOGAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A4YB/wMAAf8IAAH4Ad8BuwH/ A4YB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8DhgH/AwAB/wgAAfgB3wG7Af8B+AHfAbsB/wH4
AfgB3wG7Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8DJgE4 Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wH4Ad8BuwH/AfgB3wG7Af8B+AHfAbsB/wMmAThUAAFCAU0BPgcA
VAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAv8B4AEHAf4BAQIAAucBwAEH AT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/AQAC/wHgAQcB/gEBAgAC5wHAAQcB/AMAAsMBwAEH
AfwDAALDAcABBwHgAwACgQHAAQcB4AMAAYABAQHAAQAB8AMAAcABAwYAAeABBwYAAfABDwYAAfABDwYA AeADAAKBAcABBwHgAwABgAEBAcABAAHwAwABwAEDBgAB4AEHBgAB8AEPBgAB8AEPBgAB4AEHAwABAQIA
AeABBwMAAQECAAHAAQMDAAEDAgABgAEBAwABAwIAAYEBgAMAAQMCAAHDAcEDAAEDAgAB5wHjAwABAwIA AcABAwMAAQMCAAGAAQEDAAEDAgABgQGAAwABAwIAAcMBwQMAAQMCAAHnAeMDAAEDAgAB/wH3AQABPwEA
Af8B9wEAAT8BAAEDAgABgAEBAYwBHwGAAQEC/wGAAQEBgAEPAcABAwHwAQ8BgQEBAYABBwHAAQMB4AEH AQMCAAGAAQEBjAEfAYABAQL/AYABAQGAAQ8BwAEDAfABDwGBAQEBgAEHAcABAwHgAQcBgAEBAYABBwHA
AYABAQGAAQcBwAEDAcABAwGAAQEBgAEHAcABAwGAAQMBgAEBAYABAQHAAQEBgAEHAYABAQGAAQABwAEB AQMBwAEDAYABAQGAAQcBwAEDAYABAwGAAQEBgAEBAcABAQGAAQcBgAEBAYABAAHAAQEBgwHfAYABAQGA
AYMB3wGAAQEBgAEAAcABAQGDAf8BgAEBAYABAAHAAQABgwEBAYABAQIAAcABAAGDAQEBgAEHAYABAAHA AQABwAEBAYMB/wGAAQEBgAEAAcABAAGDAQEBgAEBAgABwAEAAYMBAQGAAQcBgAEAAcABAQGAAQEBgAEH
AQEBgAEBAYABBwHgAQABwAEAAYABAQGAAQcB8AEAAcABAwHAAQEBgAEPAfwBAAHAAQcB4AEBAYABHwH8 AeABAAHAAQABgAEBAYABBwHwAQABwAEDAcABAQGAAQ8B/AEAAcABBwHgAQEBgAEfAfwBAAHAAQ8B8AEJ
AQABwAEPAfABCQGAAT8B/AEAAcABHwL/Cw== AYABPwH8AQABwAEfAv8L
</value> </value>
</data> </data>
<metadata name="FileSaveRDP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="FileSaveRDP.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -75,6 +75,8 @@ Public Class RemoteAppCreateClientConnection
My.Settings.SavedSignRDP = False My.Settings.SavedSignRDP = False
My.Settings.SavedSignedAndUnsigned = False My.Settings.SavedSignedAndUnsigned = False
My.Settings.SavedCertSelected = 0 My.Settings.SavedCertSelected = 0
My.Settings.SavedRDPOptions = FlattenArray(RDPOptionsWindow.RecommendedDefaultOptions)
additionalOptions = RDPOptionsWindow.RecommendedDefaultOptions
End Sub End Sub
Sub SaveCCWindowSettings() Sub SaveCCWindowSettings()
@ -97,6 +99,7 @@ Public Class RemoteAppCreateClientConnection
My.Settings.SavedSignRDP = CheckBoxSignRDPEnabled.Checked My.Settings.SavedSignRDP = CheckBoxSignRDPEnabled.Checked
My.Settings.SavedSignedAndUnsigned = CheckBoxCreateSignedAndUnsigned.Checked My.Settings.SavedSignedAndUnsigned = CheckBoxCreateSignedAndUnsigned.Checked
My.Settings.SavedCertSelected = CertificateComboBox.SelectedIndex My.Settings.SavedCertSelected = CertificateComboBox.SelectedIndex
My.Settings.SavedRDPOptions = FlattenArray(additionalOptions)
End Sub End Sub
Sub SetCCWindowSettings() Sub SetCCWindowSettings()
@ -152,6 +155,14 @@ Public Class RemoteAppCreateClientConnection
CertificateComboBox.Text = "" CertificateComboBox.Text = ""
End If End If
If My.Settings.SavedRDPOptions <> "" Then
additionalOptions = UnflattenArray(My.Settings.SavedRDPOptions)
Else
additionalOptions = {
{}
}
End If
End Sub End Sub
Private Sub UseRDGatewayCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles UseRDGatewayCheckBox.CheckedChanged Private Sub UseRDGatewayCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles UseRDGatewayCheckBox.CheckedChanged
@ -285,8 +296,6 @@ Public Class RemoteAppCreateClientConnection
Private Sub CreateRDPFile(RDPPath As String, RemoteApp As RemoteAppLib.RemoteApp) Private Sub CreateRDPFile(RDPPath As String, RemoteApp As RemoteAppLib.RemoteApp)
'Dim App As New RemoteAppLib.RemoteApp = RemoteApp
'App = RemoteApp
Dim FileTypeAssociations As RemoteAppLib.FileTypeAssociationCollection Dim FileTypeAssociations As RemoteAppLib.FileTypeAssociationCollection
FileTypeAssociations = RemoteApp.FileTypeAssociations FileTypeAssociations = RemoteApp.FileTypeAssociations
@ -304,8 +313,8 @@ Public Class RemoteAppCreateClientConnection
.remoteapplicationname = RemoteApp.FullName, .remoteapplicationname = RemoteApp.FullName,
.remoteapplicationprogram = "||" & RemoteApp.Name, .remoteapplicationprogram = "||" & RemoteApp.Name,
.remoteapplicationmode = 1, .remoteapplicationmode = 1,
.disableremoteappcapscheck = 1, .alternate_shell = "rdpinit.exe",
.alternate_shell = "rdpinit.exe" .AdditionalOptions = ExportAdditionalOptionsRdpString()
} }
If UseRDGatewayCheckBox.Checked Then If UseRDGatewayCheckBox.Checked Then
@ -314,19 +323,6 @@ Public Class RemoteAppCreateClientConnection
RDPfile.gatewayprofileusagemethod = 1 RDPfile.gatewayprofileusagemethod = 1
End If End If
RDPfile.prompt_for_credentials_on_client = 1
RDPfile.promptcredentialonce = 0
RDPfile.devicestoredirect = "*"
RDPfile.drivestoredirect = "*"
RDPfile.redirectcomports = 1
RDPfile.redirectdrives = 1
RDPfile.allow_desktop_composition = 1
RDPfile.allow_font_smoothing = 1
RDPfile.span_monitors = 1
RDPfile.use_multimon = 1
RDPfile.remoteapplicationfileextensions = FlatFileTypes RDPfile.remoteapplicationfileextensions = FlatFileTypes
RDPfile.SaveRDPfile(RDPPath) RDPfile.SaveRDPfile(RDPPath)
@ -434,4 +430,65 @@ Public Class RemoteAppCreateClientConnection
End If End If
End Sub End Sub
Dim additionalOptions As String(,) = {{}}
Private Sub RDPOptionsButton_Click(sender As Object, e As EventArgs) Handles RDPOptionsButton.Click
additionalOptions = RDPOptionsWindow.EditAdditionalOptions(additionalOptions)
End Sub
Private Function ExportAdditionalOptionsRdpString()
Dim selectedIndicesList As New List(Of Integer)
Dim optionsString As String = ""
Dim optionsLength = additionalOptions.GetLength(0)
For row As Integer = 0 To optionsLength - 1
optionsString += additionalOptions(row, 1) & ":"
optionsString += additionalOptions(row, 2) & ":"
optionsString += additionalOptions(row, 3) & vbCrLf
Next
Return optionsString.Trim()
End Function
Shared Function FlattenArray(arr As String(,)) As String
' Flatten the array to a CSV-like string
Dim csvLines As New List(Of String)
For i As Integer = 0 To arr.GetLength(0) - 1
Dim lineValues As New List(Of String)
For j As Integer = 0 To arr.GetLength(1) - 1
lineValues.Add(arr(i, j))
Next
csvLines.Add(String.Join("|", lineValues))
Next
Return String.Join(Environment.NewLine, csvLines)
End Function
Shared Function UnflattenArray(csv As String) As String(,)
' Unflatten the CSV-like string to an array
Dim csvLines = csv.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
If csvLines.Length = 0 Then
' Handle the case when the array is empty
Return New String(,) {{}}
End If
Dim numRows = csvLines.Length
Dim numCols = csvLines(0).Split("|"c).Length
Dim arr(numRows - 1, numCols - 1) As String
For i As Integer = 0 To numRows - 1
Dim lineValues = csvLines(i).Split("|"c)
For j As Integer = 0 To numCols - 1
arr(i, j) = lineValues(j)
Next
Next
Return arr
End Function
End Class End Class

View File

@ -61,7 +61,7 @@ Module RemoteAppFunction
Public Sub ValidateDNSname(ByVal TheTextBox As TextBox) Public Sub ValidateDNSname(ByVal TheTextBox As TextBox)
' pattern matches any character that is NOT A-Z (allows upper and lower case alphabets) ' pattern matches any character that is NOT A-Z (allows upper and lower case alphabets)
Dim rx As New Regex("[^\p{L}LlUu0-9\-\._]") Dim rx As New Regex("[^\p{L}LlUu0-9\-\._:]")
If (rx.IsMatch(TheTextBox.Text)) Then If (rx.IsMatch(TheTextBox.Text)) Then
TheTextBox.Text = rx.Replace(TheTextBox.Text, "") TheTextBox.Text = rx.Replace(TheTextBox.Text, "")
TheTextBox.Select(TheTextBox.Text.Length, 0) TheTextBox.Select(TheTextBox.Text.Length, 0)

View File

@ -45,6 +45,7 @@ Partial Class RemoteAppMainWindow
Me.ToolsMenuStrip = New System.Windows.Forms.MenuStrip() Me.ToolsMenuStrip = New System.Windows.Forms.MenuStrip()
Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.NewRemoteAppadvancedToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.NewRemoteAppadvancedToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.DuplicateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator()
Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
@ -223,14 +224,14 @@ Partial Class RemoteAppMainWindow
Me.CreateClientConnection.AutoSize = True Me.CreateClientConnection.AutoSize = True
Me.CreateClientConnection.BackColor = System.Drawing.Color.WhiteSmoke Me.CreateClientConnection.BackColor = System.Drawing.Color.WhiteSmoke
Me.CreateClientConnection.Enabled = False Me.CreateClientConnection.Enabled = False
Me.CreateClientConnection.Font = New System.Drawing.Font("Segoe UI", 9.0!)
Me.CreateClientConnection.ImageIndex = 3 Me.CreateClientConnection.ImageIndex = 3
Me.CreateClientConnection.ImageList = Me.SmallerIcons Me.CreateClientConnection.ImageList = Me.SmallerIcons
Me.CreateClientConnection.Location = New System.Drawing.Point(239, 224) Me.CreateClientConnection.Location = New System.Drawing.Point(214, 223)
Me.CreateClientConnection.Name = "CreateClientConnection" Me.CreateClientConnection.Name = "CreateClientConnection"
Me.CreateClientConnection.Size = New System.Drawing.Size(183, 29) Me.CreateClientConnection.Size = New System.Drawing.Size(208, 30)
Me.CreateClientConnection.TabIndex = 6 Me.CreateClientConnection.TabIndex = 6
Me.CreateClientConnection.Text = "Create Client Connection..." Me.CreateClientConnection.Text = "Create Client Connection..."
Me.CreateClientConnection.TextAlign = System.Drawing.ContentAlignment.MiddleRight
Me.CreateClientConnection.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText Me.CreateClientConnection.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText
Me.CreateClientConnection.UseVisualStyleBackColor = False Me.CreateClientConnection.UseVisualStyleBackColor = False
' '
@ -239,6 +240,7 @@ Partial Class RemoteAppMainWindow
Me.ToolsMenuStrip.AllowMerge = False Me.ToolsMenuStrip.AllowMerge = False
Me.ToolsMenuStrip.AutoSize = False Me.ToolsMenuStrip.AutoSize = False
Me.ToolsMenuStrip.BackColor = System.Drawing.Color.Transparent Me.ToolsMenuStrip.BackColor = System.Drawing.Color.Transparent
Me.ToolsMenuStrip.ImageScalingSize = New System.Drawing.Size(20, 20)
Me.ToolsMenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem}) Me.ToolsMenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.ToolsToolStripMenuItem, Me.HelpToolStripMenuItem})
Me.ToolsMenuStrip.Location = New System.Drawing.Point(0, 0) Me.ToolsMenuStrip.Location = New System.Drawing.Point(0, 0)
Me.ToolsMenuStrip.Name = "ToolsMenuStrip" Me.ToolsMenuStrip.Name = "ToolsMenuStrip"
@ -248,7 +250,7 @@ Partial Class RemoteAppMainWindow
' '
'FileToolStripMenuItem 'FileToolStripMenuItem
' '
Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewRemoteAppadvancedToolStripMenuItem, Me.ToolStripSeparator2, Me.ExitToolStripMenuItem}) Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewRemoteAppadvancedToolStripMenuItem, Me.DuplicateToolStripMenuItem, Me.ToolStripSeparator2, Me.ExitToolStripMenuItem})
Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem"
Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20)
Me.FileToolStripMenuItem.Text = "File" Me.FileToolStripMenuItem.Text = "File"
@ -259,6 +261,12 @@ Partial Class RemoteAppMainWindow
Me.NewRemoteAppadvancedToolStripMenuItem.Size = New System.Drawing.Size(235, 22) Me.NewRemoteAppadvancedToolStripMenuItem.Size = New System.Drawing.Size(235, 22)
Me.NewRemoteAppadvancedToolStripMenuItem.Text = "New RemoteApp (advanced)..." Me.NewRemoteAppadvancedToolStripMenuItem.Text = "New RemoteApp (advanced)..."
' '
'DuplicateToolStripMenuItem
'
Me.DuplicateToolStripMenuItem.Name = "DuplicateToolStripMenuItem"
Me.DuplicateToolStripMenuItem.Size = New System.Drawing.Size(235, 22)
Me.DuplicateToolStripMenuItem.Text = "Duplicate RemoteApp"
'
'ToolStripSeparator2 'ToolStripSeparator2
' '
Me.ToolStripSeparator2.Name = "ToolStripSeparator2" Me.ToolStripSeparator2.Name = "ToolStripSeparator2"
@ -305,7 +313,7 @@ Partial Class RemoteAppMainWindow
Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WebsiteToolStripMenuItem, Me.ToolStripSeparator1, Me.AboutToolStripMenuItem}) Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.WebsiteToolStripMenuItem, Me.ToolStripSeparator1, Me.AboutToolStripMenuItem})
Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem" Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem"
Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(44, 20) Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(44, 20)
Me.HelpToolStripMenuItem.Text = "Help" Me.HelpToolStripMenuItem.Text = "&Help"
' '
'WebsiteToolStripMenuItem 'WebsiteToolStripMenuItem
' '
@ -403,4 +411,5 @@ Partial Class RemoteAppMainWindow
Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator Friend WithEvents ToolStripSeparator3 As System.Windows.Forms.ToolStripSeparator
Friend WithEvents BackupAllRemoteAppsToolStripMenuItem As ToolStripMenuItem Friend WithEvents BackupAllRemoteAppsToolStripMenuItem As ToolStripMenuItem
Friend WithEvents BackupSaveFileDialog As SaveFileDialog Friend WithEvents BackupSaveFileDialog As SaveFileDialog
Friend WithEvents DuplicateToolStripMenuItem As ToolStripMenuItem
End Class End Class

View File

@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAo ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAo
EAAAAk1TRnQBSQFMAwEBAAGAAQEBgAEBASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMA EAAAAk1TRnQBSQFMAwEBAAGYAQEBmAEBASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMA
ASADAAEBAQABIAYAAUD/AP8A/wD/AP8A/wD/AP8A/wD/ACAAA1ABngGqAZwBhwH/AaoBnAGHAf8BqgGc ASADAAEBAQABIAYAAUD/AP8A/wD/AP8A/wD/AP8A/wD/ACAAA1ABngGqAZwBhwH/AaoBnAGHAf8BqgGc
AYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/ AYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/
AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGc AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGcAYcB/wGqAZwBhwH/AaoBnAGHAf8BqgGc
@ -138,11 +138,11 @@
AtkB/wP6Af8D+wH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP8Af8B9wL2Af8B2gHmAesB/wHH AtkB/wP6Af8D+wH/A/oB/wP6Af8D+gH/A/oB/wP6Af8D+gH/A/oB/wP8Af8B9wL2Af8B2gHmAesB/wHH
AeQB7wH/AdwB6gHyAf8C/QH8Af8D+gH/A/oB/wP6Af8D+wX/AaoBnAGHAf//AIkAAaoBnAGHAf8C/AH2 AeQB7wH/AdwB6gHyAf8C/QH8Af8D+gH/A/oB/wP6Af8D+wX/AaoBnAGHAf//AIkAAaoBnAGHAf8C/AH2
Af8D/AH/A/sB/wH8Av0B/wHuAeIB3AH/Ac8BsgGsAf8CoAGfAf8BnQGcAZsB/wHTAdEB0AH/AvoB+QH/ Af8D/AH/A/sB/wH8Av0B/wHuAeIB3AH/Ac8BsgGsAf8CoAGfAf8BnQGcAZsB/wHTAdEB0AH/AvoB+QH/
AvwB+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8B/AL9Af8B9AHrAecB/wHLAawBpwH/AUEBpgHHAf8BhwHM AvwB+wH/A/sB/wP7Af8D+wH/A/sB/wP7Af8B/AL9Af8B9AHrAecB/wHLAawBpwH/AT4BpgHHAf8BhwHM
AeoB/wGoAckB2gH/AfgB9AHyAf8D/AH/A/sB/wP7Af8D/AX/AaoBnAGHAf//AIkAAaoBnAGHAv8B/gH6 AeoB/wGoAckB2gH/AfgB9AHyAf8D/AH/A/sB/wP7Af8D/AX/AaoBnAGHAf//AIkAAaoBnAGHAv8B/gH6
Af8C/QH8Af8C/AH7Af8C/AH7Af8B2AGvAaQB/wHQAb0BsgH/AekB5wHlAf8B5AHhAeAB/wHQAc4BzAH/ Af8C/QH8Af8C/AH7Af8C/AH7Af8B2AGvAaQB/wHQAb0BsgH/AekB5wHlAf8B5AHhAeAB/wHQAc4BzAH/
AfUC9gH/Af0B/AH9Af8C/AH7Af8C/AH7Af8C/AH7Af8C/AH7Af8C/AH7Af8B/QP/AdsBtwGvAf8B4wHL AfUC9gH/Af0B/AH9Af8C/AH7Af8C/AH7Af8C/AH7Af8C/AH7Af8C/AH7Af8B/QP/AdsBtwGvAf8B4wHL
Ab4B/wE6AZkBtQH/ASoBkAGvAf8BzwHdAeEB/wH2AfQB8wH/A/wB/wL8AfsB/wL8AfsB/wL9AfwF/wGq Ab4B/wE3AZkBtQH/AScBkAGvAf8BzwHdAeEB/wH2AfQB8wH/A/wB/wL8AfsB/wL8AfsB/wL9AfwF/wGq
AZwBhwH//wCJAAGqAZwBhwH/AvYB9wH/A/0B/wP8Af8B+wL8Af8B2wGyAacB/wHyAdkByQH/AaMBoAGe AZwBhwH//wCJAAGqAZwBhwH/AvYB9wH/A/0B/wP8Af8B+wL8Af8B2wGyAacB/wHyAdkByQH/AaMBoAGe
Af8BoAGfAZ4B/wH6AvkB/wP+Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8B/QP/AdwBuQGwAf8B8QHV Af8BoAGfAZ4B/wH6AvkB/wP+Af8D/AH/A/wB/wP8Af8D/AH/A/wB/wP8Af8B/QP/AdwBuQGwAf8B8QHV
AcMB/wHdAc4BxAH/AdYBwgG3Af8B6QHnAeYF/wP8Af8D/AH/A/wB/wP9Bf8BqgGcAYcB//8AiQABqgGc AcMB/wHdAc4BxAH/AdYBwgG3Af8B6QHnAeYF/wP8Af8D/AH/A/wB/wP9Bf8BqgGcAYcB//8AiQABqgGc
@ -204,134 +204,134 @@
<value> <value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6
HQAAAk1TRnQBSQFMAgEBBwEAAWgBAQFoAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA HQAAAk1TRnQBSQFMAgEBBwEAAYABAQGAAQEBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8AEwABYAFZAVcB/wEyAi8B/wE3ATQBMAH/ATcBNAEwAf8BNwE0ATAB/wE3 AwABIAMAAQEBAAEgBgABIP8AEwABXQFWAVQB/wEvAiwB/wE0ATEBLQH/ATQBMQEtAf8BNAExAS0B/wE0
ATQBMAH/ATcBNAEwAf8BNwE0ATAB/wE3ATQBMAH/ATcBNAEwAf8BNwE0ATAB/wE3ATQBMAH/JAABGQGf ATEBLQH/ATQBMQEtAf8BNAExAS0B/wE0ATEBLQH/ATQBMQEtAf8BNAExAS0B/wE0ATEBLQH/JAABFgGf
AVQB/wEZAZ8BVAH/ARkBnwFUAf8BGQGfAVQB/wEZAZ8BVAH/mAAB2QHPAcgP/wH2A/8B9gP/AfYC/wH5 AVEB/wEWAZ8BUQH/ARYBnwFRAf8BFgGfAVEB/wEWAZ8BUQH/mAAB2QHPAcgP/wH2A/8B9gP/AfYC/wH5
AewC/wHwAeEC/wHlAdYC/wHlAdYB/wE2Ai4B/yQAARkBnwFUAf8BIQHXAagB/wEhAdcBqAH/ASEB1wGo AewC/wHwAeEC/wHlAdYC/wHlAdYB/wEzAisB/yQAARYBnwFRAf8BHgHXAagB/wEeAdcBqAH/AR4B1wGo
Af8BGQGfAVQB/5gAAdMByQHCBf8BxAGvAaIB/wHEAa8BogH/Af0B+gH4Af8BxAGvAaIB/wHEAa8BogH/ Af8BFgGfAVEB/5gAAdMByQHCBf8BxAGvAaIB/wHEAa8BogH/Af0B+gH4Af8BxAGvAaIB/wHEAa8BogH/
AcQBrwGiAf8BxAGvAaIB/wHEAa8BogH/Af0B3gHLAf8BNgIuAf8kAAEXAaEBVgH/AQABywGVAf8BAAHK AcQBrwGiAf8BxAGvAaIB/wHEAa8BogH/Af0B3gHLAf8BMwIrAf8kAAEUAaEBUwH/AQABywGVAf8BAAHK
AZQB/wEAAcoBlQH/ARcBogFWAf+YAAHTAckBwhH/Af0B+gH4Af8B/QH6AfgC/wHtAeMB/wH6AekB3gH/ AZQB/wEAAcoBlQH/ARQBogFTAf+YAAHTAckBwhH/Af0B+gH4Af8B/QH6AfgC/wHtAeMB/wH6AekB3gH/
AfgB4gHSAf8B+AHiAdIB/wE2Ai4B/yQAARMBpQFZAf8BAAHMAZYB/wEAAcwBlwH/AQABzAGXAf8BEwGl AfgB4gHSAf8B+AHiAdIB/wEzAisB/yQAARABpQFWAf8BAAHMAZYB/wEAAcwBlwH/AQABzAGXAf8BEAGl
AVkB/5gAAdMByQHCBf8BxAGvAaIB/wHEAa8BogX/AcQBrwGiAf8BxAGvAaIB/wHEAa8BogH/AcQBrwGi AVYB/5gAAdMByQHCBf8BxAGvAaIB/wHEAa8BogX/AcQBrwGiAf8BxAGvAaIB/wHEAa8BogH/AcQBrwGi
Af8BxAGvAaIC/wHlAdYB/wE2Ai4B/yQAAQ8BqQFcAf8BAAHOAZkB/wEAAc4BmQH/AQABzQGZAf8BDwGp Af8BxAGvAaIC/wHlAdYB/wEzAisB/yQAAQwBqQFZAf8BAAHOAZkB/wEAAc4BmQH/AQABzQGZAf8BDAGp
AV0B/5gAAdEBxwHAFf8B/QH6AfgB/wH9AfoB+AL/Ae0B4wL/Ae0B4wL/AekB3AH/ATYCLgH/EAABCgGt AVoB/5gAAdEBxwHAFf8B/QH6AfgB/wH9AfoB+AL/Ae0B4wL/Ae0B4wL/AekB3AH/ATMCKwH/EAABBwGt
AWAB/wEKAa0BYAH/AQoBrgFgAf8BCgGtAWAB/wELAa0BYAH/AQoBrgFhAf8BBAHQAZwB/wEEAdABmwH/ AV0B/wEHAa0BXQH/AQcBrgFdAf8BBwGtAV0B/wEIAa0BXQH/AQcBrgFeAf8BAQHQAZwB/wEBAdABmwH/
AQMB0AGcAf8BCgGuAWAB/wELAa4BYAH/AQsBrQFgAf8BCgGtAWAB/wEKAa0BYAH/AQoBrQFgAf8EAAEK AQAB0AGcAf8BBwGuAV0B/wEIAa4BXQH/AQgBrQFdAf8BBwGtAV0B/wEHAa0BXQH/AQcBrQFdAf8EAAEH
ARABrQH/AQoBEAGtAf8BCgEQAa4B/wEKARABrQH/AQsBEQGtAf8BCwERAa0B/wELAREBrQH/AQsBEQGt AQ0BrQH/AQcBDQGtAf8BBwENAa4B/wEHAQ0BrQH/AQgBDgGtAf8BCAEOAa0B/wEIAQ4BrQH/AQgBDgGt
Af8BCwERAa0B/wELAREBrQH/AQsBEgGuAf8BCwERAa0B/wEKARABrQH/AQoBEAGtAf8BCgEQAa0B/0QA Af8BCAEOAa0B/wEIAQ4BrQH/AQgBDwGuAf8BCAEOAa0B/wEHAQ0BrQH/AQcBDQGtAf8BBwENAa0B/0QA
AdEBxwHAGf8BsAGtAawB/wElAUABVgH/AeMB2QHTAv8B7QHjAf8BNgIuAf8QAAEGAbIBgAH/ARMB0wGi AdEBxwHAGf8BsAGtAawB/wEiAT0BUwH/AeMB2QHTAv8B7QHjAf8BMwIrAf8QAAEDAbIBgAH/ARAB0wGi
Af8BBwHRAZ4B/wEHAdIBngH/AQcB0QGeAf8BCAHRAZ4B/wEHAdIBngH/AQgB0QGeAf8BCAHSAZ4B/wEH Af8BBAHRAZ4B/wEEAdIBngH/AQQB0QGeAf8BBQHRAZ4B/wEEAdIBngH/AQUB0QGeAf8BBQHSAZ4B/wEE
AdEBngH/AQgB0QGeAf8BCAHSAZ4B/wEHAdIBngH/ARsB1AGlAf8BBgGyAYAB/wQAAQUBCgGyAf8BFQET AdEBngH/AQUB0QGeAf8BBQHSAZ4B/wEEAdIBngH/ARgB1AGlAf8BAwGyAYAB/wQAAQIBBwGyAf8BEgEQ
AdMB/wELAQYB0QH/AQoBBgHSAf8BCwEGAdEB/wELAQYB0QH/AQsBBgHRAf8BCwEHAdEB/wELAQcB0QH/ AdMB/wEIAQMB0QH/AQcBAwHSAf8BCAEDAdEB/wEIAQMB0QH/AQgBAwHRAf8BCAEEAdEB/wEIAQQB0QH/
AQsBBwHRAf8BCwEHAdEB/wELAQcB0gH/AQoBBgHSAf8BHQEaAdQB/wEFAQoBsgH/RAAB0QHHAcAF/wHf AQgBBAHRAf8BCAEEAdEB/wEIAQQB0gH/AQcBAwHSAf8BGgEXAdQB/wECAQcBsgH/RAAB0QHHAcAF/wHf
AeQB5QH/AUIBWQGEAf8B3wHkAeUF/wHCAcoBzgH/AS4BRQFUAf8BEgGpAdYB/wMAAf8BQQFAAUQB/wGk AeQB5QH/AT8BVgGEAf8B3wHkAeUF/wHCAcoBzgH/ASsBQgFRAf8BDwGpAdYB/wMAAf8BPgE9AUEB/wGk
AZ0BlgH/CAABVgGVAVwB/wEAAUoBDQH/AQABtwGEAf8BHQHVAaYB/wEMAdQBoAH/AQsB1AGgAf8BCwHT AZ0BlgH/CAABUwGVAVkB/wEAAUcBCgH/AQABtwGEAf8BGgHVAaYB/wEJAdQBoAH/AQgB1AGgAf8BCAHT
AaEB/wEMAdMBoAH/AQwB1AGgAf8BDAHTAaEB/wEMAdMBoAH/AQwB0wGhAf8BDAHTAaAB/wEMAdMBoAH/ AaEB/wEJAdMBoAH/AQkB1AGgAf8BCQHTAaEB/wEJAdMBoAH/AQkB0wGhAf8BCQHTAaAB/wEJAdMBoAH/
AQwB0wGhAf8BIgHVAacB/wEAAbcBhAH/BQABAQG3Af8BHwEcAdUB/wEOAQwB1AH/AQ0BCwHTAf8BDwEL AQkB0wGhAf8BHwHVAacB/wEAAbcBhAH/BgABtwH/ARwBGQHVAf8BCwEJAdQB/wEKAQgB0wH/AQwBCAHT
AdMB/wEPAQsB0wH/AQ8BCwHTAf8BDwEMAdIB/wEPAQwB0gH/AQ8BDAHSAf8BDwEMAdIB/wEPAQwB0gH/ Af8BDAEIAdMB/wEMAQgB0wH/AQwBCQHSAf8BDAEJAdIB/wEMAQkB0gH/AQwBCQHSAf8BDAEJAdIB/wEN
ARABDAHSAf8BIwEhAdUB/wEAAQEBtwH/RAAB3wGdAWEB/wHxAcoBtwH/AY8BpAGsAf8BhgHTAeUB/wEu AQkB0gH/ASABHgHVAf8CAAG3Af9EAAHfAZ0BXgH/AfEBygG3Af8BjwGkAawB/wGGAdMB5QH/ASsBQgFR
AUUBVAH/AacBkgGJAf8BLgFFAVQB/wFFAcEB3gH/ATsBMQE9Af8BAwHQAv8BAAELARcB/wMAAf8BAAEF Af8BpwGSAYkB/wErAUIBUQH/AUIBwQHeAf8BOAEuAToB/wEAAdAC/wEAAQgBFAH/AwAB/wEAAQIBDwH/
ARIB/wEzAToBSQH/AT0BXAE/Af8BAAGMARYB/wEAAbsBiAH/AfUB+QH3Af8BkQH5AdkB/wGRAfkB2QH/ ATABNwFGAf8BOgFZATwB/wEAAYwBEwH/AQABuwGIAf8B9QH5AfcB/wGRAfkB2QH/AZEB+QHZAf8BkQH5
AZEB+QHZAf8B9QH5AfcB/wEUAdgBpgH/ARAB1QGjAf8BEwHXAaUB/wH1AfkB9wH/AZEB+QHZAf8BkQH5 AdkB/wH1AfkB9wH/AREB2AGmAf8BDQHVAaMB/wEQAdcBpQH/AfUB+QH3Af8BkQH5AdkB/wGRAfkB2QH/
AdkB/wGRAfkB2QH/AfUB+QH3Af8BAAG7AYgB/wYAAbsB/wH0AfUB+QH/ApEB+AH/ApEB+AH/ApUB+QH/ AZEB+QHZAf8B9QH5AfcB/wEAAbsBiAH/BgABuwH/AfQB9QH5Af8CkQH4Af8CkQH4Af8ClQH5Af8CkQH4
ApEB+AH/ApEB+AH/ApEB+AH/ApEB+AH/ApEB+AH/ApEB+AH/ApEB+AH/ApEB+AH/AfQB9QH5Af8CAAG7 Af8CkQH4Af8CkQH4Af8CkQH4Af8CkQH4Af8CkQH4Af8CkQH4Af8CkQH4Af8B9AH1AfkB/wIAAbsB/0QA
Af9EAAHfAZ0BYQL/AcUBpAH/AeUByQG5Af8BjwGkAawB/wGDAeEB9gH/AS4BRQFUAf8BXgHNAeIB/wE2 Ad8BnQFeAv8BxQGkAf8B5QHJAbkB/wGPAaQBrAH/AYMB4QH2Af8BKwFCAVEB/wFbAc0B4gH/ATMBQQFI
AUQBSwH/AUwB7QL/ASUBIQE0Af8BFgGyAd8B/wEBAZkByAH/AQABkwHEAf8BAAFGAY4B/wEkAUoBNQH/ Af8BSQHtAv8BIgEeATEB/wETAbIB3wH/AQABmQHIAf8BAAGTAcQB/wEAAUMBjgH/ASEBRwEyAf8BCgGX
AQ0BlwEjAf8BAAG/AYsB/wEAAb8BiwH/AQABwAGLAf8BAAG/AYwB/wEAAb8BiwH/AQABvwGLAf8BGwHa ASAB/wEAAb8BiwH/AQABvwGLAf8BAAHAAYsB/wEAAb8BjAH/AQABvwGLAf8BAAG/AYsB/wEYAdoBqgH/
AaoB/wEUAdcBpQH/ASIB3gGuAf8BAAG/AYsB/wEAAb8BiwH/AQABvwGLAf8BAAG/AYwB/wEAAb8BiwH/ AREB1wGlAf8BHwHeAa4B/wEAAb8BiwH/AQABvwGLAf8BAAG/AYsB/wEAAb8BjAH/AQABvwGLAf8BAAG/
AQABvwGLAf8GAAG/Af8CAAG/Af8CAAHAAf8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAHA AYsB/wYAAb8B/wIAAb8B/wIAAcAB/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wIAAcAB/wIA
Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af8CAAG/Af9EAAHfAZ0BYQH/Ad8BnQFhAf8B3wGd Ab8B/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/wIAAb8B/0QAAd8BnQFeAf8B3wGdAV4B/wHfAZ0BXgH/
AWEB/wHaAboBqgH/AY8BpAGsAf8BYwHjAfkB/wE3AYQBlQH/AUwB7QL/ARQBHgEzAf8BTgHdAfcB/wE8 AdoBugGqAf8BjwGkAawB/wFgAeMB+QH/ATQBhAGVAf8BSQHtAv8BEQEbATAB/wFLAd0B9wH/ATkB0gHz
AdIB8wH/ASQBwwHtAf8BFQG7AeoB/wEAAagB7AH/ATQBkAGMAf8BFgGeASUB/xUAAcMBjgH/ASQB3wGv Af8BIQHDAe0B/wESAbsB6gH/AQABqAHsAf8BMQGQAYwB/wETAZ4BIgH/FQABwwGOAf8BIQHfAa8B/wEU
Af8BFwHZAagB/wEsAeIBswH/AQABwgGOAf+oAAG0AbgBugH/ATMBRwFcAf8BTAHtAv8BPAGYAa4B/wFM AdkBqAH/ASkB4gGzAf8BAAHCAY4B/6gAAbQBuAG6Af8BMAFEAVkB/wFJAe0C/wE5AZgBrgH/AUkB7QL/
Ae0C/wFWAeEB+QH/AU4B3QH3Af8BOgHPAfIB/wEvAccB7QH/AQYBugH6Af8BQwGiAaYB/wElAawBNwH/ AVMB4QH5Af8BSwHdAfcB/wE3Ac8B8gH/ASwBxwHtAf8BAwG6AfoB/wFAAaIBpgH/ASIBrAE0Af8VAAHF
FQABxQGQAf8BLgHjAbQB/wEaAdkBqQH/ATMB5gG3Af8BAAHFAZAB/6gAAawBsQG6Af8BmgHUAeMB/wE2 AZAB/wErAeMBtAH/ARcB2QGpAf8BMAHmAbcB/wEAAcUBkAH/qAABrAGxAboB/wGaAdQB4wH/ATMBRQFX
AUgBWgH/AUwB7QL/AUwB7QL/AUwB7QL/AVYB4QH5Af8BSwHXAfQB/wE4Ab0B3AH/ATUBVgGLAf8BTQGc Af8BSQHtAv8BSQHtAv8BSQHtAv8BUwHhAfkB/wFIAdcB9AH/ATUBvQHcAf8BMgFTAYsB/wFKAZwBiQH/
AYkB/wGFAcwBhQH/FQABxQGQAf8BNAHmAbcB/wEdAdsBqwH/AToB6QG7Af8BAAHFAZAB/6QAA78B/wGe AYUBzAGFAf8VAAHFAZAB/wExAeYBtwH/ARoB2wGrAf8BNwHpAbsB/wEAAcUBkAH/pAADvwH/AZ4BpgGr
AaYBqwH/AY0BsAG8Af8BpgGrAa8B/wGAAaUBtAH/AYABlwGjAf8BgAGXAaMB/wFeAY8BmQH/AVcBhQGT Af8BjQGwAbwB/wGmAasBrwH/AYABpQG0Af8BgAGXAaMB/wGAAZcBowH/AVsBjwGZAf8BVAGFAZMB/wE/
Af8BQgFZAYQB/wGeAaYBqwH/AWABtQGGAf8BRAGwAVEB/xUAAcUBkAH/AfUB+QH3Af8BkQH5AdkB/wH1 AVYBhAH/AZ4BpgGrAf8BXQG1AYYB/wFBAbABTgH/FQABxQGQAf8B9QH5AfcB/wGRAfkB2QH/AfUB+QH3
AfkB9wH/AQABxQGQAf/tAAHFAZAB/wEAAcUBkAH/AQABxQGQAf8BAAHFAZAB/wEAAcUBkAH/7AADGAEi Af8BAAHFAZAB/+0AAcUBkAH/AQABxQGQAf8BAAHFAZAB/wEAAcUBkAH/AQABxQGQAf/sAAMYASIDRwGC
A0cBggNQAZ4DUQGgA0kBiAMeASsYAAMjATMBFgFMAZYB/wETAU4BkwH/ARYBTAGVAf8BFgFNAZMB/wEV A1ABngNRAaADSQGIAx4BKxgAAyMBMwETAUkBlgH/ARABSwGTAf8BEwFJAZUB/wETAUoBkwH/ARIBSgGV
AU0BlQH/ARYBTQGTAf8nAAH/AwAB/wMAAf8LAAH/AwAB/wMAAf8DAAH/AwAB/xQAAwMBBAMNARIDRQF9 Af8BEwFKAZMB/ycAAf8DAAH/AwAB/wsAAf8DAAH/AwAB/wMAAf8DAAH/FAADAwEEAw0BEgNFAX0DGwEm
AxsBJgMnAToDLwFKAzQBVAM0AVQDMAFLAykBPgMWAR8DOAFcA0cBgAMMARAUAAMCAQMDTAGPA1wC6gHk AycBOgMvAUoDNAFUAzQBVAMwAUsDKQE+AxYBHwM4AVwDRwGAAwwBEBQAAwIBAwNMAY8DXALqAeQB4QH/
AeEB/wH0AeoB5QH/AfMB6gHkAf8B6QHkAeAB/wNgAesDUQGcAwcBChAAARcBTQGWAf8BSgG9Ad8B/wFN AfQB6gHlAf8B8wHqAeQB/wHpAeQB4AH/A2AB6wNRAZwDBwEKEAABFAFKAZYB/wFHAb0B3wH/AUoBvAHh
AbwB4QH/AUoBvgHcAf8BTwG+AeEB/wFIAb0B3wH/AZsB2gHuAf8BHAFNAZgB/wEZAUwBlwH/ARsBUgGY Af8BRwG+AdwB/wFMAb4B4QH/AUUBvQHfAf8BmwHaAe4B/wEZAUoBmAH/ARYBSQGXAf8BGAFPAZgB/wEW
Af8BGQFQAZYB/wEWAU4BlAH/AyMBMwwAA4YB/wPAAf8DAAH/AwAB/wOGCf8DwAH/AQAD/wEAAf8BAAH/ AU0BlgH/ARMBSwGUAf8DIwEzDAADhgH/A8AB/wMAAf8DAAH/A4YJ/wPAAf8BAAP/AQAB/wEAAf8DAAH/
AwAB/xAAAwMBBAFQAlIBowEJAeUB+gH/A1QBrwMPARQDIwEzAycBOgMnAToDIwEzAxsBJgMzAVIDWgHA EAADAwEEAVACUgGjAQYB5QH6Af8DVAGvAw8BFAMjATMDJwE6AycBOgMjATMDGwEmAzMBUgNaAcADVQGt
A1UBrQNMAY8QAAMJAQwDXgHQAfoB8wHwAf8B/AHpAeEB/wHwAZkBQQH/AewBgwEZAf8B7wGRASMB/wH1 A0wBjxAAAwkBDANeAdAB+gHzAfAB/wH8AekB4QH/AfABmQE+Af8B7AGDARYB/wHvAZEBIAH/AfUBuAGF
AbgBhQH/Af0B8QHkAf8B8QHqAeQB/wNhAeEDEgEZDAABHAFOAZUB/wFJAb8B3wH/AUwBvgHfAf8BTQG/ Af8B/QHxAeQB/wHxAeoB5AH/A2EB4QMSARkMAAEZAUsBlQH/AUYBvwHfAf8BSQG+Ad8B/wFKAb8B4QH/
AeEB/wFLAb4B4AH/AUoBvwHhAf8BoAHZAfIB/wElAY8BuwH/AYwBvgHSAf8BQwGxAcwB/wE1AacByQH/ AUgBvgHgAf8BRwG/AeEB/wGgAdkB8gH/ASIBjwG7Af8BjAG+AdIB/wFAAbEBzAH/ATIBpwHJAf8BQQHI
AUQByAHjAf8BKQGUAbYB/wNFAX0IAAOGAf8DwAH/AwAB/wOGAf8DwAH/A8AF/wPAAf8BAAH/AQAB/wPA AeMB/wEmAZQBtgH/A0UBfQgAA4YB/wPAAf8DAAH/A4YB/wPAAf8DwAX/A8AB/wEAAf8BAAH/A8AB/wPA
Af8DwAH/AwAB/xAAAVECUgGnAUEB8AL/AQgB6wL/A1ABnRAAAwwBEANiAfYDVQGyAzMEUgGnDAADAgED Af8DAAH/EAABUQJSAacBPgHwAv8BBQHrAv8DUAGdEAADDAEQA2IB9gNVAbIDMwRSAacMAAMCAQMDXAHJ
A1wByQH5AfAB7AH/AeoBhgE1Af8BywEsAQAB/wHoAUkBDwH/AeoBkAEwAf8B6wGbAToB/wHvAZ4BMAH/ AfkB8AHsAf8B6gGGATIB/wHLASkBAAH/AegBRgEMAf8B6gGQAS0B/wHrAZsBNwH/Ae8BngEtAf8B8QGn
AfEBpwE1Af8B9QG7AYUB/wH0AeMB1QH/A14B3QMMARAIAAEYAVIBkwH/AUwBvgHfAf8BSgHBAd4B/wFO ATIB/wH1AbsBhQH/AfQB4wHVAf8DXgHdAwwBEAgAARUBTwGTAf8BSQG+Ad8B/wFHAcEB3gH/AUsBvwHd
Ab8B3QH/AU8BvgHhAf8BUAG7Ad0B/wGdAdoB7gH/ASkBlwG2Af8BVAG/Ad4B/wFLAbgB1QH/AUABqwHO Af8BTAG+AeEB/wFNAbsB3QH/AZ0B2gHuAf8BJgGXAbYB/wFRAb8B3gH/AUgBuAHVAf8BPQGrAc4B/wFK
Af8BTQG9AeQB/wEsAZIBuQH/AzgBXAMjATMEAAOGAf8DwAH/AwAB/wOGAf8DwAH/A8AB/wPAAf8DAAH/ Ab0B5AH/ASkBkgG5Af8DOAFcAyMBMwQAA4YB/wPAAf8DAAH/A4YB/wPAAf8DwAH/A8AB/wMAAf8BAAH/
AQAB/wEAA/8BAAP/AQAB/wMAAf8UAANVAbUBPwHuAf4B/wEKAeYC/wNOAZkMAANcAeoB4gHhAeAB/wHb AQAD/wEAA/8BAAH/AwAB/xQAA1UBtQE8Ae4B/gH/AQcB5gL/A04BmQwAA1wB6gHiAeEB4AH/AdsC2QH/
AtkB/wNhAeYDEgEZDAADSgGJAesB5gHkAf8B3gFRATEB/wHIASMBAAH/AeYBPAEHAf8B5wFEAQkB/wH6 A2EB5gMSARkMAANKAYkB6wHmAeQB/wHeAU4BLgH/AcgBIAEAAf8B5gE5AQQB/wHnAUEBBgH/AfoB7gHo
Ae4B6AH/AeUBUAEdAf8B7AGSASUB/wHvAZ4BMgH/Ae4BmgEtAf8B8wGqAUwB/wHvAeYB3wH/A1IBoQgA Af8B5QFNARoB/wHsAZIBIgH/Ae8BngEvAf8B7gGaASoB/wHzAaoBSQH/Ae8B5gHfAf8DUgGhCAABFwFL
ARoBTgGXAf8BUQG8Ad4B/wFQAb4B3QH/AVEBvwHeAf8BUQG9AdwB/wGHAckB4gH/AaUB4AH0Af8BJwGZ AZcB/wFOAbwB3gH/AU0BvgHdAf8BTgG/Ad4B/wFOAb0B3AH/AYcByQHiAf8BpQHgAfQB/wEkAZkBuwH/
AbsB/wGGAcgB4QH/AYQBwAHeAf8BTwG7AdcB/wGKAc8B6gH/ASgBlgG9Af8DIwEzCAADhgH/A8AB/wMA AYYByAHhAf8BhAHAAd4B/wFMAbsB1wH/AYoBzwHqAf8BJQGWAb0B/wMjATMIAAOGAf8DwAH/AwAB/wOG
Af8DhgH/A8AB/wPAA/8BAAH/AwAB/wMAAf8DwAH/A8AB/wMAAf8YAAFWAlgBuwFBAe4C/wEIAeQB/gH/ Af8DwAH/A8AD/wEAAf8DAAH/AwAB/wPAAf8DwAH/AwAB/xgAAVYCWAG7AT4B7gL/AQUB5AH+Af8DSgGM
A0oBjAQAA10B0wHiAuAB/wHTAtEB/wNeAdUTAAEBA2EB5AH0AeQB4AH/Ac4BGQEAAf8B3gErAQAB/wHl BAADXQHTAeIC4AH/AdMC0QH/A14B1RMAAQEDYQHkAfQB5AHgAf8BzgEWAQAB/wHeASgBAAH/AeUBNAEA
ATcBAwH/AeYBQQEIAf8B5QFNARgB/wHnAYkBLQH/AewBigEfAf8B7AGQASYB/wHsAY8BJQH/AesBgwEX Af8B5gE+AQUB/wHlAUoBFQH/AecBiQEqAf8B7AGKARwB/wHsAZABIwH/AewBjwEiAf8B6wGDARQB/wH4
Af8B+AHbAcoB/wNkAfEDAgEDBAABGwFTAZcB/wFUAcgB5AH/AYEBxgHnAf8BVAHFAeIB/wGAAcoB5AH/ AdsBygH/A2QB8QMCAQMEAAEYAVABlwH/AVEByAHkAf8BgQHGAecB/wFRAcUB4gH/AYABygHkAf8BlAHT
AZQB0wHvAf8BrgHjAfgB/wEvAZ0BvgH/AYsBzQHmAf8BjAHMAeUB/wGJAcYB4AH/AZcB2gHvAf8BLwGa Ae8B/wGuAeMB+AH/ASwBnQG+Af8BiwHNAeYB/wGMAcwB5QH/AYkBxgHgAf8BlwHaAe8B/wEsAZoBvQH/
Ab0B/wwAA4YF/wMAAf8DhgP/AQAB/wPAA/8BAAH/AQAH/wPAAf8DwAH/AwAB/wMAAf8DAAH/FAADVAGv DAADhgX/AwAB/wOGA/8BAAH/A8AD/wEAAf8BAAf/A8AB/wPAAf8DAAH/AwAB/wMAAf8UAANUAa8BTgHx
AVEB8QL/AVwBjgGmAf4BXAJhAdwB2wHRAc0B/wHOAcwBywH/A1QBrhQAA0QBeQOaAf4BxQE5AR8B/wHP Av8BXAGIAaAB/gFcAmEB3AHbAdEBzQH/Ac4BzAHLAf8DVAGuFAADRAF5A5QB/gHFATYBHAH/Ac8BLAEI
AS8BCwH/AdgBJwEAAf8B4wEwAQAB/wHlATUBAAH/AfUB3AHQAf8B4QFFAQwB/wHpAUwBDgH/AeoBgwEc Af8B2AEkAQAB/wHjAS0BAAH/AeUBMgEAAf8B9QHcAdAB/wHhAUIBCQH/AekBSQELAf8B6gGDARkB/wHq
Af8B6gGCARsB/wHpAVEBFgH/AeoBTgEWAf8B7AHkAeEB/wNMAY8EAAEdAVQBmgH/AYsB0AHrAf8BjQHQ AYIBGAH/AekBTgETAf8B6gFLARMB/wHsAeQB4QH/A0wBjwQAARoBUQGaAf8BiwHQAesB/wGNAdAB6wH/
AesB/wGNAdEB6AH/AY4B0QHoAf8BpAHcAfUB/wGyAecB9AH/AckB9wL/ATkBowG/Af8BpgHZAfMB/wGW AY0B0QHoAf8BjgHRAegB/wGkAdwB9QH/AbIB5wH0Af8ByQH3Av8BNgGjAb8B/wGmAdkB8wH/AZYBzwHo
Ac8B6AH/AawB6QHrAf8BNQGeAcIB/wwAA4YF/wMAAf8DwAH/A4YD/wEAA/8BAAH/AQAL/wMAAf8DwAH/ Af8BrAHpAesB/wEyAZ4BwgH/DAADhgX/AwAB/wPAAf8DhgP/AQAD/wEAAf8BAAv/AwAB/wPAAf8DwAH/
A8AB/wPAAf8DAAH/FAABRAJFAXwBTAHwAv8BSwHFAc4B/wN/Af4DSAGEGAADUgGhAfgC9QH/Ab4BKAEP A8AB/wMAAf8UAAFEAkUBfAFJAfAC/wFIAcUBzgH/A38B/gNIAYQYAANSAaEB+AL1Af8BvgElAQwB/wHP
Af8BzwE/ASIB/wHVATcBEQH/AdsBJwEAAf8B4wEqAQAB/wH6AeoB4wH/Ad4BhAEeAf8B5AFCAQkB/wHo ATwBHwH/AdUBNAEOAf8B2wEkAQAB/wHjAScBAAH/AfoB6gHjAf8B3gGEARsB/wHkAT8BBgH/AegBRQEN
AUgBEAH/AegBSQERAf8B5wFFAQ4B/wHmATkBAQH/AfoB9AHxAf8DUwGqBAABHwGCAZ0B/wGhAdoB8wH/ Af8B6AFGAQ4B/wHnAUIBCwH/AeYBNgEAAf8B+gH0AfEB/wNTAaoEAAEcAYIBnQH/AaEB2gHzAf8BpgHc
AaYB3AHzAf8BpwHdAfQB/wGmAdwB9QH/AaoB4wH4Af8BxQHvAv8BzQH2Av8BQgGmAcUB/wGvAeMB8AH/ AfMB/wGnAd0B9AH/AaYB3AH1Af8BqgHjAfgB/wHFAe8C/wHNAfYC/wE/AaYBxQH/Aa8B4wHwAf8BrAHn
AawB5wH7Af8BPgGjAcYB/xAAA4YF/wMAAf8DwAH/A8AB/wMAAf8DAAH/AwAB/wMAAf8DAAH/A4YB/wOG AfsB/wE7AaMBxgH/EAADhgX/AwAB/wPAAf8DwAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DhgH/A4YB/wOG
Af8DhgH/A8AB/wMAAf8UAAM+AWsBogHTAeAB/wN/Af4DVwG6HAADUQGiAfUC8gH/AbkBKgEWAf8BzgFI Af8DwAH/AwAB/xQAAz4BawGiAdMB4AH/A38B/gNXAbocAANRAaIB9QLyAf8BuQEnARMB/wHOAUUBLgH/
ATEB/wHVAUsBLwH/AdkBQgEgAf8B3AEsAQAB/wHiAS8BAAH/AfUB6gHlAf8B3wGHASYB/wHjATQBAAH/ AdUBSAEsAf8B2QE/AR0B/wHcASkBAAH/AeIBLAEAAf8B9QHqAeUB/wHfAYcBIwH/AeMBMQEAAf8B5QE1
AeUBOAECAf8B5QE1AQAB/wHkATEBAAH/AfoB9AHyAf8DUwGqBAABIQGCAaAB/wGxAeMB9wH/AbYB4AH3 AQAB/wHlATIBAAH/AeQBLgEAAf8B+gH0AfIB/wNTAaoEAAEeAYIBoAH/AbEB4wH3Af8BtgHgAfcB/wGx
Af8BsQHgAfYB/wG0AeMB+QH/AbEB5gH6Af8BwgHvAfwB/wHQAfsB/gH/AUUBrgHGAf8BuAHlAfoB/wHD AeAB9gH/AbQB4wH5Af8BsQHmAfoB/wHCAe8B/AH/AdAB+wH+Af8BQgGuAcYB/wG4AeUB+gH/AcMB8gL/
AfIC/wFGAaoByQH/EAADhgH/A4YB/wMAAf8DwAH/A8AB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOG AUMBqgHJAf8QAAOGAf8DhgH/AwAB/wPAAf8DwAH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A8AB/wMAAf8IAAMtAUYDUQGgA1kBxwHUAc0BygH/A20B9wMiATEDVAGuA0oBixgAA0QBeQPw Af8DwAH/AwAB/wgAAy0BRgNRAaADWQHHAdQBzQHKAf8DbQH3AyIBMQNUAa4DSgGLGAADRAF5A/AB/wG2
Af8BtgE5ASoB/wHMAU8BPQH/AdEBUQE7Af8B2AGBATwB/wHcAVEBMwH/AdwBOAEPAf8B4gGCATQB/wHs ATYBJwH/AcwBTAE6Af8B0QFOATgB/wHYAYEBOQH/AdwBTgEwAf8B3AE1AQwB/wHiAYIBMQH/AewB9AH2
AfQB9gH/AeQBRAEPAf8B5AE7AQ0B/wHkAUYBHAH/Ad4BQQEaAf8B9gHwAe8B/wNMAZAEAAEoAYgBowH/ Af8B5AFBAQwB/wHkATgBCgH/AeQBQwEZAf8B3gE+ARcB/wH2AfAB7wH/A0wBkAQAASUBiAGjAf8BuwHt
AbsB7QH5Af8BvQHwAfoB/wG8Ae4B+gH/AcMB7QH6Af8BxQHzAfoB/wHBAfIB/AH/AdQB+gH+Af8BgQG4 AfkB/wG9AfAB+gH/AbwB7gH6Af8BwwHtAfoB/wHFAfMB+gH/AcEB8gH8Af8B1AH6Af4B/wGBAbgBzQH/
Ac0B/wHKAesB+wH/AcoB9AL/AYMBugHPAf8MAAOGCf8DhgH/A8AB/wPAAf8DhgH/A8AB/wPAAf8DwAH/ AcoB6wH7Af8BygH0Av8BgwG6Ac8B/wwAA4YJ/wOGAf8DwAH/A8AB/wOGAf8DwAH/A8AB/wPAAf8DwAH/
A8AB/wPAAf8DwAH/A8AB/wOGAf8DAAH/BAADUQGcAeAB3wHeAf8DqAH9AZUBlAGTAf8DfwH+AxsBJggA A8AB/wPAAf8DwAH/A4YB/wMAAf8EAANRAZwB4AHfAd4B/wOoAf0BlQGUAZMB/wN/Af4DGwEmCAADVgG0
A1YBtANRAZwXAAEBA14B3QHwAeYB5QH/AcUBSAE6Af8B0AGJAU0B/wHTAYMBRAH/AfsB9AHyAf8B0AGZ A1EBnBcAAQEDXgHdAfAB5gHlAf8BxQFFATcB/wHQAYkBSgH/AdMBgwFBAf8B+wH0AfIB/wHQAZkBgwH/
AYMB/wHFAY8BQQH/AfAB9gH3Af8B4wGBASwB/wHgAYIBNwH/AdwBTAEsAf8B+QHtAekB/wNdAe0DAAEB AcUBjwE+Af8B8AH2AfcB/wHjAYEBKQH/AeABggE0Af8B3AFJASkB/wH5Ae0B6QH/A10B7QMAAQEEAAEr
BAABLgGIAacB/wHFAewB+gH/AcQB7wH4Af8BwwHtAfkB/wHDAewB+wH/AcUB9wH9Af8ByQHwAf4B/wHX AYgBpwH/AcUB7AH6Af8BxAHvAfgB/wHDAe0B+QH/AcMB7AH7Af8BxQH3Af0B/wHJAfAB/gH/AdcB/AH6
AfwB+gH/AY0BuwHdAf8B1QHwAf4B/wHSAfgB/QH/AYYBvAHVAf8QAAOGAf8DhgH/A4YB/wOGAf8DwAH/ Af8BjQG7Ad0B/wHVAfAB/gH/AdIB+AH9Af8BhgG8AdUB/xAAA4YB/wOGAf8DhgH/A4YB/wPAAf8DhgH/
A4YB/wHMAkgC/wHMAUgB/wHMAZkBFQH/AcwBmQEAAv8BSAEVAf8BzAFIARUF/wOGAf8DAAH/AwMBBANV AcwCRQL/AcwBRQH/AcwBmQESAf8BzAGZAQAC/wFFARIB/wHMAUUBEgX/A4YB/wMAAf8DAwEEA1UBsgM6
AbIDOgFhAy8BSgHHAcYBxQH/A2IB9hAAA1QBrgNQAZ4UAANKAYkB8wLxAf8ByQGUAYwB/wHOAYwBgAH/ AWEDLwFKAccBxgHFAf8DYgH2EAADVAGuA1ABnhQAA0oBiQHzAvEB/wHJAZQBjAH/Ac4BjAGAAf8B0wGS
AdMBkgGEAf8B2wGnAZsB/wH2AfAB7QH/AfgB9AHyAf8B4QGyAaQB/wHaAYoBRwH/AdoBiAFGAf8B3QGd AYQB/wHbAacBmwH/AfYB8AHtAf8B+AH0AfIB/wHhAbIBpAH/AdoBigFEAf8B2gGIAUMB/wHdAZ0BjAH/
AYwB/wH5AfIB8QH/A1IBoQgAAS4BiQGlAf8ByAH3Av8BzwH5Av8B0wH3Af0B/wHTAfsC/wHVAfgB/AH/ AfkB8gHxAf8DUgGhCAABKwGJAaUB/wHIAfcC/wHPAfkC/wHTAfcB/QH/AdMB+wL/AdUB+AH8Af8B3AH6
AdwB+gL/AeAB+AH+Af8BiQHCAdcB/wHTAe0B/QH/AdUB9gL/AZQBvgHVAf8YAAOGCf8DhgH/AcwCSAP/ Av8B4AH4Af4B/wGJAcIB1wH/AdMB7QH9Af8B1QH2Av8BlAG+AdUB/xgAA4YJ/wOGAf8BzAJFA/8BRQL/
AUgC/wHMAUgB/wHMAZkBFQH/AcwBmQEAAv8BSAEVBf8DhgH/AwAB/wQAAx0BKgNHAYEDXAHfAeoB6AHn AcwBRQH/AcwBmQESAf8BzAGZAQAC/wFFARIF/wOGAf8DAAH/BAADHQEqA0cBgQNcAd8B6gHoAecB/wNh
Af8DYQHuFAADVgGzA1UBsgMGAQgMAAMBAQIDXAHJAfQC8QH/AckBlQGOAf8ByAGCAUsB/wHWAZsBjwH/ Ae4UAANWAbMDVQGyAwYBCAwAAwEBAgNcAckB9ALxAf8ByQGVAY4B/wHIAYIBSAH/AdYBmwGPAf8B1wGa
AdcBmgGNAf8B2AGZAYoB/wHYAZUBhQH/AdEBhAFGAf8B2AGeAZEB/wH7AfYB9QH/A14B3QMLAQ8IAAEu AY0B/wHYAZkBigH/AdgBlQGFAf8B0QGEAUMB/wHYAZ4BkQH/AfsB9gH1Af8DXgHdAwsBDwgAASsBjAGm
AYwBpgH/AUMBpwHGAf8BQAGpAccB/wFEAaYBxQH/AU4BrAHMAf8BVAG7AdMB/wGKAb0B0QH/AZABwQHX Af8BQAGnAcYB/wE9AakBxwH/AUEBpgHFAf8BSwGsAcwB/wFRAbsB0wH/AYoBvQHRAf8BkAHBAdcB/wHY
Af8B2AHzAf0B/wHSAfIB+AH/Ad0B+gL/AZQBwwHYAf8cAAOGAf8DhgH/A4YB/wHMAkgD/wFIA/8BSAL/ AfMB/QH/AdIB8gH4Af8B3QH6Av8BlAHDAdgB/xwAA4YB/wOGAf8DhgH/AcwCRQP/AUUD/wFFAv8BzAFF
AcwBSAH/AcwBmQEVAf8BzAGZAQAF/wOGAf8DAAH/BAADSAGDAZACjwH+AfoC+QH/AeQB4wHiAf8DSgGL Af8BzAGZARIB/wHMAZkBAAX/A4YB/wMAAf8EAANIAYMBigKJAf4B+gL5Af8B5AHjAeIB/wNKAYsYAANd
GAADXQHwA1kBwgMDAQQMAAMEAQYDXAHNAfQB8gHxAf8B7gHgAd4B/wG9AVABRwH/AbQBNAEoAf8BtwE2 AfADWQHCAwMBBAwAAwQBBgNcAc0B9AHyAfEB/wHuAeAB3gH/Ab0BTQFEAf8BtAExASUB/wG3ATMBJgH/
ASkB/wHEAYABSAH/AfMB5AHiAf8B/AH5AfgB/wNcAd8DCQEMDAADIwEzATcBkgGqAf8B0gH1Av8B1QH5 AcQBgAFFAf8B8wHkAeIB/wH8AfkB+AH/A1wB3wMJAQwMAAMjATMBNAGSAaoB/wHSAfUC/wHVAfkC/wHT
Av8B0wH5Af0B/wHeAfsC/wHfAfkC/wHdAfYC/wHkAfoC/wHeAf0B/AH/Ad0B/AH7Af8BlwHDAdoB/yQA AfkB/QH/Ad4B+wL/Ad8B+QL/Ad0B9gL/AeQB+gL/Ad4B/QH8Af8B3QH8AfsB/wGXAcMB2gH/JAADhgH/
A4YB/wHMAkgC/wHMAUgD/wFIA/8BSAL/AcwBSAH/AcwBmQEVBf8DhgH/AwAB/wgAAzUBVQNbAcQDUgGn AcwCRQL/AcwBRQP/AUUD/wFFAv8BzAFFAf8BzAGZARIF/wOGAf8DAAH/CAADNQFVA1sBxANSAacDAQEC
AwEBAhgAAyEBMANJAYcDBAEGEAADAwEEA00BkQNhAeYB+AH3AfYB/wH5AvgB/wH6AvgB/wH4AfYB9QH/ GAADIQEwA0kBhwMEAQYQAAMDAQQDTQGRA2EB5gH4AfcB9gH/AfkC+AH/AfoC+AH/AfgB9gH1Af8DXQHt
A10B7QNQAZ4DCAELFAADIwEzAUcBrAHJAf8BTgGwAcsB/wFSAbMB0QH/AY4BvgHWAf8BkQHEAdgB/wGd A1ABngMIAQsUAAMjATMBRAGsAckB/wFLAbABywH/AU8BswHRAf8BjgG+AdYB/wGRAcQB2AH/AZ0BxgHd
AcYB3QH/AZoBxwHcAf8BmAHJAd8B/wGbAcYB2QH/AyMBMyQAA4YB/wHMAkgB/wHMAUgBFQH/AcwBSAEV Af8BmgHHAdwB/wGYAckB3wH/AZsBxgHZAf8DIwEzJAADhgH/AcwCRQH/AcwBRQESAf8BzAFFARIB/wHM
Af8BzAFIARUB/wHMAUgBFQH/AcwBSAEVBf8DhgH/AwAB/1QAAwsBDwM+AWoDSgGJA0oBiwNAAW8DBwEK AUUBEgH/AcwBRQESAf8BzAFFARIF/wOGAf8DAAH/VAADCwEPAz4BagNKAYkDSgGLA0ABbwMHAQpsAAOG
bAADhgH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wOGAf8DAAH/AUIBTQE+BwABPgMAASgDAAFA Af8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A4YB/wMAAf8BQgFNAT4HAAE+AwABKAMAAUADAAEg
AwABIAMAAQEBAAEBBgABARYAA/8BAAb/AwABDwH4AT8C/wMAAQ8B+AE/Av8DAAEPAfgBPwL/AwABDwH4 AwABAQEAAQEGAAEBFgAD/wEABv8DAAEPAfgBPwL/AwABDwH4AT8C/wMAAQ8B+AE/Av8DAAEPAfgBPwL/
AT8C/wMAAQ8B+AE/Av8DAAEPAQABAQEAAQEDAAEPAQABAQEAAQEDAAEMAQABAQEAAQEFAAEBAQABAQUA AwABDwH4AT8C/wMAAQ8BAAEBAQABAQMAAQ8BAAEBAQABAQMAAQwBAAEBAQABAQUAAQEBAAEBBQABAQEA
AQEBAAEBBAAB+AE/Av8CAAHwAQAB+AE/Av8CAAHwAQAB+AE/Av8CAAHgAQAB+AE/Av8CAAL/AfgBPwL/ AQEEAAH4AT8C/wIAAfABAAH4AT8C/wIAAfABAAH4AT8C/wIAAeABAAH4AT8C/wIAAv8B+AE/Av8CAAL/
AgAC/wH4AR8BgAH/AYwBHwEAAQMB4AEHAYABAwGAAQ8BAAEDAcABAwGAAQEBgAEHAYcBgwGAAQEBgAEA AfgBHwGAAf8BjAEfAQABAwHgAQcBgAEDAYABDwEAAQMBwAEDAYABAQGAAQcBhwGDAYABAQGAAQABgAEH
AYABBwHDAYMBgAEBAYABAQGAAQcB4QEPAgABgAEDAYABAQHwAR8CAAGAAQMBgAEAAfgBPwIAAYABBwGA AcMBgwGAAQEBgAEBAYABBwHhAQ8CAAGAAQMBgAEBAfABHwIAAYABAwGAAQAB+AE/AgABgAEHAYABAAH4
AQAB+AF/AgABgAEHAYABAAHAAT8CAAGAAQcCAAGBAZ8CAAGAAQcBgAEAAQMBzwGAAQEBgAEHAeABAAGD AX8CAAGAAQcBgAEAAcABPwIAAYABBwIAAYEBnwIAAYABBwGAAQABAwHPAYABAQGAAQcB4AEAAYMB4wGA
AeMBgAEBAYABBwHwAQABgwHxAcABAwGAAQcB/AEAAcMB8QHgAQcBwAEHAfwBAAL/AfgBHwL/AfwBAAs= AQEBgAEHAfABAAGDAfEBwAEDAYABBwH8AQABwwHxAeABBwHAAQcB/AEAAv8B+AEfAv8B/AEACw==
</value> </value>
</data> </data>
<metadata name="ToolsMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="ToolsMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -33,6 +33,17 @@ Public Class RemoteAppMainWindow
End Sub End Sub
Public Sub ReloadApps() Public Sub ReloadApps()
Dim SelectedIndex = -1
Dim SelectedName = ""
Dim ItemsCount = Me.AppList.Items.Count
' Save the selection if there is one
If Me.AppList.SelectedItems.Count > 0 Then
SelectedIndex = Me.AppList.SelectedItems(0).Index
SelectedName = Me.AppList.SelectedItems(0).Text
End If
Me.AppList.Clear() Me.AppList.Clear()
Dim SystemApps As New SystemRemoteApps Dim SystemApps As New SystemRemoteApps
@ -51,15 +62,19 @@ Public Class RemoteAppMainWindow
AppList.Items.Add(AppItem) AppList.Items.Add(AppItem)
Next Next
If Apps.Count = 0 Then ' If there was previously a selection AND
NoAppsLabel.Visible = True ' and an app hasn't just been removed
Else ' and if the text of that selection hasn't changed
NoAppsLabel.Visible = False ' then select the item again.
If SelectedIndex > -1 Then
If Me.AppList.Items.Count >= ItemsCount Then
If Me.AppList.Items(SelectedIndex).Text = SelectedName Then
Me.AppList.Items(SelectedIndex).Selected = True
End If
End If
End If End If
EditButton.Enabled = False UpdateWindowStateBasedOnSelection()
DeleteButton.Enabled = False
CreateClientConnection.Enabled = False
End Sub End Sub
Private Sub AppList_DoubleClick(sender As Object, e As EventArgs) Handles AppList.DoubleClick Private Sub AppList_DoubleClick(sender As Object, e As EventArgs) Handles AppList.DoubleClick
@ -69,14 +84,26 @@ Public Class RemoteAppMainWindow
End Sub End Sub
Private Sub AppList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles AppList.SelectedIndexChanged Private Sub AppList_SelectedIndexChanged(sender As Object, e As EventArgs) Handles AppList.SelectedIndexChanged
UpdateWindowStateBasedOnSelection()
End Sub
Private Sub UpdateWindowStateBasedOnSelection()
If AppList.SelectedItems.Count = 1 Then If AppList.SelectedItems.Count = 1 Then
Me.EditButton.Enabled = True Me.EditButton.Enabled = True
Me.DeleteButton.Enabled = True Me.DeleteButton.Enabled = True
CreateClientConnection.Enabled = True Me.CreateClientConnection.Enabled = True
Me.DuplicateToolStripMenuItem.Enabled = True
Else Else
Me.EditButton.Enabled = False Me.EditButton.Enabled = False
Me.DeleteButton.Enabled = False Me.DeleteButton.Enabled = False
Me.CreateClientConnection.Enabled = False Me.CreateClientConnection.Enabled = False
Me.DuplicateToolStripMenuItem.Enabled = False
End If
If Me.AppList.Items.Count = 0 Then
NoAppsLabel.Visible = True
Else
NoAppsLabel.Visible = False
End If End If
End Sub End Sub
@ -180,4 +207,13 @@ Public Class RemoteAppMainWindow
End Sub End Sub
Private Sub DuplicateToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DuplicateToolStripMenuItem.Click
DuplicateRemoteApp(AppList.SelectedItems(0).Text)
ReloadApps()
End Sub
Private Sub DuplicateRemoteApp(AppName As String)
Dim sra As New SystemRemoteApps
sra.DuplicateApp(AppName)
End Sub
End Class End Class

View File

@ -95,6 +95,8 @@ Public Class SystemRemoteApps
Dim AppKey As Microsoft.Win32.RegistryKey = BaseKey.OpenSubKey(Name) Dim AppKey As Microsoft.Win32.RegistryKey = BaseKey.OpenSubKey(Name)
If AppKey Is Nothing Then Return Nothing
App.Name = Name App.Name = Name
App.FullName = AppKey.GetValue("Name", "") App.FullName = AppKey.GetValue("Name", "")
App.Path = AppKey.GetValue("Path", "") App.Path = AppKey.GetValue("Path", "")
@ -153,6 +155,20 @@ Public Class SystemRemoteApps
End Sub End Sub
Public Sub DuplicateApp(Name As String)
Dim NewApp = GetApp(Name)
Dim NewName = NewApp.Name
While GetApp(NewName) IsNot Nothing
NewName = NewName & " copy"
End While
NewApp.Name = NewName
SaveApp(NewApp)
End Sub
Public Sub RenameApp(RemoteAppOldName As String, RemoteAppNewName As String) Public Sub RenameApp(RemoteAppOldName As String, RemoteAppNewName As String)
Dim App As New RemoteApp Dim App As New RemoteApp
Dim SystemApps As New SystemRemoteApps Dim SystemApps As New SystemRemoteApps