小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VB編程控制Windows中文輸入法

 你喜歡那個(gè) 2012-05-06
在Windows中我們可以用“Ctrl+Shift”鍵來(lái)調(diào)入或切換中文輸入法,但是這樣做每次都是使位于輸入法列表頂端的那個(gè)輸入法首先被調(diào)用。通常我們都要連續(xù)按好幾次“Ctrl+Shift”才能將習(xí)慣的輸入法調(diào)出。我編制了一段小程序,通過它可以把任意一個(gè)輸入法放在輸入法列表的頂端。

  它的原理是:使用LoadKeyboardLayout函數(shù)可以改變輸入法的順序,只要在第一個(gè)參數(shù)中傳遞目標(biāo)輸入法的KeyboardlayoutName,第二個(gè)參數(shù)用KLF_REORDER就可以了。

  例如,aa = LoadKeyboardLayout(″00000409″, KLF_REORDER) 使英文變成第一。那怎樣獲得KeyboardlayoutName呢?因?yàn)槭褂肎etKeyboardLayoutname可以返回當(dāng)前輸入法的KeyboardlayoutName,所以我們可以先用GetKeyboardLayoutList 函數(shù)來(lái)取得所有輸入法,再用activateKeyboardlayout()函數(shù)設(shè)置當(dāng)前輸入法,最后就可以得到它的KeyboardlayoutName了。具體步驟如下:

  打開VB后選擇標(biāo)準(zhǔn)的EXE文檔,在Form1上添加一個(gè)Combobox和一個(gè)command控件,輸入以下程序。

  ′以下的API函數(shù)用于輸入法操作
  Private Declare Function GetKeyboardLayoutList Lib ″user32″ _
  (ByVal nBuff As Long, lpList 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
  Private Declare Function ImmIsIME Lib ″imm32.dll″ (ByVal hkl As Long) As Long
  Private Declare Function ActivateKeyboardLayout Lib ″user32″ _
  (ByVal hkl As Long, ByVal flags As Long) As Long
  Private Declare Function GetKeyboardLayout Lib ″user32″ (ByVal dwLayout As Long)As Long
  Private Declare Function GetKeyboardLayoutName Lib ″user32″ Alias _
  ″GetKeyboardLayoutNameA″ (ByVal pwszKLID As String) As Long
  Private Declare Function LoadKeyboardLayout Lib ″user32″ Alias ″LoadKeyboardLayoutA″ _
  (ByVal pwszKLID As String, ByVal flags As Long) As Long
 
  Const KLF_REORDER = &H8
  Private NoOfKBDLayout As Long, i As Long, j As Long
  Private hKB(24) As Long, BuffLen As Long
  Private Buff As String
  Private RetStr As String
  Private RetCount As Long
  Private kln As String

  Private Sub Command1_Click()
   If Combo1.ListIndex = -1 Then′如果用戶尚未選擇輸入法,顯示出錯(cuò)信息
    MsgBox ″請(qǐng)先選擇一個(gè)輸入法″
    Exit Sub
   End If
   ′改變輸入法順序
   kln = String(8, 0)
   ActivateKeyboardLayout hKB(Combo1.ListIndex), 0
   res = GetKeyboardLayoutName(kln)
   res = LoadKeyboardLayout(kln, KLF_REORDER)
   ActivateKeyboardLayout hCurKBDLayout, 0
  End Sub

  Private Sub Form_Load()
   Buff = String(255, 0)
   hCurKBDLayout = GetKeyboardLayout(0) ′取得目前的輸入法
   NoOfKBDLayout = GetKeyboardLayoutList(25, hKB(0)) ′取得所有輸入法
   ′ReDim layoutlist(NoOfKBDLayout) As String
   For i = 1 To NoOfKBDLayout
    If ImmIsIME(hKB(i - 1)) = 1 Then ′中文輸入法
     BuffLen = 255
     RetCount = ImmGetDescription(hKB(i - 1), Buff, BuffLen)
     RetStr = Left(Buff, RetCount)
     Combo1.AddItem RetStr
    Else
     RetStr = ″English (American)″ ′英文輸入法
     Combo1.AddItem RetStr
    End If
   Next
   ActivateKeyboardLayout hCurKBDLayout, 0 ′恢復(fù)原來(lái)的輸入法
  End Sub


  運(yùn)行后,在combobox中選擇目標(biāo)輸入法,按下command即可。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約