Tasten Systemweit Sperren

    • VB.NET

    Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von xpecidy.

      Tasten Systemweit Sperren

      Hey,

      habe gedacht, dass ich meinen umgeschriebenen Code hier poste, da viele Leute nach so etwas suchen.
      Mit dessen hilfe ist es möglich, Tasten vor dem Betriebssystem abzufangen. Bevor das OS etwas mitbekommt,
      werden die Tasten verschluckt, sodass das OS nie etwas mitbekommt.

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Form1
      3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      4. 'Hooks einschalten
      5. KeyHookEnable = True
      6. End Sub
      7. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
      8. 'Hooks ausschalten
      9. KeyHookEnable = False
      10. End Sub
      11. 'Deklaration von API´s, Variablen und Konstanten
      12. Private Declare Unicode Function SetWindowsHookExW Lib "user32.dll" (ByVal idHook As Integer, ByVal lpfn As HOOKPROCDelegate, ByVal hMod As IntPtr, ByVal dwThreadId As UInteger) As IntPtr
      13. Private Declare Unicode Function CallNextHookEx Lib "user32.dll" (ByVal hhk As IntPtr, ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
      14. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
      15. Private Delegate Function HOOKPROCDelegate(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
      16. Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" (ByVal lpModuleName As IntPtr) As IntPtr
      17. Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As UInteger
      18. Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc)
      19. Private Const WH_KEYBOARD_LL As Integer = 13
      20. Private Const WM_KEYDOWN As Int32 = &H100
      21. Private Const WM_KEYUP As Int32 = &H101
      22. Private Const HC_ACTION As Integer = 0
      23. Private Const KEYEVENTF_KEYUP = &H2
      24. Private PrevWndProc As Integer
      25. Private mHandle As IntPtr
      26. <StructLayout(LayoutKind.Sequential)> Public Structure KBDLLHOOKSTRUCT
      27. Public vkCode As Keys
      28. Public scanCode, flags, time, dwExtraInfo As UInteger
      29. Public Sub New(ByVal key As Keys, ByVal scancod As UInteger, ByVal flagss As UInteger, ByVal zeit As UInteger, ByVal extra As UInteger)
      30. vkCode = key
      31. scanCode = scancod
      32. flags = flagss
      33. time = zeit
      34. dwExtraInfo = extra
      35. End Sub
      36. End Structure
      37. 'Hook Ein/Ausschalten
      38. Private Property KeyHookEnable() As Boolean
      39. Get
      40. Return mHandle <> IntPtr.Zero
      41. End Get
      42. Set(ByVal value As Boolean)
      43. If KeyHookEnable = value Then Return
      44. If value Then
      45. mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, _
      46. GetModuleHandleW(IntPtr.Zero), 0)
      47. Else
      48. UnhookWindowsHookEx(mHandle)
      49. mHandle = IntPtr.Zero
      50. End If
      51. End Set
      52. End Property
      53. Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
      54. Dim fEatKeyStroke As Boolean
      55. If nCode = HC_ACTION Then
      56. Select Case lParam.vkCode
      57. 'Hier wird die Taste vor dem Betriebssystem abgefangen und "untergeschluckt"
      58. 'Alt Taste wird abgefangen...
      59. Case Keys.Alt
      60. '...und in den Müll geschmissen :P
      61. fEatKeyStroke = True
      62. Case Keys.LWin
      63. fEatKeyStroke = True
      64. Case Keys.RWin
      65. fEatKeyStroke = True
      66. End Select
      67. If fEatKeyStroke Then
      68. Return New IntPtr(1)
      69. Exit Function
      70. End If
      71. Return CallNextHookEx(mHandle, nCode, wParam, lParam)
      72. End If
      73. End Function
      74. End Class



      Ich hoffe ich habe euch damit geholfen.

      LG

      MB-Tech
      Das kann sein. Immerhin gibt es auch Schadenssoftware, die so etwas eventuell gebrauchen kann.
      Doch ich dachte bei meinem Post eher daran, dass dieses Verfahren eher für Desktop Sperren etc. zu gebrauchen wäre.

      Wenn die Moderatoren mein Tutorial für Kritisch befinden, dann sollen sie es bitte löschen.

      LG
      Danke!!!!!!!!
      DIese ganzen mist Youtube Tutorials alles funktioniert nicht, ABER DAS VON DIR GEHT!

      Aber einen Fehler habe ich gefunden:

      Quellcode

      1. Imports System.Runtime.InteropServices


      NICHT:

      Quellcode

      1. Imports System.Runtime.InteropService


      Der code abeitet 1A! :thumbsup:
      irgendwie, klappt es bei mir nicht, alle Tastendrücke funktionieren noch, ich kann überall schreiben, es gehen Kombinationen...

      was mache ich falsch?
      ich habe einfach eine Form genommen, den Code hineinkopiert zum ausprobieren, und sie gestartet -> nix

      aber die Idee find ich geil, ich blicks bloß no net

      Gruß Vitox

      Vitox schrieb:

      irgendwie, klappt es bei mir nicht, alle Tastendrücke funktionieren noch, ich kann überall schreiben, es gehen Kombinationen...

      was mache ich falsch?
      ich habe einfach eine Form genommen, den Code hineinkopiert zum ausprobieren, und sie gestartet -> nix

      aber die Idee find ich geil, ich blicks bloß no net

      Gruß Vitox

      Moin!

      Guck dir mal diesesn Post an:

      [VB 2008] Tasten Systemweit Sperren

      Bekommst du eine Warnung oder einen Fehler?

      Vitox schrieb:

      irgendwie, klappt es bei mir nicht, alle Tastendrücke funktionieren noch, ich kann überall schreiben, es gehen Kombinationen...

      was mache ich falsch?
      ich habe einfach eine Form genommen, den Code hineinkopiert zum ausprobieren, und sie gestartet -> nix

      aber die Idee find ich geil, ich blicks bloß no net

      Gruß Vitox

      Tja, wann man einfach nur reinkopiert, passiert natürlich nichts.
      Du musst auch noch an der Stelle im Programm, wo du die Tasten sperren willst
      - in deinem Fall warscheinlich das Load() Ereignis -
      die Anweisung : KeyHookEnable = True einsetzen!
      Ohne Aufruf passiert halt nix :rolleyes: ....
      Hallo in die Runde,

      ich grabe mal den alten Thread aus. :)
      Ist es auch möglich, alternative Tasten zu senden? Also wenn ich die "2" drücke (und auch gedrückt lasse), dass dem aktiven Programm eine "1" geschickt wird (entweder 1x oder solange wie die taste gedrückt ist)?
      Ich habe mit sendkeys herumprobiert (2 auf fEatKey = True und dann Sendkeys.send("1"). Da werden dann aber zum Beispiel zwei einsen geschickt (wenn man die 2 drückt und wieder loslässt). Auch habe ich versucht die lParam von Keys.D1 auf Keys.D2 zu ändern, was leider keinen Erfolg brachte... hat jemand eine Idee/einen Tipp? :)

      VIelen Dank.
      :!: Danke an alle, die ihr Wissen freiwillig teilen und stets so kompetent & höflich sind :!: