mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
1658 lines
75 KiB
VB.net
1658 lines
75 KiB
VB.net
Imports WeifenLuo.WinFormsUI.Docking
|
|
Imports System.IO
|
|
Imports Crownwood
|
|
Imports System.Threading
|
|
|
|
Namespace App
|
|
Public Class Runtime
|
|
#Region "Public Declarations"
|
|
Public Shared sL As Config.Settings.Load
|
|
Public Shared sS As Config.Settings.Save
|
|
|
|
Public Shared cL As Connection.List
|
|
Public Shared prevCL As Connection.List
|
|
Public Shared ctL As Container.List
|
|
Public Shared prevCTL As Container.List
|
|
Public Shared crL As Credential.List
|
|
Public Shared prevCRL As Credential.List
|
|
|
|
Public Shared wL As UI.Window.List
|
|
Public Shared mC As Messages.Collector
|
|
|
|
Public Shared SysTrayIcon As Tools.Controls.SysTrayIcon
|
|
Public Shared SysMenu As Tools.SystemMenu
|
|
|
|
Public Shared log As log4net.ILog
|
|
|
|
Public Shared IsUpdateAvailable As Boolean
|
|
Public Shared IsAnnouncementAvailable As Boolean
|
|
Public Shared ConnectionsFileLoaded As Boolean
|
|
|
|
Public Shared WithEvents tmrSqlWatcher As Timers.Timer
|
|
Public Shared LastSQLUpdate As Date
|
|
|
|
Public Shared LastSelected As String
|
|
|
|
Public Shared DefaultConnection As mRemote.Connection.Info
|
|
Public Shared DefaultInheritance As mRemote.Connection.Info.Inheritance
|
|
|
|
Public Shared ExtApps As New ArrayList()
|
|
#End Region
|
|
|
|
|
|
Public Class Windows
|
|
Public Shared treeForm As UI.Window.Tree
|
|
Public Shared treePanel As New DockContent
|
|
Public Shared configForm As UI.Window.Config
|
|
Public Shared configPanel As New DockContent
|
|
Public Shared errorsForm As UI.Window.ErrorsAndInfos
|
|
Public Shared errorsPanel As New DockContent
|
|
Public Shared sessionsForm As UI.Window.Sessions
|
|
Public Shared sessionsPanel As New DockContent
|
|
Public Shared screenshotForm As UI.Window.ScreenshotManager
|
|
Public Shared screenshotPanel As New DockContent
|
|
Public Shared quickyForm As UI.Window.QuickConnect
|
|
Public Shared quickyPanel As New DockContent
|
|
Public Shared optionsForm As UI.Window.Options
|
|
Public Shared optionsPanel As New DockContent
|
|
Public Shared saveasForm As UI.Window.SaveAs
|
|
Public Shared saveasPanel As New DockContent
|
|
Public Shared aboutForm As UI.Window.About
|
|
Public Shared aboutPanel As New DockContent
|
|
Public Shared updateForm As UI.Window.Update
|
|
Public Shared updatePanel As New DockContent
|
|
Public Shared sshtransferForm As UI.Window.SSHTransfer
|
|
Public Shared sshtransferPanel As New DockContent
|
|
Public Shared adimportForm As UI.Window.ADImport
|
|
Public Shared adimportPanel As New DockContent
|
|
Public Shared helpForm As UI.Window.Help
|
|
Public Shared helpPanel As New DockContent
|
|
Public Shared externalappsForm As UI.Window.ExternalApps
|
|
Public Shared externalappsPanel As New DockContent
|
|
Public Shared portscanForm As UI.Window.PortScan
|
|
Public Shared portscanPanel As New DockContent
|
|
Public Shared ultravncscForm As UI.Window.UltraVNCSC
|
|
Public Shared ultravncscPanel As New DockContent
|
|
Public Shared componentscheckForm As UI.Window.ComponentsCheck
|
|
Public Shared componentscheckPanel As New DockContent
|
|
Public Shared AnnouncementForm As UI.Window.Announcement
|
|
Public Shared AnnouncementPanel As New DockContent
|
|
|
|
Public Shared Sub Show(ByVal WindowType As UI.Window.Type, Optional ByVal PortScanMode As Tools.PortScan.PortScanMode = Tools.PortScan.PortScanMode.Normal)
|
|
Try
|
|
Select Case WindowType
|
|
Case UI.Window.Type.About
|
|
Windows.aboutForm = New UI.Window.About(Windows.aboutPanel)
|
|
Windows.aboutPanel = Windows.aboutForm
|
|
|
|
Windows.aboutForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.ADImport
|
|
Windows.adimportForm = New UI.Window.ADImport(Windows.adimportPanel)
|
|
Windows.adimportPanel = Windows.adimportForm
|
|
|
|
Windows.adimportPanel.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.Options
|
|
Windows.optionsForm = New UI.Window.Options(Windows.optionsPanel)
|
|
Windows.optionsPanel = Windows.optionsForm
|
|
|
|
Windows.optionsForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.SaveAs
|
|
Windows.saveasForm = New UI.Window.SaveAs(Windows.saveasPanel)
|
|
Windows.saveasPanel = Windows.saveasForm
|
|
|
|
Windows.saveasForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.SSHTransfer
|
|
Windows.sshtransferForm = New UI.Window.SSHTransfer(Windows.sshtransferPanel)
|
|
Windows.sshtransferPanel = Windows.sshtransferForm
|
|
|
|
Windows.sshtransferForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.Update
|
|
Windows.updateForm = New UI.Window.Update(Windows.updatePanel)
|
|
Windows.updatePanel = Windows.updateForm
|
|
|
|
Windows.updateForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.Help
|
|
Windows.helpForm = New UI.Window.Help(Windows.helpPanel)
|
|
Windows.helpPanel = Windows.helpForm
|
|
|
|
Windows.helpForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.ExternalApps
|
|
Windows.externalappsForm = New UI.Window.ExternalApps(Windows.externalappsPanel)
|
|
Windows.externalappsPanel = Windows.externalappsForm
|
|
|
|
Windows.externalappsForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.PortScan
|
|
Windows.portscanForm = New UI.Window.PortScan(Windows.portscanPanel, PortScanMode)
|
|
Windows.portscanPanel = Windows.portscanForm
|
|
|
|
Windows.portscanForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.UltraVNCSC
|
|
Windows.ultravncscForm = New UI.Window.UltraVNCSC(Windows.ultravncscPanel)
|
|
Windows.ultravncscPanel = Windows.ultravncscForm
|
|
|
|
Windows.ultravncscForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.ComponentsCheck
|
|
Windows.componentscheckForm = New UI.Window.ComponentsCheck(Windows.componentscheckPanel)
|
|
Windows.componentscheckPanel = Windows.componentscheckForm
|
|
|
|
Windows.componentscheckForm.Show(frmMain.pnlDock)
|
|
Case UI.Window.Type.Announcement
|
|
Windows.AnnouncementForm = New UI.Window.Announcement(AnnouncementPanel)
|
|
Windows.AnnouncementPanel = Windows.AnnouncementForm
|
|
|
|
Windows.AnnouncementForm.Show(frmMain.pnlDock)
|
|
End Select
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Show (App.Runtime.Windows) failed" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
End Class
|
|
|
|
Public Class Screens
|
|
Public Shared Sub SendFormToScreen(ByVal Screen As Screen)
|
|
Dim wasMax As Boolean
|
|
|
|
If frmMain.WindowState = FormWindowState.Maximized Then
|
|
wasMax = True
|
|
frmMain.WindowState = FormWindowState.Normal
|
|
End If
|
|
|
|
frmMain.Location = Screen.Bounds.Location
|
|
|
|
If wasMax Then
|
|
frmMain.WindowState = FormWindowState.Maximized
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub SendPanelToScreen(ByVal Panel As DockContent, ByVal Screen As Screen)
|
|
Panel.DockState = DockState.Float
|
|
Panel.ParentForm.Left = Screen.Bounds.Location.X
|
|
Panel.ParentForm.Top = Screen.Bounds.Location.Y
|
|
End Sub
|
|
End Class
|
|
|
|
Public Class Startup
|
|
Public Shared Sub CreatePanels(Optional ByVal ShowDefault As Boolean = False)
|
|
Windows.configForm = New UI.Window.Config(Windows.configPanel)
|
|
Windows.configPanel = Windows.configForm
|
|
|
|
If ShowDefault Then
|
|
Windows.configPanel.Show(frmMain.pnlDock, DockState.DockLeft)
|
|
End If
|
|
|
|
Windows.treeForm = New UI.Window.Tree(Windows.treePanel)
|
|
Windows.treePanel = Windows.treeForm
|
|
Tree.Node.TreeView = Windows.treeForm.tvConnections
|
|
|
|
If ShowDefault Then
|
|
Windows.treePanel.Show(frmMain.pnlDock, DockState.DockLeft)
|
|
Windows.treePanel.DockTo(frmMain.pnlDock.Panes(frmMain.pnlDock.Panes.Count - 1), DockStyle.Top, 0)
|
|
End If
|
|
|
|
Windows.errorsForm = New UI.Window.ErrorsAndInfos(Windows.errorsPanel)
|
|
Windows.errorsPanel = Windows.errorsForm
|
|
|
|
If ShowDefault Then
|
|
Windows.errorsPanel.AutoHidePortion = 150
|
|
Windows.errorsPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
|
|
End If
|
|
|
|
Windows.sessionsForm = New UI.Window.Sessions(Windows.sessionsPanel)
|
|
Windows.sessionsPanel = Windows.sessionsForm
|
|
|
|
If ShowDefault Then
|
|
Windows.sessionsPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
|
|
Windows.sessionsPanel.DockTo(frmMain.pnlDock.Panes(frmMain.pnlDock.Panes.Count - 1), DockStyle.Bottom, 0)
|
|
End If
|
|
|
|
Windows.screenshotForm = New UI.Window.ScreenshotManager(Windows.screenshotPanel)
|
|
Windows.screenshotPanel = Windows.screenshotForm
|
|
|
|
If ShowDefault Then
|
|
Windows.screenshotPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
|
|
Windows.screenshotForm.Hide()
|
|
End If
|
|
|
|
Windows.quickyForm = New UI.Window.QuickConnect(Windows.quickyPanel)
|
|
Windows.quickyPanel = Windows.quickyForm
|
|
|
|
If ShowDefault Then
|
|
Windows.quickyPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
|
|
Windows.quickyForm.Hide()
|
|
End If
|
|
|
|
Windows.updateForm = New UI.Window.Update(Windows.updatePanel)
|
|
Windows.updatePanel = Windows.updateForm
|
|
|
|
Windows.AnnouncementForm = New UI.Window.Announcement(Windows.AnnouncementPanel)
|
|
Windows.AnnouncementPanel = Windows.AnnouncementForm
|
|
End Sub
|
|
|
|
Public Shared Sub GetConnectionIcons()
|
|
Dim iPath As String = My.Application.Info.DirectoryPath & "\Icons\"
|
|
|
|
If Directory.Exists(iPath) = False Then
|
|
Exit Sub
|
|
End If
|
|
|
|
For Each f As String In Directory.GetFiles(iPath, "*.ico", SearchOption.AllDirectories)
|
|
Dim fInfo As New FileInfo(f)
|
|
|
|
Array.Resize(Connection.Icon.Icons, Connection.Icon.Icons.Length + 1)
|
|
Connection.Icon.Icons.SetValue(fInfo.Name.Replace(".ico", ""), Connection.Icon.Icons.Length - 1)
|
|
Next
|
|
End Sub
|
|
|
|
Public Shared Sub GetPuttySessions()
|
|
Connection.PuttySession.PuttySessions = Connection.Protocol.PuttyBase.GetSessions()
|
|
End Sub
|
|
|
|
Public Shared Sub CreateLogger()
|
|
log4net.Config.XmlConfigurator.Configure(New FileInfo("mRemote.exe.config"))
|
|
|
|
log = log4net.LogManager.GetLogger("mRemoteNG.Log")
|
|
End Sub
|
|
|
|
Public Shared Sub UpdateCheck()
|
|
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup Then
|
|
If My.Settings.UpdatePending Or My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
|
|
frmMain.tmrShowUpdate.Enabled = True
|
|
Windows.updateForm.CheckForUpdate()
|
|
AddHandler Windows.updateForm.UpdateCheckCompleted, AddressOf UpdateCheckComplete
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Shared Sub UpdateCheckComplete(ByVal UpdateAvailable As Boolean)
|
|
My.Settings.CheckForUpdatesLastCheck = Date.Now
|
|
My.Settings.UpdatePending = UpdateAvailable
|
|
IsUpdateAvailable = UpdateAvailable
|
|
End Sub
|
|
|
|
Public Shared Sub AnnouncementCheck()
|
|
If My.Settings.CheckForUpdatesAsked And My.Settings.CheckForUpdatesOnStartup And App.Editions.Spanlink.Enabled = False Then
|
|
If My.Settings.CheckForUpdatesLastCheck < Date.Now.Subtract(TimeSpan.FromDays(My.Settings.CheckForUpdatesFrequencyDays)) Then
|
|
frmMain.tmrShowUpdate.Enabled = True
|
|
Windows.AnnouncementForm.CheckForAnnouncement()
|
|
AddHandler Windows.AnnouncementForm.AnnouncementCheckCompleted, AddressOf AnnouncementCheckComplete
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Shared Sub AnnouncementCheckComplete(ByVal AnnouncementAvailable As Boolean)
|
|
My.Settings.CheckForUpdatesLastCheck = Date.Now
|
|
IsAnnouncementAvailable = AnnouncementAvailable
|
|
End Sub
|
|
|
|
Public Shared Sub ParseCommandLineArgs()
|
|
Try
|
|
Dim cmd As New Tools.Misc.CMDArguments(Environment.GetCommandLineArgs)
|
|
|
|
Dim ConsParam As String = ""
|
|
If cmd("cons") IsNot Nothing Then
|
|
ConsParam = "cons"
|
|
End If
|
|
If cmd("c") IsNot Nothing Then
|
|
ConsParam = "c"
|
|
End If
|
|
|
|
Dim ResetPosParam As String = ""
|
|
If cmd("resetpos") IsNot Nothing Then
|
|
ResetPosParam = "resetpos"
|
|
End If
|
|
If cmd("rp") IsNot Nothing Then
|
|
ResetPosParam = "rp"
|
|
End If
|
|
|
|
Dim ResetPanelsParam As String = ""
|
|
If cmd("resetpanels") IsNot Nothing Then
|
|
ResetPanelsParam = "resetpanels"
|
|
End If
|
|
If cmd("rpnl") IsNot Nothing Then
|
|
ResetPanelsParam = "rpnl"
|
|
End If
|
|
|
|
Dim ResetToolbarsParam As String = ""
|
|
If cmd("resettoolbar") IsNot Nothing Then
|
|
ResetToolbarsParam = "resettoolbar"
|
|
End If
|
|
If cmd("rtbr") IsNot Nothing Then
|
|
ResetToolbarsParam = "rtbr"
|
|
End If
|
|
|
|
If cmd("reset") IsNot Nothing Then
|
|
ResetPosParam = "rp"
|
|
ResetPanelsParam = "rpnl"
|
|
ResetToolbarsParam = "rtbr"
|
|
End If
|
|
|
|
Dim NoReconnectParam As String = ""
|
|
If cmd("noreconnect") IsNot Nothing Then
|
|
NoReconnectParam = "noreconnect"
|
|
End If
|
|
If cmd("norc") IsNot Nothing Then
|
|
NoReconnectParam = "norc"
|
|
End If
|
|
|
|
|
|
If ConsParam <> "" Then
|
|
If File.Exists(cmd(ConsParam)) = False Then
|
|
If File.Exists(My.Application.Info.DirectoryPath & "\" & cmd(ConsParam)) Then
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = My.Application.Info.DirectoryPath & "\" & cmd(ConsParam)
|
|
Exit Sub
|
|
ElseIf File.Exists(App.Info.Connections.DefaultConnectionsPath & "\" & cmd(ConsParam)) Then
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = App.Info.Connections.DefaultConnectionsPath & "\" & cmd(ConsParam)
|
|
Exit Sub
|
|
End If
|
|
Else
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = cmd(ConsParam)
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
|
|
If ResetPosParam <> "" Then
|
|
My.Settings.MainFormKiosk = False
|
|
My.Settings.MainFormLocation = New Point(999, 999)
|
|
My.Settings.MainFormSize = New Size(900, 600)
|
|
My.Settings.MainFormState = FormWindowState.Normal
|
|
End If
|
|
|
|
If ResetPanelsParam <> "" Then
|
|
My.Settings.ResetPanels = True
|
|
End If
|
|
|
|
If NoReconnectParam <> "" Then
|
|
My.Settings.NoReconnect = True
|
|
End If
|
|
|
|
If ResetToolbarsParam <> "" Then
|
|
My.Settings.ResetToolbars = True
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't parse command line args" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub CreateSQLUpdateHandlerAndStartTimer()
|
|
If My.Settings.UseSQLServer = True Then
|
|
AddHandler Tools.Misc.SQLUpdateCheckFinished, AddressOf SQLUpdateCheckFinished
|
|
tmrSqlWatcher = New Timers.Timer(3000)
|
|
tmrSqlWatcher.Start()
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Sub DestroySQLUpdateHandlerAndStopTimer()
|
|
Try
|
|
LastSQLUpdate = Nothing
|
|
RemoveHandler Tools.Misc.SQLUpdateCheckFinished, AddressOf SQLUpdateCheckFinished
|
|
tmrSqlWatcher.Stop()
|
|
tmrSqlWatcher.Close()
|
|
Catch ex As Exception
|
|
End Try
|
|
End Sub
|
|
End Class
|
|
|
|
Public Class Shutdown
|
|
Public Shared Sub Quit()
|
|
frmMain.Close()
|
|
End Sub
|
|
|
|
Public Shared Sub BeforeQuit()
|
|
Try
|
|
If App.Runtime.SysTrayIcon IsNot Nothing Then
|
|
If App.Runtime.SysTrayIcon.Disposed = False Then
|
|
App.Runtime.SysTrayIcon.Dispose()
|
|
End If
|
|
End If
|
|
|
|
If My.Settings.SaveConsOnExit Then
|
|
SaveConnections()
|
|
End If
|
|
|
|
If Editions.Spanlink.Enabled Then
|
|
If SaveReport() Then
|
|
File.Delete(My.Application.Info.DirectoryPath & "\Report.log")
|
|
End If
|
|
End If
|
|
|
|
sS.Save()
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save settings or dispose SysTray Icon" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
End Class
|
|
|
|
#Region "Default Connection"
|
|
Public Shared Function DefaultConnectionFromSettings() As mRemote.Connection.Info
|
|
DefaultConnection = New mRemote.Connection.Info
|
|
DefaultConnection.IsDefault = True
|
|
|
|
Return DefaultConnection
|
|
End Function
|
|
|
|
Public Shared Sub DefaultConnectionToSettings()
|
|
With DefaultConnection
|
|
My.Settings.ConDefaultDescription = .Description
|
|
My.Settings.ConDefaultIcon = .Icon
|
|
My.Settings.ConDefaultPanel = .Panel
|
|
My.Settings.ConDefaultUsername = .Username
|
|
My.Settings.ConDefaultPassword = .Password
|
|
My.Settings.ConDefaultDomain = .Domain
|
|
My.Settings.ConDefaultProtocol = .Protocol.ToString
|
|
My.Settings.ConDefaultPuttySession = .PuttySession
|
|
My.Settings.ConDefaultICAEncryptionStrength = .ICAEncryption.ToString
|
|
My.Settings.ConDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel.ToString
|
|
My.Settings.ConDefaultUseConsoleSession = .UseConsoleSession
|
|
My.Settings.ConDefaultRenderingEngine = .RenderingEngine.ToString
|
|
My.Settings.ConDefaultResolution = .Resolution.ToString
|
|
My.Settings.ConDefaultColors = .Colors.ToString
|
|
My.Settings.ConDefaultCacheBitmaps = .CacheBitmaps
|
|
My.Settings.ConDefaultDisplayWallpaper = .DisplayWallpaper
|
|
My.Settings.ConDefaultDisplayThemes = .DisplayThemes
|
|
My.Settings.ConDefaultRedirectKeys = .RedirectKeys
|
|
My.Settings.ConDefaultRedirectDiskDrives = .RedirectDiskDrives
|
|
My.Settings.ConDefaultRedirectPrinters = .RedirectPrinters
|
|
My.Settings.ConDefaultRedirectPorts = .RedirectPorts
|
|
My.Settings.ConDefaultRedirectSmartCards = .RedirectSmartCards
|
|
My.Settings.ConDefaultRedirectSound = .RedirectSound.ToString
|
|
My.Settings.ConDefaultPreExtApp = .PreExtApp
|
|
My.Settings.ConDefaultPostExtApp = .PostExtApp
|
|
My.Settings.ConDefaultMacAddress = .MacAddress
|
|
My.Settings.ConDefaultUserField = .UserField
|
|
My.Settings.ConDefaultVNCAuthMode = .VNCAuthMode.ToString
|
|
My.Settings.ConDefaultVNCColors = .VNCColors.ToString
|
|
My.Settings.ConDefaultVNCCompression = .VNCCompression.ToString
|
|
My.Settings.ConDefaultVNCEncoding = .VNCEncoding.ToString
|
|
My.Settings.ConDefaultVNCProxyIP = .VNCProxyIP
|
|
My.Settings.ConDefaultVNCProxyPassword = .VNCProxyPassword
|
|
My.Settings.ConDefaultVNCProxyPort = .VNCProxyPort
|
|
My.Settings.ConDefaultVNCProxyType = .VNCProxyType.ToString
|
|
My.Settings.ConDefaultVNCProxyUsername = .VNCProxyUsername
|
|
My.Settings.ConDefaultVNCSmartSizeMode = .VNCSmartSizeMode.ToString
|
|
My.Settings.ConDefaultVNCViewOnly = .VNCViewOnly
|
|
My.Settings.ConDefaultExtApp = .ExtApp
|
|
End With
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "Default Inheritance"
|
|
Public Shared Function DefaultInheritanceFromSettings() As mRemote.Connection.Info.Inheritance
|
|
DefaultInheritance = New mRemote.Connection.Info.Inheritance(Nothing)
|
|
DefaultInheritance.IsDefault = True
|
|
|
|
Return DefaultInheritance
|
|
End Function
|
|
|
|
Public Shared Sub DefaultInheritanceToSettings()
|
|
With DefaultInheritance
|
|
My.Settings.InhDefaultDescription = .Description
|
|
My.Settings.InhDefaultIcon = .Icon
|
|
My.Settings.InhDefaultPanel = .Panel
|
|
My.Settings.InhDefaultUsername = .Username
|
|
My.Settings.InhDefaultPassword = .Password
|
|
My.Settings.InhDefaultDomain = .Domain
|
|
My.Settings.InhDefaultProtocol = .Protocol
|
|
My.Settings.InhDefaultPort = .Port
|
|
My.Settings.InhDefaultPuttySession = .PuttySession
|
|
My.Settings.InhDefaultUseConsoleSession = .UseConsoleSession
|
|
My.Settings.InhDefaultRenderingEngine = .RenderingEngine
|
|
My.Settings.InhDefaultICAEncryptionStrength = .ICAEncryption
|
|
My.Settings.InhDefaultRDPAuthenticationLevel = .RDPAuthenticationLevel
|
|
My.Settings.InhDefaultResolution = .Resolution
|
|
My.Settings.InhDefaultColors = .Colors
|
|
My.Settings.InhDefaultCacheBitmaps = .CacheBitmaps
|
|
My.Settings.InhDefaultDisplayWallpaper = .DisplayWallpaper
|
|
My.Settings.InhDefaultDisplayThemes = .DisplayThemes
|
|
My.Settings.InhDefaultRedirectKeys = .RedirectKeys
|
|
My.Settings.InhDefaultRedirectDiskDrives = .RedirectDiskDrives
|
|
My.Settings.InhDefaultRedirectPrinters = .RedirectPrinters
|
|
My.Settings.InhDefaultRedirectPorts = .RedirectPorts
|
|
My.Settings.InhDefaultRedirectSmartCards = .RedirectSmartCards
|
|
My.Settings.InhDefaultRedirectSound = .RedirectSound
|
|
My.Settings.InhDefaultPreExtApp = .PreExtApp
|
|
My.Settings.InhDefaultPostExtApp = .PostExtApp
|
|
My.Settings.InhDefaultMacAddress = .MacAddress
|
|
My.Settings.InhDefaultUserField = .UserField
|
|
My.Settings.InhDefaultVNCAuthMode = .VNCAuthMode
|
|
My.Settings.InhDefaultVNCColors = .VNCColors
|
|
My.Settings.InhDefaultVNCCompression = .VNCCompression
|
|
My.Settings.InhDefaultVNCEncoding = .VNCEncoding
|
|
My.Settings.InhDefaultVNCProxyIP = .VNCProxyIP
|
|
My.Settings.InhDefaultVNCProxyPassword = .VNCProxyPassword
|
|
My.Settings.InhDefaultVNCProxyPort = .VNCProxyPort
|
|
My.Settings.InhDefaultVNCProxyType = .VNCProxyType
|
|
My.Settings.InhDefaultVNCProxyUsername = .VNCProxyUsername
|
|
My.Settings.InhDefaultVNCSmartSizeMode = .VNCSmartSizeMode
|
|
My.Settings.InhDefaultVNCViewOnly = .VNCViewOnly
|
|
My.Settings.InhDefaultExtApp = .ExtApp
|
|
End With
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "Panels"
|
|
Public Shared Function AddPanel(Optional ByVal Title As String = Language.Base.NewPanel, Optional ByVal NoTabber As Boolean = False) As Form
|
|
Try
|
|
Dim pnlcForm As New DockContent
|
|
Dim cForm As New UI.Window.Connection(pnlcForm)
|
|
pnlcForm = cForm
|
|
|
|
'create context menu
|
|
Dim cMen As New ContextMenuStrip
|
|
|
|
'create rename item
|
|
Dim cMenRen As New ToolStripMenuItem
|
|
cMenRen.Text = Language.Base.Rename
|
|
cMenRen.Image = My.Resources.Rename
|
|
cMenRen.Tag = pnlcForm
|
|
AddHandler cMenRen.Click, AddressOf cMenConnectionPanelRename_Click
|
|
|
|
Dim cMenScreens As New ToolStripMenuItem
|
|
cMenScreens.Text = Language.Base.SendTo
|
|
cMenScreens.Image = My.Resources.Monitor
|
|
cMenScreens.Tag = pnlcForm
|
|
cMenScreens.DropDownItems.Add("Dummy")
|
|
AddHandler cMenScreens.DropDownOpening, AddressOf cMenConnectionPanelScreens_DropDownOpening
|
|
|
|
cMen.Items.AddRange(New ToolStripMenuItem() {cMenRen, cMenScreens})
|
|
|
|
pnlcForm.TabPageContextMenuStrip = cMen
|
|
|
|
TryCast(cForm, UI.Window.Connection).SetFormText(Title.Replace("&", "&&"))
|
|
|
|
pnlcForm.Show(frmMain.pnlDock, DockState.Document)
|
|
|
|
If NoTabber = True Then
|
|
TryCast(cForm, UI.Window.Connection).TabController.Dispose()
|
|
End If
|
|
|
|
If NoTabber = False Then
|
|
wL.Add(cForm)
|
|
End If
|
|
|
|
Return cForm
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't add panel" & vbNewLine & ex.Message)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
Private Shared Sub cMenConnectionPanelRename_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
|
|
Try
|
|
Dim conW As UI.Window.Connection
|
|
conW = sender.Tag
|
|
|
|
Dim nTitle As String = InputBox(Language.Base.NewTitle & ":", , sender.Tag.Text.Replace("&&", "&"))
|
|
|
|
If nTitle <> "" Then
|
|
conW.SetFormText(nTitle.Replace("&", "&&"))
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't rename panel" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Shared Sub cMenConnectionPanelScreens_DropDownOpening(ByVal sender As System.Object, ByVal e As System.EventArgs)
|
|
Try
|
|
Dim cMenScreens As ToolStripMenuItem = sender
|
|
cMenScreens.DropDownItems.Clear()
|
|
|
|
For i As Integer = 0 To Screen.AllScreens.Length - 1
|
|
Dim cMenScreen As New ToolStripMenuItem(Language.Base.Screen & " " & i + 1)
|
|
cMenScreen.Tag = New ArrayList
|
|
cMenScreen.Image = My.Resources.Monitor_GoTo
|
|
TryCast(cMenScreen.Tag, ArrayList).Add(Screen.AllScreens(i))
|
|
TryCast(cMenScreen.Tag, ArrayList).Add(cMenScreens.Tag)
|
|
AddHandler cMenScreen.Click, AddressOf cMenConnectionPanelScreen_Click
|
|
|
|
cMenScreens.DropDownItems.Add(cMenScreen)
|
|
Next
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't enumerate screens" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Shared Sub cMenConnectionPanelScreen_Click(ByVal sender As Object, ByVal e As System.EventArgs)
|
|
Try
|
|
Dim screen As Screen = TryCast(sender, ToolStripMenuItem).Tag(0)
|
|
Dim panel As DockContent = TryCast(sender, ToolStripMenuItem).Tag(1)
|
|
Screens.SendPanelToScreen(panel, screen)
|
|
Catch ex As Exception
|
|
End Try
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "Credential Loading/Saving"
|
|
Public Shared Sub LoadCredentials()
|
|
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "Connections Loading/Saving"
|
|
Public Shared Sub NewConnections()
|
|
Try
|
|
cL = New Connection.List
|
|
ctL = New Container.List
|
|
|
|
Dim conL As New Config.Connections.Load
|
|
|
|
If File.Exists(App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile) = False Then
|
|
If Directory.Exists(App.Info.Connections.DefaultConnectionsPath) = False Then
|
|
Directory.CreateDirectory(App.Info.Connections.DefaultConnectionsPath)
|
|
End If
|
|
|
|
File.Copy(My.Application.Info.DirectoryPath & "\" & App.Info.Connections.DefaultConnectionsFileNew, App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile)
|
|
conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
|
|
My.Settings.LoadConsFromCustomLocation = False
|
|
Else
|
|
Dim lD As SaveFileDialog = Tools.Controls.ConnectionsSaveAsDialog
|
|
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
|
File.Copy(My.Application.Info.DirectoryPath & "\" & App.Info.Connections.DefaultConnectionsFileNew, lD.FileName, True)
|
|
conL.ConnectionFileName = lD.FileName
|
|
|
|
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
|
|
My.Settings.LoadConsFromCustomLocation = False
|
|
Else
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = conL.ConnectionFileName
|
|
End If
|
|
Else
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
|
|
conL.ConnectionList = cL
|
|
conL.ContainerList = ctL
|
|
conL.Import = False
|
|
|
|
Tree.Node.ResetTree()
|
|
|
|
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
|
|
|
conL.Load()
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't create new connections file" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Shared Sub LoadConnectionsBG(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
|
|
_WithDialog = False
|
|
_LoadUpdate = True
|
|
|
|
Dim t As New Thread(AddressOf LoadConnectionsBGd)
|
|
t.Start()
|
|
End Sub
|
|
|
|
Private Shared _WithDialog As Boolean = False
|
|
Private Shared _LoadUpdate As Boolean = False
|
|
Private Shared Sub LoadConnectionsBGd()
|
|
LoadConnections(_WithDialog, _LoadUpdate)
|
|
End Sub
|
|
|
|
Public Shared Sub LoadConnections(Optional ByVal WithDialog As Boolean = False, Optional ByVal Update As Boolean = False)
|
|
Try
|
|
Dim tmrWasEnabled As Boolean
|
|
If tmrSqlWatcher IsNot Nothing Then
|
|
tmrWasEnabled = tmrSqlWatcher.Enabled
|
|
|
|
If tmrSqlWatcher.Enabled = True Then
|
|
tmrSqlWatcher.Stop()
|
|
End If
|
|
End If
|
|
|
|
If cL IsNot Nothing And ctL IsNot Nothing Then
|
|
prevCL = cL.Copy
|
|
prevCTL = ctL.Copy
|
|
End If
|
|
|
|
cL = New Connection.List
|
|
ctL = New Container.List
|
|
|
|
Dim conL As New Config.Connections.Load
|
|
|
|
If My.Settings.UseSQLServer = False Then
|
|
If WithDialog Then
|
|
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
|
|
|
|
If lD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
|
conL.ConnectionFileName = lD.FileName
|
|
|
|
If conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
|
|
My.Settings.LoadConsFromCustomLocation = False
|
|
Else
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = conL.ConnectionFileName
|
|
End If
|
|
Else
|
|
Exit Sub
|
|
End If
|
|
Else
|
|
If My.Settings.LoadConsFromCustomLocation = False Then
|
|
conL.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
|
|
Else
|
|
conL.ConnectionFileName = My.Settings.CustomConsPath
|
|
End If
|
|
End If
|
|
|
|
If File.Exists(conL.ConnectionFileName) = False Then
|
|
If WithDialog Then
|
|
mC.AddMessage(Messages.MessageClass.WarningMsg, "Connections file could not be loaded!" & vbNewLine & "Location was: " & conL.ConnectionFileName)
|
|
Else
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "Connections file could not be loaded!" & vbNewLine & "Location was: " & conL.ConnectionFileName & vbNewLine & "Starting with new connections file.")
|
|
App.Runtime.NewConnections()
|
|
End If
|
|
|
|
Exit Sub
|
|
End If
|
|
|
|
Try
|
|
If App.Editions.Spanlink.Enabled = False Then
|
|
File.Copy(conL.ConnectionFileName, conL.ConnectionFileName & "_BAK", True)
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.WarningMsg, "Couldn't create backup of connections file" & vbNewLine & vbNewLine & ex.Message)
|
|
End Try
|
|
End If
|
|
|
|
|
|
conL.ConnectionList = cL
|
|
conL.ContainerList = ctL
|
|
|
|
If prevCL IsNot Nothing And prevCTL IsNot Nothing Then
|
|
conL.PreviousConnectionList = prevCL
|
|
conL.PreviousContainerList = prevCTL
|
|
End If
|
|
|
|
If Update = True Then
|
|
conL.PreviousSelected = LastSelected
|
|
End If
|
|
|
|
conL.Import = False
|
|
|
|
Tree.Node.ResetTree()
|
|
|
|
conL.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
|
|
|
conL.UseSQL = My.Settings.UseSQLServer
|
|
conL.SQLHost = My.Settings.SQLHost
|
|
conL.SQLUsername = My.Settings.SQLUser
|
|
conL.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
|
|
conL.SQLUpdate = Update
|
|
|
|
conL.Load()
|
|
|
|
If My.Settings.UseSQLServer = True Then
|
|
LastSQLUpdate = Now
|
|
End If
|
|
|
|
If tmrWasEnabled And tmrSqlWatcher IsNot Nothing Then
|
|
tmrSqlWatcher.Start()
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't load connections file" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub ImportConnections()
|
|
Try
|
|
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsLoadDialog
|
|
lD.Multiselect = True
|
|
|
|
If lD.ShowDialog = DialogResult.OK Then
|
|
Dim nNode As TreeNode = Nothing
|
|
|
|
For i As Integer = 0 To lD.FileNames.Length - 1
|
|
nNode = Tree.Node.AddNode(Tree.Node.Type.Container, "Import #" & i)
|
|
|
|
Dim nContI As New mRemote.Container.Info()
|
|
nContI.TreeNode = nNode
|
|
nContI.ConnectionInfo = New mRemote.Connection.Info(nContI)
|
|
|
|
If Tree.Node.SelectedNode IsNot Nothing Then
|
|
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Container Then
|
|
nContI.Parent = Tree.Node.SelectedNode.Tag
|
|
End If
|
|
End If
|
|
|
|
nNode.Tag = nContI
|
|
ctL.Add(nContI)
|
|
|
|
Dim conL As New Config.Connections.Load
|
|
conL.ConnectionFileName = lD.FileNames(i)
|
|
conL.RootTreeNode = nNode
|
|
conL.Import = True
|
|
conL.ConnectionList = App.Runtime.cL
|
|
conL.ContainerList = App.Runtime.ctL
|
|
|
|
conL.Load()
|
|
|
|
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't import connections file" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub ImportConnectionsFromRDPFiles()
|
|
Try
|
|
Dim lD As OpenFileDialog = Tools.Controls.ConnectionsRDPImportDialog
|
|
lD.Multiselect = True
|
|
|
|
If lD.ShowDialog = DialogResult.OK Then
|
|
For i As Integer = 0 To lD.FileNames.Length - 1
|
|
Dim lines As String() = File.ReadAllLines(lD.FileNames(i))
|
|
|
|
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Path.GetFileNameWithoutExtension(lD.FileNames(i)))
|
|
|
|
Dim nConI As New mRemote.Connection.Info()
|
|
nConI.Inherit = New Connection.Info.Inheritance(nConI)
|
|
|
|
nConI.Name = nNode.Text
|
|
|
|
For Each l As String In lines
|
|
Dim pName As String = l.Substring(0, l.IndexOf(":"))
|
|
Dim pValue As String = l.Substring(l.LastIndexOf(":") + 1)
|
|
|
|
Select Case LCase(pName)
|
|
Case "full address"
|
|
nConI.Hostname = pValue
|
|
Case "server port"
|
|
nConI.Port = pValue
|
|
Case "username"
|
|
nConI.Username = pValue
|
|
Case "domain"
|
|
nConI.Domain = pValue
|
|
Case "session bpp"
|
|
Select Case pValue
|
|
Case 8
|
|
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors256
|
|
Case 16
|
|
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors16Bit
|
|
Case 24
|
|
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors24Bit
|
|
Case 32
|
|
nConI.Colors = Connection.Protocol.RDP.RDPColors.Colors32Bit
|
|
End Select
|
|
Case "bitmapcachepersistenable"
|
|
If pValue = 1 Then
|
|
nConI.CacheBitmaps = True
|
|
Else
|
|
nConI.CacheBitmaps = False
|
|
End If
|
|
Case "screen mode id"
|
|
If pValue = 2 Then
|
|
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.Fullscreen
|
|
Else
|
|
nConI.Resolution = Connection.Protocol.RDP.RDPResolutions.FitToWindow
|
|
End If
|
|
Case "connect to console"
|
|
If pValue = 1 Then
|
|
nConI.UseConsoleSession = True
|
|
End If
|
|
Case "disable wallpaper"
|
|
If pValue = 1 Then
|
|
nConI.DisplayWallpaper = True
|
|
Else
|
|
nConI.DisplayWallpaper = False
|
|
End If
|
|
Case "disable themes"
|
|
If pValue = 1 Then
|
|
nConI.DisplayThemes = True
|
|
Else
|
|
nConI.DisplayThemes = False
|
|
End If
|
|
Case "redirectsmartcards"
|
|
If pValue = 1 Then
|
|
nConI.RedirectSmartCards = True
|
|
Else
|
|
nConI.RedirectSmartCards = False
|
|
End If
|
|
Case "redirectdrives"
|
|
If pValue = 1 Then
|
|
nConI.RedirectDiskDrives = True
|
|
Else
|
|
nConI.RedirectDiskDrives = False
|
|
End If
|
|
Case "redirectcomports"
|
|
If pValue = 1 Then
|
|
nConI.RedirectPorts = True
|
|
Else
|
|
nConI.RedirectPorts = False
|
|
End If
|
|
Case "redirectprinters"
|
|
If pValue = 1 Then
|
|
nConI.RedirectPrinters = True
|
|
Else
|
|
nConI.RedirectPrinters = False
|
|
End If
|
|
Case "audiomode"
|
|
Select Case pValue
|
|
Case 0
|
|
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.BringToThisComputer
|
|
Case 1
|
|
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.LeaveAtRemoteComputer
|
|
Case 2
|
|
nConI.RedirectSound = Connection.Protocol.RDP.RDPSounds.DoNotPlay
|
|
End Select
|
|
End Select
|
|
Next
|
|
|
|
nNode.Tag = nConI
|
|
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
|
|
|
|
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
|
|
nConI.Parent = nNode.Parent.Tag
|
|
End If
|
|
|
|
cL.Add(nConI)
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't import rdp file" & vbNewLine & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub ImportConnectionsFromPortScan(ByVal Hosts As ArrayList, ByVal Protocol As mRemote.Connection.Protocol.Protocols)
|
|
For Each Host As Tools.PortScan.ScanHost In Hosts
|
|
Dim finalProt As mRemote.Connection.Protocol.Protocols
|
|
Dim protOK As Boolean = False
|
|
|
|
Dim nNode As TreeNode = Tree.Node.AddNode(Tree.Node.Type.Connection, Host.HostNameWithoutDomain)
|
|
|
|
Dim nConI As New mRemote.Connection.Info()
|
|
nConI.Inherit = New Connection.Info.Inheritance(nConI)
|
|
|
|
nConI.Name = Host.HostNameWithoutDomain
|
|
nConI.Hostname = Host.HostName
|
|
|
|
Select Case Protocol
|
|
Case Connection.Protocol.Protocols.SSH2
|
|
If Host.SSH Then
|
|
finalProt = Connection.Protocol.Protocols.SSH2
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.Telnet
|
|
If Host.Telnet Then
|
|
finalProt = Connection.Protocol.Protocols.Telnet
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.HTTP
|
|
If Host.HTTP Then
|
|
finalProt = Connection.Protocol.Protocols.HTTP
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.HTTPS
|
|
If Host.HTTPS Then
|
|
finalProt = Connection.Protocol.Protocols.HTTPS
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.Rlogin
|
|
If Host.Rlogin Then
|
|
finalProt = Connection.Protocol.Protocols.Rlogin
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.RDP
|
|
If Host.RDP Then
|
|
finalProt = Connection.Protocol.Protocols.RDP
|
|
protOK = True
|
|
End If
|
|
Case Connection.Protocol.Protocols.VNC
|
|
If Host.VNC Then
|
|
finalProt = Connection.Protocol.Protocols.VNC
|
|
protOK = True
|
|
End If
|
|
End Select
|
|
|
|
If protOK = False Then
|
|
nConI = Nothing
|
|
Else
|
|
nConI.Protocol = finalProt
|
|
nConI.SetDefaultPort()
|
|
|
|
nNode.Tag = nConI
|
|
Windows.treeForm.tvConnections.SelectedNode.Nodes.Add(nNode)
|
|
|
|
If Tree.Node.GetNodeType(nNode.Parent) = Tree.Node.Type.Container Then
|
|
nConI.Parent = nNode.Parent.Tag
|
|
End If
|
|
|
|
cL.Add(nConI)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Public Shared Sub ImportConnectionsFromCSV()
|
|
|
|
End Sub
|
|
|
|
Public Shared Sub SaveConnectionsBG()
|
|
_SaveUpdate = True
|
|
|
|
Dim t As New Thread(AddressOf SaveConnectionsBGd)
|
|
t.Start()
|
|
End Sub
|
|
|
|
Private Shared _SaveUpdate As Boolean = False
|
|
Private Shared _SaveLock As Object = New Object
|
|
Private Shared Sub SaveConnectionsBGd()
|
|
Monitor.Enter(_SaveLock)
|
|
SaveConnections(_SaveUpdate)
|
|
Monitor.Exit(_SaveLock)
|
|
End Sub
|
|
|
|
Public Shared Sub SaveConnections(Optional ByVal Update As Boolean = False)
|
|
Try
|
|
If Update = True And My.Settings.UseSQLServer = False Then
|
|
Exit Sub
|
|
End If
|
|
|
|
Dim tmrWasEnabled As Boolean
|
|
|
|
If tmrSqlWatcher IsNot Nothing Then
|
|
tmrWasEnabled = tmrSqlWatcher.Enabled
|
|
If tmrSqlWatcher.Enabled = True Then
|
|
tmrSqlWatcher.Stop()
|
|
End If
|
|
End If
|
|
|
|
Dim conS As New Config.Connections.Save
|
|
|
|
If My.Settings.UseSQLServer = False Then
|
|
If My.Settings.LoadConsFromCustomLocation = False Then
|
|
conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile
|
|
Else
|
|
conS.ConnectionFileName = My.Settings.CustomConsPath
|
|
End If
|
|
End If
|
|
|
|
conS.ConnectionList = cL
|
|
conS.ContainerList = ctL
|
|
conS.Export = False
|
|
conS.SaveSecurity = New Security.Save(False)
|
|
conS.RootTreeNode = Windows.treeForm.tvConnections.Nodes(0)
|
|
|
|
If My.Settings.UseSQLServer = True Then
|
|
conS.SaveFormat = Config.Connections.Save.Format.SQL
|
|
conS.SQLHost = My.Settings.SQLHost
|
|
conS.SQLUsername = My.Settings.SQLUser
|
|
conS.SQLPassword = Security.Crypt.Decrypt(My.Settings.SQLPass, App.Info.General.EncryptionKey)
|
|
End If
|
|
|
|
conS.Save()
|
|
|
|
If My.Settings.UseSQLServer = True Then
|
|
LastSQLUpdate = Now
|
|
End If
|
|
|
|
If tmrWasEnabled Then
|
|
tmrSqlWatcher.Start()
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save connections file" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub SaveConnectionsAs(ByVal SaveSecurity As Security.Save, ByVal RootNode As TreeNode)
|
|
Try
|
|
Dim tmrWasEnabled As Boolean
|
|
|
|
If tmrSqlWatcher IsNot Nothing Then
|
|
tmrWasEnabled = tmrSqlWatcher.Enabled
|
|
If tmrSqlWatcher.Enabled = True Then
|
|
tmrSqlWatcher.Stop()
|
|
End If
|
|
End If
|
|
|
|
Dim conS As New Config.Connections.Save
|
|
|
|
Dim sD As SaveFileDialog = Tools.Controls.ConnectionsSaveAsDialog
|
|
|
|
If sD.ShowDialog = System.Windows.Forms.DialogResult.OK Then
|
|
conS.ConnectionFileName = sD.FileName
|
|
Else
|
|
Exit Sub
|
|
End If
|
|
|
|
Select Case sD.FilterIndex
|
|
Case 1
|
|
conS.SaveFormat = Config.Connections.Save.Format.mRXML
|
|
Case 2
|
|
conS.SaveFormat = Config.Connections.Save.Format.mRCSV
|
|
Case 3
|
|
conS.SaveFormat = Config.Connections.Save.Format.vRDCSV
|
|
End Select
|
|
|
|
If RootNode Is Windows.treeForm.tvConnections.Nodes(0) Then
|
|
If conS.SaveFormat <> Config.Connections.Save.Format.mRXML And conS.SaveFormat <> Config.Connections.Save.Format.None Then
|
|
Else
|
|
If conS.ConnectionFileName = App.Info.Connections.DefaultConnectionsPath & "\" & App.Info.Connections.DefaultConnectionsFile Then
|
|
My.Settings.LoadConsFromCustomLocation = False
|
|
Else
|
|
My.Settings.LoadConsFromCustomLocation = True
|
|
My.Settings.CustomConsPath = conS.ConnectionFileName
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
conS.ConnectionList = cL
|
|
conS.ContainerList = ctL
|
|
If RootNode IsNot Windows.treeForm.tvConnections.Nodes(0) Then
|
|
conS.Export = True
|
|
End If
|
|
conS.SaveSecurity = SaveSecurity
|
|
conS.RootTreeNode = RootNode
|
|
|
|
conS.Save()
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save connections file as" & vbNewLine & ex.Message)
|
|
End Try
|
|
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "Opening Connection"
|
|
Private Shared nProt As Connection.Protocol.Base
|
|
Private Shared nCi As Connection.Info
|
|
|
|
Public Shared Function CreateQuicky(ByVal ConString As String, Optional ByVal Protocol As Connection.Protocol.Protocols = Connection.Protocol.Protocols.NONE) As Connection.Info
|
|
Try
|
|
nCi = New Connection.Info
|
|
|
|
If Protocol <> Connection.Protocol.Protocols.NONE Then
|
|
nCi.Protocol = Protocol
|
|
End If
|
|
|
|
Dim qConS() As String = Split(ConString, ":")
|
|
Dim qHost As String = ""
|
|
Dim qPort As Integer = 0
|
|
|
|
For i As Integer = 0 To qConS.Length - 1
|
|
If i = 0 Then
|
|
qHost = qConS(i)
|
|
End If
|
|
|
|
If i = 1 Then
|
|
Try
|
|
qPort = Int(qConS(i))
|
|
Catch ex As Exception
|
|
qHost += ":" & qConS(i)
|
|
End Try
|
|
End If
|
|
|
|
If i = 2 Then
|
|
Try
|
|
qPort = Int(qConS(i))
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
Next
|
|
|
|
If qHost <> "" Then
|
|
nCi.Name = "Quicky: " & qHost
|
|
nCi.Hostname = qHost
|
|
nCi.Port = qPort
|
|
nCi.IsQuicky = True
|
|
|
|
Windows.quickyForm.ConnectionInfo = nCi
|
|
|
|
If Protocol = Connection.Protocol.Protocols.NONE Then
|
|
Windows.quickyPanel.Show(frmMain.pnlDock, DockState.DockBottomAutoHide)
|
|
Else
|
|
|
|
End If
|
|
|
|
Return nCi
|
|
Else
|
|
'--------
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Creating quicky failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
|
|
Return Nothing
|
|
End Function
|
|
|
|
Public Shared Sub OpenConnection()
|
|
Try
|
|
OpenConnection(Connection.Info.Force.None)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub OpenConnection(ByVal Force As mRemote.Connection.Info.Force)
|
|
Try
|
|
If Windows.treeForm.tvConnections.SelectedNode.Tag Is Nothing Then
|
|
Exit Sub
|
|
End If
|
|
|
|
If Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Connection Then
|
|
OpenConnection(Windows.treeForm.tvConnections.SelectedNode.Tag, Force)
|
|
ElseIf Tree.Node.GetNodeType(Tree.Node.SelectedNode) = Tree.Node.Type.Container Then
|
|
For Each tNode As TreeNode In Tree.Node.SelectedNode.Nodes
|
|
If Tree.Node.GetNodeType(tNode) = Tree.Node.Type.Connection Then
|
|
If tNode.Tag IsNot Nothing Then
|
|
OpenConnection(tNode.Tag, Force)
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info)
|
|
Try
|
|
OpenConnection(ConnectionInfo, Connection.Info.Force.None)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal ConnectionForm As Form)
|
|
Try
|
|
OpenConnectionFinal(ConnectionInfo, Connection.Info.Force.None, ConnectionForm)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal ConnectionForm As Form, ByVal Force As Connection.Info.Force)
|
|
Try
|
|
OpenConnectionFinal(ConnectionInfo, Force, ConnectionForm)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub OpenConnection(ByVal ConnectionInfo As mRemote.Connection.Info, ByVal Force As mRemote.Connection.Info.Force)
|
|
Try
|
|
OpenConnectionFinal(ConnectionInfo, Force, Nothing)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Private Shared Sub OpenConnectionFinal(ByVal nCi As mRemote.Connection.Info, ByVal Force As mRemote.Connection.Info.Force, ByVal ConForm As Form)
|
|
Try
|
|
If nCi.Hostname = "" And nCi.Protocol <> Connection.Protocol.Protocols.IntApp Then
|
|
mC.AddMessage(Messages.MessageClass.WarningMsg, "Cannot open connection: No hostname specified")
|
|
Exit Sub
|
|
End If
|
|
|
|
If nCi.PreExtApp <> "" Then
|
|
Dim extA As Tools.ExternalApp = App.Runtime.GetExtAppByName(nCi.PreExtApp)
|
|
If extA IsNot Nothing Then
|
|
extA.Start(nCi)
|
|
End If
|
|
End If
|
|
|
|
If (Force And Connection.Info.Force.DoNotJump) <> Connection.Info.Force.DoNotJump Then
|
|
If SwitchToOpenConnection(nCi) Then
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
|
|
|
|
Select Case nCi.Protocol
|
|
Case Connection.Protocol.Protocols.RDP
|
|
nProt = New Connection.Protocol.RDP
|
|
Case Connection.Protocol.Protocols.VNC
|
|
nProt = New Connection.Protocol.VNC
|
|
Case Connection.Protocol.Protocols.SSH1
|
|
nProt = New Connection.Protocol.SSH1
|
|
Case Connection.Protocol.Protocols.SSH2
|
|
nProt = New Connection.Protocol.SSH2
|
|
Case Connection.Protocol.Protocols.Telnet
|
|
nProt = New Connection.Protocol.Telnet
|
|
Case Connection.Protocol.Protocols.Rlogin
|
|
nProt = New Connection.Protocol.Rlogin
|
|
Case Connection.Protocol.Protocols.RAW
|
|
nProt = New Connection.Protocol.RAW
|
|
Case Connection.Protocol.Protocols.HTTP
|
|
nProt = New Connection.Protocol.HTTP(nCi.RenderingEngine)
|
|
Case Connection.Protocol.Protocols.HTTPS
|
|
nProt = New Connection.Protocol.HTTPS(nCi.RenderingEngine)
|
|
Case Connection.Protocol.Protocols.ICA
|
|
nProt = New Connection.Protocol.ICA
|
|
Case Connection.Protocol.Protocols.IntApp
|
|
nProt = New Connection.Protocol.IntApp
|
|
|
|
If nCi.ExtApp = "" Then
|
|
Throw New Exception("No Ext. App specified.")
|
|
End If
|
|
Case Else
|
|
Exit Sub
|
|
End Select
|
|
|
|
Dim cContainer As Control
|
|
Dim cForm As Form
|
|
|
|
Dim cPnl As String
|
|
If nCi.Panel = "" Or (Force And Connection.Info.Force.OverridePanel) = Connection.Info.Force.OverridePanel Or My.Settings.AlwaysShowPanelSelectionDlg Then
|
|
Dim frmPnl As New frmChoosePanel
|
|
If frmPnl.ShowDialog = DialogResult.OK Then
|
|
cPnl = frmPnl.Panel
|
|
Else
|
|
Exit Sub
|
|
End If
|
|
Else
|
|
cPnl = nCi.Panel
|
|
End If
|
|
|
|
If ConForm Is Nothing Then
|
|
cForm = wL.FromString(cPnl)
|
|
Else
|
|
cForm = ConForm
|
|
End If
|
|
|
|
If cForm Is Nothing Then
|
|
cForm = AddPanel(cPnl)
|
|
cForm.Focus()
|
|
Else
|
|
TryCast(cForm, UI.Window.Connection).Show(frmMain.pnlDock)
|
|
TryCast(cForm, UI.Window.Connection).Focus()
|
|
End If
|
|
|
|
cContainer = TryCast(cForm, UI.Window.Connection).AddConnectionTab(nCi)
|
|
|
|
If nCi.Protocol = Connection.Protocol.Protocols.IntApp Then
|
|
If App.Runtime.GetExtAppByName(nCi.ExtApp).Icon IsNot Nothing Then
|
|
TryCast(cContainer, Magic.Controls.TabPage).Icon = App.Runtime.GetExtAppByName(nCi.ExtApp).Icon
|
|
End If
|
|
End If
|
|
|
|
AddHandler nProt.Closed, AddressOf TryCast(cForm, UI.Window.Connection).Prot_Event_Closed
|
|
|
|
AddHandler nProt.Disconnected, AddressOf Prot_Event_Disconnected
|
|
AddHandler nProt.Connected, AddressOf Prot_Event_Connected
|
|
AddHandler nProt.Closed, AddressOf Prot_Event_Closed
|
|
AddHandler nProt.ErrorOccured, AddressOf Prot_Event_ErrorOccured
|
|
|
|
|
|
nProt.InterfaceControl = New Connection.InterfaceControl(cContainer, nProt, nCi)
|
|
|
|
nProt.Force = Force
|
|
|
|
If nProt.SetProps() = False Then
|
|
nProt.Close()
|
|
Exit Sub
|
|
End If
|
|
|
|
If nProt.Connect() = False Then
|
|
nProt.Close()
|
|
Exit Sub
|
|
End If
|
|
|
|
nCi.OpenConnections.Add(nProt)
|
|
|
|
If nCi.IsQuicky = False Then
|
|
If nCi.Protocol <> Connection.Protocol.Protocols.IntApp Then
|
|
Tree.Node.SetNodeImage(nCi.TreeNode, Images.Enums.TreeImage.ConnectionOpen)
|
|
Else
|
|
Dim extApp As Tools.ExternalApp = GetExtAppByName(nCi.ExtApp)
|
|
If extApp IsNot Nothing Then
|
|
If extApp.TryIntegrate Then
|
|
If nCi.TreeNode IsNot Nothing Then
|
|
Tree.Node.SetNodeImage(nCi.TreeNode, Images.Enums.TreeImage.ConnectionOpen)
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Opening connection failed" & vbNewLine & ex.Message)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Function SwitchToOpenConnection(ByVal nCi As Connection.Info) As Boolean
|
|
Dim IC As mRemote.Connection.InterfaceControl = FindConnectionContainer(nCi)
|
|
|
|
If IC IsNot Nothing Then
|
|
TryCast(IC.FindForm, UI.Window.Connection).Focus()
|
|
TryCast(IC.FindForm, UI.Window.Connection).Show(frmMain.pnlDock)
|
|
Dim t As Magic.Controls.TabPage = IC.Parent
|
|
t.Selected = True
|
|
Return True
|
|
End If
|
|
|
|
Return False
|
|
End Function
|
|
#End Region
|
|
|
|
#Region "Event Handlers"
|
|
Public Shared Sub Prot_Event_Disconnected(ByVal sender As Object, ByVal DisconnectedMessage As String)
|
|
Try
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Disconnected" & vbNewLine & "Message: " & DisconnectedMessage, True)
|
|
|
|
Dim Prot As Connection.Protocol.Base = sender
|
|
|
|
If Prot.InterfaceControl.Info.Protocol = Connection.Protocol.Protocols.RDP Then
|
|
If DisconnectedMessage > 3 Then
|
|
mC.AddMessage(Messages.MessageClass.WarningMsg, "RDP Disconnected!" & vbNewLine & "Error Code: " & DisconnectedMessage & vbNewLine & "Error Description: " & Connection.Protocol.RDP.DisconnectionErrors.GetError(DisconnectedMessage))
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event Disconnected failed" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub Prot_Event_Closed(ByVal sender As Object)
|
|
Try
|
|
Dim Prot As Connection.Protocol.Base = sender
|
|
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Closed", True)
|
|
|
|
If App.Editions.Spanlink.Enabled Then
|
|
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & Prot.InterfaceControl.Info.Hostname & " via " & Prot.InterfaceControl.Info.Protocol.ToString & " closed by user " & My.User.Name & " (Description: " & Prot.InterfaceControl.Info.Description & "; User Field: " & Prot.InterfaceControl.Info.UserField & ")")
|
|
Else
|
|
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & Prot.InterfaceControl.Info.Hostname & " via " & Prot.InterfaceControl.Info.Protocol.ToString & " closed by user " & My.User.Name)
|
|
End If
|
|
|
|
|
|
Prot.InterfaceControl.Info.OpenConnections.Remove(Prot)
|
|
|
|
If Prot.InterfaceControl.Info.OpenConnections.Count < 1 And Prot.InterfaceControl.Info.IsQuicky = False Then
|
|
Tree.Node.SetNodeImage(Prot.InterfaceControl.Info.TreeNode, Images.Enums.TreeImage.ConnectionClosed)
|
|
End If
|
|
|
|
If Prot.InterfaceControl.Info.PostExtApp <> "" Then
|
|
Dim extA As Tools.ExternalApp = App.Runtime.GetExtAppByName(Prot.InterfaceControl.Info.PostExtApp)
|
|
If extA IsNot Nothing Then
|
|
extA.Start(Prot.InterfaceControl.Info)
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event Closed failed" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Sub Prot_Event_Connected(ByVal sender As Object)
|
|
Dim prot As mRemote.Connection.Protocol.Base = sender
|
|
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event Connected", True)
|
|
mC.AddMessage(Messages.MessageClass.ReportMsg, "Connection to " & prot.InterfaceControl.Info.Hostname & " via " & prot.InterfaceControl.Info.Protocol.ToString & " established by user " & My.User.Name & " (Description: " & prot.InterfaceControl.Info.Description & "; User Field: " & prot.InterfaceControl.Info.UserField & ")")
|
|
End Sub
|
|
|
|
Public Shared Sub Prot_Event_ErrorOccured(ByVal sender As Object, ByVal ErrorMessage As String)
|
|
Try
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "Protocol Event ErrorOccured", True)
|
|
|
|
Dim Prot As Connection.Protocol.Base = sender
|
|
|
|
If Prot.InterfaceControl.Info.Protocol = Connection.Protocol.Protocols.RDP Then
|
|
If ErrorMessage > -1 Then
|
|
mC.AddMessage(Messages.MessageClass.WarningMsg, "RDP Error!" & vbNewLine & "Error Code: " & ErrorMessage & vbNewLine & "Error Description: " & Connection.Protocol.RDP.FatalErrors.GetError(ErrorMessage))
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Protocol Event ErrorOccured failed" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
#End Region
|
|
|
|
#Region "External Apps"
|
|
Public Shared Sub GetExtApps()
|
|
Array.Clear(Tools.ExternalAppsTypeConverter.ExternalApps, 0, Tools.ExternalAppsTypeConverter.ExternalApps.Length)
|
|
Array.Resize(Tools.ExternalAppsTypeConverter.ExternalApps, ExtApps.Count + 1)
|
|
|
|
Dim i As Integer = 0
|
|
|
|
For Each extA As Tools.ExternalApp In ExtApps
|
|
Tools.ExternalAppsTypeConverter.ExternalApps(i) = extA.DisplayName
|
|
|
|
i += 1
|
|
Next
|
|
|
|
Tools.ExternalAppsTypeConverter.ExternalApps(i) = ""
|
|
End Sub
|
|
|
|
Public Shared Function GetExtAppByName(ByVal Name As String) As Tools.ExternalApp
|
|
For Each extA As Tools.ExternalApp In ExtApps
|
|
If extA.DisplayName = Name Then
|
|
Return extA
|
|
End If
|
|
Next
|
|
|
|
Return Nothing
|
|
End Function
|
|
#End Region
|
|
|
|
#Region "Misc"
|
|
Public Shared Sub GoToURL(ByVal URL As String)
|
|
Dim cI As New mRemote.Connection.Info
|
|
|
|
cI.Name = "Website"
|
|
cI.Hostname = URL
|
|
If URL.StartsWith("https:") Then
|
|
cI.Protocol = Connection.Protocol.Protocols.HTTPS
|
|
Else
|
|
cI.Protocol = Connection.Protocol.Protocols.HTTP
|
|
End If
|
|
cI.SetDefaultPort()
|
|
cI.IsQuicky = True
|
|
|
|
App.Runtime.OpenConnection(cI, mRemote.Connection.Info.Force.DoNotJump)
|
|
End Sub
|
|
|
|
Public Shared Sub GoToWebsite()
|
|
GoToURL(App.Info.General.URLHome)
|
|
End Sub
|
|
|
|
Public Shared Sub GoToDonate()
|
|
GoToURL(App.Info.General.URLDonate)
|
|
End Sub
|
|
|
|
Public Shared Sub GoToForum()
|
|
GoToURL(App.Info.General.URLForum)
|
|
End Sub
|
|
|
|
Public Shared Sub GoToBugs()
|
|
GoToURL(App.Info.General.URLBugs)
|
|
End Sub
|
|
|
|
Public Shared Sub Report(ByVal Text As String)
|
|
Try
|
|
Dim sWr As New StreamWriter(My.Application.Info.DirectoryPath & "\Report.log", True)
|
|
sWr.WriteLine(Text)
|
|
sWr.Close()
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Writing to report file failed!")
|
|
End Try
|
|
End Sub
|
|
|
|
Public Shared Function SaveReport() As Boolean
|
|
Try
|
|
Dim sRd As New StreamReader(My.Application.Info.DirectoryPath & "\Report.log")
|
|
Dim Text As String = sRd.ReadToEnd
|
|
sRd.Close()
|
|
|
|
Dim sWr As New StreamWriter(App.Info.General.ReportingFilePath, True)
|
|
sWr.Write(Text)
|
|
sWr.Close()
|
|
|
|
Return True
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Couldn't save report to final location. (App.Runtime.SaveReport)" & vbNewLine & ex.Message, True)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Shared Sub SetMainFormText(Optional ByVal ConnectionFileName As String = "")
|
|
Try
|
|
Dim txt As String = "mRemoteNG"
|
|
|
|
If App.Editions.Spanlink.Enabled Then
|
|
txt &= " | Spanlink Communications"
|
|
Else
|
|
If ConnectionFileName <> "" And ConnectionsFileLoaded = True Then
|
|
If My.Settings.ShowCompleteConsPathInTitle Then
|
|
txt &= " - " & ConnectionFileName
|
|
Else
|
|
txt &= " - " & ConnectionFileName.Substring(ConnectionFileName.LastIndexOf("\") + 1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
ChangeMainFormText(txt)
|
|
Catch ex As Exception
|
|
mC.AddMessage(Messages.MessageClass.ErrorMsg, "Setting main form text failed" & vbNewLine & ex.Message, True)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Delegate Sub ChangeMainFormTextCB(ByVal Text As String)
|
|
Private Shared Sub ChangeMainFormText(ByVal Text As String)
|
|
If frmMain.InvokeRequired = True Then
|
|
Dim d As New ChangeMainFormTextCB(AddressOf ChangeMainFormText)
|
|
frmMain.Invoke(d, New Object() {Text})
|
|
Else
|
|
frmMain.Text = Text
|
|
End If
|
|
End Sub
|
|
|
|
Public Shared Function FindConnectionContainer(ByVal ConI As Connection.Info) As Connection.InterfaceControl
|
|
If ConI.OpenConnections.Count > 0 Then
|
|
For i As Integer = 0 To wL.Count - 1
|
|
If TypeOf wL.Items(i) Is UI.Window.Connection Then
|
|
Dim conW As UI.Window.Connection = wL.Items(i)
|
|
|
|
If conW.TabController IsNot Nothing Then
|
|
For Each t As Magic.Controls.TabPage In conW.TabController.TabPages
|
|
If t.Controls(0) IsNot Nothing Then
|
|
If TypeOf t.Controls(0) Is Connection.InterfaceControl Then
|
|
Dim IC As Connection.InterfaceControl = t.Controls(0)
|
|
If IC.Info Is ConI Then
|
|
Return IC
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Return Nothing
|
|
End Function
|
|
#End Region
|
|
|
|
#Region "SQL Watcher"
|
|
Private Shared Sub tmrSqlWatcher_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles tmrSqlWatcher.Elapsed
|
|
Tools.Misc.IsSQLUpdateAvailableBG()
|
|
End Sub
|
|
|
|
Private Shared Sub SQLUpdateCheckFinished(ByVal UpdateAvailable As Boolean)
|
|
If UpdateAvailable = True Then
|
|
mC.AddMessage(Messages.MessageClass.InformationMsg, "SQL Update check finished and there is an update available! Going to refresh connections.", True)
|
|
LoadConnectionsBG()
|
|
End If
|
|
End Sub
|
|
#End Region
|
|
|
|
End Class
|
|
End Namespace |