Ciao.
Non serve che mi ringrazi...questo argomento intaressa molto anche a me.Innanzitutto grazie del tempo che hai speso per le risposte.
Ho dato un'occhiata al codice. Prima di dire altro vorrei farti notare un paio di cose: invece di scrivere
che comunque è corretto, è più comprensibile se scrivi questocodice:Private Sub iconizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles iconizza.Click Me.WindowState = 1 End Sub
Questa è solo un'accortezza ma quello che segue è già più "grave":codice:Private Sub iconizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles iconizza.Click Me.WindowState = FormWindowState.Minimized End Sub
End è una vecchia istruzione rimasta da vb, che chiude in modo brutale l'applicazione, senza deallocare correttamente le risorse. Sarebbe meglio e anche più corretto scrivere:codice:Private Sub chiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chiudi.Click End End Sub
codice:Private Sub chiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chiudi.Click Me.Close() End Sub
Ora veniamo al punto:
ho visto il tuo link, che ha esposto l'unica maniera possibile di fare questa cosa: usare le API di Windows. Ti posto il codice che ho sviluppato:
A livello teorico dovrebbe funzionare, in pratica...no. Il programma non restituisce errori ma non so perchè non imposta la finestra attiva. Continuerò a cercare, comunque credo dovrai aspettare la risposta di gente che ne sà più di me.codice:Public Class Form1 'Serve per importare l' API che ci serve Private Declare Function SetActiveWindow Lib "User32" (ByVal hwnd As Long) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Dichiari il processo che vuoi aprire Dim ProcessName As String = "firefox" 'Scorri i processi attivi For Each p As Process In Process.GetProcesses 'e se quello che cerchi è contenuto nel nome If p.ProcessName.Contains(ProcessName) Then 'lo setta come finestra attiva SetActiveWindow(p.MainWindowHandle.ToInt64) 'iconizza il programma Me.WindowState = FormWindowState.Minimized 'ed esce dalla sub Exit Sub End If Next 'Se non è già uscito dalla sub vuol dire che il processo non è attivo, quindi mostra un messaggio MessageBox.Show("Processo non attivo", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub End Class
Mi dispiace.![]()

Rispondi quotando