2010-02-09 13 views
5

के साथ स्क्रीन कैप्चरिंग को रोकें मैं डायरेक्टएक्स का उपयोग कर एक एकल छवि प्रस्तुत करना चाहता हूं। इसे वीएलसी प्लेयर के "डायरेक्टएक्स वीडियो आउटपुट" के समान काम करना चाहिए, क्या सरल स्क्रीन कैप्चरिंग सॉफ़्टवेयर या प्रिंटरस्क्रीन-कुंजी का उपयोग करके फ्रेम को कैप्चर करना संभव नहीं था। स्क्रीनशॉट बनाने के लिए यह संभव नहीं होना चाहिए (या बहुत मुश्किल)!डायरेक्टएक्स

क्या किसी को पता है कि यह वीएलसी प्लेयर में कैसे काम करता है?

क्या कोई अन्य संभावित समाधान हैं? शायद "आउटपुट प्रोटेक्शन मैनेजर" के साथ (http://msdn.microsoft.com/en-us/library/dd388980(VS.85).aspx देखें)

मेरे पास स्कूल में लगभग 3 साल सी # प्रोग्रामिंग प्रयोग कमाई है। मैंने कुछ सी ++ प्रोग्रामिंग भी किया है, लेकिन मैं शायद सी # समाधान को WPF या प्रबंधित डायरेक्टएक्स का उपयोग कर दूंगा।

मेरी अंग्रेजी के लिए खेद है और अग्रिम में आपकी मदद के लिए धन्यवाद !!!

उत्तर

1

शायद इसकी आवाज से आपको वैश्विक विंडो प्रक्रिया में हुक करके WM_PRINTCLIENT को अवरुद्ध करने की आवश्यकता है, यदि WM_PRINTCLIENT संदेश का उपयोग किया जाता है, तो बस हुक विंडो प्रक्रिया से वापस आएं। फेंग युआन द्वारा WM_PRINTCLIENT के बारे में विस्तृत जानकारी के लिए यहां देखें। ऐसा करने का दूसरा तरीका क्लिपबोर्ड फ़ंक्शन को अवरुद्ध करना है जहां डेटा किसी विशेष एप्लिकेशन से होता है और क्लिपबोर्ड में बिटमैप होता है .. लैरी ओस्टर्मन के ब्लॉग को this देखें। यहां CodeProject पर एक आलेख है जो वैश्विक विंडोज़ हुक लागू करता है, दो अन्य लिंक हैं जो मैं here और here की आपूर्ति कर सकता हूं। (कोडप्रोजेक्ट पर सभी)

उम्मीद है कि यह मदद करता है, सर्वश्रेष्ठ संबंध, टॉम।

+0

मैं WM_PRINTCLIENT साथ द्वारा प्राप्त करने के लिए tryed लेकिन मैं कभी नहीं मिला WM_PRINTCLIENT संदेश। मैं अपने आवेदन में संरक्षित ओवरराइड शून्य WndProc (सन्दर्भ संदेश मीटर) का इस्तेमाल किया मुख्य विंडो के को बाधित करना क्लिपबोर्ड functios काम नहीं करता है क्योंकि स्क्रीन सॉफ्टवेयर पर कब्जा करने पर कब्जा बिटमैप क्लिपबोर्ड कभी सुरक्षित नहीं करता है (विंडोज 7 को देखने के उदाहरण के लिए स्निपिंग टूल विकल्प)। – raisyn

+0

@Youllknow: यदि आप CodeProject के लिए अंतिम लिंक देखते हैं, तो क्लिपबोर्ड के लिए एक हुक है ... क्योंकि मेरे पास विंडोज 7 नहीं है, मैं यह नहीं कह सकता कि यह कैसे काम करता है ... :) – t0mm13b

+0

हां, लेकिन एक स्क्रीन है कैप्चरिंग सॉफ़्टवेयर (उदाहरण के लिए स्निपिंग टूल) क्लिपबोर्ड का उपयोग नहीं करता है। तो हुक कभी निष्पादित नहीं किया जाएगा! लेकिन आपकी मदद के लिए धन्यवाद !!! – raisyn

6

