アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります

ウェッブ調べて使ってみましたが、説明がよくわからず
Debug.Print を入れてチェックしてみました

Do
If GetAsyncKeyState(vbKeyLButton) = 32768 Then '...マウス左クリックの判定
Debug.Print "check1", GetAsyncKeyState(vbKeyLButton)
Exit Do
ElseIf GetAsyncKeyState(vbKeyReturn) = 32768 Then '...エンターキーの判定
Debug.Print "check2", GetAsyncKeyState(vbKeyReturn)
Exit Do
ElseIf GetAsyncKeyState(vbKeyEscape) = 32768 Then '...エスケープキーの判定
Debug.Print "check3", GetAsyncKeyState(vbKeyEscape)
GoTo ErrOut
End If
Loop

今、三つのKeyでチェcckしてみましたが押されたときはみなプラスの32768のようですが
これで良いのですか?
ちょっと不安だったので投稿してみました
押される前は"0"か"1"みたいですが

以上、宜しくお願い致します

A 回答 (2件)

いずれにせよ、この確認の仕方はまずいかもですね。



Ifでの判定時とDebug.Print時に毎回2度GetAsyncKeyState()を呼び出しているので、この間にも応答が変わります。
GetAsyncKeyState()の戻り値を変数で受け取るようにして、呼び出しは毎ループ1度にしましょう。

さらにいうと、変数で受けるように書き換えたとしても、Ifで値が32768だった時の値をPrintしているのだから、当然コンソールにPrintされる値は32768です。確認にはなっていないですね。

もっとも、やはりプラスの32768は返ってこないと思いますが。
    • good
    • 0
この回答へのお礼

ご返信、ありがとうございます
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
と自分は、戻り値4バイトを使っているので負の数字はなさそうです
結果的に32768で問題なさそうなのでこれで行きます

いつもいろいろありがとうございます
これからもよろしくお願いいたします

お礼日時:2023/10/16 17:16

こんばんは



GetAsyncKeyStateはキー(またはマウス)を指定して問い合わせますので、返される値は限定的です。

戻り値はInteger(=2バイト)で、最上位ビットと最下位ビットのみに意味があり、それぞれのビットの組み合わせの4種類の値のどれかが、その時の状態によって返されることになります。
https://www.tokovalue.jp/function/GetAsyncKeySta …
https://vbabeginner.net/getasynckeystate/

繰り返して呼び出すことに関しては、No1様のご指摘にある通りかと。
    • good
    • 0
この回答へのお礼

ご返信、ありがとうございます
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
と自分は、戻り値4バイトを使っているので負の数字はなさそうです
結果的に32768で問題なさそうなのでこれで行きます

いつもいろいろありがとうございます
これからもよろしくお願いいたします

お礼日時:2023/10/16 17:16

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A