- 帖子
- 533
- 主題
- 58
- 精華
- 0
- 積分
- 613
- 點名
- 261
- 作業系統
- win 10
- 軟體版本
- []
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-3-19
- 最後登錄
- 2026-11-1
             
|
回復 6# luhpro
依照指導:
1.勾選 "... 為每個應用程式視窗設定 .... ", 試驗結果是沒有幫助的
2.使用即時運算視窗和 逐步執行(手按 Enter逐條執行)片段程式的結果是一樣的;
3.雖然 Sendkeys 有 wait的參數, 還是無法確保其正確執行;
4.我的電腦是 OS Win8.1 微軟注音,經分析後其狀態與輸入鍵的關係如圖
5.依照分析表作下列程式碼- '使鍵盤成為 "英文" 輸入狀態
- Sub ChangeIMEToE()
- If IMEStatus = 1 Then
- SendKeys "+", True
- End If
- End Sub
- '使鍵盤成為 "微軟注音"輸入狀態
- Sub ChangeIMEToC()
- ' Call ActiveIMEKeyBoard("微軟注音")
- ' Debug.Print "0,"; IMEStatus
- '假如狀態是 C, send a "Shift" key
- If IMEStatus = 2 Then SendKeys "+", True ': Sleep 1500
- DoEvents
- ' Debug.Print "1,"; IMEStatus
-
- ''假如狀態是 B, send a "Ctrl Space" keys
- If IMEStatus = 2 Then SendKeys "^ ", True
- DoEvents
- ' Debug.Print "2,"; IMEStatus
-
- '假如上一個 B狀態之起始狀態是 C,這時得狀態 C, send a "+" key
- If IMEStatus = 2 Then SendKeys "+", True ': Sleep 500
- DoEvents
- ' Debug.Print "3,"; IMEStatus, vbLf
- End Sub
複製代碼 試驗的結果: 可用
1.Sendkeys ,True 不成功
2.加 Application.wait ... 不成功
3. 呼叫 API sleep ... 不成功
4. 用 DoEvents OK
以上是實驗的結果,請指教
也許尋找 Win8.1 API 可能會有更直接泛用的答案 |
|