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

  • 相关阅读:
    burpsuite 不能抓取其他虚拟机环回地址
    Widows搭建sqli-labs
    Mysql内置函数
    MySQL用户创建于授权
    SQL注入
    XSS/CSRF/SSRF/XXE
    Cookie与Session的区别
    HACKTHEBOX邀请码
    kali安装jdk
    java -D
  • 原文地址:https://www.cnblogs.com/lspcieee/p/5201381.html
Copyright © 2011-2022 走看看