Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema Sviluppo di un Task manager
Forum - C# / VB.NET - Problema Sviluppo di un Task manager

Avatar
pescarese77 (Normal User)
Newbie


Messaggi: 17
Iscritto: 02/02/2012

Segnala al moderatore
Postato alle 12:21
Sabato, 13/09/2014
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?
Codice sorgente - presumibilmente VB.NET

  1. Public Class SceltaFinestra
  2.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Dim myProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
  4.         ListBox1.Items.Clear()
  5.         For Each P As Process In myProcesses
  6.             If P.MainWindowTitle <> "" Then
  7.                 ListBox1.Items.Add(P.MainWindowTitle)
  8.             End If
  9.         Next
  10.     End Sub
  11. End Class


cosa manca?


pescarese77 ha allegato un file: Senza titolo-1.jpg (305472 bytes)
Clicca qui per guardare l'immagine


Fabio
PM Quote
Avatar
vankraster (Member)
Rookie


Messaggi: 32
Iscritto: 05/11/2010

Segnala al moderatore
Postato alle 9:36
Lunedì, 15/09/2014
Prova questo:

Codice sorgente - presumibilmente VB.NET

  1. Dim myProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses()
  2.         ListBox1.Items.Clear()
  3.         For Each P As Process In myProcesses
  4.          
  5.                 ListBox1.Items.Add(P.ProcessName)
  6.        
  7.         Next



Ci possono togliere tutto tranne la ragione e con questa possiamo ricostruire l'universo.
PM Quote
Avatar
pescarese77 (Normal User)
Newbie


Messaggi: 17
Iscritto: 02/02/2012

Segnala al moderatore
Postato alle 11:44
Lunedì, 15/09/2014
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


Fabio
PM Quote
Avatar
pescarese77 (Normal User)
Newbie


Messaggi: 17
Iscritto: 02/02/2012

Segnala al moderatore
Postato alle 18:01
Lunedì, 29/09/2014
Risolto con vari tentativi chiudo


Fabio
PM Quote
Avatar
dnha (Member)
Pro


Messaggi: 137
Iscritto: 24/07/2014

Segnala al moderatore
Postato alle 20:43
Lunedì, 29/09/2014
Scrivi come hai fatto che torna sempre utile... :k:


“La principale differenza tra una cosa che potrebbe rompersi e una cosa che non può in alcun modo rompersi è che quando una cosa che non può in alcun modo rompere si rompe, di solito risulta impossibile da riparare.” [Douglas Adams, Praticamente innocuo]
PM Quote
Avatar
pescarese77 (Normal User)
Newbie


Messaggi: 17
Iscritto: 02/02/2012

Segnala al moderatore
Postato alle 10:34
Lunedì, 27/10/2014
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


Fabio
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:29
Domenica, 02/11/2014
Metti pure le immagini, magari posta uno zip

PM Quote
Avatar
pescarese77 (Normal User)
Newbie


Messaggi: 17
Iscritto: 02/02/2012

