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

求粉,求follow

 

posted on 2016-02-19 16:13  lspcieee  阅读(2606)  评论(2编辑  收藏  举报