Keybinder Problem -> Combobox

  • VB.NET

    Keybinder Problem -> Combobox

    Hallo,
    undzwar habe ich ein Problem ich code mir grade einen Keybinder zusammen der auch funktioniert.
    Derzeit ist er so gecodet das wenn ich Checkbox1 anklicke und dann NumPad1 klicke der Text aus Textbox1 geschrieben wird.

    VB.NET-Quellcode

    1. If CheckBox1.Checked = True Then
    2. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.NumPad1)

    Das klappt super.
    Nur ich würde gerne in einer ComboBox alle Buchstaben eingeben (also eine Liste von a-z) wo ich mir dann aussuche zb. Buchstabe "g".
    (Hatte gedacht alles wie oben nur anstatt Keys.NumPad1, ComboBox1.text nur des geht irgendwie nicht beim debuggen er zeigt mir dann die Windows Hilfe an)
    Falls CheckBox1.Checked soll auf Taste "g" der Text aus TextBox1 geschrieben werden.

    Ich hoffe ihr könnt mir helfen.

    _Tom
    RegisterHotKey() erwartet einen virtuellen KeyCode, also nicht "a" sondern Keys.A. Die musst Du alle übersetzen, z.B. über ein Dictionary:

    VB.NET-Quellcode

    1. Dim dd As New Dictionary(Of Char, Keys)
    2. dd.Add("A"c, Keys.A)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    VB-Fragen über PN / Konversation werden ignoriert!
    Initialisiere Dein Dictionary in der Form_Load oder im Konstruktor:

    VB.NET-Quellcode

    1. Private dd As New Dictionary(Of Char, Keys)
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. dd.Add("A"c, Keys.A)
    4. dd.Add("B"c, Keys.B)
    5. dd.Add("C"c, Keys.C)
    6. dd.Add("D"c, Keys.D)
    7. '...
    8. End Sub
    9. Pivate Sub MySub()
    10. Dim MyKey As Keys = dd.Item(ComboBox1.text)
    11. RegisterHotKey(Me.Handle, 1, Key_NONE, MyKey)
    12. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    VB-Fragen über PN / Konversation werden ignoriert!
    Spoiler anzeigen

    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. Private dd As New Dictionary(Of Char, Keys)
    7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    8. dd.Add("A"c, Keys.A)
    9. dd.Add("B"c, Keys.B)
    10. dd.Add("C"c, Keys.C)
    11. dd.Add("D"c, Keys.D)
    12. dd.Add("E"c, Keys.E)
    13. dd.Add("F"c, Keys.F)
    14. dd.Add("G"c, Keys.G)
    15. dd.Add("H"c, Keys.H)
    16. dd.Add("I"c, Keys.I)
    17. dd.Add("J"c, Keys.J)
    18. dd.Add("K"c, Keys.K)
    19. dd.Add("L"c, Keys.L)
    20. dd.Add("M"c, Keys.M)
    21. dd.Add("N"c, Keys.N)
    22. dd.Add("O"c, Keys.O)
    23. dd.Add("P"c, Keys.P)
    24. dd.Add("Q"c, Keys.Q)
    25. dd.Add("R"c, Keys.R)
    26. dd.Add("S"c, Keys.S)
    27. dd.Add("T"c, Keys.T)
    28. dd.Add("U"c, Keys.U)
    29. dd.Add("V"c, Keys.W)
    30. dd.Add("X"c, Keys.X)
    31. dd.Add("Y"c, Keys.Y)
    32. dd.Add("Z"c, Keys.Z)
    33. End Sub
    34. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    35. If CheckBox1.Checked = True Then
    36. Dim MyKey As Keys = dd.Item(ComboBox1.Text)
    37. RegisterHotKey(Me.Handle, 1, Key_NONE, MyKey)
    38. Else
    39. UnregisterHotKey(Me.Handle, 1)
    40. End If
    41. End Sub
    42. Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    43. If m.Msg = WM_HOTKEY Then
    44. Select Case m.WParam
    45. Case 0
    46. Case 1
    47. SendKeys.Send(TextBox1.Text)
    48. Case 2
    49. SendKeys.Send(TextBox2.Text)
    50. Case 3
    51. SendKeys.Send(TextBox3.Text)
    52. Case 4
    53. SendKeys.Send(TextBox4.Text)
    54. Case 5
    55. SendKeys.Send(TextBox5.Text)
    56. Case 6
    57. SendKeys.Send(TextBox6.Text)
    58. Case 7
    59. SendKeys.Send(TextBox7.Text)
    60. Case 8
    61. SendKeys.Send(TextBox8.Text)
    62. Case 9
    63. SendKeys.Send(TextBox9.Text)
    64. Case 10
    65. SendKeys.Send(TextBox10.Text)
    66. Case 11
    67. SendKeys.Send(TextBox11.Text)
    68. Case 12
    69. SendKeys.Send(TextBox12.Text)
    70. Case 13
    71. SendKeys.Send(TextBox13.Text)
    72. Case 14
    73. SendKeys.Send(TextBox14.Text)
    74. Case 15
    75. SendKeys.Send(TextBox15.Text)
    76. Case 16
    77. SendKeys.Send(TextBox16.Text)
    78. Case 17
    79. SendKeys.Send(TextBox17.Text)
    80. Case 18
    81. SendKeys.Send(TextBox18.Text)
    82. Case 19
    83. SendKeys.Send(TextBox19.Text)
    84. Case 20
    85. SendKeys.Send(TextBox20.Text)
    86. Case 21
    87. SendKeys.Send(TextBox21.Text)
    88. Case 22
    89. SendKeys.Send(TextBox22.Text)
    90. Case 23
    91. SendKeys.Send(TextBox23.Text)
    92. Case 24
    93. SendKeys.Send(TextBox24.Text)
    94. End Select
    95. End If
    96. MyBase.WndProc(m)
    97. End Sub
    98. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    99. End Sub
    100. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    101. Process.Start("www.life-of-sa.de/index.php?page=Index")
    102. End Sub
    103. Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
    104. If CheckBox2.Checked = True Then
    105. Dim MyKey As Keys = dd.Item(ComboBox2.Text)
    106. RegisterHotKey(Me.Handle, 2, Key_NONE, MyKey)
    107. Else
    108. UnregisterHotKey(Me.Handle, 2)
    109. End If
    110. End Sub
    111. Private Sub CheckBox4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox4.CheckedChanged
    112. If CheckBox4.Checked = True Then
    113. Dim MyKey As Keys = dd.Item(ComboBox4.Text)
    114. RegisterHotKey(Me.Handle, 4, Key_NONE, MyKey)
    115. Else
    116. UnregisterHotKey(Me.Handle, 4)
    117. End If
    118. End Sub
    119. Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
    120. If CheckBox3.Checked = True Then
    121. Dim MyKey As Keys = dd.Item(ComboBox3.Text)
    122. RegisterHotKey(Me.Handle, 3, Key_NONE, MyKey)
    123. Else
    124. UnregisterHotKey(Me.Handle, 3)
    125. End If
    126. End Sub
    127. Private Sub CheckBox6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox6.CheckedChanged
    128. If CheckBox6.Checked = True Then
    129. Dim MyKey As Keys = dd.Item(ComboBox6.Text)
    130. RegisterHotKey(Me.Handle, 6, Key_NONE, MyKey)
    131. Else
    132. UnregisterHotKey(Me.Handle, 6)
    133. End If
    134. End Sub
    135. Private Sub CheckBox5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox5.CheckedChanged
    136. If CheckBox5.Checked = True Then
    137. Dim MyKey As Keys = dd.Item(ComboBox5.Text)
    138. RegisterHotKey(Me.Handle, 5, Key_NONE, MyKey)
    139. Else
    140. UnregisterHotKey(Me.Handle, 5)
    141. End If
    142. End Sub
    143. Private Sub CheckBox8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox8.CheckedChanged
    144. If CheckBox8.Checked = True Then
    145. Dim MyKey As Keys = dd.Item(ComboBox8.Text)
    146. RegisterHotKey(Me.Handle, 8, Key_NONE, MyKey)
    147. Else
    148. UnregisterHotKey(Me.Handle, 8)
    149. End If
    150. End Sub
    151. Private Sub CheckBox7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox7.CheckedChanged
    152. If CheckBox7.Checked = True Then
    153. Dim MyKey As Keys = dd.Item(ComboBox7.Text)
    154. RegisterHotKey(Me.Handle, 7, Key_NONE, MyKey)
    155. Else
    156. UnregisterHotKey(Me.Handle, 7)
    157. End If
    158. End Sub
    159. Private Sub CheckBox16_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox16.CheckedChanged
    160. If CheckBox16.Checked = True Then
    161. Dim MyKey As Keys = dd.Item(ComboBox16.Text)
    162. RegisterHotKey(Me.Handle, 16, Key_NONE, MyKey)
    163. Else
    164. UnregisterHotKey(Me.Handle, 16)
    165. End If
    166. End Sub
    167. Private Sub CheckBox15_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox15.CheckedChanged
    168. If CheckBox15.Checked = True Then
    169. Dim MyKey As Keys = dd.Item(ComboBox15.Text)
    170. RegisterHotKey(Me.Handle, 15, Key_NONE, MyKey)
    171. Else
    172. UnregisterHotKey(Me.Handle, 15)
    173. End If
    174. End Sub
    175. Private Sub CheckBox14_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox14.CheckedChanged
    176. If CheckBox14.Checked = True Then
    177. Dim MyKey As Keys = dd.Item(ComboBox14.Text)
    178. RegisterHotKey(Me.Handle, 14, Key_NONE, MyKey)
    179. Else
    180. UnregisterHotKey(Me.Handle, 14)
    181. End If
    182. End Sub
    183. Private Sub CheckBox13_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox13.CheckedChanged
    184. If CheckBox13.Checked = True Then
    185. Dim MyKey As Keys = dd.Item(ComboBox13.Text)
    186. RegisterHotKey(Me.Handle, 13, Key_NONE, MyKey)
    187. Else
    188. UnregisterHotKey(Me.Handle, 13)
    189. End If
    190. End Sub
    191. Private Sub CheckBox12_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox12.CheckedChanged
    192. If CheckBox12.Checked = True Then
    193. Dim MyKey As Keys = dd.Item(ComboBox12.Text)
    194. RegisterHotKey(Me.Handle, 12, Key_NONE, MyKey)
    195. Else
    196. UnregisterHotKey(Me.Handle, 12)
    197. End If
    198. End Sub
    199. Private Sub CheckBox11_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox11.CheckedChanged
    200. If CheckBox11.Checked = True Then
    201. Dim MyKey As Keys = dd.Item(ComboBox11.Text)
    202. RegisterHotKey(Me.Handle, 11, Key_NONE, MyKey)
    203. Else
    204. UnregisterHotKey(Me.Handle, 11)
    205. End If
    206. End Sub
    207. Private Sub CheckBox10_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox10.CheckedChanged
    208. If CheckBox10.Checked = True Then
    209. Dim MyKey As Keys = dd.Item(ComboBox10.Text)
    210. RegisterHotKey(Me.Handle, 10, Key_NONE, MyKey)
    211. Else
    212. UnregisterHotKey(Me.Handle, 10)
    213. End If
    214. End Sub
    215. Private Sub CheckBox9_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox9.CheckedChanged
    216. If CheckBox9.Checked = True Then
    217. Dim MyKey As Keys = dd.Item(ComboBox9.Text)
    218. RegisterHotKey(Me.Handle, 9, Key_NONE, MyKey)
    219. Else
    220. UnregisterHotKey(Me.Handle, 9)
    221. End If
    222. End Sub
    223. Private Sub CheckBox24_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox24.CheckedChanged
    224. If CheckBox24.Checked = True Then
    225. Dim MyKey As Keys = dd.Item(ComboBox24.Text)
    226. RegisterHotKey(Me.Handle, 24, Key_NONE, MyKey)
    227. Else
    228. UnregisterHotKey(Me.Handle, 24)
    229. End If
    230. End Sub
    231. Private Sub CheckBox23_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox23.CheckedChanged
    232. If CheckBox23.Checked = True Then
    233. Dim MyKey As Keys = dd.Item(ComboBox23.Text)
    234. RegisterHotKey(Me.Handle, 23, Key_NONE, MyKey)
    235. Else
    236. UnregisterHotKey(Me.Handle, 23)
    237. End If
    238. End Sub
    239. Private Sub CheckBox22_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox22.CheckedChanged
    240. If CheckBox22.Checked = True Then
    241. Dim MyKey As Keys = dd.Item(ComboBox22.Text)
    242. RegisterHotKey(Me.Handle, 22, Key_NONE, MyKey)
    243. Else
    244. UnregisterHotKey(Me.Handle, 22)
    245. End If
    246. End Sub
    247. Private Sub CheckBox21_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox21.CheckedChanged
    248. If CheckBox21.Checked = True Then
    249. Dim MyKey As Keys = dd.Item(ComboBox21.Text)
    250. RegisterHotKey(Me.Handle, 21, Key_NONE, MyKey)
    251. Else
    252. UnregisterHotKey(Me.Handle, 21)
    253. End If
    254. End Sub
    255. Private Sub CheckBox20_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox20.CheckedChanged
    256. If CheckBox20.Checked = True Then
    257. Dim MyKey As Keys = dd.Item(ComboBox20.Text)
    258. RegisterHotKey(Me.Handle, 20, Key_NONE, MyKey)
    259. Else
    260. UnregisterHotKey(Me.Handle, 20)
    261. End If
    262. End Sub
    263. Private Sub CheckBox19_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox19.CheckedChanged
    264. If CheckBox19.Checked = True Then
    265. Dim MyKey As Keys = dd.Item(ComboBox19.Text)
    266. RegisterHotKey(Me.Handle, 19, Key_NONE, MyKey)
    267. Else
    268. UnregisterHotKey(Me.Handle, 19)
    269. End If
    270. End Sub
    271. Private Sub CheckBox18_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox18.CheckedChanged
    272. If CheckBox18.Checked = True Then
    273. Dim MyKey As Keys = dd.Item(ComboBox18.Text)
    274. RegisterHotKey(Me.Handle, 18, Key_NONE, MyKey)
    275. Else
    276. UnregisterHotKey(Me.Handle, 18)
    277. End If
    278. End Sub
    279. Private Sub CheckBox17_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox17.CheckedChanged
    280. If CheckBox17.Checked = True Then
    281. Dim MyKey As Keys = dd.Item(ComboBox17.Text)
    282. RegisterHotKey(Me.Handle, 17, Key_NONE, MyKey)
    283. Else
    284. UnregisterHotKey(Me.Handle, 17)
    285. End If
    286. End Sub
    287. End Class


    Der ganze Code O:


    Edit by hal2000:
    - Fullquote entfernt. Bitte in Zukunft vermeiden.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hal2000“ ()

    Pack da mal bitte einen Expander drum.
    Das ganze kann man doch rigoros zusammenfassen und vereinfachen.
    Mit welchen Texten / Buchstaben sind denn Deine Textboxen gefüllt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    VB-Fragen über PN / Konversation werden ignoriert!
    @Rod: Expander drinne.
    Ich hatte zum Test nur "Hallo" drinne nur es hängt sich ja jetzt auf wegen dem "a" im Hallo.
    Überlegt habe ich mir das so, dass der Keybinder für alle Spiele ist also man kann sich selbst aussuchen ob vorher "t";"y" etc gedrückt wird das krieg ich ja auch noch hin.
    Nur im Keybinder sollen ganze Sätze gespeichert werden bsp. "Guten Tag. Sie sprechen mit Officer "SchlagMichTot" was kann ich für die tun?"
    das ganze würde sich dann zu einer endlosschleife entwickeln und das Spiel würde sich aufhängen.

    Edit by hal2000:
    - Fullquote entfernt. Bitte in Zukunft vermeiden.

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

    Kingtom schrieb:

    Neues Problem ich komme in eine Endlos Schleife also: Also wenn ich auf "A" Hallo habe kommt nur "Hllohllohllo"

    Mit Deinem Code lässt sich das leider nicht nachvollziehen.
    Mach Dir ein kleines Testprogramm, ersetze die Textboxen durch die Texte selbst und pack nur das rein, was zur Darstellung Deines Effekts nötig ist.
    Vielleicht schaffst Du es so sogar allein. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    VB-Fragen über PN / Konversation werden ignoriert!
    Das problem ist ja eigentlich Simple ich habe auf Taste A das Wort "Hallo" gebindet in dem Wort "Hallo" ist ein "a" enthalten und das gibt dem Programm den Befehl Textbox1.text zu senden dann kommt wieder das "Hallo" wo wieder das a drinne ist.

    Edit by hal2000:
    - Fullquote entfernt. Bitte in Zukunft vermeiden.

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

    Du könntest dir irgendwo global ein Flag setzen bevor du Sendkeys auslöst. Dann fragst du einfach vor der Hotkey Verarbeitung ab, ob das Flag gesetzt ist und wenn nein führst du die Verarbeitung durch und sonst nicht.

    VB.NET-Quellcode

    1. Private _isProcessingHotkey as Boolean = false
    2. Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    3. If m.Msg = WM_HOTKEY and not _isProcessingHotkey Then
    4. Select Case m.WParam
    5. Case 0
    6. Case 1
    7. _isProcessingHotkey = true
    8. SendKeys.Send(TextBox1.Text)
    9. _isProcessingHotkey = false
    10. Case 2
    11. _isProcessingHotkey = true
    12. SendKeys.Send(TextBox2.Text)
    13. _isProcessingHotkey = false
    14. '[...]
    15. End Select
    16. End If
    17. MyBase.WndProc(m)
    18. End Sub


    Alternativ kannst du natürlich einfach ein Hotkey definieren wie z.B. Strg+A statt einfach nur A. Dann hast du das Problem nicht.

    Silas88vD schrieb:

    Du könntest dir irgendwo global ein Flag setzen bevor du Sendkeys auslöst. Dann fragst du einfach vor der Hotkey Verarbeitung ab, ob das Flag gesetzt ist und wenn nein führst du die Verarbeitung durch und sonst nicht.

    Alternativ kannst du natürlich einfach ein Hotkey definieren wie z.B. Strg+A statt einfach nur A. Dann hast du das Problem nicht.
    Also so wie du mir das gepostet hast würde er diese endlos schleife nicht mehr senden oder wie? (kann es grade nicht testen, habe mein Projekt auf einem USB der nicht hier ist :/)

    Und das mit dem Strg+A hab ich auch erst gedacht nur für manche Befehle InGame ist es schwierig 2 Tasten aufeinmal zu drücken.
    Bsp. In einem GangWar sollen Autos neu gespawnt werden per Befehl aber der Leader Deagelt gerade.
    Sonst würde ich mir ja einen in AutoHotKey machen, da weiß ich auch wie es geht aber viele User auf dem Server wissen es nicht und deswegen möchte ich halt einen Keybinder machen den jeder versteht.
    Ja so die Theorie. Er würde den Hotkey ja so nur verarbeiten wenn _isProcessingHotkey false ist. Da du ja den Wert vor dem Sendkeys auf true und danach zurück auf false setzt ist die Hotkey verarbeitung vorrübergehend inaktiv.
    Mir fällt keine andere Lösung ein, was aber nicht bedeuten muss, dass es keine gibt. Normalerweise macht man sowas auch nicht. Nimm doch die F- Tasten oder die Nummernblocktasten. Dann braucht man auch bloß eine Taste drücken und hat das Problem trotzdem nicht.