2015-07-06 29 views
7

今天我可以得到應用程序最小化窗口的截圖。 例如,如果我打開Paint,即使Paint最小化,我也會看到Paint主窗口的屏幕截圖。當進程最小化時,是否有任何方法可以從進程獲取屏幕截圖?

這是獲得WindowsSnap這是一個有點長代碼的類,所以我加入它pastebin.com WindowSnap.cs

和類WindowSnapCollection還增加了它pastebin.com WindowSnapCollection.cs

而且在Form1頂部和構造我做: 變量:

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

然後在構造函數中:

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

最終,我得到最小化應用

而且我現在已經運行65個進程打開的應用程序窗口的截圖名單我不知道我的問題是,如果我能得到某種方式也最小化過程的截圖?而不是所有的應用程序。

+0

這是一個截圖,顯示我的程序運行時的狀態。現在我可以得到所有最小化的應用程序的Windows截圖。但我想知道是否以及如何獲得所有進程,例如我現在有65個正在運行的進程,以便獲得這65個進程的屏幕截圖或至少那些帶有圖形界面的屏幕截圖。 http://postimg.org/image/r1hz40v8d/ –

+0

你可以枚舉使用Process.GetProcesses();的進程,並且只列出那些主窗口句柄爲非零的進程,例如'p.MainWindowHandle!= IntPtr.Zero'? – Loathing

+0

厭惡是的,我做到了我得到24個intptrs –

回答

0

遍歷整個過程,併爲每個有效的hWnd調用API函數IsIconic。例如:

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

其中IsIconic由以下p/Invoke簽名定義。

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