Eingabe bei einer Form möglich auch wenn die Form nicht aktiv ist.

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von dope76.

    Eingabe bei einer Form möglich auch wenn die Form nicht aktiv ist.

    Hallo,

    erstmal großes Kompliment für das tolle Forum hier. Ich habe Visual Basic Express 2010 installiert. Ich habe jetzt 2 Formen wobei eine logischerweise aktiv ist und eine inaktiv. Geht es das eine Form obwohl inaktiv eine Eingabe durch Tastendruck aktzeptiert? Wenn die Form aktiv ist, ist das ja kein Problem:

    Visual Basic-Quellcode

    1. Private Sub frm_auswahlmenu_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.D5 Then
    3. Ausführung von Code ...........
    4. End If
    5. End Sub


    Geht das aber auch wenn die Form nicht aktiv ist (offen und im Hintergrund)?

    Ich konnte leider dazu nichts finden. Bitte seid nachsichtig mit mir ||

    Vielen Dank und liebe Grüße

    Bitte das Forum "Programmieren" für Fragen nutzen!
    - Solaris

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

    Willkommen im Forum. :thumbup:

    dope76 schrieb:

    Eingabe durch Tastendruck
    Nein, so geht das nicht.
    Das ist eine elementare Windows-Verhaltensweise, dass alle Eingaben über Tastatur und Maus an das aktive Fenster gehen.
    Du könntest aber einen globalen Hotkey registrieren (z.B. eine Tastenkombination), da bekommst Du eine Message, die Du auswerten kannst
    oder
    Du kannst in einer Timer-Tick-Prozedur per API.GetAsyncKeyState() die Tastatur abfragen.
    Allerdings wäre das nicht Windows-konform.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja du könntest eine Tastenkombi machen und wenn diese gedrück wurde öffnet sich eine Inputbox Worin du das schreiben wird der eingegebenen Text automatisch per code in die inaktive form geschrieben.
    Projekte
    Ich habe auch ewigkeiten nach so ner Methode gesucht:
    Als erstes hast du hier mal die Codes der einzelnen Tasten
    Spoiler anzeigen

    VB.NET-Quellcode

    1. #Region "KeysEnum"
    2. ' NOTE :: The VirtualKeys enumeration is also managed as
    3. ' NOTE :: System.Windows.Forms.Keys
    4. ' NOTE :: The bracketed [keynames] are from that managed
    5. ' NOTE :: Forms.Keys enumeration.
    6. Public Enum VirtualKeys
    7. ' // UNASSIGNED // = &HFFFF0000 ' // [Modifiers] = -65536
    8. ' // UNASSIGNED // = &H0 ' // [None] = 000
    9. VK_LBUTTON = &H1 ' // [LButton] = 001
    10. VK_RBUTTON = &H2 ' // [RButton] = 002
    11. VK_CANCEL = &H3 ' // [Cancel] = 003
    12. VK_MBUTTON = &H4 ' // [MButton] = 004 ' NOT contiguous with L & RBUTTON
    13. VK_XBUTTON1 = &H5 ' // [XButton1] = 005 ' NOT contiguous with L & RBUTTON
    14. VK_XBUTTON2 = &H6 ' // [XButton2] = 006 ' NOT contiguous with L & RBUTTON
    15. ' // UNASSIGNED // = &H7 ' // ''UNASSIGNED = 007
    16. VK_BACK = &H8 ' // [Back] = 008
    17. VK_TAB = &H9 ' // [Tab] = 009
    18. ' // RESERVED // = &HA ' // [LineFeed] = 010
    19. ' // RESERVED // = &HB ' // ''UNASSIGNED = 011
    20. VK_CLEAR = &HC ' // [Clear] = 012
    21. VK_RETURN = &HD ' // [Return] = 013
    22. ' // UNDEFINED // ' // [Enter] = 013
    23. VK_SHIFT = &H10 ' // [ShiftKey] = 016
    24. VK_CONTROL = &H11 ' // [ControlKey] = 017
    25. VK_MENU = &H12 ' // [Menu] = 018
    26. VK_PAUSE = &H13 ' // [Pause] = 019
    27. VK_CAPITAL = &H14 ' // [Capital] = 020
    28. ' // UNDEFINED // ' // [CapsLock] = 020
    29. VK_HANGUL = &H15 ' // [HangulMode] = 021
    30. VK_HANGEUL = &H15 ' // [HanguelMode] = 021 ' old name (compatibility)
    31. VK_KANA = &H15 ' // [KanaMode] = 021
    32. VK_JUNJA = &H17 ' // [JunjaMode] = 023
    33. VK_FINAL = &H18 ' // [FinalMode] = 024
    34. VK_KANJI = &H19 ' // [KanjiMode] = 025
    35. VK_HANJA = &H19 ' // [HanjaMode] = 025
    36. VK_ESCAPE = &H1B ' // [Escape] = 027
    37. VK_CONVERT = &H1C ' // [IMEConvert] = 028
    38. VK_NONCONVERT = &H1D ' // [IMENonconvert] = 029
    39. VK_ACCEPT = &H1E ' // [IMEAccept] = 030
    40. VK_MODECHANGE = &H1F ' // [IMEModeChange] = 031
    41. VK_SPACE = &H20 ' // [Space] = 032
    42. VK_PRIOR = &H21 ' // [Prior] = 033
    43. ' // UNDEFINED // ' // [PageUp] = 033
    44. VK_NEXT = &H22 ' // [Next] = 034
    45. ' // UNDEFINED // ' // [PageDown] = 034
    46. VK_END = &H23 ' // [End] = 035
    47. VK_HOME = &H24 ' // [Home] = 036
    48. VK_LEFT = &H25 ' // [Left] = 037
    49. VK_UP = &H26 ' // [Up] = 038
    50. VK_RIGHT = &H27 ' // [Right] = 039
    51. VK_DOWN = &H28 ' // [Down] = 040
    52. VK_SELECT = &H29 ' // [Select] = 041
    53. VK_PRINT = &H2A ' // [Print] = 042
    54. VK_EXECUTE = &H2B ' // [Execute] = 043
    55. VK_SNAPSHOT = &H2C ' // [Snapshot] = 044
    56. ' // UNDEFINED // ' // [PrintScreen] = 044
    57. VK_INSERT = &H2D ' // [Insert] = 045
    58. VK_DELETE = &H2E ' // [Delete] = 046
    59. VK_HELP = &H2F ' // [Help] = 047
    60. VK_0 = &H30 ' // [D0] = 048
    61. VK_1 = &H31 ' // [D1] = 049
    62. VK_2 = &H32 ' // [D2] = 050
    63. VK_3 = &H33 ' // [D3] = 051
    64. VK_4 = &H34 ' // [D4] = 052
    65. VK_5 = &H35 ' // [D5] = 053
    66. VK_6 = &H36 ' // [D6] = 054
    67. VK_7 = &H37 ' // [D7] = 055
    68. VK_8 = &H38 ' // [D8] = 056
    69. VK_9 = &H39 ' // [D9] = 057
    70. ' // UNASSIGNED // = &H40 to &H4F (058 to 064)
    71. VK_A = &H41 ' // [A] = 065
    72. VK_B = &H42 ' // [B] = 066
    73. VK_C = &H43 ' // [C] = 067
    74. VK_D = &H44 ' // [D] = 068
    75. VK_E = &H45 ' // [E] = 069
    76. VK_F = &H46 ' // [F] = 070
    77. VK_G = &H47 ' // [G] = 071
    78. VK_H = &H48 ' // [H] = 072
    79. VK_I = &H49 ' // [I] = 073
    80. VK_J = &H4A ' // [J] = 074
    81. VK_K = &H4B ' // [K] = 075
    82. VK_L = &H4C ' // [L] = 076
    83. VK_M = &H4D ' // [M] = 077
    84. VK_N = &H4E ' // [N] = 078
    85. VK_O = &H4F ' // [O] = 079
    86. VK_P = &H50 ' // [P] = 080
    87. VK_Q = &H51 ' // [Q] = 081
    88. VK_R = &H52 ' // [R] = 082
    89. VK_S = &H53 ' // [S] = 083
    90. VK_T = &H54 ' // [T] = 084
    91. VK_U = &H55 ' // [U] = 085
    92. VK_V = &H56 ' // [V] = 086
    93. VK_W = &H57 ' // [W] = 087
    94. VK_X = &H58 ' // [X] = 088
    95. VK_Y = &H59 ' // [Y] = 089
    96. VK_Z = &H5A ' // [Z] = 090
    97. VK_LWIN = &H5B ' // [LWin] = 091
    98. VK_RWIN = &H5C ' // [RWin] = 092
    99. VK_APPS = &H5D ' // [Apps] = 093
    100. ' // RESERVED // = &H5E ' // ''UNASSIGNED = 094
    101. VK_SLEEP = &H5F ' // [Sleep] = 095
    102. VK_NUMPAD0 = &H60 ' // [NumPad0] = 096
    103. VK_NUMPAD1 = &H61 ' // [NumPad1] = 097
    104. VK_NUMPAD2 = &H62 ' // [NumPad2] = 098
    105. VK_NUMPAD3 = &H63 ' // [NumPad3] = 099
    106. VK_NUMPAD4 = &H64 ' // [NumPad4] = 100
    107. VK_NUMPAD5 = &H65 ' // [NumPad5] = 101
    108. VK_NUMPAD6 = &H66 ' // [NumPad6] = 102
    109. VK_NUMPAD7 = &H67 ' // [NumPad7] = 103
    110. VK_NUMPAD8 = &H68 ' // [NumPad8] = 104
    111. VK_NUMPAD9 = &H69 ' // [NumPad9] = 105
    112. VK_MULTIPLY = &H6A ' // [Multiply] = 106
    113. VK_ADD = &H6B ' // [Add] = 107
    114. VK_SEPARATOR = &H6C ' // [Separator] = 108
    115. VK_SUBTRACT = &H6D ' // [Subtract] = 109
    116. VK_DECIMAL = &H6E ' // [Decimal] = 110
    117. VK_DIVIDE = &H6F ' // [Divide] = 111
    118. VK_F1 = &H70 ' // [F1] = 112
    119. VK_F2 = &H71 ' // [F2] = 113
    120. VK_F3 = &H72 ' // [F3] = 114
    121. VK_F4 = &H73 ' // [F4] = 115
    122. VK_F5 = &H74 ' // [F5] = 116
    123. VK_F6 = &H75 ' // [F6] = 117
    124. VK_F7 = &H76 ' // [F7] = 118
    125. VK_F8 = &H77 ' // [F8] = 119
    126. VK_F9 = &H78 ' // [F9] = 120
    127. VK_F10 = &H79 ' // [F10] = 121
    128. VK_F11 = &H7A ' // [F11] = 122
    129. VK_F12 = &H7B ' // [F12] = 123
    130. VK_F13 = &H7C ' // [F13] = 124
    131. VK_F14 = &H7D ' // [F14] = 125
    132. VK_F15 = &H7E ' // [F15] = 126
    133. VK_F16 = &H7F ' // [F16] = 127
    134. VK_F17 = &H80 ' // [F17] = 128
    135. VK_F18 = &H81 ' // [F18] = 129
    136. VK_F19 = &H82 ' // [F19] = 130
    137. VK_F20 = &H83 ' // [F20] = 131
    138. VK_F21 = &H84 ' // [F21] = 132
    139. VK_F22 = &H85 ' // [F22] = 133
    140. VK_F23 = &H86 ' // [F23] = 134
    141. VK_F24 = &H87 ' // [F24] = 135
    142. ' // UNASSIGNED // = &H88 to &H8F (136 to 143)
    143. VK_NUMLOCK = &H90 ' // [NumLock] = 144
    144. VK_SCROLL = &H91 ' // [Scroll] = 145
    145. VK_OEM_NEC_EQUAL = &H92 ' // [NEC_Equal] = 146 ' NEC PC-9800 kbd definitions "=" key on numpad
    146. VK_OEM_FJ_JISHO = &H92 ' // [Fujitsu_Masshou] = 146 ' Fujitsu/OASYS kbd definitions "Dictionary" key
    147. VK_OEM_FJ_MASSHOU = &H93 ' // [Fujitsu_Masshou] = 147 ' Fujitsu/OASYS kbd definitions "Unregister word" key
    148. VK_OEM_FJ_TOUROKU = &H94 ' // [Fujitsu_Touroku] = 148 ' Fujitsu/OASYS kbd definitions "Register word" key
    149. VK_OEM_FJ_LOYA = &H95 ' // [Fujitsu_Loya] = 149 ' Fujitsu/OASYS kbd definitions "Left OYAYUBI" key
    150. VK_OEM_FJ_ROYA = &H96 ' // [Fujitsu_Roya] = 150 ' Fujitsu/OASYS kbd definitions "Right OYAYUBI" key
    151. ' // UNASSIGNED // = &H97 to &H9F (151 to 159)
    152. ' NOTE :: &HA0 to &HA5 (160 to 165) = left and right Alt, Ctrl and Shift virtual keys.
    153. ' NOTE :: Used only as parameters to GetAsyncKeyState() and GetKeyState().
    154. ' NOTE :: No other API or message will distinguish left and right keys in this way.
    155. VK_LSHIFT = &HA0 ' // [LShiftKey] = 160
    156. VK_RSHIFT = &HA1 ' // [RShiftKey] = 161
    157. VK_LCONTROL = &HA2 ' // [LControlKey] = 162
    158. VK_RCONTROL = &HA3 ' // [RControlKey] = 163
    159. VK_LMENU = &HA4 ' // [LMenu] = 164
    160. VK_RMENU = &HA5 ' // [RMenu] = 165
    161. VK_BROWSER_BACK = &HA6 ' // [BrowserBack] = 166
    162. VK_BROWSER_FORWARD = &HA7 ' // [BrowserForward] = 167
    163. VK_BROWSER_REFRESH = &HA8 ' // [BrowserRefresh] = 168
    164. VK_BROWSER_STOP = &HA9 ' // [BrowserStop] = 169
    165. VK_BROWSER_SEARCH = &HAA ' // [BrowserSearch] = 170
    166. VK_BROWSER_FAVORITES = &HAB ' // [BrowserFavorites] = 171
    167. VK_BROWSER_HOME = &HAC ' // [BrowserHome] = 172
    168. VK_VOLUME_MUTE = &HAD ' // [VolumeMute] = 173
    169. VK_VOLUME_DOWN = &HAE ' // [VolumeDown] = 174
    170. VK_VOLUME_UP = &HAF ' // [VolumeUp] = 175
    171. VK_MEDIA_NEXT_TRACK = &HB0 ' // [MediaNextTrack] = 176
    172. VK_MEDIA_PREV_TRACK = &HB1 ' // [MediaPreviousTrack] = 177
    173. VK_MEDIA_STOP = &HB2 ' // [MediaStop] = 178
    174. VK_MEDIA_PLAY_PAUSE = &HB3 ' // [MediaPlayPause] = 179
    175. VK_LAUNCH_MAIL = &HB4 ' // [LaunchMail] = 180
    176. VK_LAUNCH_MEDIA_SELECT = &HB5 ' // [SelectMedia] = 181
    177. VK_LAUNCH_APP1 = &HB6 ' // [LaunchApplication1] = 182
    178. VK_LAUNCH_APP2 = &HB7 ' // [LaunchApplication2] = 183
    179. ' // UNASSIGNED // = &HB8 ' // ''UNASSIGNED = 184
    180. ' // UNASSIGNED // = &HB9 ' // ''UNASSIGNED = 185
    181. VK_OEM_1 = &HBA ' // [Oem1] = 186 ' ";:" for USA
    182. ' // UNDEFINED // ' // [OemSemicolon] = 186 ' ";:" for USA
    183. VK_OEM_PLUS = &HBB ' // [Oemplus] = 187 ' "+" any country
    184. VK_OEM_COMMA = &HBC ' // [Oemcomma] = 188 ' "," any country
    185. VK_OEM_MINUS = &HBD ' // [OemMinus] = 189 ' "-" any country
    186. VK_OEM_PERIOD = &HBE ' // [OemPeriod] = 190 ' "." any country
    187. VK_OEM_2 = &HBF ' // [Oem2] = 191 ' "/?" for USA
    188. ' // UNDEFINED // ' // [OemQuestion] = 191 ' "/?" for USA
    189. ' // UNDEFINED // ' // [Oemtilde] = 192 ' "'~" for USA
    190. VK_OEM_3 = &HC0 ' // [Oem3] = 192 ' "'~" for USA
    191. ' // RESERVED // = &HC1 to &HD7 (193 to 215)
    192. ' // UNASSIGNED // = &HD8 to &HDA (216 to 218)
    193. VK_OEM_4 = &HDB ' // [Oem4] = 219 ' "[{" for USA
    194. ' // UNDEFINED // ' // [OemOpenBrackets] = 219 ' "[{" for USA
    195. ' // UNDEFINED // ' // [OemPipe] = 220 ' "\|" for USA
    196. VK_OEM_5 = &HDC ' // [Oem5] = 220 ' "\|" for USA
    197. VK_OEM_6 = &HDD ' // [Oem6] = 221 ' "]}" for USA
    198. ' // UNDEFINED // ' // [OemCloseBrackets] = 221 ' "]}" for USA
    199. ' // UNDEFINED // ' // [OemQuotes] = 222 ' "'"" for USA
    200. VK_OEM_7 = &HDE ' // [Oem7] = 222 ' "'"" for USA
    201. VK_OEM_8 = &HDF ' // [Oem8] = 223
    202. ' // RESERVED // = &HE0 ' // ''UNASSIGNED = 224
    203. VK_OEM_AX = &HE1 ' // [OEMAX] = 225 ' "AX" key on Japanese AX kbd
    204. ' // UNDEFINED // ' // [OemBackslash] = 226 ' "<>" or "\|" on RT 102-key kbd
    205. VK_OEM_102 = &HE2 ' // [Oem102] = 226 ' "<>" or "\|" on RT 102-key kbd
    206. VK_ICO_HELP = &HE3 ' // [ICOHelp] = 227 ' Help key on ICO
    207. VK_ICO_00 = &HE4 ' // [ICO00] = 228 ' 00 key on ICO
    208. VK_PROCESSKEY = &HE5 ' // [ProcessKey] = 229
    209. VK_ICO_CLEAR = &HE6 ' // [ICOClear] = 230
    210. VK_PACKET = &HE7 ' // [Packet] = 231
    211. ' // UNASSIGNED // = &HE8 ' // ''UNASSIGNED = 232
    212. ' NOTE :: Nokia/Ericsson definitions
    213. VK_OEM_RESET = &HE9 ' // [OEMReset] = 233
    214. VK_OEM_JUMP = &HEA ' // [OEMJump] = 234
    215. VK_OEM_PA1 = &HEB ' // [OEMPA1] = 235
    216. VK_OEM_PA2 = &HEC ' // [OEMPA2] = 236
    217. VK_OEM_PA3 = &HED ' // [OEMPA3] = 237
    218. VK_OEM_WSCTRL = &HEE ' // [OEMWSCtrl] = 238
    219. VK_OEM_CUSEL = &HEF ' // [OEMCUSel] = 239
    220. VK_OEM_ATTN = &HF0 ' // [OEMATTN] = 240
    221. VK_OEM_FINISH = &HF1 ' // [OEMFinish] = 241
    222. VK_OEM_COPY = &HF2 ' // [OEMCopy] = 242
    223. VK_OEM_AUTO = &HF3 ' // [OEMAuto] = 243
    224. VK_OEM_ENLW = &HF4 ' // [OEMENLW] = 244
    225. VK_OEM_BACKTAB = &HF5 ' // [OEMBackTab] = 245
    226. VK_ATTN = &HF6 ' // [Attn] = 246
    227. VK_CRSEL = &HF7 ' // [Crsel] = 247
    228. VK_EXSEL = &HF8 ' // [Exsel] = 248
    229. VK_EREOF = &HF9 ' // [EraseEof] = 249
    230. VK_PLAY = &HFA ' // [Play] = 250
    231. VK_ZOOM = &HFB ' // [Zoom] = 251
    232. VK_NONAME = &HFC ' // [NoName] = 252
    233. VK_PA1 = &HFD ' // [Pa1] = 253
    234. VK_OEM_CLEAR = &HFE ' // [OemClear] = 254
    235. ' // UNASSIGNED // = &HFFFF ' // [KeyCode] = 65535
    236. ' // UNASSIGNED // = &H10000 ' // [Shift] = 65536
    237. ' // UNASSIGNED // = &H20000 ' // [Control] = 131072
    238. ' // UNASSIGNED // = &H40000 ' // [Alt] = 262144
    239. End Enum
    240. #End Region

    Danach gibts noch ein Declare

    VB.NET-Quellcode

    1. Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short

    Als nächstes hab ich folgenden Code in einem Timer:

    VB.NET-Quellcode

    1. Private Sub GetKeysTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GetKeysTimer.Tick
    2. If GetAsyncKeyState(VirtualKeys.VK_CONTROL) <> 0 And GetAsyncKeyState(VirtualKeys.VK_F8) <> 0 Then
    3. MessageBox.Show("Jetzt wurde strg+f8 gedrückt")
    4. End If
    5. End Sub

    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:
    Es ist auch möglich einen globalen Keyhook in VB zu realisieren.

    Damit lässt sich jede für Windows registrierte Tastatureingabe abfangen. (Ohne Timer und GetAsyncKeyState)
    Ich habe mir das mal geschrieben, aber den Code grad nicht parat. Ist auch bissl schwierig weil das ja quasi ein Keylogger werden kann.

    Hier der Anlaufpunkt.
    msdn.microsoft.com/en-us/libra…op/ms644990(v=vs.85).aspx
    Das ist meine Signatur und sie wird wunderbar sein!
    Hi,

    sorry das ich erst jetzt antworte, ich musste aber kurzfristig auf Achse :-(.

    Ich werde auf alle Fälle eure Vorschläge ausprobieren. Da bin ich ja als Anfänger volle Pulle in die K....... gedonnert. Ich habe zwar brav mein erstes VB Buch hinter mir, das aber ist doch ne Hausnummer :-O.

    @Mono: Ich habe mich für die helle Seite der Macht entschieden :-). Die Funktion soll eigentlich dafür gedacht sein: 2 Monitore nebeneinander, ein Timer auf einem, eine Anwendung auf dem anderen. Jetzt will ich in der Anwendung arbeiten, den Timer im Hintergrund laufen lassen und immer wenn ich eine bestimmte Taste drücke den Timer hochsetzen ohne das ich die Anwendung verlasse und das Timerfenster aktiv setze und umgekehrt.
    Wenn ich es geschafft habe (oder am verzweifeln bin) meld ich mich natürlich wieder.

    Liebe Grüße

    dope76 schrieb:

    ein Timer auf einem
    darf ich mir wie vorstellen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    dope76 schrieb:

    Der Timer ist auf dem linken Monitor
    Meinst Du eine Form, die einen Timer als Member hat?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!