IME2_AHK输入法切换的3个方案介绍

/*
;--------------------------------------------------------------------------------------------------------------- 


##########  我发现的中英文输入法自动(智能)切换的三个方案(Win10下AHK实现方法)    ##########  

方案1:
源代码和介绍 https://faxian.appinn.com/747
我的改进型叫IME2.ahk(贴在注释后面了)
;~ 我只是改动了快捷键的切换方法,其他的没改,所以先要看原来的说明文档才可以懂


;--------------------------------------------------------------------------------------------------------------- 

说明一下 我用的是系统设置输入法快捷键的方法切换
	Sleep 120
	send +^7
	Sleep 120
	send +^8
	Sleep 100
	
	;~ send +^7 是切换我的主输入法之外的"五笔"输入法 切换它的作用主要是"重置主输入法"没有其他作用
	;send +^8 是我的主输入法快捷键(我用的是搜狗)
	
;--------------------------------------------------------------------------------------------------------------- 

方法2:
http://www.autoahk.com/archives/1262:莫邪剑Habit
这个是群主(河许人)出的教程,我还没看,刚发现

;--------------------------------------------------------------------------------------------------------------- 

方案3:用AutoHotkey辅助切换中英文标点和智能切换中英文输入法
https://blog.csdn.net/teshorse/article/details/5754732

也还没看 看起来主要是解决标点问题


;--------------------------------------------------------------------------------------------------------------- 
*/








;是否允许脚本的多个实例运行
;单词 FORCE 会跳过对话框并自动替换旧实例, 效果类似于 Reload 命令.
#SingleInstance force

