Tipp 0237 Tastencodes senden
Autor/Einsender:
Datum:
  Angie
21.05.2002
Entwicklungsumgebung:   VB 5
Mit der in Visual Basic zur Verfügung stehenden SendKeys-Anweisung lassen sich zwar Tastenfolgen, die aus einem oder mehreren Tastenanschlägen bestehen können, an das aktive Fenster senden, als ob sie über die Tastatur eingegeben worden wären, allerdings gibt es doch einige Tasten, die nicht von SendKeys unterstützt werden, wie z.B. die Windows-Taste.
Dieser Tipp zeigt, wie mit der API-Funktion keybd_event, die das Niederdrücken und Lösen einer Taste simulieren kann, verschiedene Dialoge aufgerufen und Funktionen ausgeführt werden können.
 
Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal _
    bVk As Byte, ByVal bScan As Byte, ByVal dwFlags _
    As Long, ByVal dwExtraInfo As Long)

Private Const VK_E = &H45
Private Const VK_F = &H46
Private Const VK_M = &H4D
Private Const VK_R = &H52

Private Const VK_F1 = &H70

Private Const VK_CONTROL = &H11
Private Const VK_LWIN = &H5B
Private Const VK_MENU = &H12
Private Const VK_SHIFT = &H10

Private Const KEYEVENTF_KEYUP = &H2

Private Sub Command1_Click(Index As Integer)
  Dim Taste1 As Long, Taste2 As Long, Taste3 As Long

  Select Case Index
    Case 0  'Ausführen-Dialog (RUN) anzeigen
      Taste1 = VK_LWIN
      Taste2 = VK_R
      Taste3 = 0

    Case 1  'Dateien-Suchen-Dialog (FIND) anzeigen
      Taste1 = VK_LWIN
      Taste2 = VK_F
      Taste3 = 0

    Case 2  'Windows-Explorer anzeigen
      Taste1 = VK_LWIN
      Taste2 = VK_E
      Taste3 = 0

    Case 3  'Windows-Hilfe anzeigen
      Taste1 = VK_LWIN
      Taste2 = VK_F1
      Taste3 = 0

    Case 4  'Start-Menü anzeigen
      Taste1 = VK_LWIN
      Taste2 = 0
      Taste3 = 0

    Case 5  'Alle Fenster minimieren
      Taste1 = VK_LWIN
      Taste2 = VK_M
      Taste3 = 0

    Case 6  'Fenster wiederherstellen
      Taste1 = VK_SHIFT
      Taste2 = VK_LWIN
      Taste3 = VK_M
  End Select

  Call TastenCodesSenden(Taste1, Taste2, Taste3)
End Sub

Private Sub TastenCodesSenden(ByVal Taste1 As Long, _
      ByVal Taste2 As Long, ByVal Taste3 As Long)

  'Tasten in der gegebenen Reihenfolge drücken:
  If Taste1 <> 0 Then keybd_event Taste1, 0, 0, 0
  If Taste2 <> 0 Then keybd_event Taste2, 0, 0, 0
  If Taste3 <> 0 Then keybd_event Taste3, 0, 0, 0

  'Tasten in umgekehrten Reihenfolge wieder lösen:
  If Taste3 <> 0 Then keybd_event Taste3, 0, KEYEVENTF_KEYUP, 0
  If Taste2 <> 0 Then keybd_event Taste2, 0, KEYEVENTF_KEYUP, 0
  If Taste1 <> 0 Then keybd_event Taste1, 0, KEYEVENTF_KEYUP, 0
End Sub
 
Hinweis für VBA-Anwender
Mit kleinen Anpassungen bzgl. des CommandButton-Click-Ereignisses (in VBA gibt es keine Steuerelementfelder) funktioniert der hier abgebildete Code auch in einem VBA-Projekt. Dieser muss dazu in den VB-Editor der entsprechenden Anwendung kopiert werden. Ein Import der im Download enthaltenen *.frm-Datei ist nicht möglich.
Weitere Links zum Thema
Tastaturanschläge simulieren
Tastatureingaben systemweit abfragen
Tastencodes der Windows-Tasten

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (3,1 kB) Downloads bisher: [ 2330 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 4. Juli 2011