使用Visual Studio寫代碼,經常遇到的一個問題就是切換中文輸入法麻煩,輸入完註釋//,要切換到中文,輸入完引號,要輸入中文,然後還需要切換回來,有沒有? 有時候中文輸入法忽然失效有沒有?明明在中文輸入法狀態下,輸入不了中文,有沒有?
使用Visual Studio寫代碼,經常遇到的一個問題就是切換中文輸入法麻煩,輸入完註釋//,要切換到中文,輸入完引號,要輸入中文,然後還需要切換回來,有沒有?
有時候中文輸入法忽然失效有沒有?明明在中文輸入法狀態下,輸入不了中文,有沒有?
這裡分享一個AHK腳本,解決了以上問題,實現瞭如下功能:
1.根據不同的程式,啟動後,自動切換到中文,英文輸入法。
比如 qq 使用搜狗拼音,vs啟動後自動切換到英文輸入法。
2.在 Visual Studio 等IDE/編輯器中(可配置),自動切換輸入法。
- 方便加入註釋:輸入註釋//加空格,自動切換到中文輸入法。無視當前輸入法狀態,如果為中文,“、、”自動更正為//
- 方便輸入中文字元串:輸入引號加空格,自動切換到中文輸入法。
- 方便切換回英文輸入法:輸入分號,換行時,自動切換到英文輸入法。同樣無視當前輸入法狀態,自動將全形分號更正為半形分號;輸入分號加空格,自動切換回英文輸入法,自動將全形分號修正為半形分號
3.在 Visual Studio 等IDE/編輯器中(可配置),更高效的手動切換輸入法
手動切換時,操作簡單,便於記憶,空格代表中文輸入法(智能abc用戶表示輸入的字元都是空格上屏),分號代表英文輸入法,這個 c# 碼農都懂的。
- 連續輸入兩個分號,切換到英文輸入法
- 連續輸入兩個空格,切換到中文輸入法
連擊兩次鍵切換,比按下windows,contrl 等組合鍵好多了。別跟我說 shirt 鍵切換,容易搞混當前輸入法狀態。
代碼測試通過環境:win10 64 位,vs2012/vs2013/vs2015/Notepad++/Notepad,ahkv1.1.23.01
亮點截圖:
打開qq聊天視窗時,自動切換到了中文輸入法狀態:
AHK 代碼如下:
1 ;=====分組配置 2 ;中文輸入法的分組 3 GroupAdd,cn,ahk_exe QQ.exe ;QQ 4 GroupAdd,cn,ahk_exe WINWORD.EXE ;word 5 GroupAdd,cn,ahk_exe MindManager.exe 6 7 ;英文輸入法的分組 8 GroupAdd,en,ahk_exe devenv.exe ;Visual Studio 9 GroupAdd,en,ahk_exe dopus.exe 10 GroupAdd,en,ahk_class Notepad++ 11 12 ;編輯器分組 13 GroupAdd,editor,ahk_exe devenv.exe ;Visual Studio 14 GroupAdd,editor,ahk_exe notepad.exe ;記事本 15 GroupAdd,editor,ahk_class Notepad++ 16 17 18 19 20 ;函數 21 ;從剪貼板輸入到界面 22 sendbyclip(var_string) 23 { 24 ClipboardOld = %ClipboardAll% 25 Clipboard =%var_string% 26 ClipWait 27 send ^v 28 sleep 100 29 Clipboard = %ClipboardOld% ; Restore previous contents of clipboard. 30 } 31 32 33 setChineseLayout(){ 34 ;發送中文輸入法切換快捷鍵,請根據實際情況設置。 35 send {Ctrl Down}{Shift} 36 send {Ctrl Down}, 37 send {Ctrl Down}{Shift} 38 send {Ctrl Down}, 39 send {Ctrl Up} 40 } 41 setEnglishLayout(){ 42 ;發送英文輸入法切換快捷鍵,請根據實際情況設置。 43 send {Ctrl Down}{Shift} 44 send {Ctrl Down}, 45 send {Ctrl Down}{Shift} 46 send {Ctrl Down}, 47 48 send {Ctrl Down}{Space} 49 send {Ctrl Up} 50 } 51 52 ;監控消息回調ShellMessage,並自動設置輸入法 53 Gui +LastFound 54 hWnd := WinExist() 55 DllCall( "RegisterShellHookWindow", UInt,hWnd ) 56 MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" ) 57 OnMessage( MsgNum, "ShellMessage") 58 59 ShellMessage( wParam,lParam ) { 60 If ( wParam = 1 ) 61 { 62 WinGetclass, WinClass, ahk_id %lParam% 63 ;MsgBox,%Winclass% 64 Sleep, 1000 65 WinActivate,ahk_class %Winclass% 66 ;WinGetActiveTitle, Title 67 ;MsgBox, The active window is "%Title%". 68 IfWinActive,ahk_group cn 69 { 70 setChineseLayout() 71 TrayTip,AHK, 已自動切換到中文輸入法 72 return 73 } 74 IfWinActive,ahk_group en 75 { 76 setEnglishLayout() 77 TrayTip,AHK, 已自動切換到英文輸入法 78 return 79 } 80 } 81 } 82 83 ;在所有編輯器中自動切換中英文輸入法 84 #IfWinActive,ahk_group editor 85 :*:// :: 86 ;//加空格 時 切換到中文輸入法 87 setEnglishLayout() 88 sendbyclip("//") 89 setChineseLayout() 90 return 91 :Z*:///:: 92 ;///註釋時 切換到中文輸入法(也可以輸入///加空格) 93 setEnglishLayout() 94 sendbyclip("//") 95 SendInput / 96 setChineseLayout() 97 return 98 :*:" :: 99 ;引號加空格 時 切換到中文輸入法 100 setEnglishLayout() 101 SendInput " 102 setChineseLayout() 103 return 104 :*:`;`n:: 105 ;分號加回車 時 切換的英文輸入法 106 setEnglishLayout() 107 sendbyclip(";") 108 SendInput `n 109 return 110 :Z?*:`;`;:: 111 ;兩個分號時 切換的英文輸入法 112 setEnglishLayout() 113 return 114 :Z?*: :: 115 ;輸入兩個空格 切換的中文輸入法 116 setEnglishLayout() 117 setChineseLayout() 118 return 119 120 #IfWinActive
已經編譯後的exe文件
已設置Visual Studio,Notepad++,記事本為編輯器,支持開發自動切換:
已設置qq,word,MindManager自動切換為中文輸入法。
已經設置Visual Studio,Notepad++,Directory Opus自動切換為因為輸入法。
下載(博客園上傳不了附件),請前往:
如果需要自己配置,請修改ahk源代碼
Github地址:
https://github.com/lspcieee/lspcieee_ahk