2015-07-06 12 views
7

Dzisiaj mogę uzyskać zrzuty ekranowe zminimalizowanych okien aplikacji. Na przykład, jeśli otworzę Paint, zobaczę zrzut ekranu głównego okna Paint, nawet jeśli Paint jest zminimalizowany.Czy jest jakiś sposób, aby uzyskać zrzuty ekranu również z procesów, gdy są one mininimized?

Jest to klasa, która uzyskać WindowsSnap to trochę długo kod więc dodałem go do pastebin.com WindowSnap.cs

A WindowSnapCollection klasa dodaje go również do pastebin.com WindowSnapCollection.cs

aw form1 górę i konstruktor robię: Zmienne:

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

Następnie w konstruktorze:

 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); 
     } 

W końcu uzyskać listę otwartych aplikacji okiennych screeny zminimalizowanej aplikacji

I mam 65 procesów uruchomionych teraz zastanawiam się moje pytanie brzmi, czy mogę jakoś również zrzuty ekranu ze zminimalizowanych procesów? I nie wszystkie aplikacje.

+0

To zrzut ekranu pokazujący mój program po uruchomieniu. Teraz mogę uzyskać wszystkie zminimalizowane zrzuty ekranu dla aplikacji. Ale chcę wiedzieć, czy i jak można uzyskać wszystkie procesy, na przykład mam teraz 65 uruchomionych procesów, aby uzyskać zrzuty ekranu z tych 65 procesów lub przynajmniej tych z interfejsem graficznym. http://postimg.org/image/r1hz40v8d/ –

+0

Czy można wyliczyć procesy za pomocą 'Process.GetProcesses();' i wyświetlić tylko te procesy, które mają niezerowy uchwyt okna głównego, np. 'p.MainWindowHandle! = IntPtr.Zero'? – Loathing

+0

Oddając tak, dostaję 24 intptrs –

Odpowiedz

0

Powtórz te procesy i wywołaj funkcję API IsIconic dla każdego prawidłowego hWnd. Np

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); 
     } 
    } 
} 

przypadku IsIconic jest określony następującym p/wywołać podpisu.

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