需初始化 JOYINFOEX 結構,設定 dwSize(Marshal.SizeOf 取得)與 dwFlags(如 JOY_RETURNBUTTONS 取得按鈕狀態)。
JOYINFOEX infoEx = new JOYINFOEX();
infoEx.dwSize = Marshal.SizeOf(typeof(JOYINFOEX));
infoEx.dwFlags = (int)JOY_RETURNBUTTONS;
int result = joyGetPosEx(this.Id, ref infoEx);
成功回傳 JOYERR_NOERROR (0)。資料存於 infoEx:dwXPos/dwYPos 判斷方向鍵,dwButtons 判斷其他按鈕。
可用獨立執行緒死迴圈或 Timer 定時執行。但直接處理同樣面臨按鍵重複問題。
previousButtons = 無;
while (true) {
if (joyGetPosEx(...) == 成功) {
JoyButtons buttons = 取得當前按下按鍵(joyInfo);
if (buttons != 無) {
if (buttons != previousButtons) {
OnClick(buttons); // 通知新按鍵集合
previousButtons = buttons;
}
}
}
Sleep(uPeriod);
}
此版本通知完整當前按鍵集合,下一篇將改良為差集通知。