-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathModule1.vb
125 lines (118 loc) · 5.42 KB
/
Module1.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
' USAGE
' Dim WithEvents K As New Module_Keyboard
' K.DiposeHook()
' K.CreateHook()
'Private Sub K_UP(ByVal Key As String) Handles K.Up ' this can mess thecode
'Dim LastKey = Key
'Label1.Text = LastKey
'end Sub
Public Class Module_Keyboard
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal Hook As Integer, ByVal KeyDelegate As KDel, ByVal HMod As Integer, ByVal ThreadId As Integer) As Integer
Private Declare Function CallNextHookEx Lib "user32" (ByVal Hook As Integer, ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KeyStructure) As Integer
Private Declare Function UnhookWindowsHookEx Lib "user32" Alias "UnhookWindowsHookEx" (ByVal Hook As Integer) As Integer
Private Delegate Function KDel(ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KeyStructure) As Integer
Public Shared Event Down(ByVal Key As String)
Public Shared Event Up(ByVal Key As String)
Private Shared Key As Integer
Private Shared KHD As KDel
Private Structure KeyStructure : Public Code As Integer : Public ScanCode As Integer : Public Flags As Integer : Public Time As Integer : Public ExtraInfo As Integer : End Structure
Public Sub CreateHook()
' Logit(Date.Now & " " & "Creating Keyboard Hook")
' Debuglog(Date.Now & " Creating hook")
KHD = New KDel(AddressOf Proc)
Key = SetWindowsHookEx(13, KHD, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
End Sub
Private Function Proc(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KeyStructure) As Integer
If (Code = 0) Then
Select Case wParam
Case &H100, &H104 : RaiseEvent Down(Feed(CType(lParam.Code, Keys)))
Case &H101, &H105 : RaiseEvent Up(Feed(CType(lParam.Code, Keys)))
End Select
End If
Return CallNextHookEx(Key, Code, wParam, lParam)
End Function
Public Sub DiposeHook()
' Logit(Date.Now & " " & "Destroying Keyboard Hook")
' Debuglog(Date.Now & " Destroyning hook")
UnhookWindowsHookEx(Key)
MyBase.Finalize()
End Sub
Private Function Feed(ByVal e As Keys) As String
' Debuglog(e.ToString)
Select Case e
Case 65 To 90
If Control.IsKeyLocked(Keys.CapsLock) Or (Control.ModifierKeys And Keys.Shift) <> 0 Then
Return e.ToString
Else
Return e.ToString.ToLower
End If
Case 48 To 57
If (Control.ModifierKeys And Keys.Shift) <> 0 Then
Select Case e.ToString
Case "D1" : Return "!"
Case "D2" : Return "@"
Case "D3" : Return "#"
Case "D4" : Return "$"
Case "D5" : Return "%"
Case "D6" : Return "^"
Case "D7" : Return "&"
Case "D8" : Return "*"
Case "D9" : Return "("
Case "D0" : Return ")"
End Select
Else
Return e.ToString.Replace("D", Nothing)
End If
Case 96 To 105
Return e.ToString.Replace("NumPad", Nothing)
Case 106 To 111
Select Case e.ToString
Case "Divide" : Return "/"
Case "Multiply" : Return "*"
Case "Subtract" : Return "-"
Case "Add" : Return "+"
Case "Decimal" : Return "."
End Select
Case 32
Return " "
Case 186 To 222
If (Control.ModifierKeys And Keys.Shift) <> 0 Then
Select Case e.ToString
Case "OemMinus" : Return "_"
Case "Oemplus" : Return "+"
Case "OemOpenBrackets" : Return "{"
Case "Oem6" : Return "}"
Case "Oem5" : Return "|"
Case "Oem1" : Return ":"
Case "Oem7" : Return """"
Case "Oemcomma" : Return "<"
Case "OemPeriod" : Return ">"
Case "OemQuestion" : Return "?"
Case "Oemtilde" : Return "~"
End Select
Else
Select Case e.ToString
Case "OemMinus" : Return "-"
Case "Oemplus" : Return "="
Case "OemOpenBrackets" : Return "["
Case "Oem6" : Return "]"
Case "Oem5" : Return "\"
Case "Oem1" : Return ";"
Case "Oem7" : Return "'"
Case "Oemcomma" : Return ","
Case "OemPeriod" : Return "."
Case "OemQuestion" : Return "/"
Case "Oemtilde" : Return "`"
End Select
End If
Case Keys.Return
' LastKey = "<Enter>"
' Return Environment.NewLine
Return "<Enter>"
Case Else
Return "<" + e.ToString + ">"
End Select
Return Nothing
End Function
End Class