影子输入法功能添加之万能键(一键三用)以及万能防卡工具

给影子输入法添加功能

经过这几天和僵尸大佬的研究,影子的指示条越来越长了,万能键上的功能也越来越多了

分别讲解一下近期的主要修改点

1.万能键

2.影子和别的ahk脚本经常冲突的解决方案,万能卡键恢复,集成在指示器上,卡键的时候快捷键肯定按不出来,点一下指示器上的这个救济按钮即可

3.影子集成修改dpi的脚本以及修改后重启影子防止输入框子异常

4.更好看以及更长的指示器

首先是万能键

功能1.英文编码回收,对于很多打字从来不喜欢切换一下输入法,又又非常高的英文输入法需求的兄弟非常有实际价值

功能2,中文错误打字的回收和再利用,比如我经常打错同音字,甚至按错了字母不小心上屏了,按下万能键,即可轻松重新修改上屏的字,和上一个功能相当于是同卵双生的功能

 

功能3,清空编码,相当于一个esc键,这个万能键按的多了,按成习惯了,那肯定清屏的时候也想按他,所以加入这个功能,大部分你的需求都可以在这个万能键上解决,后续可能根据需求加入框子中的编码的判断,以及辅助码的状态,从而加入更多的功能

这个功能过于简单就不演示了

整理一下这个按键的逻辑

然后就是万能键的实现编码,可以自行加到user中

!s::
space & s::
if (srf_inputing!=0)
{
gosub 清空编码
}
Else
{
Clipboard := ""
Send, +{Home}
Send, ^c
ClipWait, 1
Send, {Right}
if (RegExMatch(Clipboard, "(?<!\w)(\w+$)", 编码)) {
	Gosub, 固定中文
	编码长 := StrLen(编码)
	Send, % "{bs " 编码长 "}"
	srf_all_Input := 编码
} Else {
	Gosub, 固定中文
	编码长 := StrLen(srf_last_input[2,2])
	Send, % "{bs " 编码长 "}"
	srf_all_Input := srf_last_input[2,0]
}
	Begininput()
	Gosub srf_tooltip
}
return

 

然后就是影子的另一个大问题,同时开一大堆ahk,卡键非常频繁,我个人就深受其害,所以做了个卡键恢复的功能

包含讲所有按键up一次,以及重启所有脚本,这两个步骤,理论上包治百病,采用点击指示器的方法也不会因为卡键无法激活快捷键无法使用,非常实用

具体的用法是这样的

点击求别卡就可以清楚卡键

另外就是这个指示器,我添加了图片,可以自行添加别的图片上去,然后增加了辅助码的切换按钮,以及卡键恢复

之后准备找一些图片来让这个指示器更好看一点,如果有大佬有好的图片也可以支援一下我,比如小鹤的图标就用一只真实的鹤来作图标这样的思路

 

然后就是切换dpi,我集成了切换dpi的exe可执行文件在影子的目录需要的朋友可以找我要一下

这个功能是我自用的,因为我经常要测试多个dpi

然后分享一下包含了目前所有修改的影子输入法user

本文就到这里结束了,最近捣鼓了影子以后感觉影子输入法真的是最简单最能折腾,上限非常高的一个输入法,不过还有一些诸如文档不够清晰等小问题,之后可能通过整理鹤僵尸大佬的咨询记录等形式来补充一些影子输入法文档中没有的内容,作为常见问题的解答

下面是user的源码

; 用户自定义文件 参考示例  https://gitee.com/orz707/Yzime/wikis/%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%BE%E7%BD%AE%E8%BF%9B%E9%98%B6?sort_id=1885698
Hotkey, ^F1, toggle_Pin ; 热键切换到双拼全拼
Hotkey, ^#!z, 造词
Hotkey, ^+x, app
Hotkey, ^F2, option
Hotkey,^f3, cikuManager


Hotkey If, srf_inputing
	Hotkey, ^space, 上屏搜索
	Hotkey, ^!f, 简繁切换
	Hotkey, F1, 辅助码候选
	Hotkey,^BackSpace,清空编码
	; Hotkey,CapsLock,清空编码

Hotkey If

