2010-03-26 19 views
0

Je travaille avec une application WPF qui envoie des clés à un jeu. J'ai ouvert l'espion ++ aux observateurs comme une pression sur le clavier. J'ai ensuite appuyé sur le bouton de l'application et j'ai remarqué un code de scan différent dans les messages spy ++. Serait-ce quelque chose à voir avec Windows 7 64bit? Liste partielle:Envoyer le code de numérisation sous Windows 7 x64

var down = new INPUT(); 
down.Type = (UInt32)InputType.KEYBOARD; 
down.Data.Keyboard = new KEYBDINPUT(); 
down.Data.Keyboard.Vk = (UInt16)keyCode; 
down.Data.Keyboard.Scan = 0; 
down.Data.Keyboard.Flags = 0; 
down.Data.Keyboard.Time = 0; 
down.Data.Keyboard.ExtraInfo = IntPtr.Zero; 
//down.Data.Keyboard.ExtraInfo = GetMessageExtraInfo(); 

var up = new INPUT(); 
up.Type = (UInt32)InputType.KEYBOARD; 
up.Data.Keyboard = new KEYBDINPUT(); 
up.Data.Keyboard.Vk = (UInt16)keyCode; 
up.Data.Keyboard.Scan = 0; 
up.Data.Keyboard.Flags = (UInt32)KeyboardFlag.KEYUP; 
up.Data.Keyboard.Time = 0; 
up.Data.Keyboard.ExtraInfo = IntPtr.Zero; 
//up.Data.Keyboard.ExtraInfo = GetMessageExtraInfo(); 

INPUT[] inputList = new INPUT[2]; 
inputList[0] = down; 
inputList[1] = up; 

var numberOfSuccessfulSimulatedInputs = SendInput(2, inputList, Marshal.SizeOf(typeof(INPUT))); 

L'image montre quand j'utiliser mon code pour envoyer une clé que je reçois SCANCODE: 00fExtended de sortie espion ++ message. Lorsque j'appuie sur la même touche, je reçois ScanCode: 1FfExtended. Tout le reste est identique.

http://spilmansoftware.com/images/scancode.gif http://spilmansoftware.com/images/scancode.gif

Répondre

0

Selon la documentation MSDN pour WM_KEYDOWN, la valeur du code d'analyse dépend de l'OEM.

En particulier, il est possible que votre clavier ne soit pas anglais/américain. Vous pouvez également activer les touches à bascule non standard (telles que F Lock). Jouez avec ceux-ci et voyez si ces changements auront un effet sur le code de balayage.

1

Vous aurez besoin de mettre mentalement un espace entre les 00 et fExtended, l'expression réelle est « SCANCODE: 00 » suivi de « fExtended: 0 »

que le code d'analyse est 0 est sans surprise, vous définissez 0 à 0 dans votre code:

down.Data.Keyboard.Scan = 0; 

Cela ne devrait pas causer de problème, le code de balayage est seulement utilisé lorsque la clé virtuelle est ambiguë. La touche Maj gauche et droite par exemple. Vous pouvez utiliser MapVirtualKey() si vous préférez.

+0

Bonne prise! Je vous remercie. – Stanomatic