Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
nicok
Poster
Poster

Anmeldedatum: 15.05.2008
Beiträge: 161

Keyboard Hook Taste ermitteln
Verfasst am: 07.11.2009, 12:28

Hi,

ich hab mir einen Keyboard Hook SourceCode mal angeschaut.
Die Funktion wird so aufgerufen:

Visual Basic: [code]hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardHookProc, App.hInstance, 0)[/code]

In einem Modul:
Visual Basic: [code]Option Explicit

Public Const HC_ACTION = 0
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public Const VK_TAB = &H9
Public Const VK_CONTROL = &H11
Public Const VK_ESCAPE = &H1B
Public Const VK_LWIN = &H5B
Public Const VK_RWIN = &H5C
Public Const WH_KEYBOARD_LL = 13
Public Const LLKHF_ALTDOWN = &H20

Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer


Public Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type

Dim k As KBDLLHOOKSTRUCT

Public Function KeyboardHookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


frmMain.Label1.Caption = wParam


Dim TrapKey As Boolean

If (nCode = HC_ACTION) Then
If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Or wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then
CopyMemory k, ByVal lParam, Len(k)
TrapKey = k.vkCode = VK_LWIN Or k.vkCode = VK_RWIN Or ((k.vkCode = VK_TAB) And ((k.flags And LLKHF_ALTDOWN) <> 0)) Or ((k.vkCode = VK_ESCAPE) And ((k.flags And LLKHF_ALTDOWN) <> 0)) Or ((k.vkCode = VK_ESCAPE) And ((GetKeyState(VK_CONTROL) And &H8000) <> 0))
End If
End If

If TrapKey Then
KeyboardHookProc = -1
Else
KeyboardHookProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
End If

End Function[/code]

So die Funktion dient dazu Tastenkürzel wie ALT+Tab etc abzufangen und zu blockieren.

Nun möchte ich aber den KeyboardHook zum anzeigen der aktuell gedrückten Taste verwenden.
Der Punkt wo die gedrückte Taste überprüft wird ist dieser hier:

Visual Basic: [code]If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN'.. [/code]

Nun hab ich mir mal wParam in einem Label anzeigen gelassen nur wird dort immer 256 angezeigt egal welche Taste gedrückt wurde?

Also wie bekomm ich die Werte von zb wenn die Taste 'a' gedrückt wurde?

Hab mal auch das Projekt geuppt:
http://www.File-Upload.to/download-ca172e9...76bfdd4adbd.php
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: keyboard hook, visual basic

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit always on top funktion 1106 30.10.2009, 12:26
Keine neuen Beiträge IntStr()funktion 1307 11.10.2007, 09:49
Keine neuen Beiträge TopMost Funktion unter DirectX 1022 27.07.2007, 11:48
Keine neuen Beiträge Wie Funktion nutzen ? 1214 29.06.2007, 21:59
Keine neuen Beiträge update funktion einbauen 1455 29.01.2007, 00:11
 


[ Time: 0.1416s ][ Queries: 80 (0.1024s) ][ GZIP on - Debug on ]