Torna al Thread

Private Declare Function SetForegroundWindow Lib "user32" (ByVal handle As IntPtr) As Integer <DllImport("user32.dll")> _ Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer End Function Private Delegate Function EnumWindowProc(ByVal hwnd As IntPtr, ByVal lParam As IntPtr) As Boolean <DllImport("user32.dll")> _ Private Shared Function EnumWindows(ByVal lpEnumFunc As EnumWindowProc, ByVal lParam As IntPtr) As Boolean End Function Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'il nome del mutex Const MUT_NAME As String = "SINGIST" 'il mutex Dim mut As Mutex = Nothing 'prova ad aprire il mutex Try mut = Mutex.OpenExisting(MUT_NAME) Catch 'non fa niente End Try If mut Is Nothing Then 'se il mutex non esisteva lo crea mut = New Mutex(True, MUT_NAME) Else 'se invece esisteva, l'applicazione è già aperta 'quindi la visualizza e chiude quella corrente 'Modifica il titolo corrente per non confonderlo con quello dell'altra finestra Me.Text &= "_Closing" 'Avvia il processo di enumerazione delle finestre che si incarica 'di portare in primo piano la finetra già aperta EnumWindows(AddressOf OpenInstance, Nothing) End If End Sub Private Function OpenInstance(ByVal hwnd As IntPtr, ByVal lParam As IntPtr) As Boolean 'se l'handle è lo stesso della Form del processo corrente continua la ricerca If hwnd = Me.Handle Then 'ritornando true la ricerca continua, ritornando false la ricerca termina Return True End If 'Ottiene il testo della finestra per verificare che corrisponda a quello attuale Dim sb As New StringBuilder GetWindowText(hwnd, sb, Me.Text.Length) 'se corrisponde (eccetto il _Closing) mostra la finestra, altrimenti continua la ricerca If (sb.Length > 0 AndAlso Me.Text.StartsWith(sb.ToString())) Then SetForegroundWindow(hwnd) Process.GetCurrentProcess.Kill() Else Return True End If End Function
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5