あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

W-ZERO3[es] で、入力モードを _1 に変更する方法。

 W-ZERO3[es] で、入力モードを _1 に変更する方法は?と、MSDNフォーラムで質問があったので答えてみた。ちなみに、moneymemoの金額入力にも使ってる方法(W-ZERO3[es]かどうかの判定にも使ってる)。
 他にも需要があるかもしれないので、こっちにも転載してみる。
 なお、レジストリいじると変更できる、ってのは偉大なる先達の力に寄る物。感謝してもしきれない。
 具体的には HKEY_CURRENT_USER\Software\Sharp\PhoneStatus の Status22 の値を変更するとよいみたい。「あ」から「_1」まで、0〜7で設定する。
 HKEY_CURRENT_USER\Software\Sharp\PhoneStatus周りは色々と楽しいことができるようなので、検索とかしてみると良いかも。
 …ところで、HT1110とか出たら、またこの辺りの方法が別の物になってるんだろうか。なってるだろうなあ。

   Private org_mode As Integer

    <Runtime.InteropServices.DllImport("coredll")> _
    Private Shared Function ImmGetContext( _
    ByVal hWnd As IntPtr) As IntPtr
    End Function

    <Runtime.InteropServices.DllImport("coredll")> _
    Private Shared Function ImmReleaseContext( _
        ByVal hWnd As IntPtr, _
        ByVal hIMC As IntPtr) As Boolean
    End Function

    <Runtime.InteropServices.DllImport("coredll")> _
    Private Shared Function ImmSetOpenStatus( _
        ByVal himc As IntPtr, _
        ByVal fOpen As Integer) As Integer
    End Function

    Private Sub changeImeModeNum()
        Dim context As IntPtr = ImmGetContext(Handle)
        Try
            org_mode = CInt(Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\Software\Sharp\PhoneStatus", "Status22", Nothing))
            Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Software\Sharp\PhoneStatus", "Status22", 7)

            Dim conv As Integer = 0
            Dim sentence As Integer = 0
            ImmSetOpenStatus(context, 0)
        Finally
            ImmReleaseContext(handle, context)
        End Try
    End Sub

    Private Sub restoreImeMode()
        Dim context As IntPtr = ImmGetContext(Handle)
        Try
            Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\Software\Sharp\PhoneStatus", "Status22", org_mode)

            Dim conv As Integer = 0
            Dim sentence As Integer = 0
            ImmSetOpenStatus(context, 1)
        Finally
            ImmReleaseContext(Handle, context)
        End Try
    End Sub

    Private Sub TextBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.GotFocus
        changeImeModeNum()
    End Sub

    Private Sub TextBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.LostFocus
        restoreImeMode()
    End Sub