大過年的一朋友讓我幫他實作一個關於阻止他的軟體被截圖的小功能;最終的效果:
1、 直接參照系統內建的:
[DllImport("User32.dll", SetLastError = true)]
privatestaticexternboolSetWindowDisplayAffinity(IntPtr hWnd, uint dwAffinity);
2 、 必須在Load事件裏面:
///<summary>
/// 這裏是截取的是個黑框
///</summary>
publicconstint WDA_MONITOR = 0x00000001;
///<summary>
/// 這裏直接是透明的
///</summary>
publicconstint WDA_EXCLUDEFROMCAPTURE = 0x00000011;
privatevoidMainWindow_Loaded(object sender, RoutedEventArgs e)
{
IntPtr hWnd = IntPtr.Zero;
//獲取 WPF 視窗的控制代碼
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
hWnd = hwndSource.Handle;
}
if (hWnd != IntPtr.Zero)
{
bool result = SetWindowDisplayAffinity(hWnd, WDA_EXCLUDEFROMCAPTURE);
if (!result)
{
int errorCode = Marshal.GetLastWin32Error();
Debug.WriteLine("Error: " + errorCode);
}
}
}
3 、當 AllowsTransparency= "True" 失效,但還是 要 透明背景異形視窗,然後找到了大佬給推薦的高效能的無邊框方案:
Window style="None" ResizeMode="CanMinimize/NoResize"
<WindowChrome.WindowChrome>
<WindowChromeGlassFrameThickness="-1" />
</WindowChrome.WindowChrome>
簡單效果就這麽完事了;畢竟咱也是第一次玩耍
;萬一人家拿著手機直接拍界面呢,這時我們應該直接呼叫網路攝影機透過影像辨識技術再來動態控制軟體的呈現
;編程不息、Bug不止、無Bug、無生活
;
改
bug
的冷靜、編碼的激情、完成後的喜悅、挖坑的激動 、填坑的興奮;這也許就是屌絲程式設計師的樂趣吧;
今天就到這裏吧;希望自己有動力一步一步堅持下去;生命不息,程式碼不止;大家抽空可以看看今天分享的效果,有好的意見和想法,可以在留言板隨意留言;我看到後會第一時間回復大家,多謝大家的一直默默的關註和支持!
如果覺得不錯,那就伸出您的小手點個贊並關註一下,多謝您的支持!