仅供参考。 屏蔽热键用到的API函数都在下面Option Explicit Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fskey_Modifiers As Long, ByVal vk As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long Public Declare Function WaitMessage Lib "user32" () As LongPublic Const WM_HOTKEY = &H312 'Public Const MOD_ALT = &H1 Public Const MOD_ZERO = &O0 Public Const MOD_CONTROL = &H2 Public Const MOD_SHIFT = &H4 Public Const GWL_WNDPROC = (-4) ' 窗口函数的地址 Public Const PM_REMOVE = &H1 Public Const WM_DRAWCLIPBOARD = &H308 ' VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z' ' VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '9' ' and others are listed belowPublic Const VK_NUMPAD0 = &H60 Public Const VK_NUMPAD1 = &H61 Public Const VK_NUMPAD2 = &H62 Public Const VK_NUMPAD3 = &H63 Public Const VK_NUMPAD4 = &H64 Public Const VK_NUMPAD5 = &H65 Public Const VK_NUMPAD6 = &H66 Public Const VK_NUMPAD7 = &H67 Public Const VK_NUMPAD8 = &H68 Public Const VK_NUMPAD9 = &H69 Public Const VK_MULTIPLY = &H6A Public Const VK_ADD = &H6B Public Const VK_SEPARATOR = &H6C Public Const VK_SUBTRACT = &H6D Public Const VK_DECIMAL = &H6E Public Const VK_DIVIDE = &H6F Public Const VK_F1 = &H70 Public Const VK_F2 = &H71 Public Const VK_F3 = &H72 Public Const VK_F4 = &H73 Public Const VK_F5 = &H74 Public Const VK_F6 = &H75 Public Const VK_F7 = &H76 Public Const VK_F8 = &H77 Public Const VK_F9 = &H78 Public Const VK_F10 = &H79 ' This example uses F10 Public Const VK_F11 = &H7A ' This example uses F11 Public Const VK_F12 = &H7B ' This example uses F12Public p As LongPublic Type POINTAPI x As Long y As Long End TypePublic Type Msg hwnd As Long Message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End TypePublic bCancel As BooleanDim preWinProc As Long ' 用来保存窗口信息 Dim IsWinAddress As Boolean ' 是否取得窗口信息的判断Function keyWndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_HOTKEY Then ' 在下面的 Select Case 中添加热键代码 Select Case wParam 'wParam 值就是 keyID Case vbKeyDelete MsgBox "您按了Del", vbSystemModal ' 在这里可以做屏蔽后的处理 Case vbKeyF8 'MsgBox "您按了F8", vbSystemModal Case 3
Case Else ' MsgBox "对不起,你不能按Print Screen 键。" End Select End If keyWndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam) '将消息传送给指定的窗口End FunctionPublic Sub AddHotKey(ByVal hwnd As Long, ByVal KEYID As Long, ByVal Shift As Long, ByVal KeyCode As Long) If IsWinAddress = False Then preWinProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf keyWndproc) RegisterHotKey hwnd, KEYID, Shift, KeyCode IsWinAddress = True
End SubPublic Sub DelHotKey(ByVal hwnd As Long, KEYID As Long)
Clipboard是什么
Clipboard是剪切板
Clipboard.Clear清空剪贴板
//在什么语言里的呢
这里是VB版,当然说的是在VB里了
屏蔽热键用到的API函数都在下面Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fskey_Modifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Public Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Public Declare Function WaitMessage Lib "user32" () As LongPublic Const WM_HOTKEY = &H312
'Public Const MOD_ALT = &H1
Public Const MOD_ZERO = &O0
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4) ' 窗口函数的地址
Public Const PM_REMOVE = &H1
Public Const WM_DRAWCLIPBOARD = &H308
' VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'
' VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '9'
' and others are listed belowPublic Const VK_NUMPAD0 = &H60
Public Const VK_NUMPAD1 = &H61
Public Const VK_NUMPAD2 = &H62
Public Const VK_NUMPAD3 = &H63
Public Const VK_NUMPAD4 = &H64
Public Const VK_NUMPAD5 = &H65
Public Const VK_NUMPAD6 = &H66
Public Const VK_NUMPAD7 = &H67
Public Const VK_NUMPAD8 = &H68
Public Const VK_NUMPAD9 = &H69
Public Const VK_MULTIPLY = &H6A
Public Const VK_ADD = &H6B
Public Const VK_SEPARATOR = &H6C
Public Const VK_SUBTRACT = &H6D
Public Const VK_DECIMAL = &H6E
Public Const VK_DIVIDE = &H6F
Public Const VK_F1 = &H70
Public Const VK_F2 = &H71
Public Const VK_F3 = &H72
Public Const VK_F4 = &H73
Public Const VK_F5 = &H74
Public Const VK_F6 = &H75
Public Const VK_F7 = &H76
Public Const VK_F8 = &H77
Public Const VK_F9 = &H78
Public Const VK_F10 = &H79 ' This example uses F10
Public Const VK_F11 = &H7A ' This example uses F11
Public Const VK_F12 = &H7B ' This example uses F12Public p As LongPublic Type POINTAPI
x As Long
y As Long
End TypePublic Type Msg
hwnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End TypePublic bCancel As BooleanDim preWinProc As Long ' 用来保存窗口信息
Dim IsWinAddress As Boolean ' 是否取得窗口信息的判断Function keyWndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
' 在下面的 Select Case 中添加热键代码
Select Case wParam 'wParam 值就是 keyID
Case vbKeyDelete
MsgBox "您按了Del", vbSystemModal
' 在这里可以做屏蔽后的处理
Case vbKeyF8
'MsgBox "您按了F8", vbSystemModal
Case 3
Case Else
' MsgBox "对不起,你不能按Print Screen 键。"
End Select
End If
keyWndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam) '将消息传送给指定的窗口End FunctionPublic Sub AddHotKey(ByVal hwnd As Long, ByVal KEYID As Long, ByVal Shift As Long, ByVal KeyCode As Long) If IsWinAddress = False Then preWinProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf keyWndproc)
RegisterHotKey hwnd, KEYID, Shift, KeyCode
IsWinAddress = True
End SubPublic Sub DelHotKey(ByVal hwnd As Long, KEYID As Long)
SetWindowLong hwnd, GWL_WNDPROC, preWinProc
UnregisterHotKey hwnd, KEYID
IsWinAddress = False
End Sub
此法应能阻止大多数抓屏软件(没尝试过)
屏蔽PrintScreen的方法可用键盘钩子,或者楼上诸位的方法。
··这个判断一下有没有此进程就行了,开了就杀,不用拦截BitBlt