- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンソールアプリでキーの同時押しを検出する方法)
コンソールアプリでキーの同時押しを検出する方法
このQ&Aのポイント
- コンソールアプリでキーの同時押しを検出する方法がわかりません。GUIならおとなしくDirectInputに逃げることが出来たかもしれませんが、コンソールなのでそれも出来ずに悩んでいます。環境はVisualC++2005(ExpressEdition)、WindowsXPです。
- _getch()や_kbhit()だけではどうにも無理そうですし、残された手段は_inp()程度でしょうか。昔はPC-9801でBASICからINP()関数でI/Oポートを直接叩いてキー入力を読み出していたものでしたが、AT互換機となると若干勝手が違ってくるように思えます。ましてや9xではないWindowsXPでI/Oポートなんかすんなり読ませてくれるのか若干不安が残っています。
- どなたかその辺の処理で詳しい方いらっしゃいませんでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >残された手段は_inp()程度でしょうか。 >昔はPC-9801でBASICからINP()関数でI/Oポートを直接叩いて >キー入力を読み出していたものでした ↑ 私も昔はI/Oポートを直接読み出していました。 懐かしいですね。 ・コンソールアプリでも Win32 API は呼び出せるので次の関数で出来ると思います。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getkeystate.asp→『GetKeyState』 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getkeyboardstate.asp→『GetKeyboardState』 この2つのどちらかで取得できると思います。 『#include <windows.h>』をインクルードしておきましょう。 ・以上。
お礼
ご回答ありがとうございます。 こちらでも自力で調べてましたが最終手段としてGIVEIO.SYS導入した上で _inp(0x60)と_inp(0x64)を拾って後はKIAIで値の法則性を掴もうかと 考えていましたが助かりました。GetKeyState()がコンソールで動くとは 正直目からウロコです。早速試してみたいと思います。