SetTimer, 指示条, -3000

;全拼拼写纠错
customspell:=[["xia","xai"] ;xai->xia
,["([ui]?[aoei])ng","$1gn"] ;agn、ogn、egn、ign->ang、ong、eng、ing
,["([ui]?[aoei])ng","$1mg"] ; img转ing amg转ang omg转ong uamg转uang 
,["i([ao])ng","$1ing"] ;aing转iang oing转iong
,["i([ao])ng","$1ign"] ;aign转iang  oign转iong
,["i([ao])ng","$1img"] ;aimg转iang  oimg转iong
,["([i]?)ao$","$1oa"] ;ioa转iao oa转ao
,["ua([n]?)$","$1au"] ;au转ua aun转uan
,["ian$","$1ain"] ;au转ua aun转uan
,["([uv])e$","$1e"] ;eu转ue ev转ve
,["^([jqx])ia$","$1ai"] ;xai jai qai转 xia jia qia
,["^([bcdghklmnpstwz][h]?)ai$","$1ia"] ;ia转 ai
,["^([cghkrstz][h]?)ui$","$1iu"] ;iu转 ui
,["^([jlmnqx])iu$","$1ui"]	 ;ui转 iu
,["^([fghkswz][h]?)ei","$1ie"] ;ie转 ei
,["^([bcdfghklmnprstwz][h]?)en","$1ne"] ;ne转 en
,["^([bcdfghklmnprstwyz][h]?)an$","$1na"] ;na转 an
,["^([fmpy])ou$","$1uo"]] ;uo转 ou

Goto, _init_
;将caps写在这里防止无法使用
; CapsLock::
; 		suspend permit
; 		SendInput,{Escape}
; 	return

app:
	appmanager()
Return

test:
	MsgBox, test
Return

toggle_Pin:
	(Inputscheme = "pinyin") ? Inputscheme:= "xhsp" : Inputscheme:= "pinyin"
	if (Inputscheme = "pinyin"){
		fuzhuma:=0
		显示方案 :="全拼"
		; ToolTip, 已切换到全拼`,辅助码关闭
	}
	Else{
		; ToolTip, 已切换到小鹤双拼`,辅助码开启
		fuzhuma:=1
		显示方案 :="小鹤"
		gosub pinyinlei
	}
; goto pinyinlei
GuiControl, ZY:Text, 输入方案, %显示方案%
Return

;-------------------------------------------------------------------------------------------------------------------------------------------------
造词:
	Clipboard:=""
	SendInput, ^c
	sleep 300
	srf_create(RegExReplace(srf_all_Input,"i)[^a-z]"))
Return

pinyinlei:
	shurulei:="pinyin"
	GuiControl, 3:, _Inputscheme, %pinyinlist%
	If !(Inputscheme~="pinyin|sp$"){
		tvar:=""
		For Value,Key In ["decfre","fixedword","Imagine","Learning","Tofirst","Wordfrequency"] {
			tvar .= Yzimeini["Settings",key]
			GuiControl, 3:, %key%, % (Yzimeini["Settings",key]:=%key%:=(SubStr(Yzimeini["Settings","Settingsbak"], A_Index, 1)?1:0))
		}
		tvar .= Inputscheme, Inputscheme:=SubStr(Yzimeini["Settings","Settingsbak"], 7)?SubStr(Yzimeini["Settings","Settingsbak"], 7):"pinyin"
		Yzimeini["Settings","Settingsbak"]:=tvar
	}
	_Inputscheme:=pinyinec[Inputscheme]
	GuiControl, 3:ChooseString, _Inputscheme, %_Inputscheme%
	GuiControl, % "3:Disable" (Inputscheme="pinyin"), Showquanpin
	Loop 15
		GuiControl, % "3:Show" (A_Index<9), % "Button" (A_Index+15)
	GuiControl, 3:Text, Imagine, 联想
	GuiControl, 3:Text, Learning, 自学习
	Yzimeini.Settings["Inputscheme"]:=Inputscheme
return
RemoveToolTip:
	ToolTip
Return

