Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di mszl
    Registrato dal
    Sep 2010
    Messaggi
    5

    [vb.net 2010] Come cambiare finestra attiva

    Ciao a tutti come da titolo vorrei sapere come cambiare la finestra attiva al click del button.
    Vorrei che quando si clicca su questo button il programma si iconizzi e la finestra desiderata vada in primo piano. Ho trovato su internet alcuni comandi ma non sono riuscito a farne funzionare nemmeno uno
    Visto che sono alle prime armi se mi indicaste passo passo cosa devo fare sarebbe meglio
    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Dipende che finestra vuoi portare in primo piano: è form della tua applicazione, la finestra di un processo già attivo o quella di un processo che devi attivare?
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  3. #3
    Utente di HTML.it L'avatar di mszl
    Registrato dal
    Sep 2010
    Messaggi
    5
    Processo già attivo, e magari in caso non sia attivo, farei uscire una msg di errore

  4. #4
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    Con questo codice riesci a ottenere tutti i processi attivi e a popolare una combobox, inoltre premendo un pulsante si riesce ad ottenere il processo selezionato:
    codice:
    Public Class Form1
        'Dichiara una lista che conterà i processi e una variabile che seleziona il processo attivo.
        Dim P As New List(Of Process)
        Dim SelectedProcess As Process
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Scorre gli oggetti nella lista e se è contenuto nella combobox lo fa contenere dalla var SelectedProcess.
            For Each item As Process In P
                If ComboBox1.SelectedItem.ToString.Contains(item.ToString) Then
                    SelectedProcess = item
                End If
            Next
            '...
            'Iconizza l'applicazione.
            Me.WindowState = FormWindowState.Minimized
        End Sub
    
        Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            'Popola la lista e la combobox
            For Each a As Process In Process.GetProcesses()
                P.Add(a)
                ComboBox1.Items.Add(a.ToString)
            Next
            'e seleziona il primo item. La proprietà DropDownStil della combobox è su DropDownList, così l'utente non può immettere testo
            ComboBox1.Text = ComboBox1.Items(0).ToString
        End Sub
    End Class
    in questo modo l'utente non può selezionare un processo non attivo.
    Purtroppo al posto dei puntini non so cosa mettere...prova a postare il codice su cui stai lavorando e se riesci lasciami anche i link dei comandi che hai trovato in internet.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  5. #5
    Utente di HTML.it L'avatar di mszl
    Registrato dal
    Sep 2010
    Messaggi
    5
    Innanzitutto grazie del tempo che hai speso per le risposte.
    Forse non mi sono spiegato bene io ma il processo è uno preciso, non deve sceglierlo l'utente, per questo ti ho detto della msg di errore in caso non fosse attivo. Il codice praticamente è nulla visto che l'unica funziona è proprio quella di passare a quella determinata finestra comunque eccolo:
    codice:
    Public Class resign
        Private Sub iconizza_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles iconizza.Click
            Me.WindowState = 1
        End Sub
        Private Sub chiudi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chiudi.Click
            End
        End Sub
    
        Private Sub resignexe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles resignexe.Click
            'questo button dovrebbe avere il compito di passare alla finestra dell'altra applicazione
            'e di scrivere un testo nella stessa premendo prima il tasto INVIO per attivare la chat
    
        End Sub
    
        Private Sub resign_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            My.Computer.Audio.Play(My.Resources.Know_Your_Enemy, AudioPlayMode.BackgroundLoop)
        End Sub
    End Class
    Mi hanno detto per esempio questo codice http://www.pscode.com/vb/scripts/Sho...=5434&lngWId=1

  6. #6
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    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.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  7. #7
    Utente di HTML.it L'avatar di mszl
    Registrato dal
    Sep 2010
    Messaggi
    5
    Niente ho provato a cambiare qualcosa, ma sempre lo stesso problema, non da errori ma la finestra non viene in primo piano :|

  8. #8
    Utente di HTML.it L'avatar di mszl
    Registrato dal
    Sep 2010
    Messaggi
    5
    up :|

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.