Files
mRemoteNG/mRemoteV1/ApplicationEvents.vb
Riley McArdle 036b90370f Code cleanup.
2011-06-05 01:54:47 -05:00

68 lines
2.7 KiB
VB.net

Namespace My
' The following events are available for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Public mutex As System.Threading.Mutex
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
If My.Settings.SingleInstance Then
Dim mutexID As String = "mRemoteNG_SingleInstanceMutex"
mutex = New System.Threading.Mutex(False, mutexID)
If Not mutex.WaitOne(0, False) Then
Try
SwitchToCurrentInstance()
Catch ex As Exception
End Try
End
End If
GC.KeepAlive(mutex)
End If
End Sub
Private Function GetCurrentInstanceWindowHandle() As IntPtr
Dim hWnd As IntPtr = IntPtr.Zero
Dim curProc As Process = Process.GetCurrentProcess
For Each proc As Process In Process.GetProcessesByName(curProc.ProcessName)
If proc.Id <> curProc.Id And proc.MainModule.FileName = curProc.MainModule.FileName And proc.MainWindowHandle <> IntPtr.Zero Then
hWnd = proc.MainWindowHandle
Exit For
End If
Next
Return hWnd
End Function
Private Sub SwitchToCurrentInstance()
Dim hWnd As IntPtr = GetCurrentInstanceWindowHandle()
If hWnd <> IntPtr.Zero Then
'Restore window if minimized. Do not restore if already in
'normal or maximised window state, since we don't want to
'change the current state of the window.
If App.Native.IsIconic(hWnd) <> 0 Then
App.Native.ShowWindow(hWnd, App.Native.SW_RESTORE)
End If
App.Native.SetForegroundWindow(hWnd)
End If
End Sub
Private Sub MyApplication_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
If mutex IsNot Nothing Then
mutex.Close()
End If
End Sub
End Class
End Namespace