【 已解决】我在写在PS和AI内无视中文输入的方法 Topic is solved

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

AAHKUser
Posts: 21
Joined: 19 Jun 2020, 04:31

【 已解决】我在写在PS和AI内无视中文输入的方法

Post by AAHKUser » 03 Jan 2022, 04:27

在Windows下使用Ps 和Ai 有一个很困扰的问题,就是在中文输入法下按笔刷B,吸管i等快捷键会被输入法挡住,非常影响状态。我目前想到的办法是,在需要输入快捷键的时候自动切换到英文键盘,输入完成后,再自动切换回来,实现无感无影响操作。在修改图层名字、另存文件等地方,可以借助A_Caret来获取状态,实现中英文自动切换,但是在按T激活文字工具,A_Caret无法识别输入状态,所以需要用曲线救国的方式来实现,我想到了实现的逻辑,但是代码能力有限,被如何启动和禁用其他热键给难住了,写不出来,希望能得到各位的帮助,谢谢!

以下的代码中@fwejifjjwk2提供了很多帮助,非常感谢。

Code: Select all

#If WinActive("ahk_class Photoshop") and (not A_CaretX)  

:*:t::
SendInput, !+{0}t!+{1}
Disable CnOk        ; 此部分,不知道如何实现
Disable t

Gui, +AlwaysOnTop +Disabled -SysMenu +Owner  ; +Owner 避免显示任务栏按钮.
Gui, Add, 内容,, 当前是编辑模式/n按下面的按或esc以回到快捷键模式.
Gui, Add, Button, default, 写完了  ; ButtonOK(如果存在) 会在此按钮被按下时运行.
Gui Show, xCenter, Y0

GuiEscape:
GuiClose:
Button写完了:
Enable CnOk
Enable t
return

; 逻辑,按一次t,进入编辑模式,暂停所有字符串替换,并显示置顶box,再按t也没关系,要取消编辑模式,需要按esc,或者点击box。

CnOk:{

:*:v::
SendInput, !+{0}v!+{1}      ;设置-输入-高级键盘设置里,给切换英文键盘和中文键盘各一个单独的快捷键,!+{0}切换到英文键盘,!+{1}切换到中文键盘
return

:*:m::
SendInput, !+{0}m!+{1}
return

:*:w::
SendInput, !+{0}w!+{1}
return

:*:c::
SendInput, !+{0}c!+{1}
return

:*:i::
SendInput, !+{0}i!+{1}
return

:*:j::
SendInput, !+{0}j!+{1}
return

:*:w::
SendInput, !+{0}w!+{1}
return

:*:b::
SendInput, !+{0}b!+{1}
return

:*:s::
SendInput, !+{0}s!+{1}
return

:*:y::
SendInput, !+{0}y!+{1}
return

:*:e::
SendInput, !+{0}e!+{1}
return

:*:g::
SendInput, !+{0}g!+{1}
return

:*:o::
SendInput, !+{0}o!+{1}
return

:*:p::
SendInput, !+{0}p!+{1}
return

:*:a::
SendInput, !+{0}a!+{1}
return

:*:u::
SendInput, !+{0}u!+{1}
return

:*:k::
SendInput, !+{0}k!+{1}
return

:*:n::
SendInput, !+{0}n!+{1}
return

:*:h::
SendInput, !+{0}h!+{1}
return

:*:r::
SendInput, !+{0}r!+{1}
return

:*:z::
SendInput, !+{0}z!+{1}
return
}
#If
Last edited by AAHKUser on 10 Jan 2022, 07:48, edited 1 time in total.

AAHKUser
Posts: 21
Joined: 19 Jun 2020, 04:31

Re: 我在写在PS和AI内无视中文输入的方法,想大家求助:如何禁止一系列热键,并用另外一个热键恢复其他热键?

Post by AAHKUser » 09 Jan 2022, 01:35

目前是这样写的:

Code: Select all

#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
}

在大部分情况下没有问题了,但是在要编辑已有的文字的时候要多按一下t才行。

AAHKUser
Posts: 21
Joined: 19 Jun 2020, 04:31

Re: 我在写在PS和AI内无视中文输入的方法,想大家求助:如何禁止一系列热键,并用另外一个热键恢复其他热键?

Post by AAHKUser » 09 Jan 2022, 01:47

还有一种是通过切换中英键盘实现,这样的好处是可以看到目前的状态。

Code: Select all

#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
}



AAHKUser
Posts: 21
Joined: 19 Jun 2020, 04:31

Re: 我在写在PS和AI内无视中文输入的方法,想大家求助:如何禁止一系列热键,并用另外一个热键恢复其他热键?  Topic is solved

Post by AAHKUser » 10 Jan 2022, 07:46

最后感觉最完美无感的方法:用图片识别左上角的图片,正在编辑文字的时候的图标是不同的

Code: Select all

#if (WinActive("ahk_class Photoshop")) and (not A_CaretX)  

SetTimer, isT, 150
return

isT:
ImageSearch, FoundX, FoundY, 0, 0, 150, 150, %A_ScriptDir%\PSt.png

if (ErrorLevel = 2) {       ; 没找到
    MsgBox 2.出错了
	Return
	}
else if (ErrorLevel = 1){ ; 没找到,在快捷键模式下
	is_typing := True
	Return
	}
else if (ErrorLevel = 0) {    ; 找到了,在中文模式下
	is_typing := False
	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::
t::
u::
v::
w::
x::
y::
z::
sendinput, {text}%A_ThisHotkey%
Return

#if

Post Reply

Return to “请求帮助”