2012-05-05 51 views
2

我有這一點代碼,它使用SendInput發送按鍵,但它不起作用,當我想長時間保持一個鍵(例如長按'a'會返回'aaaaaaaaa '在記事本中)。SendInput不能用於保持鍵C++

現在我已經看過了所有的谷歌和我可以看到解決這個問題的唯一方法是不斷髮送輸入,如果我想長時間擱置。我不想這樣做,因爲這隻會模擬一遍一遍又一遍的「a」。

keyboard.wVk = 0; 
keyboard.wScan = MapVirtualKey(key, 0); 

keyboard.dwFlags = KEYEVENTF_SCANCODE; 

if (index_vector_no) 
    pressed[index_vector_no] = true; 

keyboard.dwExtraInfo = 0; 

input.type = INPUT_KEYBOARD; 
input.ki = keyboard; 

SendInput(1, &input, sizeof (input)); 

所以我想一些答案了以下問題:

A)我是正確的思維有解決這個使用SendInput沒有辦法,爲什麼不它長期持有工作? B)什麼是成功地發送按鍵和按鍵信號的另一種方法。最好將密鑰發送到窗口,而不僅僅是發送給特定的應用程序。

C)有一個很好的輕量級C++庫,我可以用它來處理全局鍵盤和鼠標模擬嗎?

在此先感謝! =)

編輯:看看這個帖子我的問題的更多細節:http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20833788.html

+0

這是用於Windows的嗎?你使用VC++嗎? –

+0

模擬它被多次按下,你的問題是什麼?我能想到的唯一原因就是需要改變的地方就是...一扇窗戶。 – chris

+0

是的,它在窗戶上。我只是用普通的C++和.cpp文件結尾。如果它有所作爲,我使用MinGW編譯器! @Chris這將用於控制一個遊戲,所以它最終會與這個人一起向前移動 Thanks =) – geekman92

回答

3

重複按鍵的鍵盤控制器不是,Windows或SendInput的功能。你當然可以用定時器模擬它,反覆調用SendInput()。

+0

嗯......窗戶怎麼能限制角色重複的速度?它是否忽略鍵盤發送它的一些輸入? – geekman92

+0

Windows可以更改鍵盤控制器配置,它是雙向連接。控制面板中的鍵盤小程序最明顯。當你實際上不想使用鍵盤和假輸入時無關緊要。 –

+0

好吧,已經清除了一些東西給我!謝謝! =) – geekman92