从Windows服务中禁用打印屏幕



是否有任何方法可以防止用户登录计算机使用PrintScreen键。我看着全网,找不到任何使它起作用的方法。我看到的唯一方法是使用Windows表单,这不是真正的选择。

vb的c#对我来说很好。

任何帮助将不胜感激。

好的,所以类似的东西...

来自http://go4answers.webhost4life.com/example/monitor-keys-53505.aspx

    Module Keyboard
<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Public Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr
End Function
Public Declare Function UnhookWindowsHookEx Lib "user32" _
  (ByVal hHook As Integer) As Integer
Public Declare Function SetWindowsHookEx Lib "user32" _
  Alias "SetWindowsHookExA" (ByVal idHook As Integer, _
  ByVal lpfn As KeyboardHookDelegate, ByVal hmod As IntPtr, _
  ByVal dwThreadId As Integer) As Integer
Private Declare Function GetAsyncKeyState Lib "user32" _
  (ByVal vKey As Integer) As Integer
Private Declare Function CallNextHookEx Lib "user32" _
  (ByVal hHook As Integer, _
  ByVal nCode As Integer, _
  ByVal wParam As Integer, _
  ByVal lParam As KBDLLHOOKSTRUCT) As Integer
Public Structure KBDLLHOOKSTRUCT
    Public vkCode As Integer
    Public scanCode As Integer
    Public flags As Integer
    Public time As Integer
    Public dwExtraInfo As Integer
End Structure
' Low-Level Keyboard Constants
Private Const HC_ACTION As Integer = 0
Private Const LLKHF_EXTENDED As Integer = &H1
Private Const LLKHF_INJECTED As Integer = &H10
Private Const LLKHF_ALTDOWN As Integer = &H20
Private Const LLKHF_UP As Integer = &H80
' Virtual Keys
Public Const VK_TAB As Integer = &H9
Public Const VK_CONTROL As Integer = &H11
Public Const VK_ESCAPE As Integer = &H1B
Public Const VK_DELETE As Integer = &H2E
Private Const WH_KEYBOARD_LL As Integer = 13
Public KeyboardHandle As Integer
' Implement this function to block as many
' key combinations as you'd like
Public Function IsHooked( _
  ByRef Hookstruct As KBDLLHOOKSTRUCT) As Boolean
    Debug.WriteLine("Hookstruct.vkCode: " & Hookstruct.vkCode)
    Debug.WriteLine(Hookstruct.vkCode = VK_ESCAPE)
    Debug.WriteLine(Hookstruct.vkCode = VK_TAB)
    'MessageBox.Show(Hookstruct.vkCode.ToString)
    If (Hookstruct.vkCode = VK_ESCAPE) And _
      CBool(GetAsyncKeyState(VK_CONTROL) _
      And &H8000) Then
        Call HookedState("Ctrl + Esc blocked")
        Return True
    End If
    If (Hookstruct.vkCode = VK_TAB) And _
      CBool(Hookstruct.flags And _
      LLKHF_ALTDOWN) Then
        Call HookedState("Alt + Tab blockd")
        Return True
    End If
    If (Hookstruct.vkCode = VK_ESCAPE) And _
      CBool(Hookstruct.flags And _
        LLKHF_ALTDOWN) Then
        Call HookedState("Alt + Escape blocked")
        Return True
    End If
    '' disable PrintScreen here
    If (Hookstruct.vkCode = 44) Then
        Call HookedState("Print blocked")
        Return True
    End If
    Return False
End Function
Private Sub HookedState(ByVal Text As String)
    Debug.WriteLine(Text)
End Sub
Public Function KeyboardCallback(ByVal Code As Integer, _
  ByVal wParam As Integer, _
  ByRef lParam As KBDLLHOOKSTRUCT) As Integer
    If (Code = HC_ACTION) Then
        Debug.WriteLine("Calling IsHooked")
        If (IsHooked(lParam)) Then
            Return 1
        End If
    End If
    Return CallNextHookEx(KeyboardHandle, _
      Code, wParam, lParam)
End Function
Public Delegate Function KeyboardHookDelegate( _
  ByVal Code As Integer, _
  ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) _
               As Integer
<MarshalAs(UnmanagedType.FunctionPtr)> _
Private callback As KeyboardHookDelegate
Public Sub HookKeyboard(ByRef f As Form)
    callback = New KeyboardHookDelegate(AddressOf KeyboardCallback)
    KeyboardHandle = SetWindowsHookEx(WH_KEYBOARD_LL, callback, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0)
    MessageBox.Show(KeyboardHandle.ToString)
    Call CheckHooked()
End Sub
Public Sub CheckHooked()
    If (Hooked()) Then
        Debug.WriteLine("Keyboard hooked")
    Else
        Debug.WriteLine("Keyboard hook failed: " & Err.LastDllError)
    End If
End Sub
Private Function Hooked() As Boolean
    Hooked = KeyboardHandle <> 0
End Function
Public Sub UnhookKeyboard()
    If (Hooked()) Then
        Call UnhookWindowsHookEx(KeyboardHandle)
    End If
End Sub

结束模块

另外,我看了一下,还有其他一些,似乎是您正在寻找的东西

.net中的全球系统挂钩 http://www.codeproject.com/kb/system/globalsystemhook.aspx

相关内容

  • 没有找到相关文章

最新更新