2013-08-01 42 views
0

我有一些使用C/C++語言的經驗。 但我正在玩一個遊戲(我的獨立軟件),我想製作一個與遊戲交互的C程序,每兩秒按一次鍵或空間。 這是Windows。C/C++程序按鍵每X秒

任何想法?

+1

取決於操作系統上的。 Windows或Linux? – Magn3s1um

+1

我建議你使用其中的一個:http://en.wikipedia.org/wiki/Drinking_bird – JoshG79

+0

好的,它是用於Windows。我明白你的意思喬希,但現在我需要一個函數來生成一個事件,模擬我按下了鍵盤上的一個鍵。 – Elsendion

回答

0

在windows中,這很簡單。製作一個C++控制檯程序。在程序內部,您需要搜索Windows中的所有「窗口」。微軟稱這些窗口窗口句柄(HWND)。您可以使用FindWindowEx搜索全部內容:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633500(v=vs.85).aspx。一旦你找到你的窗口(按名稱),你可以發送到窗口HWND按鍵。這是通過SendMessage()完成的;把它放在一個循環中,每2秒完成一次!

您可以使用Visual Studio的Spy ++找到您要搜索屬性的窗口。這將讓您輕鬆知道要搜索的窗口名稱。

1

看看功能SendInputkeybd_event。這些功能會告訴Windows按下一個鍵。

所有你需要做的就是創建一個每2秒鐘休眠一次的循環。 keybd_event是舊慣例,但它是我熟悉的。

VOID WINAPI keybd_event(
    _In_ BYTE bVk, 
    _In_ BYTE bScan, 
    _In_ DWORD dwFlags, 
    _In_ ULONG_PTR dwExtraInfo 
); 

下面將模擬按下的數字鎖定

// Simulate a key press 
keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0); 

// Simulate a key release 
keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); 
+0

keybd_event比SendMessage()更糟糕。在我所有的項目中,keybd_event都是比較痛苦的。 – Magn3s1um

+0

我從來沒有遇到任何問題。我曾經使用它一次讓我鍵入WiiMote,但使用標準窗口消息是更好的方法。 –

+0

keybd_event我認爲只能在前臺窗口中工作,這可能實際上並不能很好地轉化爲遊戲。我知道網站,keybd_event缺乏很多功能。 – Magn3s1um