Ciao.
Innanzitutto grazie del tempo che hai speso per le risposte.
Non serve che mi ringrazi...questo argomento intaressa molto anche a me.
Ho dato un'occhiata al codice. Prima di dire altro vorrei farti notare un paio di cose: invece di scrivere
codice:
Private Sub iconizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles iconizza.Click
Me.WindowState = 1
End Sub
che comunque è corretto, è più comprensibile se scrivi questo
codice:
Private Sub iconizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles iconizza.Click
Me.WindowState = FormWindowState.Minimized
End Sub
Questa è solo un'accortezza ma quello che segue è già più "grave":
codice:
Private Sub chiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chiudi.Click
End
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
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:
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
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.
Mi dispiace.