防止;“打印屏幕”;vb.net中的按钮
我使用vb.net制作了一个简单的windows窗体应用程序,我的项目“Form1.vb”的第一个元素包含以下常见代码:防止;“打印屏幕”;vb.net中的按钮,vb.net,printscreen,Vb.net,Printscreen,我使用vb.net制作了一个简单的windows窗体应用程序,我的项目“Form1.vb”的第一个元素包含以下常见代码: Public Class Form1 Public Sub Form1_Load ..... End Class 我需要在我的应用程序中禁用“打印屏幕”按钮,我使用google发现了以下代码: Option Explicit On Imports System.ComponentModel Imports System.Windows.Forms Imp
Public Class Form1
Public Sub Form1_Load
.....
End Class
我需要在我的应用程序中禁用“打印屏幕”按钮,我使用google发现了以下代码:
Option Explicit On
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Public Class HotKeyClass
Inherits Control
<DllImport("user32.dll")> _
Private Shared Function RegisterHotKey(hWnd As IntPtr, id As Integer, fsModifiers As Integer, vk As Integer) As Boolean
End Function
<DllImport("user32.dll")> _
Private Shared Function UnregisterHotKey(hWnd As IntPtr, id As Integer) As Boolean
End Function
<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Sub keybd_event(bVk As Byte, bScan As Byte, dwFlags As UInteger, dwExtraInfo As Integer)
End Sub
Public Event HotKeyPressed(Key As Keys, Modifer As HotKeyModifer)
Private Const KEYEVENTF_KEYUP = &H2
Private Const WM_HOTKEY = &H312
Private m_Modifer As Integer
Private m_Key As Integer
Private m_Id As Integer
'Конструктор
Sub New()
Me.BackColor = Color.Black
Me.Visible = False
End Sub
'Обработка сообщений
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_HOTKEY Then
'Dim idHotKey As Integer = CInt(m.WParam) 'Получаем идентификатор комбинации
RaiseEvent HotKeyPressed(m_Key, m_Modifer)
End If
MyBase.WndProc(m)
End Sub
'Переопределяем, получаем уникальный ID
Public Overrides Function GetHashCode() As Integer
Return m_Modifer ^ m_Key ^ Me.Handle.ToInt32()
End Function
'Переопределяем, снять регистрацию клавиш
Protected Overrides Sub Dispose(disposing As Boolean)
UnregisterHotKey(Me.Handle, Me.GetType().GetHashCode())
MyBase.Dispose(disposing)
End Sub
'Регистрация клавиш
Public Function Register(Key As Keys, Modifer As HotKeyModifer) As Boolean
m_Id = Me.GetHashCode()
m_Modifer = Modifer
m_Key = Key
Return RegisterHotKey(Me.Handle, m_Id, m_Modifer, m_Key)
End Function
'Снять регистрацию клавиш
Public Function Unregiser() As Boolean
Return UnregisterHotKey(Me.Handle, m_Id)
End Function
'Для эмуляции нажатия Ctrl + V
Public Shared Sub EmulateControlV()
keybd_event(Keys.ControlKey, 0, 0, 0)
keybd_event(Keys.V, 0, 0, 0)
keybd_event(Keys.V, 0, KEYEVENTF_KEYUP, 0)
keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0)
End Sub
End Class
<Flags> _
Public Enum HotKeyModifer As UInteger
NO_MODIFICATION = 0
ALT = 1
CONTROL = 2
SHIFT = 4
WIN = 8
End Enum
选项显式打开
导入System.ComponentModel
导入System.Windows.Forms
导入System.Runtime.InteropServices
公共类热键类
继承控制权
_
私有共享函数寄存器hotKey(hWnd作为IntPtr,id作为整数,fsModifiers作为整数,vk作为整数)作为布尔值
端函数
_
私有共享函数将热键(hWnd作为IntPtr,id作为Integer)注销为布尔值
端函数
_
私有共享子密钥bd_事件(bVk作为字节,bScan作为字节,dwFlags作为UInteger,dwextranfo作为整数)
端接头
按下公共事件热键(键为键,修改器为热键修改器)
Private Const keyevent fu KEYUP=&H2
私有常量WM_热键=&H312
私有m_modifier为整数
作为整数的私有m_密钥
作为整数的私有m_Id
'Конструктор
次新
Me.BackColor=Color.Black
Me.Visible=False
端接头
'Обработка сообщений
受保护的覆盖子WndProc(ByRef m作为消息)
如果m.Msg=WM\U热键,则
“作为整数的Dim idHotKey=CInt(m.WParam)”Пааааааааааааааааа
按下RaiseEvent热键(m_键,m_修改器)
如果结束
MyBase.WndProc(m)
端接头
‘Пччаааааааааааааааа
公共重写函数GetHashCode()为整数
返回m_modifier ^m_Key ^Me.Handle.ToInt32()
端函数
'Переопределяем, снять регистрацию клавиш
受保护的覆盖子处置(作为布尔值处置)
注销热键(Me.Handle、Me.GetType().GetHashCode())
MyBase.Dispose(Dispose)
端接头
'Регистрация клавиш
作为布尔值的公共函数寄存器(键作为键,修改器作为热键修改器)
m_Id=Me.GetHashCode()
m_modifier=modifier
m_Key=Key
返回注册表快捷键(Me.Handle、m_Id、m_modifier、m_Key)
端函数
'Снять регистрацию клавиш
作为布尔值的公共函数Unregiser()
返回未注册热键(Me.Handle,m_Id)
端函数
“Ctrl+V”
公共共享子仿真控制()
keybd_事件(Keys.ControlKey,0,0,0)
keybd_事件(key.V、0、0、0)
keybd_事件(Keys.V,0,KEYEVENTF_KEYUP,0)
keybd_事件(Keys.ControlKey,0,KEYEVENTF_KEYUP,0)
端接头
末级
_
作为UInteger的公共枚举热键修改器
无修改=0
ALT=1
控制=2
班次=4
赢=8
结束枚举
现在,如何使用此代码检测按下“打印屏幕”按钮以停止操作?我已经在这里说过了:但可能需要重复:-)
您可以监视按键,并在用户按下打印屏幕(按键代码44)时执行剪贴板。清除()。这是毫无意义的,因为您在应用程序中所做的任何事情都不会阻止用户使用手机拍摄屏幕或使用内置于Windows中的屏幕捕获软件(剪贴工具)。可能的重复。对于初学者来说,这不是入门级的东西,你知道这段代码是做什么的,为什么吗?最好知道,这样你就可以找出什么不起作用以及为什么不起作用。还有,如果用户有一个捕获程序,这根本不会阻止用户捕获他们想要的东西。。。只是一个想法…我从来没有新过这么多VB应用程序保护着绝密的东西,以至于打印屏幕、窗口关闭、键盘和应用程序退出都必须被禁用。