Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0616: Komplexe Tastenkombinationen senden

 von 

Beschreibung 

Dieser Tipp stellt eine Erweiterung des Tipps Tipp 155 da. Er bietet die Möglichkeit, Tastenkombinationen zu senden, die Sendkeys nicht senden kann (z.B. wenn es darum geht, eine Taste gedrückt zu halten). Dies wird am Beispiel des "Computer suchen" Dialogs demonstriert.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keybd_event

Download:

Download des Beispielprojektes [2,02 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Projekt1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"

Option Explicit

' Deklaration
' Auslösen eines Tastatur_Events per Code
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, _
        ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

' Tastendruck absetzen
' keyUp = 0 Up-/Down  | = 1 nur Up | = -1 nur Down
Public Sub SendKeyStroke(ByRef hCode As Byte, Optional ByVal keyUp As Long = 0)
    Const KEYEVENTF_KEYUP = &H2&
    
    'nur KeyUp senden
    If keyUp = 1 Then
        keyUp = 0
    Else
        'KeyDown senden
        Call keybd_event(hCode, 0&, 0&, 0&)
    End If
    
    If keyUp = 0 Then
        'KeyUp senden
        Call keybd_event(hCode, 0&, KEYEVENTF_KEYUP, 0&)
        DoEvents
    End If
End Sub

Private Sub Command1_Click()
    'nur keyDown
    'H5B: Win-Taste
    SendKeyStroke &H5B, -1
    SendKeyStroke vbKeyControl, -1
    SendKeyStroke vbKeyF, -1
    
    'nur keyUp
    SendKeyStroke vbKeyF, 1
    SendKeyStroke vbKeyControl, 1
    SendKeyStroke &H5B, 1
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Projekt1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Clemens Weiß am 11.01.2005 um 22:48

Hi,
netter Tipp, vielen Dank.
Auch damit lässt sich allerdings die Tastenkombination Strg+Alt+Entf nicht senden.
Sollte es das Ziel sein, den Taskmanager zu öffnen, geht das allerdings auch viel einfacher mit

Shell "taskmgr.exe", vbNormalFocus


Die Funktion keybd_event ist übrigens mittlerweile unter Windows NT/2000/XP von der Funktion SendInput abgelöst:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardInput/KeyboardInputReference/KeyboardInputFunctions/keybd_event.asp