使用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