2014-09-09 2 views
0

CTRL + 숫자를 시뮬레이트하려고합니다. 키보드 테스트 프로그램 (PassMark KeyboardTest)을 사용하여 코드를 확인했는데 NumENTER를 눌렀지만 놓지 않은 것으로 보입니다. KEYEVENTF_EXTENDEDKEY를 사용하지 않으면 모든 것이 relesaed되지만 정상적인 Return을 얻습니다.KEYEVENTF_EXTENDEDKEY를 사용하면 KEYEVENTF_KEYUP이 작동하지 않습니다.

INPUT *ip = new INPUT[2];     // set up input 1 

(ip)->type = INPUT_KEYBOARD;    // set up keyboard event 
(ip)->ki.wScan = 0; 
(ip)->ki.time = 0; 
(ip)->ki.dwExtraInfo = 0; 

(ip)->ki.wVk = VK_CONTROL;     // set ip[0] to CTRL 
(ip)->ki.dwFlags = 0; 

Sleep(100); 

(ip+1)->type = INPUT_KEYBOARD;    // set up keyboard event 
(ip+1)->ki.wScan = 0; 
(ip+1)->ki.time = 0; 
(ip+1)->ki.dwExtraInfo = 0; 

(ip+1)->ki.wVk = VK_RETURN;     // set ip[1] to ENTER 
(ip+1)->ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // make ENTER to NumENTER 

Sleep(100); 

SendInput(2, ip, sizeof(INPUT));   // send key 

Sleep(100); 

(ip)->ki.dwFlags = KEYEVENTF_KEYUP;   // event for keyrelease  
(ip+1)->ki.dwFlags = KEYEVENTF_KEYUP;  // event for keyrelease 

Sleep(100); 

SendInput(2, ip, sizeof(INPUT));   // release keys 

return 0; 
+0

대부분의 앱은 두 개의 키를 구별하기 위해 스캔 코드를 사용합니다. –

답변

0

사용 비트 또는dwFlags을 설정 :

여기 내 코드입니다. KEYEVENTF_EXTENDEDKEYscanCode에 접두사 (0xE0 (224))를 추가합니다.

(ip)->ki.dwFlags |= KEYEVENTF_KEYUP;   // event for keyrelease  
(ip+1)->ki.dwFlags |= KEYEVENTF_KEYUP;  // event for keyrelease 
관련 문제