2015-07-06 5 views
7

आज मैं आवेदनों की कम से कम खिड़कियों के स्क्रीनशॉट प्राप्त कर सकता हूं। उदाहरण के लिए, यदि मैं पेंट खोलता हूं तो पेंट मुख्य विंडो का एक स्क्रीनशॉट दिखाई देगा, भले ही पेंट कम हो।क्या प्रक्रियाओं से स्क्रीनशॉट प्राप्त करने का कोई तरीका है जब वे कम से कम हैं?

इस वर्ग कि मिल WindowsSnap यह थोड़ा लंबा कोड है तो मैं WindowSnap.cs

pastebin.com में जोड़ा और वर्ग 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

यह एक स्क्रीनशॉट है जो चल रहा है जब मेरा प्रोग्राम दिखाता है। अब मैं सभी कम से कम ऐप विंडोज स्क्रीनशॉट प्राप्त कर सकता हूं। लेकिन मैं जानना चाहता हूं कि सभी प्रक्रियाओं को प्राप्त करना संभव है या नहीं, उदाहरण के लिए मेरे पास अब 65 चल रही प्रक्रियाएं हैं ताकि इस 65 प्रक्रियाओं के स्क्रीनशॉट या कम से कम ग्राफिकल इंटरफेस वाले स्क्रीनशॉट प्राप्त हो सकें। http://postimg.org/image/r1hz40v8d/ –

+0

क्या आप 'Process.GetProcesses(); 'का उपयोग कर प्रक्रियाओं की गणना कर सकते हैं और केवल उन्हीं प्रक्रियाओं को सूचीबद्ध कर सकते हैं जिनमें गैर-शून्य मुख्य विंडो हैंडल है, उदा। 'पी। मेन विन्डो हैंडल! = IntPtr.Zero'? – Loathing

+0

लापता हां मैंने 24 इंटिप्टर प्राप्त किए हैं –

उत्तर

0

प्रक्रियाओं के माध्यम से Iterate, और प्रत्येक वैध एचडब्ल्यूएनडी के लिए एपीआई फ़ंक्शन 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 निम्नलिखित पी/आह्वान हस्ताक्षर द्वारा परिभाषित किया गया है।

[DllImport("User32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool IsIconic(IntPtr hWnd); 
संबंधित मुद्दे