キーコード取得 – プログラミング – Home

通知
すべてクリア

キーコード取得


VC初心者
 VC初心者
(@VC初心者)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

1.開発ツール
  ・VC
2.言語
  ・C言語(Win32API?)

以上の環境でキーが同時に二つ以上押されたときに、
押されたキーコードを一度にすべて取得する事て、
可能ですか?「peekmessage」とか使っているのですが・・・

例、abcdを同時に押し場合に、
key_buff[]には、a,b,c,dとセットされているようにしたいんです。

簡単な方法があればと思い、アドバイスをよろしくお願いします。


引用解決済
トピックタグ
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

キーボードI/Fの特性上ムリかと

キーボード入力は1キー単位でバッファに送られてくるからです

但し、シフトキー、CTRLキー等の特殊キーならば同時に認識できますよ。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

任意のタイミングでキーが押されているかどうかを判別するなら GetAsyncKeyState と
か GetKeyBoardState とかでできそうですが、キーが押されたことを検出するとなる
と… SetWindowsHookEx ですかね?
フックでも通知されるキーコードはひとつずつなので、フックではタイミングだけ検出
して、押されているキーは前述ので、とか。

いい加減なこと言ってたらごめんなさいです


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

試しにエディタ等でテストしてみてください。

同時にa→bと押す(押しっぱなし)と、abbbbb・・・となります。
押しっぱなしにすると最後に押したキーのデータが入力される。

これは、キーボード側の仕様ですので本体側では検知できないと思います。
キーボード側にもコントローラが入っていて、シリアル通信で本体側に転送しています。


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

エディタ等がそう動くのは、WM_CHAR 系をもとに動いているからです

>これは、キーボード側の仕様ですので本体側では検知できないと思います。
>キーボード側にもコントローラが入っていて、シリアル通信で本体側に転送しています。

確かにそのとおりですが、その情報を元に、OSが内部的なバッファにすべてのキーが
押されたか押されていないかを溜めこんでいます

それを取り出すのが、GetKeyboardState です
(個別に取り出すのが GetAsyncKeyState)

ゲームのようなものを作りたいのなら
WM_TIMER もしくは、メッセージループの空き時間の中で
GetKeyboardState を呼び出せば出来ます


返信引用
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

たみあさんへ

>それを取り出すのが、GetKeyboardState です

こんな関数があったんですね。勉強不足でした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました