Вопрос по winapi, sendinput, keyboard – SendInput () для клавиатуры - только строчные

6

У меня есть следующий код:

INPUT Input = { 0 };
Input.type       = INPUT_KEYBOARD;
Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input.ki.wVk   = 'A'; // tried 0x41, ( UCHAR )VkKeyScan( 'A' )
SendInput( 1, &Input, sizeof( INPUT ) );

но это порождает у меня только «а». Как заставить его генерировать верхний регистр?

Благодарю.

о мой! Была ошибка. Вы должны были ответить на вопрос и получить все эти голоса! Спасибо tobi
Вы должны имитировать удержание клавиши Shift, как при вводе InspiredBy
@ Tobi: Upvotes это хорошо, но эта ошибка, скорее всего, не является причиной ваших проблем, поэтому технически это не должно быть ответом. rodrigo
INPUT Тип содержит объединение имен, поэтому вам не следует присваиватьmi а такжеki члены одной и той же переменной. rodrigo
Как намекал Шенаниганц, вы имитируете нажатие клавиши. У вас есть заглавная буква "A"? ключand строчные буквы "а" клавиша на клавиатуре? TheZ

Ваш Ответ

1   ответ
8

некоторые модификации в соответствии с ответом Родриго в комментариях.

INPUT Input = { 0 };
// shift key down
Input.type       = INPUT_KEYBOARD;
Input.ki.wVk   = VK_LSHIFT; 
SendInput( 1, &Input, sizeof( INPUT ) );

// 'a' key down
Input.type       = INPUT_KEYBOARD;
Input.ki.wVk   = 'A';
SendInput( 1, &Input, sizeof( INPUT ) );

// 'a' key release
Input.type       = INPUT_KEYBOARD;
Input.ki.dwFlags = KEYEVENTF_KEYUP;
Input.ki.wVk   = 'A';
SendInput( 1, &Input, sizeof( INPUT ) );

// shift key release
Input.type       = INPUT_KEYBOARD;
Input.ki.dwFlags = KEYEVENTF_KEYUP;
Input.ki.wVk   = VK_LSHIFT; 
SendInput( 1, &Input, sizeof( INPUT ) );

: вот еще один код с примером отключения / смещения заглавных букв после отправки письма:

INPUT Event = { 0 };

const SHORT key = VkKeyScan('a');
const UINT mappedKey = MapVirtualKey( LOBYTE( key ), 0 );

// Press shift key
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE;
Event.ki.wScan = MapVirtualKey( VK_LSHIFT, 0 );
SendInput( 1, &Event, sizeof( Event ) );

// upper case 'A'
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE;
Event.ki.wScan = mappedKey;
SendInput( 1, &Event, sizeof( Event ) );

// release upper case 'A'
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
Event.ki.wScan = mappedKey;
SendInput( 1, &Event, sizeof( Event ) );

// Release shift key
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
Event.ki.wScan = MapVirtualKey( VK_LSHIFT, 0 );
SendInput( 1, &Event, sizeof( Event ) );

const SHORT key1 = VkKeyScan('A');
const UINT mappedKey1 = MapVirtualKey( LOBYTE( key1 ), 0 );

// lower case 'a'
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE;
Event.ki.wScan = mappedKey1;
SendInput( 1, &Event, sizeof( Event ) );

// release lower case 'a'
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
Event.ki.wScan = mappedKey1;
SendInput( 1, &Event, sizeof( Event ) );

объяснение здесь (я надеюсь, что объяснение правильно):SendInput () для клавиатуры - только заглавные

Действительно, кто-то может. Хороший звонок, чтобы оставить вопрос (и ответ) здесь.

Похожие вопросы