2011-04-23 91 views
2

工作我使用下列標準GenerateKey代碼:SendInput不爲遊戲

void GenerateKey (int vk , BOOL bExtended) 
{ 
    KEYBDINPUT kb={0}; 
    INPUT Input={0}; 
    // generate down 
    if (bExtended) 
    kb.dwFlags = KEYEVENTF_EXTENDEDKEY; 
    kb.wVk = vk; 
    Input.type = INPUT_KEYBOARD; 

    Input.ki = kb; 
    ::SendInput(1,&Input,sizeof(Input)); 

    // generate up 
    ::ZeroMemory(&kb,sizeof(KEYBDINPUT)); 
    ::ZeroMemory(&Input,sizeof(INPUT)); 
    kb.dwFlags = KEYEVENTF_KEYUP; 
    if (bExtended) 
    kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; 

    kb.wVk = vk; 
    Input.type = INPUT_KEYBOARD; 
    Input.ki = kb; 
    ::SendInput(1,&Input,sizeof(Input)); 
} 

我調用這個函數來模擬方向鍵(上,下,左,右)。但是,這在正常的資源管理器窗口和小型Flash遊戲中可用。然而,當我在極品飛車或Roadrash等遊戲上嘗試它時,它不起作用。這種行爲的任何可能的原因是什麼?

回答

0

您的遊戲很可能使用DirectInput,它在較低級別上工作,因此您無法使用SendInput()向其注入事件。鍵盤filter driver可能需要做你想做的。我做了快速的谷歌搜索,但沒有提出任何明確的,但我希望這給你一些你需要去的方式的想法。

應該有一個keyboard filter driver sample WDK(Windows驅動程序工具包),你可以修改你的目的。這將是相當複雜的。