比如禁止使用print screen sysrq键,或禁止启动一些常用的抓屏软件等,谢谢

解决方案 »

  1.   

    Clipboard.Clear
    Clipboard是什么
      

  2.   

    Clipboard.Clear
    Clipboard是剪切板
      

  3.   

    Clipboard.Clear是在什么语言里的呢,要是用软件的呢?
      

  4.   

    print screen sysrq键是复制到剪贴板的
    Clipboard.Clear清空剪贴板
    //在什么语言里的呢
    这里是VB版,当然说的是在VB里了
      

  5.   

    仅供参考。
    屏蔽热键用到的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
      

  6.   

    做个API钩子,如调用WindowFromPoint不来自VB进程则返回0给他,否则返回有效的窗口句柄
    此法应能阻止大多数抓屏软件(没尝试过)
    屏蔽PrintScreen的方法可用键盘钩子,或者楼上诸位的方法。
      

  7.   

    阻止抓屏软件的方法之一是拦截API:BitBlt,PlgBlt,MaskBlt等GDI函数,类似金山词霸拦截TextOutA等函数,VB做比较麻烦,因为要写标准DLL(非COM的),编译有问题。
      

  8.   

    禁止启动一些常用的抓屏软件
          ··这个判断一下有没有此进程就行了,开了就杀,不用拦截BitBlt
      

  9.   

    谢谢大家的帮助,我综合了一下大家的看法,为屏蔽print screen的方法,因为他是走的剪切板,采用最简单的方法,按下键后清楚以下,或定时循环清楚剪切板,防止其它软件的就用API钩子是最简单,并又可以达到一定效果的了.那位可以写个完整的代码过程吗?