Oppure

Loading
13/09/14 10:21
pescarese77
Salve ho provato a realizzare un semplice task manager tipo come Windows ma non ho lo stesso risultato posto 2 immagini e codice della mia finestra.
Intanto vi spiego il problema in task manager di Windows se per esempio apro iexplorer con 2 siti ne viene visualizzata una invece che 2 come quella di Windows in cosa sbaglio?
Public Class SceltaFinestra
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
        ListBox1.Items.Clear()
        For Each P As Process In myProcesses
            If P.MainWindowTitle <> "" Then
                ListBox1.Items.Add(P.MainWindowTitle)
            End If
        Next
    End Sub
End Class

cosa manca?
aaa
15/09/14 7:36
vankraster
Prova questo:

  Dim myProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
        ListBox1.Items.Clear()
        For Each P As Process In myProcesses
          
                ListBox1.Items.Add(P.ProcessName)
       
        Next
aaa
15/09/14 9:44
pescarese77
No non e la soluzione il codice da te postato genera tutti i processi anche quelli privi di finestra tanto per intenderci con il tuo codice si ha la seconda scheda del task manager dove sono tutti i processi a me serve qualcosa che riprenda come la prima scheda del task manager, se vedi le immagini che ho inserito capisci esempio nelle immagini se apro 2 finestre con Explorer nel task manager ho 2 processi con titolo mentre nel mio esempio con il mio codice c'è ne solo una
aaa
29/09/14 16:01
pescarese77
Risolto con vari tentativi chiudo
aaa
29/09/14 18:43
dnha
Scrivi come hai fatto che torna sempre utile... :k:
aaa
27/10/14 9:34
pescarese77
Siccome la soluzione e molto lunga e qui non si può mettere molte immagini per spiegare, invito a tutti colo che serva la soluzione a contattarmi
aaa
02/11/14 21:29
TheDarkJuster
Metti pure le immagini, magari posta uno zip
aaa
16/12/14 21:59
pescarese77
Module Module1

    Public Vettore As New ListBox
    'Le funzioni che risiedono nelle librerie di sistema lavorano
    'a basso livello, come già detto, perciò i tipi
    'più frequentemente incontrati sono IntPtr (puntatore
    'intero) e Int32 (intero a 32 bit). Nonostante ciò, esse
    'possono anche richiedere tipi di dato molto più complessi,
    'come in questo caso. La funzione che useremo necessita di
    'un delegate come parametro.
    Public Delegate Function EnumCallback(ByVal Handle As IntPtr, _
        ByVal lParam As Int32) As Boolean

    'La funzione EnumDesktopWindows è definita nella libreria
    'C:WINDOWSsystemsystem32user32.dll. Dato che si tratta di una
    'libreria di sistema, possiamo omettere il percorso e scrivere solo
    'il nome (provvisto di estensione). Come vedete, il nome con cui
    'è dichiarata è lo stesso dl metodo definito
    'in user32.dll. Per importarla correttamente, però, anche
    'i parametri usati devono essere identici, almeno per tipo.
    'Infatti, per identificare univocamente un metodo che potrebbe
    'essere provvisto di overloads, è necessario sapere solo
    'il nome del metodo e la quantità e il tipo di parametri.
    'Anche cambiando il nome a un parametro, la signature non
    'cambia, quindi mi sono preso la libertà di scrivere
    'dei parametri più "amichevoli", poiché la
    'dichiarazione originale - come è tipico del C - 
    'prevede dei nomi assurdi e difficili da ricordare.
    <DllImport("user32.dll")> _
    Public Function EnumDesktopWindows(ByVal DesktopIndex As IntPtr, _
        ByVal Callback As EnumCallback, ByVal lParam As Int32) As Boolean
        'Notare che il corpo non viene definito
    End Function

    'Questa funzione ha il compito di ottenere il titolo di
    'una finestra provvisto in input il suo indirizzo (handle).
    'Notare che non restituisce una stringa, ma un Int32. 
    'Infatti, la maggiore parte dei metodi definiti nelle librerie
    'di sistema sono funzioni che restituiscono interi, ma questi
    'interi sono inutili. Anche se sono funzioni, quindi, le si
    'può trattare come banali procedure. In questo caso,
    'tuttavia, l'intero restituito ha uno scopo, ed equivale
    'alla lunghezza del titolo della finestra.
    'GetWindowText, dopo aver identificato la finestra,
    'ne deposita il titolo nello StringBuilder, che, essendo
    'un tipo reference, viene sempre passato per indirizzo.
    'Capacity indica invece il massimo numero di caratteri
    'accettabili.
    <DllImport("user32.dll")> _
    Public Function GetWindowText(ByVal Handle As IntPtr, _
        ByVal Builder As StringBuilder, ByVal Capacity As Int32) As Int32
    End Function

    <DllImport("user32.dll", SetLastError:=True)> _
    Private Function IsWindowVisible(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function

    Public Function GetWindowTitle(ByVal Handle As IntPtr)
        'Crea un nuovo string builder, con una capacità
        'di 255 caratteri
        Dim Builder As New System.Text.StringBuilder(255)
        'Richiama la funzione di sistema per ottenere il
        'titolo della finestra
        GetWindowText(Handle, Builder, Builder.Capacity)
        'Dopo la chiamata a GetWindowText, Builder conterrà
        'il titolo: lo restituisce alla funzione
        Return Builder.ToString
    End Function

    Public Function FoundWindow(ByVal Handle As IntPtr, ByVal lParam As Int32) As Boolean
        'Ottiene il titolo della finestra
        Dim Title As String = GetWindowTitle(Handle)
        Dim Handletxt As String
        If IsWindowVisible(Handle) = True Then
            If (Title <> "") And (Title <> "Start") And (Title <> "Program Manager") And (Title <> "Gestione attività Windows") Then
                Handletxt = Handle
                Vettore.Items.Add(Title)
            End If
        End If
        'Restituisce sempre True: come già detto, i
        'risultati delle funzioni di sistema non sono sempre
        'utili, se non al sistema operativo stesso
        Return True
    End Function
    'Enumera tutte le finestra
    Public Sub EnumerateWindows()
        'Inizializza il metodo callback
        Dim Callback As New EnumCallback(AddressOf FoundWindow)
        Dim Success As Boolean

        'Richiama la funzione di sistema. IntPtr.Zero come primo
        'parametro indica che il desktop da considerare è
        'quello correntemente aperto. Il secondo parametro
        'fornisce l'indirizzo del metodo callback, che verrà
        'chiamato ogni volta che sia stata trovata una nuova finestra
        Success = EnumDesktopWindows(IntPtr.Zero, Callback, 0)

        'Se la funzione non ha successo, restituisce un errore
        If Success = False Then
            MsgBox("Si è verificato un errore nell'applicazione!", vbCritical, "AVVISO")
        End If
    End Sub
End Module




mentre nella finestra per gli oggetti presenti son semplici
Public Class FrmSelezioneFinestra

    Private Sub FrmSelezioneFinestra_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        LsbListaFinestre.Items.Clear()
        Vettore.Items.Clear()
        EnumerateWindows()
        For i As Integer = 0 To Vettore.Items.Count - 1
            LsbListaFinestre.Items.Add(Vettore.Items(i))
        Next
        LsbListaFinestre.SelectedIndex = 0
    End Sub

    Private Sub BtnAnnulla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAnnulla.Click
        FrmAvvio.VarContenutoFile.Items.Clear()
        Me.Close()
    End Sub

    Private Sub BtnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOk.Click
        FrmNuovoTavolo.StrutturaFile.NomeFinestra = LsbListaFinestre.SelectedItem
        FrmAvvio.VarContenutoFile.Items.Clear()
        Me.Close()
    End Sub

    Private Sub LsbListaFinestre_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LsbListaFinestre.DoubleClick
        LsbListaFinestre.Items.Clear()
        Vettore.Items.Clear()
        EnumerateWindows()
        For i As Integer = 0 To Vettore.Items.Count - 1
            LsbListaFinestre.Items.Add(Vettore.Items(i))
        Next
        LsbListaFinestre.SelectedIndex = 0
    End Sub
End Class


questa soluzione e l'unica che ho trovato anche se non rispecchia esattamente quello che fa windows
aaa