想用VB編一個程式,在一個文本框中,用戶先用搜狗拼音輸入法輸入文字,然后再用王碼五筆繼續輸入文字,有沒有辦法識別這期間文本框的輸入法狀態發生改變?請高手指導
uj5u.com熱心網友回復:
應該有辦法,具體不知道。。剛百度了下,你參考下:
http://www.itnose.net/detail/150092.html
http://blog.csdn.net/liuliu0103/article/details/6294564
沒空去試,你研究下
uj5u.com熱心網友回復:
有個imemode屬性吧。uj5u.com熱心網友回復:
imemode屬性只能對文本框的中英文狀態進行限制,不能識別文本框當前處于什么中文輸入法狀態請版主能不能提供詳細代碼來研究研究,謝謝!
uj5u.com熱心網友回復:
GetKeyboardLayoutImmGetDescription
?
uj5u.com熱心網友回復:
請教大師能不能給出具體的代碼?
uj5u.com熱心網友回復:
百度搜這兩個關鍵字。
uj5u.com熱心網友回復:
中文輸入法,是借助西文鍵盤和特定編碼生成漢字編碼的方法。中文輸入法好像“劫道”的,它攔截鍵盤傳遞給系統的訊息,將其轉換為漢字編碼后,將其作為訊息傳到你的文本框控制元件。因此,無論是從文本框接收到的訊息,還是文本框自身的狀態,都無法得知插在中間的是哪一位“好漢”。
有關輸入法的資訊,只能通過作業系統來獲得。
首先用下面的 API 函式獲取一個句柄(dwLayout = 0):
Public Declare Function GetKeyboardLayout Lib "user32" Alias "GetKeyboardLayout" (ByVal dwLayout As Long) As Long
然后,將所得的句柄送入下面函式的 hkl 引數獲取輸入法名稱。lpsz 是字串快取,uBufLen 是長度,可設為 255。
Public Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
但未必所有輸入法都能得到一個文字名稱。此時,可以借助查表法通過 hkl 句柄得到獲知當前輸入法。
E0010804 全拼輸入法 5.0 版
E0040804 智能ABC輸入法 5.0 版
E0050804 區位輸入法 5.0 版
E0100804 王碼五筆型輸入法 86 版
E0110804 王碼五筆型輸入法 98 版
E0200804 紫光拼音輸入法3.0
08040804 微軟拼音2003
04040404 [臺灣]微軟注音輸入法
08090809 英語
uj5u.com熱心網友回復:
Option Explicit
Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Private Declare Function ImmGetDescription Lib "imm32.dll" Alias "ImmGetDescriptionA" (ByVal hkl As Long, ByVal lpsz As String, ByVal uBufLen As Long) As Long
Dim list1 As Variant, list2 As Variant
Private Sub Command1_Click()
Dim ret As Long, hkl As Long, i As Long
Dim strTmp As String
hkl = GetKeyboardLayout(0)
strTmp = Space(255)
ret = ImmGetDescription(hkl, strTmp, 255)
strTmp = Trim(strTmp)
If strTmp > "" Then
Text1 = strTmp
Else
For i = 0 To UBound(list1)
If hkl = list1(i) Then strTmp = list2(i)
Next i
If strTmp > "" Then
Text1 = strTmp
Else
Text1 = Right("00000000" & Hex(hkl), 8)
End If
End If
End Sub
Private Sub Form_Load()
list1 = Array(&H8040804, &H4040404, &H8090809, &H4090409)
list2 = Array("微軟拼音輸入法2003", "微軟注音輸入法[臺灣]", "英語[英]", "英語[美]")
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/62433.html
標籤:控件
上一篇:VB模糊判斷
下一篇:vba 單元格參考替換
