2013-07-17 3 views
0

Имеет некоторые проблемы с имитацией нажатия знака равенства (=) и вопросительного знака (?). Я подумал, если нет код виртуальной клавиши для этих двух, я должен сочетать в себе ключевые прессы и релизы, как этот парень сделал с помощью Ctrl-V: http://batchloaf.wordpress.com/2012/10/18/simulating-a-ctrl-v-keystroke-in-win32-c-or-c-using-sendinput/C++ имитирует нажатие знака равенства (=) и вопросительного знака (?)

моего кода для «=» (SHIFT + «+»):

INPUT ip; 

ip.type = INPUT_KEYBOARD; 
ip.ki.wScan = 0; // hardware scan code for key 
ip.ki.time = 0; 
ip.ki.dwExtraInfo = 0; 

ip.ki.wVk = VK_LSHIFT; 
ip.ki.dwFlags = 0; // 0 for key press 
SendInput(1, &ip, sizeof(INPUT)); 

// Press the "+" key 
ip.ki.wVk = VK_OEM_PLUS; 
ip.ki.dwFlags = 0; // 0 for key press 
SendInput(1, &ip, sizeof(INPUT)); 

// Release the "+" key 
ip.ki.wVk = VK_OEM_PLUS; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

// Release the "Shift" key 
ip.ki.wVk = VK_LSHIFT; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

он выводит знак «+». Мне нужно, чтобы он работал, желательно, любой ОС Windows, но по крайней мере Windows XP (не уверен, что это имеет значение).

спасибо.

+1

Вы не должны вызывать 'SendInput()' 4 раза с помощью 'nInputs = 1'. Вы должны называть его 1 раз с помощью 'nInputs = 4' и присваивать ему массив из 4' INPUT' структур. –

ответ

2

= характер является не капитализируются символ на клавише =/+, в то время как + это капитализированная характер. Таким образом, чтобы вывести знак равенства, просто используйте виртуальный ключевой код (плохо названный) VK_OEM_PLUS.

+0

спасибо! работает, как вы сказали. и для вопросительного знака? Я пробовал VK_OEM_2, а выход «4» –

+0

oups, извините, заглавная VK_OEM_2 сделала «?». спасибо –