ab.com コミュニティ
https://www.activebasic.com/forum/

GetKeyState()が動かない?
https://www.activebasic.com/forum/viewtopic.php?t=728
ページ 11

作成者:  こうき [ 2006年2月13日(月) 17:05 ]
記事の件名:  GetKeyState()が動かない?

こんにちは、こうきです。
AB側のバグではないのかもしれませんが、
現在、自宅(WindowsXp)と職場(Windows98,NT4.0Server)で
プログラミングを行っているのですが、
キー入力によって動作を分けるプログラムを組んでいたところ
職場のパソコンで実行させるときのみ
API関数のGetKeyState()が正常な値を返しません。
次のプログラムで左のキーを押しても値が1しか返って(表示で)きません。
コード:
#N88BASIC
While 1
 Print GetKeyState(VK_LEFT)
Wend
ところが次のようにCLS文とlocate文を同時に挿入すると
0しか返ってこなくなります。
コード:
#N88BASIC
While 1
 cls
 Locate0,0:Print GetKeyState(VK_LEFT)
Wend
家のXPマシンでは正常に動くのでプログラム自体にはエラーはないと思われます。

GetAsyncKeyState()関数の方は正常に動作しているので
こちらを使えばいいのですが、どうも気になるので、
ここに報告いたします。
どなたか同じような結果になったかたいっらっしゃいますでしょうか?

作成者:  NoWest [ 2006年2月13日(月) 17:31 ]
記事の件名:  Re: GetKeyState()が動かない?

引用:
> こんにちは、こうきです。
> AB側のバグではないのかもしれませんが、
> 現在、自宅(WindowsXp)と職場(Windows98,NT4.0Server)で
> プログラミングを行っているのですが、
> キー入力によって動作を分けるプログラムを組んでいたところ
> 職場のパソコンで実行させるときのみ
> API関数のGetKeyState()が正常な値を返しません。
バグ報告ということで
最低でもActiveBasicのバージョンを書きましょうね。

私の方ではWindowsMeとXP、AB4.21の組み合わせて調べてみましたが、
問題の症状は出ませんでした。
引用:
> 次のプログラムで左のキーを押しても値が1しか返って(表示で)きません。
GetKeyStateで1や0が返ってくるのは”トグル”と呼ばれる仕様ですね。
GetKeyStateが呼ばれる以前にキーが押されていた状態だと1が、
押されていない状態だと0が返ります。
引用:
> ところが次のようにCLS文とlocate文を同時に挿入すると
> 0しか返ってこなくなります。
コード:
#N88BASIC
While 1
 cls
 Locate0,0:Print GetKeyState(VK_LEFT)
 Sleep(5)
Wend
待機関数を入れてみてはどうでしょうか?
テストしてみてください。

作成者:  こうき [ 2006年2月14日(火) 09:08 ]
記事の件名:  ActiveBasicのバージョン

こんにちは、こうきです。
バージョンを書き忘れていてすみませんでした。
ABのバージョンは4.13と4.20と4.21と3.13で確認しました。
私の操作できる環境にあるWindows98のパソコンでは同じような現象(キーの状態にかかわらず常に1もしくは0)がでます。
Sleep()関数を入れても同様です。
同じプログラムでも表示が0になったり、1になったりします。
やはりプログラムを実行してからはキーを押してもまるで反応しません。
よろしくお願いします。

作成者:  NoWest [ 2006年2月14日(火) 18:09 ]
記事の件名:  Re: ActiveBasicのバージョン

引用:
> こんにちは、こうきです。
> バージョンを書き忘れていてすみませんでした。
> ABのバージョンは4.13と4.20と4.21と3.13で確認しました。
> 私の操作できる環境にあるWindows98のパソコンでは同じような現象(キーの状態にかかわらず常に1もしくは0)がでます。
常に0か1が返るということはGetKeyStateが全く働いてないと言うことですね。
そもそも、これらの関数はWindowsが提供しているものですからABのバグということは考えられないんですけど、こちらには98が無いので他の方にチェックしてもらうほかないです。
引用:
> Sleep()関数を入れても同様です。
> 同じプログラムでも表示が0になったり、1になったりします。
> やはりプログラムを実行してからはキーを押してもまるで反応しません。
> よろしくお願いします。
兎に角、動かないのであれば、GetAsyncKeyStateの方を使わないとしょうがないでしょう。

ついでなので2つ関数の違いを書いておきます。

GetKeyState関数 メッセージキュー内に入っているキーの状態を取得

GetAsyncKeyState関数 キーボード上のキーの状態を取得


問題の原因を突き止めるヒントになればいいんですが、、、




P.S.
そういえば95使ってたときに同じようにGetKeyStateが動かなかったような
記憶がおぼろげながらあります。
その時はAB2.55くらいだったと思いますが。。。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/