HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0720
krgrgキー同時押しの個数を取得したいです2解決


krgrg

リンク

2020/7/20(Mon) 06:56:58|NO.91041

キーの同時押しはできるんですが、個数を取得するのが判りません
良い方法はありますか?



この記事に返信する


沢渡

リンク

2020/7/20(Mon) 11:16:20|NO.91042

まず思いつくのはgetkeyで対象となるキーをひとつひとつ調べ、
押されているキーの数を把握するという方法ですが、
これだと負荷がかかりそうなので、GetKeyboardStateで
全キーの状態をまとめて取得する方法にしてみました。

#include "user32.as" sdim keystat,256 //256バイトのバッファを確保 repeat GetKeyboardState varptr(keystat) //キーボードのキー入力状態をまとめて取得しバッファに格納 n=0 //押されているキーの個数 repeat 26,0x41 //例として[A](0x41)〜[Z]の26個のキーを調べる n+=((peek(keystat,cnt)&0x80)!=0) //キーが押されていると、対応するバイトの最上位ビットが1になる。 //よって、&0x80をすれば、キーが押されている場合は0x80が返る。 loop title str(n) await 33 loop
ただし、多数のキーを同時押ししても、大抵のキーボードでは
そのすべてを検出することはできません。
また、どのような組み合わせなら同時押しを認識できるのかも、
キーボードによってまちまちです。
(たとえば私のキーボードは、最大なら6個まで同時押しを取得できますが、
 組み合わせによっては2個同時しか取得できません)
これはキーボードのハードウェア的な仕様なので、
ソフトウェア的にはどうしようもできません。



krgrg

リンク

2020/7/20(Mon) 18:26:58|NO.91046

おおお、確かに全部同時はありえないので、個数限定で行けば軽く済みそうです。
これを足がかりにやってみます。
また機会があればよろしくお願いします、どうも、ありがとうございました!



ONION software Copyright 1997-2021(c) All rights reserved.