Segnala al moderatore
Postato alle 22:59
Martedì, 16/12/2014
Codice sorgente - presumibilmente VB.NET

  1. Module Module1
  2.  
  3.     Public Vettore As New ListBox
  4.     'Le funzioni che risiedono nelle librerie di sistema lavorano
  5.     'a basso livello, come già detto, perciò i tipi
  6.     'più frequentemente incontrati sono IntPtr (puntatore
  7.     'intero) e Int32 (intero a 32 bit). Nonostante ciò, esse
  8.     'possono anche richiedere tipi di dato molto più complessi,
  9.     'come in questo caso. La funzione che useremo necessita di
  10.     'un delegate come parametro.
  11.     Public Delegate Function EnumCallback(ByVal Handle As IntPtr, _
  12.         ByVal lParam As Int32) As Boolean
  13.  
  14.     'La funzione EnumDesktopWindows è definita nella libreria
  15.     'C:WINDOWSsystemsystem32user32.dll. Dato che si tratta di una
  16.     'libreria di sistema, possiamo omettere il percorso e scrivere solo
  17.     'il nome (provvisto di estensione). Come vedete, il nome con cui
  18.     'è dichiarata è lo stesso dl metodo definito
  19.     'in user32.dll. Per importarla correttamente, però, anche
  20.     'i parametri usati devono essere identici, almeno per tipo.
  21.     'Infatti, per identificare univocamente un metodo che potrebbe
  22.     'essere provvisto di overloads, è necessario sapere solo
  23.     'il nome del metodo e la quantità e il tipo di parametri.
  24.     'Anche cambiando il nome a un parametro, la signature non
  25.     'cambia, quindi mi sono preso la libertà di scrivere
  26.     'dei parametri più "amichevoli", poiché la
  27.     'dichiarazione originale - come è tipico del C -
  28.     'prevede dei nomi assurdi e difficili da ricordare.
  29.     <DllImport("user32.dll")> _
  30.     Public Function EnumDesktopWindows(ByVal DesktopIndex As IntPtr, _
  31.         ByVal Callback As EnumCallback, ByVal lParam As Int32) As Boolean
  32.         'Notare che il corpo non viene definito
  33.     End Function
  34.  
  35.     'Questa funzione ha il compito di ottenere il titolo di
  36.     'una finestra provvisto in input il suo indirizzo (handle).
  37.     'Notare che non restituisce una stringa, ma un Int32.
  38.     'Infatti, la maggiore parte dei metodi definiti nelle librerie
  39.     'di sistema sono funzioni che restituiscono interi, ma questi
  40.     'interi sono inutili. Anche se sono funzioni, quindi, le si
  41.     'può trattare come banali procedure. In questo caso,
  42.     'tuttavia, l'intero restituito ha uno scopo, ed equivale
  43.     'alla lunghezza del titolo della finestra.
  44.     'GetWindowText, dopo aver identificato la finestra,
  45.     'ne deposita il titolo nello StringBuilder, che, essendo
  46.     'un tipo reference, viene sempre passato per indirizzo.
  47.     'Capacity indica invece il massimo numero di caratteri
  48.     'accettabili.
  49.     <DllImport("user32.dll")> _
  50.     Public Function GetWindowText(ByVal Handle As IntPtr, _
  51.         ByVal Builder As StringBuilder, ByVal Capacity As Int32) As Int32
  52.     End Function
  53.  
  54.     <DllImport("user32.dll", SetLastError:=True)> _
  55.     Private Function IsWindowVisible(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
  56.     End Function
  57.  
  58.     Public Function GetWindowTitle(ByVal Handle As IntPtr)
  59.         'Crea un nuovo string builder, con una capacità
  60.         'di 255 caratteri
  61.         Dim Builder As New System.Text.StringBuilder(255)
  62.         'Richiama la funzione di sistema per ottenere il
  63.         'titolo della finestra
  64.         GetWindowText(Handle, Builder, Builder.Capacity)
  65.         'Dopo la chiamata a GetWindowText, Builder conterrà
  66.         'il titolo: lo restituisce alla funzione
  67.         Return Builder.ToString
  68.     End Function
  69.  
  70.     Public Function FoundWindow(ByVal Handle As IntPtr, ByVal lParam As Int32) As Boolean
  71.         'Ottiene il titolo della finestra
  72.         Dim Title As String = GetWindowTitle(Handle)
  73.         Dim Handletxt As String
  74.         If IsWindowVisible(Handle) = True Then
  75.             If (Title <> "") And (Title <> "Start") And (Title <> "Program Manager") And (Title <> "Gestione attività Windows") Then
  76.                 Handletxt = Handle
  77.                 Vettore.Items.Add(Title)
  78.             End If
  79.         End If
  80.         'Restituisce sempre True: come già detto, i
  81.         'risultati delle funzioni di sistema non sono sempre
  82.         'utili, se non al sistema operativo stesso
  83.         Return True
  84.     End Function
  85.     'Enumera tutte le finestra
  86.     Public Sub EnumerateWindows()
  87.         'Inizializza il metodo callback
  88.         Dim Callback As New EnumCallback(AddressOf FoundWindow)
  89.         Dim Success As Boolean
  90.  
  91.         'Richiama la funzione di sistema. IntPtr.Zero come primo
  92.         'parametro indica che il desktop da considerare è
  93.         'quello correntemente aperto. Il secondo parametro
  94.         'fornisce l'indirizzo del metodo callback, che verrà
  95.         'chiamato ogni volta che sia stata trovata una nuova finestra
  96.         Success = EnumDesktopWindows(IntPtr.Zero, Callback, 0)
  97.  
  98.         'Se la funzione non ha successo, restituisce un errore
  99.         If Success = False Then
  100.             MsgBox("Si è verificato un errore nell'applicazione!", vbCritical, "AVVISO")
  101.         End If
  102.     End Sub
  103. End Module




mentre nella finestra per gli oggetti presenti son semplici
Codice sorgente - presumibilmente VB.NET

  1. Public Class FrmSelezioneFinestra
  2.  
  3.     Private Sub FrmSelezioneFinestra_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
  4.         LsbListaFinestre.Items.Clear()
  5.         Vettore.Items.Clear()
  6.         EnumerateWindows()
  7.         For i As Integer = 0 To Vettore.Items.Count - 1
  8.             LsbListaFinestre.Items.Add(Vettore.Items(i))
  9.         Next
  10.         LsbListaFinestre.SelectedIndex = 0
  11.     End Sub
  12.  
  13.     Private Sub BtnAnnulla_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAnnulla.Click
  14.         FrmAvvio.VarContenutoFile.Items.Clear()
  15.         Me.Close()
  16.     End Sub
  17.  
  18.     Private Sub BtnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOk.Click
  19.         FrmNuovoTavolo.StrutturaFile.NomeFinestra = LsbListaFinestre.SelectedItem
  20.         FrmAvvio.VarContenutoFile.Items.Clear()
  21.         Me.Close()
  22.     End Sub
  23.  
  24.     Private Sub LsbListaFinestre_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles LsbListaFinestre.DoubleClick
  25.         LsbListaFinestre.Items.Clear()
  26.         Vettore.Items.Clear()
  27.         EnumerateWindows()
  28.         For i As Integer = 0 To Vettore.Items.Count - 1
  29.             LsbListaFinestre.Items.Add(Vettore.Items(i))
  30.         Next
  31.         LsbListaFinestre.SelectedIndex = 0
  32.     End Sub
  33. End Class



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


Fabio
PM Quote