한 걸음씩..

[MFC]SendInput 사용시 주의 점 본문

프로그래밍

[MFC]SendInput 사용시 주의 점

반엘 2013. 7. 15. 10:45

SendInput 에 Ctrl , Esc , Shift , Alt 등을 사용한다면

원하는 문자를 보낸후에 KEYEVENTF_KEYUP 옵션을 주고 다시 한번 보내야 정상적으로 반응을 한다.

키를 2의 조합 키로 보낸다면 KEYEVENTF_KEYUP를 사용하지 않아도 정상적으로 반응을 하지만

조합키가 2개 이상일 경우 KEYEVENTF_KEYUP 처리를 반드시 해야만 반응을 한다.

 

 

Example)

 

INPUT input[3] = { 0 , };

 ::ZeroMemory(input, sizeof(input));        

 

//KEY_DOWN
 input[0].type = INPUT_KEYBOARD;
 input[1].type = INPUT_KEYBOARD;
 input[2].type = INPUT_KEYBOARD;

 input[0].ki.wVk = VK_LCONTROL;
 input[1].ki.wVk = VK_MENU;
 input[2].ki.wVk = VK_F1;

 ::SendInput( 3 , input, sizeof(INPUT));

 

// 이 부분이 윈도우 메세지로 본다면 KEY_UP이다.

// 키를 보내고 난후 아래와 같이 KEYEVENTF_KEYUP 옵션을 주어 다시 한번 보내야 

// 정상적인 반응을 볼수 있다.
 ::ZeroMemory(input, sizeof(input));        
 input[0].type = INPUT_KEYBOARD;
 input[1].type = INPUT_KEYBOARD;
 input[2].type = INPUT_KEYBOARD;

 input[0].ki.wVk = VK_LCONTROL;
 input[1].ki.wVk = VK_MENU;
 input[2].ki.wVk = VK_F1;

 input[0].ki.dwFlags = KEYEVENTF_KEYUP;
 input[1].ki.dwFlags = KEYEVENTF_KEYUP;
 input[2].ki.dwFlags = KEYEVENTF_KEYUP;

 ::SendInput( 3 , input, sizeof(INPUT));