簡體   English   中英

如何使用C#阻止屏幕錄制

[英]How can i prevent screen recording using C#

我解密后在媒體播放器中顯示一個視頻,我想讓它保存,防止任何程序打印屏幕和屏幕錄制。

Office 2013及更高版本嘗試阻止Office應用程序窗口的屏幕截圖(如果它們當前打開了IRM文檔)。 截取屏幕截圖時,您會得到一個黑色矩形而不是窗口內容。

幾年前我問了一個類似的問題。 您可以使用SetwindowDisplayAffinity阻止應用程序窗口的屏幕截圖: Office 2013如何為IRM實施黑色窗口?

HWND myWindowWindowHandle = ...
BOOL ok = SetWindowDisplayAffinity( myWindowWindowHandle, WDA_MONITOR );
if( !ok ) exit(1);
ShowWindow( myWindowWindowHandle, SW_NORMAL );

這需要Windows 7或更高版本,並且系統必須在啟用DWM的情況下運行(DWM始終在Windows 8或更高版本上運行)。

Raymond Chen也在這里寫了博客: https ://blogs.msdn.microsoft.com/oldnewthing/20130603-00/?p = 4193

在過去(在Windows中的DWM之前),視頻通常使用圖形卡中的視頻疊加功能顯示,其中壓縮視頻將被饋送到GPU並進行解碼,並且永遠不會被發送回系統RAM(而是使用特殊顏色在屏幕上定義視頻將被覆蓋的像素: https//en.wikipedia.org/wiki/Video_overlay ,這就是為什么以前無法拍攝視頻的屏幕截圖:它不是DRM,只是一個副作用性能優化)

請注意,DRM在數學上不可能完美地工作(在Alice和Bob的比喻中,Bob(預期的收件人)和Charlie(試圖攔截內容的人)是同一個人),因此要小心投入太多時間進入這個。

請注意, SetWindowDisplayAffinity不會停止所有屏幕錄制工具,例如最近的GPU內置支持硬件加速顯示輸出捕獲(我相信這是Windows游戲DVR使用的),可能不會受到WDA_MONITOR影響。 用戶還可以在虛擬機環境中運行您的軟件,或修改Windows以禁用DWM(在Windows 7上很容易,但在Windows 8和10上仍然很難)。

更新:

有一個在Raymond Chen的博客里面警告說,另一個進程(帶有注釋hWnd另一個進程的窗口)可以簡單地調用SetWindowDisplayAffinity( otherProcessesWindowHandle, WDA_NONE ); 刪除DisplayAffinity保護。 我不知道它是否會起作用,我想請你嘗試一下,讓我們知道另一個過程是否會以這種方式打敗它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM