重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

コンソールアプリでキーの同時押しを検出する方法がわかりません。
GUIならおとなしくDirectInputに逃げることが出来たかもしれませんが、
コンソールなのでそれも出来ずに悩んでいます。
環境はVisualC++2005(ExpressEdition)、WindowsXPです。

_getch()や_kbhit()だけではどうにも無理そうですし、残された手段は
_inp()程度でしょうか。昔はPC-9801でBASICからINP()関数でI/Oポートを
直接叩いてキー入力を読み出していたものでしたが、AT互換機となると
若干勝手が違ってくるように思えます。ましてや9xではないWindowsXPで
I/Oポートなんかすんなり読ませてくれるのか若干不安が残っています。
どなたかその辺の処理で詳しい方いらっしゃいませんでしょうか?

A 回答 (1件)

★アドバイス


>残された手段は_inp()程度でしょうか。
>昔はPC-9801でBASICからINP()関数でI/Oポートを直接叩いて
>キー入力を読み出していたものでした
 ↑
 私も昔はI/Oポートを直接読み出していました。
 懐かしいですね。
・コンソールアプリでも Win32 API は呼び出せるので次の関数で出来ると思います。
 http://msdn.microsoft.com/library/ja/default.asp …→『GetKeyState』
 http://msdn.microsoft.com/library/ja/default.asp …→『GetKeyboardState』
 この2つのどちらかで取得できると思います。
 『#include <windows.h>』をインクルードしておきましょう。
・以上。

参考URL:http://wisdom.sakura.ne.jp/system/winapi/win32/w …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
こちらでも自力で調べてましたが最終手段としてGIVEIO.SYS導入した上で
_inp(0x60)と_inp(0x64)を拾って後はKIAIで値の法則性を掴もうかと
考えていましたが助かりました。GetKeyState()がコンソールで動くとは
正直目からウロコです。早速試してみたいと思います。

お礼日時:2007/07/03 22:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!