;~ ;在任意位置进行匹配: 默认情况下, 正则表达式可以匹配被搜索字符串的 任意位置 的子字符串. 例如, 正则表达式 abc 可以匹配 abc123, 123abc 以及 123abcxyz
;开启之后和Ditto冲突
;~ SetTitleMatchMode RegEx
SetTitleMatchMode,2
; 默认好像是匹配开头
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; AHK版本:		1.1.23.01
; 语言:		中文
; 作者:		lspcieee 
; 网站:		http://www.lspcieee.com/
; 脚本功能:	自动切换输入法
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;开启之后和自动替换冲突
;~ #IfWinActive,IME_复活版_切换逻辑为自定义快捷键_稳定版备份
;~ ;###保存并重启当前脚本 
;~ ::`;rl:: 

;~ {
   ;~ Sleep 25  
   ;~ send ^s  
;~ Sleep 25 
  ;~ Reload
;~ Sleep 1000 ; 如果成功, 则 reload 会在 Sleep 期间关闭这个实例, 所以下面这行语句永远不会执行.
;~ MsgBox, 4,, The script could not be reloaded. Would you like to open it for editing?
;~ IfMsgBox, Yes, Edit
;~ return
;~ }

;~ #IfWinActive


;=====分组配置
;#新开窗口时,切换到中文输入法的分组
GroupAdd,cn,ahk_class TXGuiFoundation  ;QQ
;~ GroupAdd,cn,ahk_exe wps.exe ;wps
;##思维导图和概念图
;~ GroupAdd,cn,ahk_exe MindManager.exe 
GroupAdd,cn,ahk_exe CmapTools.exe
GroupAdd,cn,ahk_exe iThoughts.exe
;~ GroupAdd,cn,ahk_class HwndWrapper
GroupAdd,cn,滴答清单
;~ GroupAdd,cn,ahk_exe Listary.exe

;##微软三件套
;~ GroupAdd,cn,ahk_class OpusApp ;word
;~ GroupAdd,cn,ahk_class XLMAIN ;Excel

;#窗口切换时,切换到中文输入法
GroupAdd,cn32772,ahk_class TXGuiFoundation  ;QQ
GroupAdd,cn32772,ahk_exe iThoughts.exe
GroupAdd,cn32772,滴答清单
;~ GroupAdd,cn32772,ahk_exe Listary.exe
;~ GroupAdd,cn32772,ahk_class OpusApp ;word
;~ GroupAdd,cn32772,ahk_class XLMAIN ;Excel



;#新开窗口时,切换到英文输入法的分组
;~ GroupAdd,en,ahk_exe devenv.exe  ;Visual Studio
;~ GroupAdd,en,ahk_exe dopus.exe 
;~ GroupAdd,en,ahk_class Notepad++

;~ GroupAdd,en,ahk_exe happyheart2.exe


;#窗口切换时,切换到英文输入法


;编辑器分组
;只有IDEA,因为这个就是为Java专门设计的,其他的专门优化得了

GroupAdd,editor,ahk_exe idea64.exe
;~ GroupAdd,editor,ahk_exe devenv.exe  ;Visual Studio
;~ GroupAdd,editor,ahk_exe notepad.exe ;记事本
;~ GroupAdd,editor,ahk_class Notepad++
;~ GroupAdd,editor,ahk_class SciTEWindow ;SciTE
;~ GroupAdd,editor,ahk_class SunAwtFrame
;~ GroupAdd,editor,ahk_class idea.exe

;用WORD做一下测试
;~ GroupAdd,editor,ahk_exe WINWORD.EXE ;word




;函数
;从剪贴板输入到界面
sendbyclip(var_string)
{
    ClipboardOld := ClipboardAll
	Sleep 50
    Clipboard := var_string
	ClipWait
    send ^v
    sleep 50
    Clipboard = %ClipboardOld%  ; Restore previous contents of clipboard.
}


;~ setChineseLayout(){
	;~ ;发送中文输入法切换快捷键,请根据实际情况设置。
	;~ Sleep 250
	;~ send +^9
		;~ Sleep 30
	;~ send +^5
		;~ Sleep 5
		;~ return

;~ }

;~ ;慢速版,兼容性好
setChineseLayout(){
	;发送中文输入法切换快捷键,请根据实际情况设置。
	Sleep 150
	send {Shift Down}{Ctrl Down}7
	send {Shift Up} {Ctrl Up}
		Sleep 125
	send {Shift Down}^8
	send {Shift Up}

}


setEnglishLayout(){
	Sleep 120
	send +^7
	Sleep 120
	send +^8
	Sleep 100
	send {Shift}
}

;~ ;快速版,禁用Excel+Word的自动切换后很适合
;~ setChineseLayout(){
	;~ ;发送中文输入法切换快捷键,请根据实际情况设置。
	;~ Sleep 30
	;~ send {Shift Down}{Ctrl Down}7
	;~ send {Shift Up} {Ctrl Up}
		;~ Sleep 30
	;~ send {Shift Down}^8
	;~ send {Shift Up}
		Sleep 1
		return

;~ }


;~ setEnglishLayout(){
	;~ Sleep 30
	;~ send +^7
	;~ Sleep 30
	;~ send +^8
	;~ Sleep 15
	send ^{Space}	
	;~ send {Shift}
	Sleep 5
	return
;~ }

;监控消息回调ShellMessage,并自动设置输入法
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage")

ShellMessage( wParam,lParam ) {

;1 顶级窗体被创建 
;2 顶级窗体即将被关闭 
;3 SHELL 的主窗体将被激活 
;4 顶级窗体被激活 
;5 顶级窗体被最大化或最小化 
;6 Windows 任务栏被刷新,也可以理解成标题变更
;7 任务列表的内容被选中 
;8 中英文切换或输入法切换 
;9 显示系统菜单 
;10 顶级窗体被强制关闭 
;11 
;12 没有被程序处理的APPCOMMAND。见WM_APPCOMMAND 
;13 wParam=被替换的顶级窗口的hWnd 
;14 wParam=替换顶级窗口的窗口hWnd 
;&H8000& 掩码 
;53 全屏
;54 退出全屏
;32772 窗口切换
	If ( wParam = 1 )
	{
		;WinGetclass, WinClass, ahk_id %lParam%
		;MsgBox,%Winclass%
		Sleep, 1000
		;WinActivate,ahk_class %Winclass%
		;WinGetActiveTitle, Title
		;MsgBox, The active window is "%Title%".
		IfWinActive,ahk_group cn
		{
			setChineseLayout()
			;~ TrayTip,AHK, 已自动切换到中文输入法
			return
		}
		IfWinActive,ahk_group en
		{
			setEnglishLayout()
			;~ TrayTip,AHK, 已自动切换到英文输入法
			return
		}
	}
	If ( wParam = 32772 )
	{
		IfWinActive,ahk_group cn32772
		{
			setChineseLayout()
			;TrayTip,AHK, 已自动切换到中文输入法
			return
		}
		IfWinActive,ahk_group en32772
		{
			setEnglishLayout()
			;TrayTip,AHK, 已自动切换到英文输入法
			return
		}
	}
}

;~ ;## 成对符号匹配(自动补全括号)
;~ :*:(::(){left}
;~ :*:[::[]{left}
;~ :*:[::
	;~ setChineseLayout()
;~ return
;~ :*:"::""{left}
;~ :*:'::''{left}
;~ :*:{::{{}{}}{left} 

;在所有编辑器中自动切换中英文输入法
#IfWinActive,ahk_group editor
:*:// ::
	;//加空格 时 切换到中文输入法
	;~ setEnglishLayout()
	sendbyclip("//")
	setChineseLayout()
return

:*:" ::
	;引号加空格 时 切换到中文输入法
	;~ setEnglishLayout()
	SendInput "
	setChineseLayout()
return
:*:`;`n::
	;分号加回车 时 切换的英文输入法
	setEnglishLayout()
	sendbyclip(";")
	SendInput `n
return
:Z?*:`;`;::
	;两个分号时 切换的英文输入法
	setEnglishLayout()
return
:Z?*:  ::
	;输入两个空格 切换的中文输入法
	;~ setEnglishLayout()
	setChineseLayout()
return

#IfWinActive







给TA捐赠
共{{data.count}}人
人已捐赠
其他案例

Habit新版主程序目前运行良好 求测

2020-3-30 5:55:54

其他教程案例

ini和数组互操作函数及示例

2020-3-31 3:15:41

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索