Fehler: Mehrere SendKeys-Anweisungen deaktivieren die NUM-Taste

Problembeschreibung

Deaktivieren der NUM-Taste führt mindestens zwei SendKeys-Anweisung in einer Zeile ausgeführt. Dieses Problem kann auch die Feststelltaste und scrollen Tasten betreffen.

Ursache

Dieses Problem betrifft eine Schachtelung der Tastaturstatuserfassung. Die erste Anweisung SendKeys nimmt eine Momentaufnahme des Tastatur-Zustands auf und schaltet alle Schalter aus. Die zweite SendKeys-Anweisung wird ausgeführt, bevor die erste alle Tasten abgearbeitet hat und den Tastaturstatus wiederhergestellt hat. So wird der Tastaturstatus erneut von der zweiten SendKeys-Anweisung aufgezeichnet, diesmal aber mit allen Statuswerten auf "aus". Schließlich wird der Tastaturstatus auf den zum späteren Zeitpunkt aufgezeichneten Status (alles auf "aus") wiederhergestellt.

Problemlösung

Um dieses Problem zu umgehen, führen Sie eine der folgenden:

  • Senden Sie alle Zeichen in einer einzigen Anweisung SendKeys. – oder –


  • Führen Sie die DoEvents-Funktion zwischen einzelnen SendKeys-Anweisung. Jedoch je nach Komplexität der Tastenanschläge funktionieren dies nicht in allen Fällen. – oder –


  • Bestimmen Sie die Einstellung der NUM-Taste vor Tastaturbefehle verwenden. Dann schalten Sie die Taste NumLock Tastaturbefehle verwenden aus. Tastaturbefehle verwenden, die NUM-Taste auf die vorherige Einstellung zurückgesetzt. Dies geschieht mithilfe der GetKeyboardState Keybd_event und SetKeyboardState API-Funktionen. Siehe Abschnitt VERWEISE unter Weitere Informationen. – oder –


  • Verwenden Sie API-Funktionen statt Tastaturbefehle. Lesen Sie den Abschnitt "REFERENZEN" unten für weitere Informationen

Status

Microsoft hat dies einen Fehler am Anfang dieses Artikels aufgelisteten Microsoft-Produkten bestätigt. Wir werden dieses Problem untersucht, und entsprechende Informationen werden hier in der Microsoft Knowledge Base verfügbar wird.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie ein neues Standard-EXE-Projekt in Visual Basic. Form1 wird standardmäßig erstellt.
  2. Fügen Sie eine Befehlsschaltfläche zu Form1 hinzu.
  3. Kopieren Sie folgenden Code in das Codefenster von Form1:
          Option Explicit

    Private Sub Command1_Click()
    SendKeys "a"
    SendKeys "b"
    End Sub

  4. Klicken Sie im Menü Ausführen auf Start, oder drücken Sie F5, um das Programm zu starten, . Wenn die NUM-Taste nicht leuchtet, schalten Sie die Leuchtdiode an der NUM-Taste durch Drücken der NUM-Taste ein. Klicken Sie auf die Befehlsschaltfläche, und beachten Sie, dass die Num-LED ausgeschaltet wird.
  5. Schließen Sie Visual Basic, und wiederholen Sie die obigen Schritte. Diese Zeit DoEvents, wie folgt:

          Private Sub Command1_Click()         SendKeys "a"
    DoEvents
    SendKeys "b"
    End Sub

    NOTE: You should restart Visual Basic before trying the DoEvents
    solution. Otherwise, the keyboard state may be set incorrectly,

    verhindert jegliche Lösung erfolgreich.

Referenzen

"Visual Basic 5.0 Programmierhandbuch Win32-API" Dan Appleman Kapitel 6: Hardware und Systemfunktionen


Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
177674 so wird 'S GEMACHT: Umschalten NUM-, FESTSTELL- und ROLLEN-Taste
Eigenschaften

Artikelnummer: 179987 – Letzte Überarbeitung: 10.01.2017 – Revision: 1

Feedback