ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 00:35

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年2月13日(月) 17:05 
オフライン

登録日時: 2005年12月06日(火) 15:53
記事: 9
こんにちは、こうきです。
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()関数の方は正常に動作しているので
こちらを使えばいいのですが、どうも気になるので、
ここに報告いたします。
どなたか同じような結果になったかたいっらっしゃいますでしょうか?


通報する
ページトップ
投稿記事Posted: 2006年2月13日(月) 17:31 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
引用:
> こんにちは、こうきです。
> 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
待機関数を入れてみてはどうでしょうか?
テストしてみてください。


通報する
ページトップ
投稿記事Posted: 2006年2月14日(火) 09:08 
オフライン

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


通報する
ページトップ
投稿記事Posted: 2006年2月14日(火) 18:09 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
引用:
> こんにちは、こうきです。
> バージョンを書き忘れていてすみませんでした。
> 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くらいだったと思いますが。。。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[7人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean