Hook Problem -> Text wird nicht in Textbox1 angezeigt

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von christophkrner.

    Hook Problem -> Text wird nicht in Textbox1 angezeigt

    Hallo,

    ich hab ein kleines Problem mit meinem Hook, ich find ihn einfach nicht. Warum funktioniert er nur bei Großgeschriebenen Tasten wie z.B. A,B und nicht bei a,b??


    Mein Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    3. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    4. Private Const Key_NONE As Integer = &H0
    5. Private Const WM_HOTKEY As Integer = &H312
    6. Protected Overrides Sub WndProc(ByRef m As Message)
    7. 'die messages auswerten
    8. If m.Msg = WM_HOTKEY Then
    9. 'hier wird entschieden welcher hotkey es war
    10. 'einfach die übergebene id auswerten
    11. Select Case m.WParam
    12. Case 1
    13. TextBox1.Text = TextBox1.Text & "Q"
    14. Case 2
    15. TextBox1.Text = TextBox1.Text & "W"
    16. Case 3
    17. TextBox1.Text = TextBox1.Text & "E"
    18. Case 4
    19. TextBox1.Text = TextBox1.Text & "R"
    20. Case 5
    21. TextBox1.Text = TextBox1.Text & "T"
    22. Case 6
    23. TextBox1.Text = TextBox1.Text & "Z"
    24. Case 7
    25. TextBox1.Text = TextBox1.Text & "U"
    26. Case 8
    27. TextBox1.Text = TextBox1.Text & "I"
    28. Case 9
    29. TextBox1.Text = TextBox1.Text & "O"
    30. Case 10
    31. TextBox1.Text = TextBox1.Text & "P"
    32. Case 11
    33. TextBox1.Text = TextBox1.Text & "Ü"
    34. Case 12
    35. TextBox1.Text = TextBox1.Text & "A"
    36. Case 13
    37. TextBox1.Text = TextBox1.Text & "S"
    38. Case 14
    39. TextBox1.Text = TextBox1.Text & "D"
    40. Case 15
    41. TextBox1.Text = TextBox1.Text & "F"
    42. Case 16
    43. TextBox1.Text = TextBox1.Text & "G"
    44. Case 17
    45. TextBox1.Text = TextBox1.Text & "H"
    46. Case 18
    47. TextBox1.Text = TextBox1.Text & "J"
    48. Case 19
    49. TextBox1.Text = TextBox1.Text & "K"
    50. Case 20
    51. TextBox1.Text = TextBox1.Text & "L"
    52. Case 21
    53. TextBox1.Text = TextBox1.Text & "Ö"
    54. Case 22
    55. TextBox1.Text = TextBox1.Text & "Ä"
    56. Case 23
    57. TextBox1.Text = TextBox1.Text & "Y"
    58. Case 24
    59. TextBox1.Text = TextBox1.Text & "X"
    60. Case 25
    61. TextBox1.Text = TextBox1.Text & "C"
    62. Case 26
    63. TextBox1.Text = TextBox1.Text & "V"
    64. Case 27
    65. TextBox1.Text = TextBox1.Text & "B"
    66. Case 28
    67. TextBox1.Text = TextBox1.Text & "N"
    68. Case 29
    69. TextBox1.Text = TextBox1.Text & "M"
    70. Case 30
    71. TextBox1.Text = TextBox1.Text & ","
    72. Case 31
    73. TextBox1.Text = TextBox1.Text & "."
    74. Case 32
    75. TextBox1.Text = TextBox1.Text & " "
    76. Case 33
    77. TextBox1.Text = TextBox1.Text & vbNewLine ' Enter
    78. Case 34
    79. TextBox1.Text = TextBox1.Text & "0"
    80. Case 35
    81. TextBox1.Text = TextBox1.Text & "1"
    82. Case 36
    83. TextBox1.Text = TextBox1.Text & "2"
    84. Case 37
    85. TextBox1.Text = TextBox1.Text & "3"
    86. Case 38
    87. TextBox1.Text = TextBox1.Text & "4"
    88. Case 39
    89. TextBox1.Text = TextBox1.Text & "5"
    90. Case 40
    91. TextBox1.Text = TextBox1.Text & "6"
    92. Case 41
    93. TextBox1.Text = TextBox1.Text & "7"
    94. Case 42
    95. TextBox1.Text = TextBox1.Text & "8"
    96. Case 43
    97. TextBox1.Text = TextBox1.Text & "9"
    98. Case 44
    99. TextBox1.Text = TextBox1.Text & "1"
    100. Case 45
    101. TextBox1.Text = TextBox1.Text & "2"
    102. Case 46
    103. TextBox1.Text = TextBox1.Text & "3"
    104. Case 47
    105. TextBox1.Text = TextBox1.Text & "4"
    106. Case 48
    107. TextBox1.Text = TextBox1.Text & "5"
    108. Case 49
    109. TextBox1.Text = TextBox1.Text & "6"
    110. Case 50
    111. TextBox1.Text = TextBox1.Text & "7"
    112. Case 51
    113. TextBox1.Text = TextBox1.Text & "8"
    114. Case 55
    115. TextBox1.Text = TextBox1.Text & "9"
    116. Case 53
    117. TextBox1.Text = TextBox1.Text & "0"
    118. End Select
    119. End If
    120. MyBase.WndProc(m)
    121. End Sub
    122. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    123. 'die tab taste wieder freigeben
    124. UnregisterHotKey(Me.Handle, 1)
    125. UnregisterHotKey(Me.Handle, 2)
    126. UnregisterHotKey(Me.Handle, 3)
    127. UnregisterHotKey(Me.Handle, 4)
    128. UnregisterHotKey(Me.Handle, 5)
    129. UnregisterHotKey(Me.Handle, 6)
    130. UnregisterHotKey(Me.Handle, 7)
    131. UnregisterHotKey(Me.Handle, 8)
    132. UnregisterHotKey(Me.Handle, 9)
    133. UnregisterHotKey(Me.Handle, 10)
    134. UnregisterHotKey(Me.Handle, 11)
    135. UnregisterHotKey(Me.Handle, 12)
    136. UnregisterHotKey(Me.Handle, 13)
    137. UnregisterHotKey(Me.Handle, 14)
    138. UnregisterHotKey(Me.Handle, 15)
    139. UnregisterHotKey(Me.Handle, 16)
    140. UnregisterHotKey(Me.Handle, 17)
    141. UnregisterHotKey(Me.Handle, 18)
    142. UnregisterHotKey(Me.Handle, 19)
    143. UnregisterHotKey(Me.Handle, 20)
    144. UnregisterHotKey(Me.Handle, 21)
    145. UnregisterHotKey(Me.Handle, 22)
    146. UnregisterHotKey(Me.Handle, 23)
    147. UnregisterHotKey(Me.Handle, 24)
    148. UnregisterHotKey(Me.Handle, 25)
    149. UnregisterHotKey(Me.Handle, 26)
    150. UnregisterHotKey(Me.Handle, 27)
    151. UnregisterHotKey(Me.Handle, 28)
    152. UnregisterHotKey(Me.Handle, 29)
    153. UnregisterHotKey(Me.Handle, 30)
    154. UnregisterHotKey(Me.Handle, 31)
    155. UnregisterHotKey(Me.Handle, 32)
    156. UnregisterHotKey(Me.Handle, 33)
    157. UnregisterHotKey(Me.Handle, 34)
    158. UnregisterHotKey(Me.Handle, 35)
    159. UnregisterHotKey(Me.Handle, 36)
    160. UnregisterHotKey(Me.Handle, 37)
    161. UnregisterHotKey(Me.Handle, 38)
    162. UnregisterHotKey(Me.Handle, 39)
    163. UnregisterHotKey(Me.Handle, 40)
    164. UnregisterHotKey(Me.Handle, 41)
    165. UnregisterHotKey(Me.Handle, 42)
    166. UnregisterHotKey(Me.Handle, 43)
    167. UnregisterHotKey(Me.Handle, 44)
    168. UnregisterHotKey(Me.Handle, 45)
    169. UnregisterHotKey(Me.Handle, 46)
    170. UnregisterHotKey(Me.Handle, 47)
    171. UnregisterHotKey(Me.Handle, 48)
    172. UnregisterHotKey(Me.Handle, 49)
    173. UnregisterHotKey(Me.Handle, 50)
    174. UnregisterHotKey(Me.Handle, 51)
    175. UnregisterHotKey(Me.Handle, 52)
    176. UnregisterHotKey(Me.Handle, 53)
    177. End Sub
    178. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    179. 'die tab taste abfangen
    180. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.Q)
    181. RegisterHotKey(Me.Handle, 2, Key_NONE, Keys.W)
    182. RegisterHotKey(Me.Handle, 3, Key_NONE, Keys.E)
    183. RegisterHotKey(Me.Handle, 4, Key_NONE, Keys.R)
    184. RegisterHotKey(Me.Handle, 5, Key_NONE, Keys.T)
    185. RegisterHotKey(Me.Handle, 6, Key_NONE, Keys.Z)
    186. RegisterHotKey(Me.Handle, 7, Key_NONE, Keys.U)
    187. RegisterHotKey(Me.Handle, 8, Key_NONE, Keys.I)
    188. RegisterHotKey(Me.Handle, 9, Key_NONE, Keys.O)
    189. RegisterHotKey(Me.Handle, 10, Key_NONE, Keys.P)
    190. RegisterHotKey(Me.Handle, 11, Key_NONE, Keys.OemSemicolon)
    191. RegisterHotKey(Me.Handle, 12, Key_NONE, Keys.A)
    192. RegisterHotKey(Me.Handle, 13, Key_NONE, Keys.S)
    193. RegisterHotKey(Me.Handle, 14, Key_NONE, Keys.D)
    194. RegisterHotKey(Me.Handle, 15, Key_NONE, Keys.F)
    195. RegisterHotKey(Me.Handle, 16, Key_NONE, Keys.G)
    196. RegisterHotKey(Me.Handle, 17, Key_NONE, Keys.H)
    197. RegisterHotKey(Me.Handle, 18, Key_NONE, Keys.J)
    198. RegisterHotKey(Me.Handle, 19, Key_NONE, Keys.K)
    199. RegisterHotKey(Me.Handle, 20, Key_NONE, Keys.L)
    200. RegisterHotKey(Me.Handle, 21, Key_NONE, Keys.Oemtilde)
    201. RegisterHotKey(Me.Handle, 22, Key_NONE, Keys.OemQuotes)
    202. RegisterHotKey(Me.Handle, 23, Key_NONE, Keys.Y)
    203. RegisterHotKey(Me.Handle, 24, Key_NONE, Keys.X)
    204. RegisterHotKey(Me.Handle, 25, Key_NONE, Keys.C)
    205. RegisterHotKey(Me.Handle, 26, Key_NONE, Keys.V)
    206. RegisterHotKey(Me.Handle, 27, Key_NONE, Keys.B)
    207. RegisterHotKey(Me.Handle, 28, Key_NONE, Keys.N)
    208. RegisterHotKey(Me.Handle, 29, Key_NONE, Keys.M)
    209. RegisterHotKey(Me.Handle, 30, Key_NONE, Keys.Oemcomma) ',
    210. RegisterHotKey(Me.Handle, 31, Key_NONE, Keys.OemPeriod) '.
    211. RegisterHotKey(Me.Handle, 32, Key_NONE, Keys.Space)
    212. RegisterHotKey(Me.Handle, 33, Key_NONE, Keys.Enter)
    213. RegisterHotKey(Me.Handle, 34, Key_NONE, Keys.D0)
    214. RegisterHotKey(Me.Handle, 35, Key_NONE, Keys.D1)
    215. RegisterHotKey(Me.Handle, 36, Key_NONE, Keys.D2)
    216. RegisterHotKey(Me.Handle, 37, Key_NONE, Keys.D3)
    217. RegisterHotKey(Me.Handle, 38, Key_NONE, Keys.D4)
    218. RegisterHotKey(Me.Handle, 39, Key_NONE, Keys.D5)
    219. RegisterHotKey(Me.Handle, 40, Key_NONE, Keys.D6)
    220. RegisterHotKey(Me.Handle, 41, Key_NONE, Keys.D7)
    221. RegisterHotKey(Me.Handle, 42, Key_NONE, Keys.D8)
    222. RegisterHotKey(Me.Handle, 43, Key_NONE, Keys.D9)
    223. RegisterHotKey(Me.Handle, 44, Key_NONE, Keys.NumPad1)
    224. RegisterHotKey(Me.Handle, 45, Key_NONE, Keys.NumPad2)
    225. RegisterHotKey(Me.Handle, 46, Key_NONE, Keys.NumPad3)
    226. RegisterHotKey(Me.Handle, 47, Key_NONE, Keys.NumPad4)
    227. RegisterHotKey(Me.Handle, 48, Key_NONE, Keys.NumPad5)
    228. RegisterHotKey(Me.Handle, 49, Key_NONE, Keys.NumPad6)
    229. RegisterHotKey(Me.Handle, 50, Key_NONE, Keys.NumPad7)
    230. RegisterHotKey(Me.Handle, 51, Key_NONE, Keys.NumPad8)
    231. RegisterHotKey(Me.Handle, 52, Key_NONE, Keys.NumPad9)
    232. RegisterHotKey(Me.Handle, 53, Key_NONE, Keys.NumPad0)
    233. End Sub
    Das habe ich deshalb gemacht, weil bei meinem Kassenprogramm sollen die Zusätze sofort automatisch, ohne irgendwo hin zu klicken, anzeigen. Außerdem habe ich noch die Hooks programmiert.

    Back to the Topic:

    Was ist mein Fehler??
    Dein Code ist ja generell furchtbar... Probier mal sowas:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    3. Private Declare Sub UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer)
    4. Private Const Key_NONE As Integer = &H0
    5. Private Const WM_HOTKEY As Integer = &H312
    6. Protected Overrides Sub WndProc(ByRef m As Message)
    7. If m.Msg = WM_HOTKEY Then
    8. Dim c As Char = Chr(m.WParam.ToInt32)
    9. If Not (My.Computer.Keyboard.ShiftKeyDown Xor My.Computer.Keyboard.CapsLock) Then
    10. c = Char.ToLower(c)
    11. End If
    12. Label1.Text &= c
    13. End If
    14. MyBase.WndProc(m)
    15. End Sub
    16. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    17. For i As Integer = 1 To 255
    18. If i = 20 Then Continue For
    19. RegisterHotKey(Me.Handle, i, Key_NONE, i)
    20. Next
    21. End Sub
    22. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    23. For i As Integer = 1 To 255
    24. UnregisterHotKey(Me.Handle, i)
    25. Next
    26. End Sub
    27. End Class

    So wird erstmal nur groß geschrieben, wenn Capslock aktiviert ist. Shift will noch nicht, aber das müsstest du selbst rauskriegen können.

    Generell stellt sich aber die Frage, warum du nicht KeyPreview der Form enablest und dann z.B. im Keydown-Event die Tasten abfragst. Dann läuft das auch mit Shift direkt. Und dann ist es auch egal, ob das Textfeld angewählt ist, nur das Fenster muss aktiviert sein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kevin89“ ()