2015-07-06 4 views
7

Oggi riesco a ottenere schermate di finestre minimizzate di applicazioni. Ad esempio, se apro Paint vedrò uno screenshot della finestra principale di Paint anche se Paint è ridotto a icona.C'è un modo per ottenere uno screenshot anche dai processi quando sono minimizzati?

Questa è la classe che ottiene il WindowsSnap è un codice di lunga po 'così ho aggiunto a Pastebin.com WindowSnap.cs

E il WindowSnapCollection classe anche aggiunto al Pastebin.com WindowSnapCollection.cs

E in cima form1 e costruttore che sto facendo: Variabili:

private Graphics g; 
private Image img; 
private Image imgClone; 

Poi nel costruttore:

 img = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height); 
     imgClone = new Bitmap(pictureBoxSnap.Width, pictureBoxSnap.Height); 
     Graphics g; 
     using (g = Graphics.FromImage(img)) 
     { 
      g.Clear(Color.White); 
     } 

     pictureBoxSnap.Image = img; 

     this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray()); 
     for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--) 
     { 
      string tt = listBoxSnap.Items[i].ToString(); 
      if (tt.Contains(" ,")) 
      { 
       listBoxSnap.Items.RemoveAt(i); 
      } 
     } 
     buttonSnap.Enabled = true; 

     string[] myList = new string[listBoxSnap.Items.Count]; 

     for (int i = 0; i < listBoxSnap.Items.Count; i++) 
     { 
      string tt = listBoxSnap.Items[i].ToString(); 
      int index = tt.LastIndexOf(","); 
      myList[i] = tt.Substring(0, index); 
     } 

Alla fine, ho un elenco di applicazioni aperte screenshot della finestra applicazioni

E ho 65 processi in esecuzione ora ridotto al minimo mi chiedo la mia domanda è se posso ottenere in qualche modo anche gli screenshot dei processi al minimo? E non tutte le applicazioni.

+0

Questo è uno screenshot che mostra il mio programma quando è in esecuzione. Ora posso ottenere tutti gli screenshot di Windows delle app minimizzate. Ma voglio sapere se e come è possibile ottenere anche tutti i processi, ad esempio ho 65 processi in esecuzione per ottenere gli screenshot di questi 65 processi o almeno quelli con interfaccia grafica. http://postimg.org/image/r1hz40v8d/ –

+0

Puoi enumerare i processi usando 'Process.GetProcesses();' e elenca solo quei processi che hanno un handle di finestra principale diverso da zero, ad es. 'p.MainWindowHandle! = IntPtr.Zero'? – Loathing

+0

Detestando sì, ho ricevuto 24 intptrs –

risposta

0

Iterate attraverso i processi e chiamate la funzione API IsIconic per ogni hWnd valido. Per esempio:

foreach (Process p in Process.GetProcesses()) 
{ 
    if (p.MainWindowHandle != IntPtr.Zero) 
    { 
     if (IsIconic(p.MainWindowHandle)) 
     { 
      System.Diagnostics.Debug.Print("Window: {0} Is minimized", p.MainWindowTitle); 
     } 
    } 
} 

Dove IsIconic è definito dal seguente p firma/Invoke.

[DllImport("User32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool IsIconic(IntPtr hWnd);