Saving a screenshot of a window using C#, WPF, and DWM -


यह एक अनुवर्ती प्रश्न है

उपर्युक्त समाधान का एक थंबनेल प्रदर्शित करने के लिए DWM का उपयोग करता है एक सक्रिय विंडो अगर मैं सही ढंग से समझता हूं, यह आपको एप्लिकेशन के विंडो हैंडल को निर्दिष्ट करने से काम करता है जिसे आप देखना चाहते हैं और फिर आप खिड़की के संचालन और खिड़की पर एक स्थान प्रदान करते हैं जहां विंडो को लक्ष्य विंडो की सामग्री खींचनी चाहिए।

क्या विंडो के सीधे शॉट को सीधे बिटमैपआईमेज या छवि को सीधे अपनी खिड़की में कहीं से ड्राइंग करने का कोई तरीका है? (मूलतः खिड़की के स्क्रीन शॉट को पकड़ने के लिए - भले ही इसे किसी अन्य विंडो से कवर किया गया हो - अपडेट थंबनेल का उपयोग करके)।

आपके लिए धन्यवाद!

कंट्रोल। ड्राटोबिटमैप हमेशा काम नहीं करता है इसलिए मैं निम्नलिखित देशी एपीआई कॉलों का उपयोग करता हूं जो अधिक प्रदान करता है सुसंगत परिणाम:

उपयोगिता वर्ग। विशिष्ट उपयोग पर कब्जा करने के लिए कॉल यूटिलिटीज़। कैप्चर विंड (नियंत्रण। हांडल):

  सार्वजनिक स्थिर वर्ग उपयोगिताएँ {सार्वजनिक स्थिर छवि कैप्चर स्क्रीन () {कैप्चर विंडूइन वापस (User32.GetDesktopWindow ()); } सार्वजनिक स्थिर छवि कैप्चर विंड (इंटपीट हैंडल) {IntPtr hdcSrc = User32.GetWindowDC (हैंडल); RECT खिड़की = नया आरईसीटी (); User32.GetWindowRect (संभाल, रिफ विंडोखाना); Int width = windowRect.right - windowRect.left; Int height = windowRect.bottom - windowRect.top; IntPtr hdcDest = Gdi32.CreateCompatibleDC (एचडीसीएसआरसी); IntPtr hBitmap = Gdi32.CreateCompatibleBitmap (एचडीसीएसआरसी, चौड़ाई, ऊंचाई); IntPtr hOld = Gdi32.SelectObject (hdcDest, hBitmap); Gdi32.BitBlt (hdcDest, 0, 0, चौड़ाई, ऊंचाई, एचडीसीएसआरसी, 0, 0, एपीआईसिंस्टेंट एसआरसीसीपीआई); Gdi32.SelectObject (hdcDest, hOld); Gdi32.DeleteDC (hdcDest); User32.ReleaseDC (हैंडल, एचडीसीएसआरसी); छवि छवि = छवि। एफएचएचएमएचएमआईएमएप (एचबीआईटीएमएपी); Gdi32.DeleteObject (HBITMAP); वापसी छवि; GDI32 class: public class Gdi32 {[DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern bool bitblt (IntPtr hObject, इंट एनएक्सडीईस्ट, इंट न्यूवायस्ट, इंट एनडब्ल्यूडथ, इंट एनहाइट, इंटपीट एच ऑब्जेक्ट सोर्स, इंट एनएक्सएसआरसी, इंट एनवाईएसआरसी, इंट डीआरआरओप); [DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern IntPtr CreateCompatibleBitmap (IntPtr एचडीसी, इंट nWidth, int nHeight); [DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern IntPtr CreateCompatibleDC (IntPtr एचडीसी); [DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern bool DeleteDC (IntPtr एचडीसी); [DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern bool DeleteObject (IntPtr hObject); [DllImport ("gdi32.dll")] सार्वजनिक स्थिर extern IntPtr SelectObject (IntPtr एचडीसी, IntPtr hObject); }  

उपयोगकर्ता 32 वर्ग:

  सार्वजनिक स्थिर वर्ग User32 {[DllImport ("user32.dll")] सार्वजनिक स्थिर extern IntPtr GetDesktopWindow (); [DllImport ("user32.dll")] सार्वजनिक स्थिर extern IntPtr GetWindowDC (IntPtr hWnd); [DllImport ("user32.dll")] सार्वजनिक स्थिर extern IntPtr GetWindowRect (IntPtr hWnd, रेफरी रिएक्ट rect); [DllImport ("user32.dll")] सार्वजनिक स्थिर extern IntPtr ReleaseDC (IntPtr hWnd, IntPtr एचडीसी); }  

इस्तेमाल किया स्थिरांक:

<पूर्व> सार्वजनिक const int SRCCAPY = 13369376;

इस्तेमाल किए गए स्ट्रैक्ट्स:

  [स्ट्रक्चर लेआउट (लेआउटकिंड। सिक्योरिटी)] सार्वजनिक संरचना RECT {सार्वजनिक एएनटी; सार्वजनिक एट शीर्ष; सार्वजनिक int सही; सार्वजनिक अंतर नीचे; }  

एक मैत्रीपूर्ण नियंत्रण एक्सटेंशन विधि:

  सार्वजनिक स्थैतिक वर्ग नियंत्रण एक्सटेंशन {सार्वजनिक स्थिर छवि ड्राटोइओमेज (यह नियंत्रण नियंत्रण) {वापसी उपयोगिताएँ। कैप्चरवंडो (नियंत्रण। संभाल); }}  

Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -