dポイントプレゼントキャンペーン実施中!

こんにちは。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

A 回答 (4件)

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



If (GetKeyState(vbKeyTab) < 0) Then
では?

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

todo36さん。ありがとうございました。条件記述を変更後に動作確認をしたら、
質問の内容は解決しました。

お礼日時:2001/12/27 17:58

プロパティのMultiLineをTrueにしていませんか?



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

対応としましては、

MultiLineをFalseにするか、

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

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

参考になれば。。
    • good
    • 0

すいませんTodo36さん、その通りです。



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

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

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

akfkさんご迷惑かけました、todo36さん、ありがとうございます。
    • good
    • 0

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
------------------
参考になれば幸いです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!