सबसे पहले, जब आप प्रिंटरस्क्रीन या अन्य स्क्रीन कैप्चर तकनीकों का उपयोग करते हैं तो वीएलसी की सामग्री कैप्चर नहीं होती है क्योंकि (कम से कम विंडोज़ के पुराने संस्करणों पर) वे वीडियो प्रस्तुत करने के लिए 'ओवरले' का उपयोग कर रहे हैं। यह एक विशेष जीपीयू निर्माण है जो सामान्य स्क्रीन सतह के ऊपर एक आभासी 'विमान' को प्रतिपादन की अनुमति देता है। चूंकि यह सब कुछ छोड़ देता है और सीधे GPU पर जाता है, इसे कैप्चर करने का कोई सीधा तरीका नहीं है। नोट: विंडोज के आखिरी कुछ रिलीज में नियम ओवरले के बारे में काफी कुछ बदल गए हैं। ऐप्स यह नहीं मान सकते कि D3D9/DDraw ओवरले समर्थित हैं और ऐप्स को आजकल उनका उपयोग नहीं करना चाहिए क्योंकि सिस्टम में उच्च प्रदर्शन के साथ सामग्री प्रस्तुत करने के बेहतर तरीके हैं।

Direct3D 9 ओवरले

आप Direct3D 9 का उपयोग कर वीडियो सामग्री प्रदर्शित कर रहे हैं, तो आप भी एक उपरिशायी उपयोग कर सकते हैं। इसे कैसे करें इसके बारे में जानकारी के लिए this page on MSDN देखें। डी 3 डी 9 ओवरले के उपयोग पर बहुत से प्रतिबंध हैं और वे बहुत सारे हार्डवेयर पर समर्थित नहीं हैं, इसलिए मैं कुछ अन्य दृष्टिकोणों का वर्णन करूंगा।

यह तकनीक अन्य ऐप्स को आपके पता स्थान में इंजेक्शन देने और आपके उपहारों को कैप्चर करने से नहीं रोकती है। इसके अलावा, क्योंकि यह कुछ हार्डवेयर पर समर्थित नहीं है और कुछ कैप्चर एपीआई वास्तव में ओवरले अक्षम करते हैं, यह बहुत मजबूत सुरक्षा गारंटी प्रदान नहीं करता है।

GPU आधारित सामग्री संरक्षण

आप बहुत समय GPU सामग्री संरक्षण के बारे में जानने के लिए है और आप जानते हैं कि आप एक गैर मानक DRM- सुरक्षित वीडियो प्रारूप प्रदर्शित किया जाएगा, तो आप रोल कर सकते हैं अपने जीपीयू सामग्री संरक्षण का उपयोग कर अपने संरक्षित मीडिया पथ। मैं इस क्षेत्र में एक विशेषज्ञ नहीं हूं, और कुछ ऐसे हैं जो हैं। मैं इसकी सिफारिश नहीं करता, लेकिन मैं इसे इंगित करना चाहता था।यह कैसे Direct3D 9 में लागू हो जाता है के बारे में बात करती है This page on MSDN और यह कैसे Direct3D 11.

इस तकनीक है कि सामग्री, पर कब्जा कर लिया नहीं किया गया है के बाद से प्रमुख मुद्रा हार्डवेयर के माध्यम से लगभग पूरी तरह से होता है मजबूत की गारंटी देता है प्रदान करता है (का उपयोग कर लागू हो जाता है के बारे में बात करती है this other page उदाहरण के लिए एचडीसीपी)।

मीडिया फाउंडेशन संरक्षित मीडिया पथ (पीएमपी)

