Ps和Ai有一个很烦人的问题就是在中文输入法状态下没法直接用快捷键,如b笔刷,i吸管,很破坏沉浸的状态。
现在我想到解决逻辑是这样的:在ps里需要输入中文的地方有两处,一处的图层重命名,一处是文字框。图层重命名可以通过检测光标解决,文字框目前实现了只有按T以后,才会进入中文输入状态,按esc回到快捷键状态(但通过其他方式回到快捷键状态就不太行)
目前这样的方案,基本可以在大部分情况下不需要关心输入状态了,但是仍然有一点毛病,就是如果要编辑一个已有的文字框的话,就需要多按一次t再删掉,有点蠢。
另外还没有把Ps和Ai的脚本和在一起。
用ahk实现如下,大家有没有什么更好的方案或者建议呢?
#NoTrayIcon
#NoEnv
#SingleInstance Force
#if (WinActive("ahk_class Photoshop")) and (not A_CaretX)
~t::
if (!is_typing) {
is_typing := true
sendinput, {text}t
sendinput, {Backspace}
tooltip("可以打字了,退出按Esc")
}
return
~Esc::
if (is_typing) {
is_typing := false
tooltip("可以用快捷键了")
}
return
#if
#if (!is_typing) and (WinActive("ahk_class Photoshop")) and (not A_CaretX)
:*:a::
sendinput, {text}a
return
:*:b::
SendInput, {text}b
return
:*:c::
SendInput, {text}c
return
:*:d::
SendInput, {text}d
return
:*:e::
SendInput, {text}e
return
:*:f::
SendInput, {text}f
return
:*:g::
SendInput, {text}g
return
:*:h::
SendInput, {text}h
return
:*:i::
SendInput, {text}i
return
:*:j::
SendInput, {text}j
return
:*:k::
SendInput, {text}k
return
:*:l::
SendInput, {text}l
return
:*:m::
SendInput, {text}m
return
:*:n::
SendInput, {text}n
return
:*:o::
SendInput, {text}o
return
:*:p::
SendInput, {text}p
return
:*:q::
SendInput, {text}q
return
:*:r::
SendInput, {text}r
return
:*:s::
SendInput, {text}s
return
:*:u::
SendInput, {text}u
return
:*:v::
SendInput, {text}v
return
:*:w::
SendInput, {text}w
return
:*:x::
SendInput, {text}x
return
:*:y::
SendInput, {text}y
return
:*:z::
SendInput, {text}z
return
#if
;::xyz::不受t影响的热字串
tooltip(text := "", time := 1500) {
Tooltip % text
if text != ""
SetTimer, % A_ThisFunc, % "-" time
}
在此处键入或粘贴代码
另一种方式,通过切中英输入法键盘,好处是可以直接看到目前的状态是中文还是英文
#NoTrayIcon
#NoEnv
#SingleInstance Force
;SwitchIME(04090409) ; 英语(美国) 美式键盘
;SwitchIME(00000804) ; 中文(中国) 简体中文-美式键盘
SwitchIME(dwLayout){
HKL:=DllCall("LoadKeyboardLayout", Str, dwLayout, UInt, 1)
ControlGetFocus,ctl,A
SendMessage,0x50,0,HKL,%ctl%,A
}
#if (WinActive("ahk_class Photoshop")) and (not A_CaretX)
~t::
if (!is_typing) {
is_typing := true
SwitchIME(00000804)
tooltip("可以打字了,退出按Esc")
}
return
~Esc::
if (is_typing) {
is_typing := false
SwitchIME(04090409)
tooltip("可以用快捷键了")
}
return
#if
#if (!is_typing) and (WinActive("ahk_class Photoshop")) and (not A_CaretX)
~a::
~b::
~c::
~d::
~e::
~f::
~g::
~h::
~i::
~j::
~k::
~l::
~m::
~n::
~o::
~p::
~q::
~r::
~s::
~u::
~v::
~w::
~x::
~y::
~z::
SwitchIME(04090409)
return
#if
;::xyz::不受t影响的热字串
tooltip(text := "", time := 1500) {
Tooltip % text
if text != ""
SetTimer, % A_ThisFunc, % "-" time
}