指示条:
显示方案:=(Inputscheme ~= "xhsp") ? "小鹤" : "全拼"
中英模式 := (srf_mode = 0) ? "英" : "中"
辅助码:= (fuzhuma = 0) ? "关" : "开"
Gui, ZY:+Owner -Caption +AlwaysOnTop +HwndZYGui border -DPIScale
Gui, ZY:font, s11, 微软雅黑
Gui, ZY:Margin,6,4
Gui,ZY:Add, Picture, , .\tb.png
Gui, ZY:Add, Text, y0 v中英状态 g中英状态, %中英模式%
Gui, ZY:Add, Text, x+5, |
Gui, ZY:Add, Text, x+5 v输入方案 g输入方案, %显示方案%
Gui, ZY:Add, Text, x+5, |
Gui, ZY:Add, Text, x+5 v辅助码 g辅助码, %辅助码%
Gui, ZY:Add, Text, x+5, |
Gui, ZY:Add, Text, x+5 v卡键 g大哥求别卡,求别卡
Gui, ZY:show
return

中英状态:
srf_mode := (srf_mode = 0) ? 1 : 0
中英模式 := (srf_mode = 0) ? "英" : "中"
GuiControl, ZY:Text, 中英状态, %中英模式%
SetYzLogo(srf_mode, 1)
return

输入方案:
PostMessage, 0xA1, 2, Ahk_id %ZYGui%
if (A_GuiEvent = "DoubleClick"){
	(Inputscheme = "pinyin") ? Inputscheme:= "xhsp" : Inputscheme:= "pinyin"
	if (Inputscheme = "pinyin"){
		显示方案 :="全拼"
		fuzhuma:=0
		辅助码:="关"
	}
	Else{
		显示方案 :="小鹤"
		fuzhuma:=0
		辅助码:="关"
		gosub pinyinlei
	}
GuiControl, ZY:Text, 输入方案, %显示方案%
GuiControl, ZY:Text, 辅助码, %辅助码%
}
Return
辅助码:
PostMessage, 0xA1, 2, Ahk_id %ZYGui%
	if (A_GuiEvent = "DoubleClick"){
	(fuzhuma=0) ? fuzhuma:=1 : fuzhuma:=0
	if (fuzhuma=0){
		辅助码:="关"
		gosub pinyinlei
	}
	else{
		辅助码:="开"
	}
GuiControl, ZY:Text, 辅助码, %辅助码%
}
Return


!s::
space & s::
if (srf_inputing!=0)
{
gosub 清空编码
}
Else
{
Clipboard := ""
Send, +{Home}
Send, ^c
ClipWait, 1
Send, {Right}
if (RegExMatch(Clipboard, "(?<!\w)(\w+$)", 编码)) {
	Gosub, 固定中文
	编码长 := StrLen(编码)
	Send, % "{bs " 编码长 "}"
	srf_all_Input := 编码
} Else {
	Gosub, 固定中文
	编码长 := StrLen(srf_last_input[2,2])
	Send, % "{bs " 编码长 "}"
	srf_all_Input := srf_last_input[2,0]
}
	Begininput()
	Gosub srf_tooltip
}
return
固定中文:
	;确认输入法为中文
	SetYzLogo(srf_mode:=1, A_ThisLabel="srfSwitch")
	中英模式:="中"
	GuiControl, ZY:Text, 中英状态, %中英模式%
Return
上屏搜索:
	If srf_symbol[srf_all_Input] {
		RegExMatch(jichu_for_select_Array[localpos,2],"i)\{[a-z]+\}",Match)
		SendInput(StrReplace(jichu_for_select_Array[localpos,2],Match), SendDelaymode)
		If (Match)
			SendInput, %Match%
		Gosub srf_value_off
	} Else {
		If (dwxg&&ToolTipStyle=2&&localpos=1&&(jichu_for_select_Array[1,-2]=""&&jichu_for_select_Array[1,0]~="pinyin"&&StrLen(jichu_for_select_Array[1,2])>1)){
			If Showdwxgtip()
				Return
		}
		select_for_num(localpos)
	}
	sleep 200
	SendInput, {enter}
