返回列表 上一主題 發帖

VBA 設定輸入法(中英文鍵盤)

VBA 設定輸入法(中英文鍵盤)

請問哪位大大指導一下
如何在VBA中設定變更輸入法的方法

謝謝先

回復 1# Scott090


    有在本論壇找到類似的,不過 要在 表單或 TEXTBOX或類似此物件的情況之下;問題未解決

TOP

回復 3# luhpro


    我的系統是 Win8.1  注音輸入法
下圖為設定情況
  1. '這個每執行一次就只會再狀態 A與B 交換,不會是能被掌握的狀態
  2. Sub KeyBoard()
  3.     SendKeys "^ ", True
  4. '       Application.Wait Now + TimeValue("00:00:02")
  5. End Sub

  6. '這個沒反應
  7. Sub KeyBoard1()
  8.     SendKeys "^+1", True
  9.     Application.Wait Now + TimeValue("00:00:02")
  10. End Sub

  11. '這個沒反應
  12. Sub KeyBoard0()
  13.     SendKeys "%+", True
  14.     Application.Wait Now + TimeValue("00:00:02")
  15. End Sub
複製代碼
不知問題在哪裡
敬請指導

TOP

回復 3# luhpro


    補充說明:
#4 內 3 段程式都會使 數字鍵盤的 NumLock 來回的 鎖定與釋放

TOP

回復 6# luhpro


    依照指導:
1.勾選 "... 為每個應用程式視窗設定 .... ", 試驗結果是沒有幫助的
2.使用即時運算視窗和 逐步執行(手按 Enter逐條執行)片段程式的結果是一樣的;
3.雖然 Sendkeys 有 wait的參數, 還是無法確保其正確執行;
4.我的電腦是 OS Win8.1  微軟注音,經分析後其狀態與輸入鍵的關係如圖

5.依照分析表作下列程式碼
  1. '使鍵盤成為 "英文" 輸入狀態
  2. Sub ChangeIMEToE()
  3.     If IMEStatus = 1 Then
  4.         SendKeys "+", True
  5.     End If
  6. End Sub

  7. '使鍵盤成為 "微軟注音"輸入狀態
  8. Sub ChangeIMEToC()
  9. '    Call ActiveIMEKeyBoard("微軟注音")
  10. '    Debug.Print "0,"; IMEStatus

  11. '假如狀態是 C, send a "Shift" key
  12.   If IMEStatus = 2 Then SendKeys "+", True ': Sleep 1500
  13.   DoEvents
  14. '  Debug.Print "1,"; IMEStatus
  15.   
  16.   ''假如狀態是 B, send a "Ctrl Space" keys
  17.   If IMEStatus = 2 Then SendKeys "^ ", True
  18.   DoEvents
  19. '  Debug.Print "2,"; IMEStatus
  20.   
  21.   '假如上一個 B狀態之起始狀態是 C,這時得狀態 C, send a "+" key
  22.   If IMEStatus = 2 Then SendKeys "+", True ': Sleep 500
  23.   DoEvents
  24. '  Debug.Print "3,"; IMEStatus, vbLf

  25. End Sub
複製代碼
試驗的結果: 可用
1.Sendkeys ,True 不成功
2.加 Application.wait ...   不成功
3. 呼叫 API sleep ...  不成功
4. 用 DoEvents OK

以上是實驗的結果,請指教

也許尋找 Win8.1 API 可能會有更直接泛用的答案

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題