한 걸음씩..

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

프로그래밍

[MFC]SendInput 사용시 주의 점

반엘 2013. 7. 15. 11:00
SendInput 에 Ctrl , Esc , Shift , Alt 등을 사용한다면 원하는 문자를 보낸후에 

KEYEVENTF_KEYUP 옵션을 주고 다시 한번 보내야 정상적으로 반응을 한다. 

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

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

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