आप एक अच्छी तरह से समर्थित DRM आधारित मीडिया प्रारूप का उपयोग वीडियो प्रदर्शित कर रहे हैं, तो आप उपयोग कर सकते हैं मीडिया फाउंडेशन के संरक्षित मीडिया पथ, जो GPU- का उपयोग करता है आधारित सामग्री संरक्षण पहले वर्णित। यह एक अलग संरक्षित प्रक्रिया में अधिकांश कार्यक्षमताओं को भी समाहित करता है जो अन्य ऐप्स अवरुद्ध नहीं कर सकते हैं या अन्यथा बातचीत नहीं कर सकते हैं। किसी एक परीक्षण-हस्ताक्षरित ड्राइवर स्थापित है या नहीं तो एक द्विआधारी कि है एक विश्वसनीय रूट प्राधिकारी द्वारा कोड पर हस्ताक्षर नहीं इंजेक्षन करने की कोशिश करता, तो Windows सामग्री decrypted जा करने के लिए अनुमति नहीं दी जाएगी और अपनी सामग्री सुरक्षित रहेगा। यह तकनीक मजबूत प्रदान करती है कि सामग्री को कैद नहीं किया गया है। इसका उपयोग नेटफ्लिक्स द्वारा विंडोज, ब्लूरे प्लेयर और अन्य पर किया जाता है।

DXGI स्वैप श्रृंखला झंडे

मान लिया जाये कि आप Direct3D का उपयोग कर 10.x/11.x (और उम्मीद है कि अब आप कर रहे हैं, के रूप में 2014 में 9 D3D के लिए, का विरोध किया), आप एक का उपयोग कर सकते सामग्री प्रस्तुत कर रहे हैं अपनी सामग्री को लॉक करने के लिए अपने स्वैप-चेन पर झंडे की संख्या।

यदि सिस्टम में एचडीसीपी या एचडीसीपी जैसी आउटपुट सुरक्षा नहीं है तो स्वैप-चेन निर्माण में विफल होने के लिए आप स्वैप-चेन झंडे में DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT पास कर सकते हैं। यह संभवतः आपके उद्देश्यों के लिए आवश्यक नहीं है, लेकिन यदि आप एचडीएमआई या एनालॉग आउटपुट को कैप्चर करने वाले लोगों के बारे में चिंता कर रहे हैं तो यह अच्छा है।

झंडा आप निश्चित रूप से चाहते हैं DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY कहा जाता है। यह आपकी स्क्रीन-कैप्चर एपीआई को कभी भी आपकी स्वैप-चेन देखने से रोकता है। यह सिर्फ उनके लिए एक काले आयताकार के रूप में दिखाई देगा।

सभी DXGI स्वैप श्रृंखला झंडे के लिए this page देखें।

यह तकनीक मजबूत गारंटी प्रदान नहीं करती है कि GPU- आधारित सामग्री सुरक्षा प्रदान करता है, लेकिन यदि आप बहुत भरोसेमंद हैं कि अन्य ऐप्स पागल चीजें नहीं कर रहे हैं जैसे कि आप अपने पता स्थान में इंजेक्शन कर रहे हैं और अपनी वर्तमान कॉल को जोड़ रहे हैं, तो आप भरोसा किया जा सकता है यह किसी और को आपकी सामग्री को देखने से रोकता है (मॉनीटर को छोड़कर)।

पूर्ण खिड़की संरक्षण

कभी कभी आप बस DXGI-प्रस्तुत सामग्री की तुलना में अधिक की रक्षा के लिए चाहते हो सकता है। उस स्थिति में, आप वास्तव में एक पूरी तरह से एक पूरी तरह से खिड़की को विभिन्न स्क्रीन-कैप्चर तकनीकों द्वारा कब्जा करने से बचाने के लिए एक समान तंत्र का उपयोग कर सकते हैं। यह SetWindowDisplayAffinity नामक एक एपीआई है। यह शक्ति और एक स्वैप-श्रृंखला के लिए DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY ध्वज पारित करने के लिए समारोह में बराबर है, लेकिन यह भी GDI के साथ प्रस्तुत सामग्री, बड़े DirectX प्रौद्योगिकियों, आदि किसी दिए गए HWND के लिए सुरक्षा सक्षम, या WDA_NONE पारित करने के लिए सुरक्षा को निष्क्रिय करने के WDA_MONITOR झंडा दर्रा की सुरक्षा ।

पूर्ण प्रकटीकरण के लिए, मैं टीम है कि स्क्रीन पर कब्जा और सामग्री संरक्षण के कुछ रूपों सहित प्रदर्शन तर्क, संभालती है पर माइक्रोसॉफ्ट में काम।

संबंधित मुद्दे