2012-11-11 83 views
2

我想使用SendInput來模擬C++中的鍵盤按鍵,而單個按鈕同時工作,試圖同時發送鍵(快捷方式)不起作用。在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

啊我笨了,我應該使用VkKeyScan('r')而不是VK_RBUTTON現在它的工作原理!

相關問題