2012-11-11 4 views
2

SendInput을 사용하여 키보드 누름을 시뮬레이트하고 싶습니다. 단일 버튼이 작동하는 동안 키를 동시에 보내려고하면 바로 가기가 작동하지 않습니다.C++에서 SendInput으로 동시 키보드 이벤트 보내기

나는 모든 것을 시도했지만 아무 것도 작동하지 않는다. VK_LWIN만을 보내면 동시에 나타나지만 동시에 키를 결합 할 수는 없다. 이 잘 작동하는 동안

#include <windows.h> 
#include <stdlib.h> 
#include <stdio.h> 

void setInput(INPUT * inp,uint index, WORD keycode,BOOL kUp); 
void showRun(); 

int main(void) 
{ 
    showRun(); 
    return 0; 
} 

void setInput(INPUT * inp,uint index, WORD keycode,BOOL kUp) 
{ 
    inp[index].type = INPUT_KEYBOARD; 
    inp[index].ki.wVk = keycode; 
    inp[index].ki.wScan = MapVirtualKey(keycode, 0); 
    inp[index].ki.time = 0; 
    inp[index].ki.dwExtraInfo = 0; 

    if (kUp == 1) 
    { 
     inp[index].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY; 
    }else 
    { 
     inp[index].ki.dwFlags = 0 | KEYEVENTF_EXTENDEDKEY; 
    } 
} 

//this doesn't do anything 
void showRun() 
{ 
    INPUT *inp = (INPUT*) malloc(sizeof(INPUT) * 4); 
    memset(inp,0,sizeof(INPUT)); 

    setInput(inp,0,VK_LWIN,0); 
    setInput(inp,1,VK_RBUTTON,0); 
    setInput(inp,2,VK_RBUTTON,1); 
    setInput(inp,3,VK_LWIN,1); 

    SendInput(4,inp,sizeof(INPUT)); 

    free(inp); 
} 

:

void showStart() 
{ 
    INPUT *inp = (INPUT*) malloc(sizeof(INPUT) * 2); 
    memset(inp,0,sizeof(INPUT)); 

    setInput(inp,0,VK_LWIN,0); 
    setInput(inp,1,VK_LWIN,1); 

    SendInput(2,inp,sizeof(INPUT)); 

    free(inp); 
} 

감사합니다 사전에 어떤 팁에 대한

여기 내 코드입니다.

+1

'VK_RBUTTON'은 마우스 오른쪽 버튼입니다. – chris

+2

사이드 노트, 고정 된 양의 키를 보내므로 입력을 동적으로 할당 할 필요가 없으며 배열을 로컬로 만듭니다. –

+0

@chris 덕분에 당신은 내 실수를 알아 냈습니다! – Ammarz

답변

1

어리석은 저, 지금 Vk_RBUTTON 대신 VkKeyScan ('r')을 사용해야했습니다.