Return
简繁切换:
简繁切换()
Return
简繁切换(){
	Global
	Traditional := (Traditional = 0) ? 1 : 0
	valueindex:=Traditional?5:2
	Gosub houchuli
	Gosub srf_tooltip_fanye
	if Traditional = 0
	{
		ToolTip, 简体输入
		SetTimer, removeToolTip, -2000
	}
	Else
	{
		ToolTip, 繁体输入
		SetTimer, removeToolTip, -2000
	}
	Return
	}



辅助码候选:
	If RegExMatch(srf_all_Input_["tip"],"O).*[a-z][a-z]'([a-z]('?[a-z])?)$",fzm){
	tfzm:=StrReplace(fzm.Value[1],"'"), srf_all_Input:=RegExReplace(srf_all_Input, tfzm "$")
	jichu_for_select_Array:=pinyinmethod(srf_all_Input, Inputscheme), waitnum:=0
	Gosub houchuli
	Gosub srf_tooltip_fanye
	}
	Return

清空编码:
	If (!srf_inputing){
		SetYzLogo(srf_mode:=0, 1)
		SetTimer, ToolTipInputStatus, -10
	}
	Gosub srf_value_off
	If (srf_mode&&Escfg=3){
		SetYzLogo(srf_mode:=0, 1)
		SetTimer, ToolTipInputStatus, -10
	}
Return


^+F11:: ;修改dpi同时重启一下影子
if (A_ScreenDPI=144)
    Run SetDpi.exe 200
Else
    run SetDpi.exe 150
sleep 5000
Suspend
Gosub srfreload
Return


;防止卡键工具
大哥求别卡:
Gosub,到底谁卡了
Gosub, 大哥求你别卡了
Gosub, 重启保平安还不行嘛
Gosub,到底谁卡了
MsgBox,尝试向所有可能卡键的按键发送了弹起的指令如果没有成功的话就只能测试一下适用ahk管理器重启了
Return

到底谁卡了:
if GetKeyState("Shift")
    MsgBox At least one Shift key is down.
if GetKeyState("Ctrl")
    MsgBox At least one Ctrl key is down.
if GetKeyState("Alt")
    MsgBox At least one Alt key is down.
if GetKeyState("Capslock")
    MsgBox At least one Capslock key is down.
Return
大哥求你别卡了:
Send, {Shift up}
Send, {Ctrl Up}
Send, {CapsLock up}
Send, {Alt up}
send,{Space Up}
Return

; F4::
重启保平安还不行嘛:
DetectHiddenWindows On
if !(A_IsAdmin || InStr(DllCall("GetCommandLine", "str"), ".exe"" /r"))
	Run % "*RunAs " (s:=A_IsCompiled ? "" : A_AhkPath " /r ") """" A_ScriptFullPath """" (s ? "" : " /r")
selfPID := DllCall("GetCurrentProcessId")
	WinGet, id, List, ahk_class AutoHotkey
	Loop, %id% {
		this_id := id%A_Index%
		WinGet, this_pid, PID, ahk_id %this_id%
		if (this_pid != selfPID)
		{
			WinGetTitle, this_title, ahk_id %this_id%
				fPath := RegExReplace(this_title, " - AutoHotkey v[\d.]+$")
                PostMessage, 0x111, 65303,,, % fPath " ahk_pid " this_pid
		}
    }
    Return






给TA捐赠
共{{data.count}}人
人已捐赠
AHKV1

朴实无华且枯燥的ahk模板生成工具

2022-8-11 20:55:36

AHKV1

调用系统API异步播放MP3音乐

2022-8-12 20:47:06

6 条回复 A文章作者 M管理员
  1. 蜜獾哥

    我感觉影子候选框应该要重写了,目前的有些小问题

    • 而今迈步从头越

      👻原功能没啥动的想法,主要技术也不够,添加一些我个人喜欢的功能倒是比较适合我的水平哈哈

  2. 蜜獾哥

    这是要接盘的前奏?加油✧٩(ˊωˋ*)و✧

  3. 11010010

    QQ单独联系下我,有要事商量

  4. 11010010
    1河许人给您打赏了¥5
  5. 11010010

    感谢辛苦付出

个人中心
有新私信 私信列表
搜索