ab.com コミュニティ https://www.activebasic.com/forum/ |
|
GetKeyState()が動かない? https://www.activebasic.com/forum/viewtopic.php?t=728 |
ページ 1 / 1 |
作成者: | こうき [ 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のバージョン |
引用: > こんにちは、こうきです。
常に0か1が返るということはGetKeyStateが全く働いてないと言うことですね。> バージョンを書き忘れていてすみませんでした。 > ABのバージョンは4.13と4.20と4.21と3.13で確認しました。 > 私の操作できる環境にあるWindows98のパソコンでは同じような現象(キーの状態にかかわらず常に1もしくは0)がでます。 そもそも、これらの関数はWindowsが提供しているものですからABのバグということは考えられないんですけど、こちらには98が無いので他の方にチェックしてもらうほかないです。 引用: > Sleep()関数を入れても同様です。
兎に角、動かないのであれば、GetAsyncKeyStateの方を使わないとしょうがないでしょう。> 同じプログラムでも表示が0になったり、1になったりします。 > やはりプログラムを実行してからはキーを押してもまるで反応しません。 > よろしくお願いします。 ついでなので2つ関数の違いを書いておきます。 GetKeyState関数 メッセージキュー内に入っているキーの状態を取得 GetAsyncKeyState関数 キーボード上のキーの状態を取得 問題の原因を突き止めるヒントになればいいんですが、、、 P.S. そういえば95使ってたときに同じようにGetKeyStateが動かなかったような 記憶がおぼろげながらあります。 その時はAB2.55くらいだったと思いますが。。。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |