C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.43346 の関連記事表示

<< 0 >>
■43346  GetKeyboardStateについて
□投稿者/ たぬき -(2009/11/06(Fri) 12:04:32)

    分類:[.NET 全般] 

    久しぶりに質問させてもらいます!

    今、キーボードの入力を検出するアプリケーションを作成しています。キー入力の検出には、GetKeyboardStateを使用したいと思います。
    そこで、Timerイベントを使用して、毎回キーの状態変化を取得したいのですが、関数を正しく使えないのかエラーがでてしまいます。
    どこがおかしいかご指摘いただきたいです!

        Dim key(0 To 255) As Byte
    Dim i As Integer
    Call GetKeyboardState(key(0))
    For i = 0 To 255
    If (key(i) And &H8001) Then
    Debug.Print("押す" & key(i))
    else
    Debug.Print("離す" & key(i))
    End If
    Next
親記事 /過去ログ74より / 関連記事表示
削除チェック/

■43350  Re[1]: GetKeyboardStateについて
□投稿者/ GOD -(2009/11/06(Fri) 13:40:55)
    No43346 (たぬき さん) に返信
    > 久しぶりに質問させてもらいます!
    >
    > 今、キーボードの入力を検出するアプリケーションを作成しています。キー入力の検出には、GetKeyboardStateを使用したいと思います。
    > そこで、Timerイベントを使用して、毎回キーの状態変化を取得したいのですが、関数を正しく使えないのかエラーがでてしまいます。
    > どこがおかしいかご指摘いただきたいです!
    >
    どんなエラーが出ますか?
    GetKeyboardState の戻り値を参照していないからエラー情報を取っていないと思うのですが。

    あと、Byte型の範囲を確認してください。
    http://msdn.microsoft.com/ja-jp/library/47zceaw7.aspx
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43351  Re[1]: GetKeyboardStateについて
□投稿者/ 魔界の仮面弁士 -(2009/11/06(Fri) 14:30:11)
    2009/11/06(Fri) 14:33:50 編集(投稿者)

    No43346 (たぬき さん) に返信
    > どこがおかしいかご指摘いただきたいです!
    記述が VB.NET のコードというよりも、VB6 のそれに近い物になっていますね。
    また、GetKeyboardState と GetAsyncKeyState を混同しているようにも見えます。


    > Dim i As Integer
    > For i = 0 To 255
    間違いではありませんが、「For i As Integer = 0 To 255」の方が良いかと。

    > If (key(i) And &H8001) Then
    何のために、&H8001 を And しているのでしょうか?

    GetKeyboardState の結果を調べるなら、最上位ビット(キー押下の有無)、
    あるいは最下位ビット(トグル状態)の値を見ることになるので、たとえば
     If CBool(key(i) And &H80) Then
     If (key(i) And &H80) <> 0 Then
     If (key(i) And &H80) = &H80 Then
    などになるかと思います。
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43356  Re[2]: GetKeyboardStateについて
□投稿者/ たぬき -(2009/11/06(Fri) 15:11:43)
    ■GODさんに返信

    すみません。エラーではないです。戻り値がうまくかえってこなくて・・・全て0が返ってきます!

    >あと、Byte型の範囲を確認してください。

    一個オーバーしちゃってますね!256個必要な時は、byte型は使用できないということですか???
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43361  Re[3]: GetKeyboardStateについて
□投稿者/ GOD -(2009/11/06(Fri) 16:10:47)
    2009/11/06(Fri) 16:12:25 編集(投稿者)
    2009/11/06(Fri) 16:12:06 編集(投稿者)

    <pre><pre>■No43356 (たぬき さん) に返信
    > ■GODさんに返信
    >
    > すみません。エラーではないです。戻り値がうまくかえってこなくて・・・全て0が返ってきます!
    >
    > >あと、Byte型の範囲を確認してください。
    >
    > 一個オーバーしちゃってますね!256個必要な時は、byte型は使用できないということですか???
    >
    配列の取り方には問題ないです。
    リンク先を見ていただければわかると思いますが、byte型は0〜255(0〜FF)の範囲しか表せません。
    &H8001 と比較してもあまり意味を成しませんよ。(魔界の仮面弁士 さんが書いてくれていますね。)
    例えば
    8001 8001
    AND 01 AND 80 (<--- 引数で取得できる値)
    --------- ---------
    01 00 (<--- AND後の結果)
    となります。

    使用できる型と、型の範囲は基礎部分なので一度目を通しておくことをお勧めします。

    ※崩れていたので図表モードに変更。</pre></pre>
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43412  Re[4]: GetKeyboardStateについて
□投稿者/ たぬき -(2009/11/10(Tue) 11:24:19)
    No43361 (GOD さん) に返信

    丁寧な回答ありがとうございます!
    解決することができました。
記事No.43346 のレス / END /過去ログ74より / 関連記事表示
削除チェック/

■43366  Re[3]: GetKeyboardStateについて
□投稿者/ GOD -(2009/11/06(Fri) 17:49:23)
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/

■43357  Re[2]: GetKeyboardStateについて
□投稿者/ たぬき -(2009/11/06(Fri) 15:15:09)
    No43351 (魔界の仮面弁士 さん) に返信

    すみません。確かに混同していました!前に作成したアプリケーションを参考にしたのですが、この関数とは戻り値が少し違うんですね!

    > 間違いではありませんが、「For i As Integer = 0 To 255」の方が良いかと。
    > GetKeyboardState の結果を調べるなら、最上位ビット(キー押下の有無)、
    > あるいは最下位ビット(トグル状態)の値を見ることになるので、たとえば
    >  If CBool(key(i) And &H80) Then
    >  If (key(i) And &H80) <> 0 Then
    >  If (key(i) And &H80) = &H80 Then
    ご指摘ありがとうございます。治したいと思います。
    CBoolの使い方もできるんですね!勉強になります。
記事No.43346 のレス /過去ログ74より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -