2014-01-17 17 views
5

In documentation heißt es:keybd_event KEYEVENTF_EXTENDEDKEY Erklärung erforderlich

KEYEVENTF_EXTENDEDKEY (0x0001): Wenn angegeben, wird der Abtastcode durch einen Präfix-Byte mit dem Wert 0xE0 (224) voraus.

Kann jemand erklären, was das bedeutet?

Was ist der Unterschied zwischen diesen:

keybd_event(RIGHT, 0, 0, 0); 
keybd_event(RIGHT, 0, 2, 0); 

und diese:

keybd_event(RIGHT, 0, 1 | 0, 0); 
keybd_event(RIGHT, 0, 1 | 2, 0); 

, weil, wenn ich diesen Code ausführen kann ich nicht keinen Unterschied sehen?

Auch, was ist "Byte BSCAN" für? In der Beschreibung ist es: Ein Hardware-Scan-Code für den Schlüssel. Was das bedeutet?

Antwort

2

Die einfache (und unvollständige) Erklärung ist, dass KEYEVENTF_EXTENDEDKEY bedeutet „dieser Tastendruck aus dem Ziffernblock ist“

Da die meisten Programme gleich verhalten, wenn Sie ‚1‘ über der ‚q‘ Taste drücken, wie sie tun, wenn Sie drücken "1" auf dem numerischen Tastenfeld (das ist eine erweiterte Taste) - Sie würden normalerweise keinen Unterschied erwarten, wenn Sie dieses Flag bei der Simulation der Tastatureingabe setzen.

Programme, die auf die Position eines Schlüssels achten, reagieren normalerweise auf dieses Flag.

Der BSCAN Wert ist eine rohe Hardware Scancode. Eine Erklärung der Scancodes finden Sie hier http://en.wikipedia.org/wiki/Scancode. Wie das Flag für die erweiterte Taste beachten die meisten Programme Scancodes nicht. Die Werte sind dort, falls das Programm die Tastatur als eine Menge von Tasten behandeln möchte.

+0

Vielen Dank für diese großartige Erklärung. Jetzt ist es mir klarer. Wo bekomme ich die komplette Erklärung für EXTENDEDKEY, gibt es einen Artikel? – mgulan

+1

Diese Antwort ist falsch. Ich verstehe nicht, warum Leute für eine Antwort stimmen, die völlig falsch ist? Die erweiterte Flagge hat absolut nichts mit der Tastatur zu tun. Die einzigen Tasten auf der Tastatur, die dieses Flag benötigen, sind VK_DIVIDE und VK_NUMLOCK. Auf der anderen Seite gibt es andere Schlüssel, die dieses Flag benötigen und absolut nichts mit der Tastatur zu tun haben, wie VK_LWIN oder VK_RIGHT oder VK_VOLUME_DOWN. Siehe meine Antwort hier. – Elmue

+1

Es gibt einen Mangel an dieser Antwort. Dies steht nicht im Zusammenhang mit dem numerischen Tastenfeld an sich. [Lesen Sie hier] (https://msdn.microsoft.com/en-us/library/ms646267%28v=vs.85%29.aspx) oder mein Kommentar unter – Carol

11

Es ist eine alte Implementierungsdetail von Tastaturlayout auf dem ursprünglichen IBM PC. Dies ist, was die Tastatur wie zurück im Jahr 1981 sah:

enter image description here

Sieht nicht viel wie Tastaturen heute aussehen. Dadurch entstanden zusätzliche Tasten wie die dedizierten Cursortasten und die Tasten Strg und Alt rechts neben der Leertaste. Um es mit den vorhandenen Software-kompatibel zu halten, die direkt über die Tastatur liest (ein sehr häufiges Verbrechen zurück in jenen Tagen), meldet der Tastaturcontroller diejenigen erweitert Schlüssel mit dem gleichen Scan-Code, sondern ein ganz besonderes Byte vor sich. Also funktionierten die rechten Tasten Strg und Alt genauso wie die linken, wenn ein Programm sich um die Unterscheidung kümmert, könnte es den Unterschied zum Präfix-Byte erkennen. 0xE0 ist das Präfix.

Viele Programme kümmern sich nicht um die bestimmte Taste, die Sie gedrückt haben, sie verwenden nur den virtuellen Schlüsselcode und kümmern sich nicht, wenn es sich um einen erweiterten Schlüssel handelt. Genau wie diese alten MS-Dos Programme nicht. Deshalb sehen Sie keinen Unterschied. Und da Sie den Scan-Code nicht angegeben haben, kann nicht einen Unterschied machen. Ein ausführliches Dokument von Microsoft, das Tastaturcodes beschreibt, lautet available here.

+0

Dies ist auch eine gute Antwort. Vielen Dank. – mgulan

+0

Auch diese Antwort ist falsch. Warum stimmen Menschen für falsche Antworten? Das Flag KEYEVENTF_EXTENDEDKEY ist wichtig für keybd_event() und muss korrekt gesetzt sein. Es ist NOTWENDIG, sich um diese Flagge zu kümmern, da sonst die Tastatureingabe fehlschlägt. Siehe meine Antwort hier. – Elmue

6

Beide Antworten hier sind falsch. Ich verstehe nicht, warum Menschen für falsche Antworten stimmen?

Beide Antworten deuten darauf hin, dass die Flagge nicht relevant ist.Das ist völlig falsch. Und die Flagge hat nichts mit der Tastatur zu tun.

Die richtige Antwort ist, dass es nur Scan-Codes von 01 bis 7F aber virtuelle Tasten reicht von 01 bis FF.

So wie Tastaturen wuchs wurde es notwendig, dass einige Scan-Codes doppelte Zuordnung haben. Zum Beispiel auf meiner Tastatur ist der Scan-Code 0x45 der NumLock-Taste UND der Pause-Taste zugeordnet.

ihnen die keyborard Zur Unterscheidung sendet den Extended Key-Flag für die NumLock-Taste, aber nicht für die Pause-Taste.

Es gibt mehrere andere Schlüssel, die eine doppelte Zuweisung haben, wie zum Beispiel alle Medientasten.

Run Spy ++, die nur WM_KEYDOWN mit den Visual Studio-Tools und Filter kommt und aktivieren Sie „Decoded Nachrichtenparameter“ dann drücken Sie einige Tasten in einem Texteditor.

Spy ++ werden Sie für die Tasten zeigen das Flag gesetzt ist und für welche Tasten er nicht gesetzt ist.

Hier die Ausgabe von Spy ++:

P WM_KEYDOWN nVirtKey:VK_NUMLOCK cRepeat:1 ScanCode:45 fExtended:1 fAltDown:0 fRepeat:0 fUp:0 
P WM_KEYDOWN nVirtKey:VK_PAUSE cRepeat:1 ScanCode:45 fExtended:0 fAltDown:0 fRepeat:0 fUp:0 

Ein anderes Beispiel ist der Scan-Code 2E, die mit dem Buchstaben "C" zugeordnet ist, und auf meiner Tastatur VK_VOLUME_DOWN.

Sie müssen es genau auf die gleiche Weise programmieren, sonst schlägt die Tastatureinspeisung mit keybd_event() fehl, weil ein anderer Schlüssel als der gewünschte gedrückt wird.

Do NICHT Vertrauen in MapVirtualKeyEx(MAPVK_VK_TO_VSC_EX) (> = Vista), weil es nicht die erweiterte Flagge für einige Schlüssel zurückgibt, obwohl sie Tasten erweitert werden, wie VK_LEFT zum Beispiel. Ein weiterer Fehler in dieser Funktion besteht darin, dass das erweiterte Flag (E1) für den VK_PAUSE-Schlüssel zurückgegeben wird, obwohl dieser Schlüssel nicht erweitert wird.

+1

[Zum Hinzufügen von] (https://msdn.microsoft.com/en-us/library/ms646267%28v=vs.85%29.aspx): _Das Flag für erweiterte Schlüssel gibt an, ob die Tastenanschlagsnachricht von einem der folgenden Befehle stammt die zusätzlichen Tasten auf der erweiterten Tastatur. Die erweiterten Tasten bestehen aus den ALT- und STRG-Tasten auf der rechten Seite der Tastatur; die Tasten EINFG, ENTF, POS1, ENDE, BILD AUF, BILD AB und die Pfeiltasten in den Clustern links vom Ziffernblock; die NUM-Taste; die Taste BREAK (STRG + PAUSE); die Taste DRUCK SCRN; und die Teilen (/) und ENTER-Tasten in der Zehnertastatur. Das Extended-Key-Flag wird gesetzt, wenn der Schlüssel ein erweiterter Schlüssel ist. – Carol

+0

Ich weiß nicht, warum Sie diesen Text hier veröffentlichen? Dies ist eine sehr alte Beschreibung (aus den Zeiten von Windows 95), die nicht mehr aktuell ist. Und es ist nicht korrekt.Es gibt viel mehr Schlüssel als die, die Sie in Ihrem Beitrag aufzählen, wie zum Beispiel alle Media-Tasten, die nicht auf der rechten Seite der Tastatur sind. – Elmue

+0

Ich denke, es fügt Ihrem Post noch hinzu, wenn Sie etwas neueres haben, das ALLE erweiterten Schlüssel zeigt, gehen Sie bitte voran. – Carol