none
vb如何讀取或更改win7當前輸入法?謝謝 RRS feed

  • 一般討論

  • 問題描述:

    使用自編的gimenet.dll文件,在win2003,xp中可以正常讀取輸入法列表和更改當前輸入法?但在win7測試中,只能讀取到"中文繁體-美式鍵盤"這個選項....其他倉頡,注音等則讀取不出來:(:(

    源碼如下:

    Imports System.Windows.Forms
    Imports System.Runtime.InteropServices
    Namespace gImeSet
      <ComVisible(True)> <Microsoft.VisualBasic.ComClass()> Public Class gImeNet
        <ComVisible(True)> Public gImeLng As String
        '當前輸入法
        <ComVisible(True)> Public Function gImeGet() As String
          gImeLng = InputLanguage.CurrentInputLanguage.Handle.ToString
          gImeGet = gImeLng
        End Function
        '獲取輸入法清單
        <ComVisible(True)> Public Function gImeList() As Object
          Dim mIme(2, 0) As String
          Dim mLang As InputLanguage
          Dim i As Integer
          i = 1
          For Each mLang In InputLanguage.InstalledInputLanguages
            ReDim Preserve mIme(2, i)
            mIme(1, i) = mLang.Handle.ToString
            mIme(2, i) = mLang.LayoutName.ToString
            i = i + 1
          Next
          gImeList = mIme
        End Function
        '輸入法index
        Private Function gImeIndex(ByVal mHandle As String) As Integer
          Dim mLang As InputLanguage
          For Each mLang In InputLanguage.InstalledInputLanguages
            If mLang.Handle.ToString = mHandle Then
              gImeIndex = InputLanguage.InstalledInputLanguages.IndexOf(mLang)
              Exit Function
            End If
          Next
        End Function
        '更改當前輸入法
        <ComVisible(True)> Public Sub gImeOpen(ByVal mImeLng As String)
          If mImeLng = "" Then
            InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage
          Else
            InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages(gImeIndex(mImeLng))
          End If
        End Sub
    
        Public Sub New()
          MyBase.New()
        End Sub
      End Class
    End Namespace
    
    
    
    謝謝
    2010年12月20日 上午 08:47

所有回覆

  •     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim g As gImeSet.gImeNet = New gImeSet.gImeNet()
            Dim list As String(,) = g.gImeList()
            Dim iBound As Integer = list.GetUpperBound(0) + 1
            Dim jBound As Integer = list.GetUpperBound(1) + 1
            For i As Integer = 0 To iBound - 1
                For j As Integer = 0 To jBound - 1
                    Debug.Print(list(i, j))
                Next
            Next
        End Sub
    

    在下用Windows 7 家用進階版+VB2010,三種輸入法都會顯示...

    2010年12月20日 下午 01:43
  • Joe Hung,您好:

         我測試還是不行..可能使用的環境不同,查不出原因來.我使用環境如下:

    1.開發vb2005,把dll編譯成Com Interop

    2.在vb6中引用gimenet.dll,制成imeTest.exe

    3.在WIN7中安裝IMETEST,安裝過程中使用REGASM.EXE注冊GIMENET.DLL

    4.運行IMETEST.EXE. gimenet.dll可以正常使用,但返回的輸入法列表只有中文繁體-美式鍵盤

    5.使用系統管理員權限運行和安裝,仍只有一個輸入法

     

    如果在win2003中測試則正常.不知是何原因,謝謝;):)

     

     

    • 已編輯 lanWay 2010年12月21日 上午 08:18 描述錯了...
    2010年12月21日 上午 08:12
  • Win7 把 UAC 關掉試試。
    T.L. Cheng
    2011年1月1日 上午 06:44
    版主
  • 璉璉,您好:

         依照你的方法,把uac關掉后,錯誤依舊.不過另發現一個奇怪的問題,這次測試在win7的電腦還安裝了一個簡體中文鍵盤佈局的漢語拼音輸入法,結果能讀取到.也能更改使用...只有中文繁體台灣鍵盤下面的輸入法讀取不全...很奇怪.而我在win7 rtm版測試全部能讀取到....從測試結果來看,code應該沒有錯誤,好像是win7的設置有限制,希望您能幫我指點迷津一下:)謝謝

    2011年1月12日 上午 07:17