投稿者 るきお  (社会人) 投稿日時 2013/4/11 21:32:06
>いろいろ当たってみましたが方法がわかりません。
>もしくは、不可能なことなのかどうかもわかりません。
可能ではありますが、Enterキーのような機能的なキーの機能を置き換えた場合、
考慮すべき事態を列挙するのが大変で、いろいろなシーンでつじつまが合うか心配です。
Enterキーのいろいろなシーン、考慮すべき事態の列挙、とは、たとえば、
・ボタンにフォーカスがあるときのクリックの発生有無。
・コンボボックスで同上
・メニューを展開しているとき。
・システムメニューを展開しているとき。
・ウィンドウをキー操作で移動しているとき。
などです。

また、キーボードのキーに本来の機能と違うことをさせるわけですから、
ユーザーの混乱もあります。

以上の理由から私はそのようなことをしないことをお勧めします。


技術的にはEnterキーが押された場合握りつぶして代わりにTabを送信するプログラムを書けば一応実現できているように動きます。
通常のEnterとテンキーのEnterはキーコードが同じなので普通は区別がつかず、多分lParamで区別できるのだと思うのですが、ちょっと調べたところ仕様が明記されているところが見つけられませんでした。
自分で試したところ25ビット目で区別しているようだったので、このプログラムではその方式で区別しています。ですから、うまく区別できない可能性もあります。

Public Class Form1

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean

        Const WM_KEYDOWN As Integer = &H100

        If msg.Msg = WM_KEYDOWN Then
            
            If msg.WParam = Keys.Enter Then

                Dim bit25 As Integer = &H1000000
                Dim isTenkeyEnter As Boolean = CBool(msg.LParam.ToInt32 And bit25)

                If isTenkeyEnter Then
                    SendKeys.Send(vbTab)
                    Return True
                End If
                
            End If
        End If


        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class