左右別コントロールボタン押下時のキーイベントを取得するには?

解決


nanashi  2005-03-24 01:41:38  No: 89003

いつも勉強させて頂いてます。

タイトルにもあるようにコントロールボタンの左右別にキーイベントを取得したいのですが、何か方法はありますでしょうか?

※サブクラス化以外でお願いします。


LESIA  2005-03-24 02:02:05  No: 89004

コントロールボタン押下時ってマウスでクリックした時じゃないんですか?
そうだったら、キーイベントは取得できないと思うんですが。

また、左右別にって左右に並んだ2つのコマンドボタンってことですか?
それなら、それぞれのボタンのKeyDownやKeyPressにコードを書けば
いいのでは?

なんか、おもいっきり外している気がする・・・。


ガッ  2005-03-24 02:03:14  No: 89005

WinAPIのGetKeyState()とかですかねぇ…
NTなら出来ると書いてあります。
ただし、この方法ではイベントとしてではなく、ポーリングして検出しなければなりませんが。


nanashi  2005-03-24 02:30:48  No: 89006

>コントロールボタン押下時ってマウスでクリックした時じゃないんですか?
>だったら、キーイベントは取得できないと思うんですが。

>また、左右別にって左右に並んだ2つのコマンドボタンってことですか?
>それなら、それぞれのボタンのKeyDownやKeyPressにコードを書けば
>いいのでは?
すいません。書き方が悪かったようで。
キーボードの左右Ctrlボタン押下の話です。

>ただし、この方法ではイベントとしてではなく、ポーリングして検出しなければなりませんが。
・・・しかなさそうですね。

サブクラスでがんばってみます。
ありがとうございました。


ガッ  2005-03-24 02:50:32  No: 89007

あー、でも、こんな具合のなら、なんとか出来るみたい。
…全然ダメダメかも。

'Form1
Option Explicit
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Const VK_LCONTROL = &HA2
Private Const VK_RCONTROL = &HA3

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    
    If Shift And vbCtrlMask Then
        
        If GetKeyState(VK_LCONTROL) And 128 Then
            Debug.Print "L"
        ElseIf GetKeyState(VK_RCONTROL) And 128 Then
            Debug.Print "R"
        End If
        
    End If
    
End Sub


魔界の仮面弁士  2005-03-24 03:09:24  No: 89008

質問者の環境が、現行バージョン(VB.NET 2003)と仮定して。

Private Declare Function GetKeyboardState Lib "user32" ( _
    ByVal KeyState() As Byte _
) As <MarshalAs(UnmanagedType.Bool)> Boolean

Private Sub Form1_KeyUpDown(ByVal sender As Object, _
    ByVal e As KeyEventArgs) Handles MyBase.KeyDown, MyBase.KeyUp
    Label1.Text = ""
    Label2.Text = ""
    If e.Control Then
        Dim KeyState(255) As Byte
        GetKeyboardState(KeyState)
        If CBool(KeyState(Keys.LControlKey) And &H80) Then
            Label1.Text = "左Ctrl"
        End If
        If CBool(KeyState(Keys.RControlKey) And &H80) Then
            Label2.Text = "右Ctrl"
        End If
    End If
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加