怎样屏蔽PrintScreenSysRq键,限制客户利用这个键抓屏,跪求!!!

解决方案 »

  1.   

    Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
    Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long
    Private Const VK_SNAPSHOT = &H2CPrivate Sub Form_Load()
        Call RegisterHotKey(Me.hWnd, &HBFFF&, 0, VK_SNAPSHOT)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call UnregisterHotKey(Me.hWnd, &HBFFF&)
    End Sub
      

  2.   

    清空剪贴板,呵呵
    Private Sub Timer1_Timer()
        Clipboard.Clear
    End Sub
      

  3.   

    RegisterHotKey只能屏蔽单独的PrintScreenSysrq键,如果按下了ctrl(或alt、shift)再按PrintScreenSysrq就屏蔽不了了,用低级键盘钩子可以屏蔽,以下的代码在win2000下测试通过。Option Explicit
    Declare Function SetWindowsHookExA Lib "user32" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As LongPublic hNextHookProc As Long
    Const HC_ACTION = 0
    Const WH_KEYBOARD = 2
    Const WH_KEYBOARD_LL = 13
    Private Type KBDLLHOOKSTRUCT
        vkCode As Long
        scanCode As Long
        flags As Long
        time As Long
        dwExtraInfo As Long
    End TypePublic Sub UnHookKBD()
        If hNextHookProc <> 0 Then
            UnhookWindowsHookEx hNextHookProc
            hNextHookProc = 0
        End If
    End Sub
    Public Function EnableKBDHook() As Boolean
        If hNextHookProc = 0 Then
            '安装的是Low Level的键盘钩子
            hNextHookProc = SetWindowsHookExA(WH_KEYBOARD_LL, AddressOf MyKBHFunc, App.hInstance, 0)
        End If
        EnableKBDHook = hNextHookProc <> 0
    End Function
    Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, lParam As KBDLLHOOKSTRUCT) As Long
        MyKBHFunc = 0 '讯息要处理
        If iCode < 0 Then
            MyKBHFunc = CallNextHookEx(hNextHookProc, iCode, wParam, lParam)
            Exit Function
        End If
        If lParam.vkCode = vbKeySnapshot Then  '有没有按到PrintScreen键
            MyKBHFunc = 1 '在这个Hook便吃掉这个讯息
            Debug.Print "PrintScreenSysRq"
            '普通的键盘钩子不能屏蔽PrintScreenSysRq,可以清空剪贴板
            'If Clipboard.GetFormat(vbCFBitmap) Then Clipboard.Clear
        Else
            Call CallNextHookEx(hNextHookProc, iCode, wParam, lParam)
        End If
        'Debug.Print lParam.vkCode
    End Function'以下在Form
    Private Sub Form_Load()
    Call EnableKBDHook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Call UnHookKBD
    End Sub
      

  4.   

    打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw键
    在该键右侧新建去新建一个DWORD类型的键值EnablePrintScreen,并设置起值为0,则WINDOWS禁止系统的屏幕打印功能。
      

  5.   

    可以在KEY PRESS事件中将该键的ascii 码等于零