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.
Ich hoffe ich habe euch damit geholfen.
LG
MB-Tech
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
- Imports System.Runtime.InteropServices
- Public Class Form1
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'Hooks einschalten
- KeyHookEnable = True
- End Sub
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- 'Hooks ausschalten
- KeyHookEnable = False
- End Sub
- 'Deklaration von API´s, Variablen und Konstanten
- 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
- 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
- Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
- Private Delegate Function HOOKPROCDelegate(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
- Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" (ByVal lpModuleName As IntPtr) As IntPtr
- Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As UInteger
- Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc)
- Private Const WH_KEYBOARD_LL As Integer = 13
- Private Const WM_KEYDOWN As Int32 = &H100
- Private Const WM_KEYUP As Int32 = &H101
- Private Const HC_ACTION As Integer = 0
- Private Const KEYEVENTF_KEYUP = &H2
- Private PrevWndProc As Integer
- Private mHandle As IntPtr
- <StructLayout(LayoutKind.Sequential)> Public Structure KBDLLHOOKSTRUCT
- Public vkCode As Keys
- Public scanCode, flags, time, dwExtraInfo As UInteger
- Public Sub New(ByVal key As Keys, ByVal scancod As UInteger, ByVal flagss As UInteger, ByVal zeit As UInteger, ByVal extra As UInteger)
- vkCode = key
- scanCode = scancod
- flags = flagss
- time = zeit
- dwExtraInfo = extra
- End Sub
- End Structure
- 'Hook Ein/Ausschalten
- Private Property KeyHookEnable() As Boolean
- Get
- Return mHandle <> IntPtr.Zero
- End Get
- Set(ByVal value As Boolean)
- If KeyHookEnable = value Then Return
- If value Then
- mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, _
- GetModuleHandleW(IntPtr.Zero), 0)
- Else
- UnhookWindowsHookEx(mHandle)
- mHandle = IntPtr.Zero
- End If
- End Set
- End Property
- Private Function KeyboardHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
- Dim fEatKeyStroke As Boolean
- If nCode = HC_ACTION Then
- Select Case lParam.vkCode
- 'Hier wird die Taste vor dem Betriebssystem abgefangen und "untergeschluckt"
- 'Alt Taste wird abgefangen...
- Case Keys.Alt
- '...und in den Müll geschmissen :P
- fEatKeyStroke = True
- Case Keys.LWin
- fEatKeyStroke = True
- Case Keys.RWin
- fEatKeyStroke = True
- End Select
- If fEatKeyStroke Then
- Return New IntPtr(1)
- Exit Function
- End If
- Return CallNextHookEx(mHandle, nCode, wParam, lParam)
- End If
- End Function
- End Class
Ich hoffe ich habe euch damit geholfen.
LG
MB-Tech