防止应用程序截屏(容器式,防止极域电子教室和录屏软件录制)

news2024/12/28 3:23:31

核心原理、实现目的

1、使用Panel容器将外部窗口嵌入自己写的程序

2、使用防止截屏的函数来对窗口透明,这可以使本窗口内所有窗口在录屏软件上消失

3、解放,抓取,存储句柄,实现摆脱录屏(极域监控)

程序设计

本人始终坚持使用vb.net来编程,不是C#难学,而是vb.net更有性价比……C#源码可以自行翻译C#与vb.net互相转换

中间那一坨是Panel容器,也可以替换成别的控件

如何选取窗口?

看到座上的一个按钮,显示的是一个“+”

按住它不放并且移动到窗口上即可,注意的是,最好要移动到窗口的标题栏或者是边框上才算是该窗体的最终窗体,本人编程能力有限,目前功能不是很完善

此时松开鼠标,就可以看到label处是对应的窗口的名字,listbox内是历史窗口的句柄信息和窗口标题。

如何将目标窗口拖入容器?

点击放入容器,即可将选定窗口或当前选定窗口“嵌入” panel

点击移出容器即可将选定窗口或当前选定窗口“挤出” panel

如何防止截屏?

按下防止截屏即可,此时按钮为红色,容器内窗口为无法录制(截屏),这样性能会变差,可以在必要时恢复录制

代码

API解读

全部封装到模块

    ''' <summary>
    ''' 屏幕坐标->窗口句柄,实现鼠标移动到哪就得到什么窗口的句柄
    ''' </summary>
    ''' <param name="xPoint"></param>
    ''' <param name="yPoint"></param>
    ''' <returns></returns>
    <DllImport("user32.dll", EntryPoint:="WindowFromPoint")>
    Public Function WindowFromPoint(xPoint As Integer, yPoint As Integer) As IntPtr

    End Function
    ''' <summary>
    ''' 防止截屏的核心,设置窗口是否可录制
    ''' </summary>
    ''' <param name="hWnd"></param>
    ''' <param name="dwAffinity">常量</param>
    ''' <returns></returns>
    <DllImport("user32.dll")>
    Public Function SetWindowDisplayAffinity(hWnd As IntPtr, dwAffinity As Integer) As Boolean
    End Function

    ''' <summary>
    ''' 获取窗口标题,注意需要一个外部变量存储标题名称,是ByRef / out
    ''' </summary>
    ''' <param name="hWnd"></param>
    ''' <param name="lpString"></param>
    ''' <param name="nMaxCount">接收的最大值</param>
    ''' <returns></returns>
    <DllImport("user32.dll", EntryPoint:="GetWindowText")>
    Public Function GetWindowText(hWnd As IntPtr, lpString As StringBuilder, nMaxCount As Integer) As Integer

    End Function

    ''' <summary>
    ''' 设置窗口的父容器
    ''' </summary>
    ''' <param name="hWndChild"></param>
    ''' <param name="hWndNewParent">此处写IntPtr.Zero则移除容器</param>
    ''' <returns></returns>
    <DllImport("user32.dll ", EntryPoint:="SetParent")>
    Public Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr

    End Function

    ''' <summary>
    ''' 改变窗口形态
    ''' </summary>
    ''' <param name="hwnd"></param>
    ''' <param name="nCmdShow">常量</param>
    ''' <returns></returns>
    <DllImport("user32.dll", EntryPoint:="ShowWindow", CharSet:=CharSet.Auto)>
    Public Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer

    End Function
    ''' <summary>
    ''' 查找标题窗口
    ''' </summary>
    ''' <param name="lpClassName">可为空</param>
    ''' <param name="lpWindowName"></param>
    ''' <returns></returns>
    <DllImport("user32.dll")>
    Public Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr

    End Function

 常量声明

SetWindowDisplayAffinity

 ShowWindow

主要代码

请自行分离代码

初始化

Dim ispick As Boolean
Public Const WDA_NONE = &H0
Public Const WDA_EXCLUDEFROMCAPTURE = &H11
Dim s As New StringBuilder
Dim hwnd As IntPtr
Dim childHwnd As IntPtr'没用

Dim dirHwnd As New List(Of HwndName)

Dim jiyuPath As String

Public KeyHandle As Integer'没用
Structure HwndName
    Dim hwnd As IntPtr
    Dim text As String
    Sub New(hwnd As IntPtr, text As String)
        Me.hwnd = hwnd
        Me.text = text
    End Sub
End Structure

截屏组

'''防止截屏
SetWindowDisplayAffinity(Me.Handle, WDA_EXCLUDEFROMCAPTURE)
Button2.BackColor = Color.Red
Button3.BackColor = Color.Blue
'''恢复截屏
SetWindowDisplayAffinity(Handle, WDA_NONE)
Button2.BackColor = Color.Blue
Button3.BackColor = Color.Red

容器组

'''放入容器 这里if可以排除其他控件,防止手欠把自己的控件也嵌入panel
If Label1.Text <> "+" Then
    SetParent(hwnd, Panel1.Handle)
End If
'''移出容器
SetParent(hwnd, IntPtr.Zero)
'''更新(最大化窗口)
SetParent(hwnd, Panel1.Handle)
ShowWindow(hwnd, 3)

选取窗口

'''按下
Private Sub Button1_MouseDown(sender As Object, e As MouseEventArgs) Handles Button1.MouseDown
    ispick = True

End Sub
'''移动
Private Sub Button1_MouseMove(sender As Object, e As MouseEventArgs) Handles Button1.MouseMove
    If ispick = True Then
        hwnd = WindowFromPoint(MousePosition.X, MousePosition.Y)
        GetWindowText(hwnd, s, 255)
        Label1.Text = s.ToString
    End If
End Sub
'''松开
Private Sub Button1_MouseUp(sender As Object, e As MouseEventArgs) Handles Button1.MouseUp
    ispick = False

    dirHwnd.Add(New HwndName(hwnd, s.ToString))
    ListHwnd.Items.Clear()
    For Each item In dirHwnd
        ListHwnd.Items.Add("标题:" & item.text & " 句柄:" & item.hwnd.ToString)
    Next
End Sub

其余代码

Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    Panel1.Width = Width - Panel1.Location.X - 25
    Panel1.Height = Height - 75
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    If CheckBox1.Checked = False Then
        Me.TopMost = False
    Else
        TopMost = True
    End If
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If TopMost = True Then
        TopMost = True
    End If
End Sub
'可以不写
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    Form2.Show()
    Dim hwnd

    hwnd = FindWindow(vbNullString, "屏幕广播")
    SetParent(hwnd, Form2.Panel2.Handle)
    ShowWindow(hwnd, 3)
    'SetWindowDisplayAffinity(Form2.Handle, WDA_EXCLUDEFROMCAPTURE)
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each p In Process.GetProcesses
        If p.ProcessName = "StudentMain" Then
            jiyuPath = p.MainModule.FileName

        End If
    Next
    If jiyuPath = "" Then
        MsgBox("极域未运行,请在极域运行后点击启动极域即可完成操作")
    End If
    CheckBox1.Checked = True
End Sub


Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
    IO.File.WriteAllBytes("C:/助手.exe", My.Resources.v1_2_助手_64位)
    Process.Start("C:/助手.exe")
End Sub

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
    IO.File.WriteAllText("C:/RootCA.reg", My.Resources.RootCA)
    Process.Start("regedit", "/s C:/RootCA.reg")
End Sub


Private Sub ListHwnd_SelectedValueChanged(sender As Object, e As EventArgs) Handles ListHwnd.SelectedValueChanged
    If ListHwnd.SelectedIndex <> -1 Then
        hwnd = dirHwnd(ListHwnd.SelectedIndex).hwnd
        Label1.Text = dirHwnd(ListHwnd.SelectedIndex).text
    End If
End Sub

Private Sub Button10_Click_1(sender As Object, e As EventArgs) Handles Button10.Click
    If jiyuPath = "" Then
        For Each p In Process.GetProcesses
            If p.ProcessName = "StudentMain" Then
                jiyuPath = p.MainModule.FileName
            End If
        Next
        If jiyuPath = "" Then
            MsgBox("极域未运行,请在极域运行后点击启动极域即可完成操作")
        End If
    Else
        Process.Start(jiyuPath)
    End If
End Sub

Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
    Process.Start("cmd", "/c taskkill /f /im studentmain.exe")
End Sub

源程序和源代码应该会在开头有,感谢博主小流汗黄豆提供的应用程序和设计思路小流汗黄豆 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1249280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ps:画笔工具的基本操作

画笔工具 Brush Tool是 Ps 中最常用的工具&#xff0c;广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行&#xff0c;但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Ps 中许多…

动态规划 之 钢条切割

自顶向下递归实现(Recursive top-down implementation) 程序CUT-ROD对等式(14.2)进行了实现&#xff0c;伪代码如下&#xff1a; CUT-ROD(p, n)if n 0return 0q -∞for i 1 to nq max{q, p[i] CUT-ROD(p, n - i)}return q上面解决中重复对一个子结构问题重复求解了&#…

手把手教你安装 Visual Studio 2022 及其简单使用

软件下载 打开 Visual Studio 官网&#xff0c;个人选择免费的Community社区版就够用了。 软件安装 双击运行安装程序&#xff1a; 点击继续 即可&#xff1a; 等待加载完成&#xff1a; 可以看到 Visual Studio 2022 对应不同的开发需求提供了若干工作负载&#xff0c;这里以…

CSS-长度单位篇

px&#xff1a;像素em&#xff1a;相对元素font-size的倍数rem&#xff1a;相对根字体大小&#xff0c;html标签就是根%&#xff1a;相对父元素计算 注意&#xff1a;CSS中设置长度&#xff0c;必须加单位&#xff0c;否则样式无效&#xff01;

HTML网站稳定性状态监控平台源码

这是一款网站稳定性状态监控平台源码&#xff0c;它基于UptimeRobot接口进行开发。当您的网站遇到故障时&#xff0c;该平台能够通过邮件或短信通知您。下面是对安装过程的详细说明&#xff1a; 安装步骤 将源码上传至您的主机或服务器&#xff0c;并进行解压操作。 在Uptim…

DELL MD3600F存储重置管理软件密码

注意&#xff1a;密码清除可能会导致业务秒断&#xff0c;建议非业务时间操作 针对一台控制器操作即可&#xff0c;另一控制器会同步操作 重置后密码为空&#xff01; 需求&#xff1a;重置存储管理软件密码 管理软件中分配物理磁盘时提示输入密码(类似是否了解风险确认操作的提…

思科模拟器操作命令

模式 思科模拟器常见的模式有 用户模式 能够操作的命令比较少 特权模式特权模式下面可以操作的比较多 全局模式 接口模式 用户模式进入特权模式: 命令enable 特权模式进行全局模式命令: configure terminal 退出命令 exit命令&#xff1a;返回上一层&#xff0c;即一步一步…

javascript判断是否是json格式

文章目录 一、问题二、解决三、总结3.1、定义 一、问题 工作中有用到JSON.parse这个来解析JSON字符串&#xff0c;这个时候突然有一次遇到JSON字符串是长串数字或数字字符串&#xff0c;主要是自己也没兼容好&#xff0c;就导致了一长串数字JSON.parse之后变成了e24等数字。主…

无需API开发,有赞小程序集成广告推广系统,提升品牌曝光

无需API开发&#xff0c;实现有赞小程序与其他系统的连接 有赞小程序作为一个多功能的电子商务解决方案&#xff0c;为商家提供了无需复杂API开发就可以实现系统连接和集成的便捷途径。通过有赞小程序&#xff0c;商家可以轻松实现与各种系统的数据同步和应用互联&#xff0c;…

Zynq-Linux移植学习笔记之67- 国产ZYNQ上通过GPIO模拟MDC/MDIO协议

1、背景介绍 模块上有9个PHY&#xff0c;其中两个PHY通过ZYNQ PS端的MDIO总线连接&#xff0c;其余7个PHY单独通过GPIO进行控制&#xff0c;需要实现GPIO模拟MDC/MDIO协议。 2、vivado工程设计 vivado工程内为每个PHY建立两个GPIO IP核&#xff0c;分别用来代表MDC和MDIO&…

Vue 2.0源码分析-Virtual DOM

Virtual DOM 这个概念相信大部分人都不会陌生&#xff0c;它产生的前提是浏览器中的 DOM 是很“昂贵"的&#xff0c;为了更直观的感受&#xff0c;我们可以简单的把一个简单的 div 元素的属性都打印出来&#xff0c;如图所示&#xff1a; 可以看到&#xff0c;真正的 DOM …

IDEA中的Postman?完全免费!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

用Python写一个浏览器集群框架

更多Python学习内容&#xff1a;ipengtao.com 在分布式爬虫和大规模数据采集的场景中&#xff0c;使用浏览器集群是一种有效的方式&#xff0c;可以提高数据采集的速度和效率。本文将介绍如何用Python编写一个简单但强大的浏览器集群框架&#xff0c;以应对需要使用多个浏览器实…

个人财务管理软件CheckBook Pro mac中文版特点介绍

CheckBook Pro mac是一款Mac平台的个人财务管理软件&#xff0c;主要用于跟踪个人收入、支出和账户余额等信息。 CheckBook Pro mac 软件特点 简单易用&#xff1a;该软件的用户界面非常简洁明了&#xff0c;即使您是初学者也可以轻松上手。 多账户管理&#xff1a;该软件支持…

一文彻底看懂Python切片,Python切片理解与操作

1.什么是切片 切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。切片是访问特定范围内的元素,就是一个Area。 说个笑话:切片不是切片,而是切片,但是又是切片。大家理解下呢(末…

Shell循环:for(二)

一、通过用户列表文件创建用户 需求&#xff1a;通过用户列表文件创建用户 [rootlocalhost ~]# cat user.txt qian yoa huang演示&#xff1a; [rootlocalhost ~]# vim foruser.sh #编写脚本 #!/bin/bash for i in cat user.txt do useradd $i if [ $? -eq 0 ] thenech…

ErphpdownV16.21插件 安装教程和插件下载

ErphpdownV16.21插件下载_新版本 上传插件并解压 登入后台插件管理启动ErphpdownV16.21插件即可 启动后设置即可使用此版本为学习版插件 功能介绍&#xff1a; Erphpdown会员推广下载专业版 经过完美测试运行于wordpress 3.x-6.x版本。后续会增加更多实用的功能。已针对此插件…

多功能智能灯杆主要功能有哪些?

多功能智能灯杆这个词相信大家都不陌生&#xff0c;最近几年多功能智能灯杆行业发展迅速&#xff0c;迅速取代了传统路灯&#xff0c;那么多功能智能灯杆相比传统照明路灯好在哪里呢&#xff0c;为什么大家都选择使用叁仟智慧多功能智能灯杆呢&#xff1f;所谓多功能智能灯杆着…

电机应用-直流有刷电机多环控制实现

目录 直流有刷电机多环控制实现 硬件设计 直流电机三环&#xff08;速度环、电流环、位置环&#xff09;串级PID控制-位置式PID 编程要点 配置ADC可读取电流值 配置基本定时器6产生定时中断读取当前电路中驱动电机的电流值并执行PID运算 配置定时器1输出PWM控制电机 配…

nodejs微信小程序+python+PHP-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…