2016-08-03 3 views
-3

J'ai un programme de console C++. Ho peux-je simuler le caractère "é"? code:Codes de clé virtuelle

// Set up a generic keyboard event. 
ip.type = INPUT_KEYBOARD; 
ip.ki.wScan = 0; // hardware scan code for key 
ip.ki.time = 0; 
ip.ki.dwExtraInfo = 0; 
ip.ki.wVk = 0x45; //e 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

Comment puis-je convertir au "é" au lieu de "e"?

Merci.

+0

L'envoi de la touche vers le bas et la touche avec des appels distincts à SendInput est toujours une erreur. Pourquoi ne pas lire la documentation? –

+0

@DavidHeffernan: Pourquoi est-ce une erreur? Un tableau de deux éléments peut être légèrement plus propre, mais pourquoi est-ce faux? –

+0

@MartinBonner: [SendInput] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310.aspx): * "La fonction SendInput insère les événements dans les structures INPUT en série dans le clavier ou Ces événements ne sont pas intercalés avec d'autres événements d'entrée clavier ou souris insérés par l'utilisateur (avec le clavier ou la souris) ou par des appels à keybd_event, mouse_event ou d'autres appels à SendInput. "* – IInspectable

Répondre

0

par la documentation KEYBDINPUT, vous pouvez utiliser le drapeau KEYEVENTF_UNICODE:

INPUT ip[2]; 
// Set up a generic keyboard event. 
ip[0].type = INPUT_KEYBOARD; 
ip[0].ki.dwFlags = KEYEVENTF_UNICODE; // We want to send a Unicode key code. 
ip[0].ki.wScan = 0x00E9;    // Unicode value of é 
ip[0].ki.time = 0; 
ip[0].ki.dwExtraInfo = 0; 
ip[0].ki.wVk = 0;      // Ignored 

ip[1] = ip[0]; // Duplicate entry 
ip[1].ki.dwFlags |= KEYEVENTF_KEYUP; // but make it key up 

SendInput(2, ip, sizeof(ip[0])); 

(Si vous êtes ambitieux, vous pouvez faire cette finale "2" être votre ARRAY_COUNT préférée fonction macro ou modèle.)

+0

Même en utilisant 'KEYEVENTF_UNICODE', vous devez toujours envoyer deux événements en entrée, un sans' KEYEVENTF_KEYUP' et un avec. Et notez que 'wScan' est exprimé en UTF-16, donc si vous devez envoyer un caractère Unicode qui utilise une paire de substitution, vous avez besoin d'événements d'entrée séparés pour chaque substitut. –

+0

@RemyLebeau: Etes-vous sûr? La documentation dit que "cet indicateur' KEYEVENTF_UNICODE' ne peut être combiné avec le drapeau 'KEYEVENTF_KEYUP'." –

+1

Oh, je pense que je vois. Il ne peut pas être * combiné * avec un autre drapeau, mais il peut être utilisé seul. Je vais éditer le code. –