7

私は次のコードを持っています:

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 ) );

しかし、それは私に「a」だけを生成します。強制的に大文字も生成する方法は?

ありがとう。

4

1 に答える 1

9

編集:コメントでのrodrigo answerによると、いくつかの変更。

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()キーボード用 - 大文字のみ

于 2012-07-11T17:29:45.840 に答える