2015-07-06 16 views
7

Hôm nay tôi có thể nhận được ảnh chụp màn hình của các cửa sổ ứng dụng thu nhỏ. Ví dụ, nếu tôi mở Paint tôi sẽ thấy một ảnh chụp màn hình của cửa sổ chính Paint ngay cả khi Paint được thu nhỏ.Có cách nào để có được ảnh chụp màn hình từ các quy trình khi chúng được thu nhỏ không?

Đây là lớp học mà có được WindowsSnap đó là một mã dài chút vì vậy tôi thêm nó vào pastebin.com WindowSnap.cs

Và WindowSnapCollection lớp cũng thêm nó vào pastebin.com WindowSnapCollection.cs

Và trong Form1 đầu và constructor tôi đang làm: biến:

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

Sau đó, trong các nhà xây dựng:

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

Cuối cùng, tôi nhận được một danh sách các ứng dụng đang mở ảnh chụp màn hình cửa sổ thu nhỏ ứng dụng

Và tôi có 65 tiến trình đang chạy bây giờ tôi tự hỏi câu hỏi của tôi là nếu tôi có thể có được bằng cách nào đó cũng là ảnh chụp màn hình của các quá trình giảm thiểu? Và không phải tất cả các ứng dụng.

+0

Đây là ảnh chụp màn hình hiển thị chương trình của tôi khi chương trình đang chạy. Bây giờ tôi có thể nhận được tất cả các ứng dụng thu nhỏ cửa sổ ảnh chụp màn hình. Nhưng tôi muốn biết nếu và làm thế nào nó có thể nhận được cũng tất cả các quy trình ví dụ tôi có 65 quy trình đang chạy để có được ảnh chụp màn hình của 65 quy trình này hoặc ít nhất là những người có giao diện đồ họa. http://postimg.org/image/r1hz40v8d/ –

+0

Bạn có thể liệt kê các quy trình bằng cách sử dụng 'Process.GetProcesses();' và chỉ liệt kê các quy trình có xử lý cửa sổ chính khác không, ví dụ: 'p.MainWindowHandle! = IntPtr.Zero'? – Loathing

+0

Loathing yes tôi đã làm tôi nhận được 24 intptrs –

Trả lời

0

Lặp lại quy trình và gọi hàm API IsIconic cho mỗi hWnd hợp lệ. Ví dụ:

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

Trường hợp IsIconic được xác định bởi p sau.

[DllImport("User32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool IsIconic(IntPtr hWnd); 
Các vấn đề liên quan