zoukankan      html  css  js  c++  java
  • 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?

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

  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/lspcieee/p/5201381.html
Copyright © 2011-2022 走看看