OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

GetKeyStateについて

  • すぐに回答を!
  • 質問No.191371
  • 閲覧数562
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 42% (9/21)

こんにちは。GetKeyStateについて質問させていただきます。

VB6にて、APIの「GetKeyState」を使用し、Tabキーのキー入力判断を行っているのですが、その他の操作(GetKeyStateを判断しているフィールドより
マウス左ボタンにて他のコントロールに移動した時等)に、Tabキーを押して
いないのに、プログラムはTabキーを押した状態のロジックが動作していま
す。下記にそのコードを記述しますので、原因・対処方法がありましたら、
教えてください。

****コード
Private Sub TXT_ATAI_LostFocus()

Dim SUBM0030 As SUBM0030_AREA
Dim X As Variant

If (GetKeyState(vbKeyTab) <> 0) Then
If FRM70.TXT_ATAI.Text <> "" Then
Call MEDIA_DECODE3_SEC(SUBM0030, "1")
If SUBM0030.RETURN_CD <> "0" Then
FRM70.GRD1.Col = 7
FRM70.TXT_ATAI.SetFocus
FRM70.MousePointer = vbDefault
Exit Sub
End If
End If
End If

End Sub

**** 開発環境
・OS:Windows98 4.10.1998
・メモリ:64MB
・CPU:P2-233
・PC:FMV6233-D9
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル13

ベストアンサー率 59% (729/1235)

>If (GetKeyState(vbKeyTab) <> 0) Then

If (GetKeyState(vbKeyTab) < 0) Then
では?
お礼コメント
akfk

お礼率 42% (9/21)

todo36さん。ありがとうございました。条件記述を変更後に動作確認をしたら、
質問の内容は解決しました。
投稿日時 - 2001-12-27 17:58:50
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル4

ベストアンサー率 20% (1/5)

NT40(SP6)+VB5(SP3)環境での回答とさせていただきます。 確かにGetKeyState(vbKeyTab) <> 0の記述ではその現象が発生します、理由は調べていません(--;) 目的がTABキーの状態の取得でしたら、次のコードでも実現可能です。 ----------------- 標準モジュール Declare Function GetAsyncKeySta ...続きを読む
NT40(SP6)+VB5(SP3)環境での回答とさせていただきます。

確かにGetKeyState(vbKeyTab) <> 0の記述ではその現象が発生します、理由は調べていません(--;)

目的がTABキーの状態の取得でしたら、次のコードでも実現可能です。

----------------- 標準モジュール
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
----------------- FRM70
Private Sub TXT_ATAI_LostFocus()

If GetAsyncKeyState(vbKeyTab) <> "0" Then
MsgBox "TAB"
End If

End Sub
------------------
参考になれば幸いです。


  • 回答No.3
レベル4

ベストアンサー率 20% (1/5)

すいませんTodo36さん、その通りです。 リンク先より:If the return value is negative, the key has been pressed. たしかに・・・m(_ _)m さらに、GetAsyncKeyState(vbKeyTab) <> "0" ←なぜか文字列で比較している akfkさんご迷惑かけました、todo ...続きを読む
すいませんTodo36さん、その通りです。

リンク先より:If the return value is negative, the key has been pressed.

たしかに・・・m(_ _)m

さらに、GetAsyncKeyState(vbKeyTab) <> "0" ←なぜか文字列で比較している

akfkさんご迷惑かけました、todo36さん、ありがとうございます。
  • 回答No.4
レベル7

ベストアンサー率 58% (7/12)

プロパティのMultiLineをTrueにしていませんか? その場合、そういうことがあるようです。 対応としましては、 MultiLineをFalseにするか、 下記のようにコードを固定すればいいと思います intSts = GetKeyState(vbKeyTab) And &HFE If intSts = 128 Then   MsgBox "Tab ...続きを読む
プロパティのMultiLineをTrueにしていませんか?

その場合、そういうことがあるようです。

対応としましては、

MultiLineをFalseにするか、

下記のようにコードを固定すればいいと思います

intSts = GetKeyState(vbKeyTab) And &HFE
If intSts = 128 Then
  MsgBox "Tab"
End If

参考になれば。。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