我收到两个奇怪的警告。
wx
,wy
,ww
,wh
。ELSE
,没有匹配的IF
”,指的是两个if-else
语句。这是整个脚本。
#NoEnv
#Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
screen_scaling_factor := A_ScreenDPI/96
^p::mouse_move_win(200,300)
mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:=""){
wingetpos,wx,wy,ww,wh,a
global screen_scaling_factor
if horizontal="left"{
x1 := wx + x * screen_scaling_factor
}else{
x1 := wx + ww - x * screen_scaling_factor
}
if vertical="top"{
y1 := wy + y * screen_scaling_factor
}else{
y1 := wy + wh - y * screen_scaling_factor
}
DllCall("SetCursorPos", int, x1, int, y1)
}
但是,当我添加local
作为启用“局部力模式”的功能的第一行时,第一条警告消失了。
当我在if条件中添加括号或移除其后的花括号时,如下所示,第二个警告消失了。
if (horizontal="left"){
x1 := wx + x * screen_scaling_factor
}else{
x1 := wx + ww - x * screen_scaling_factor
}
或
if horizontal="left"
x1 := wx + x * screen_scaling_factor
else
x1 := wx + ww - x * screen_scaling_factor
知道为什么会这样吗?
答案 0 :(得分:1)
如果要使用旧式if语句(请不要),则不能从与if语句相同的行开始括号。您必须将起始括号{
放下一行。
但是请只使用现代表达风格的if语句,如下所示:
mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:=""){
wingetpos,wx,wy,ww,wh,a
global screen_scaling_factor
if (horizontal="left"){
x1 := wx + x * screen_scaling_factor
}else{
x1 := wx + ww - x * screen_scaling_factor
}
if (vertical="top"){
y1 := wy + y * screen_scaling_factor
}else{
y1 := wy + wh - y * screen_scaling_factor
}
DllCall("SetCursorPos", int, x1, int, y1)
}
另外,我个人认为这种支撑风格令人恶心,但这当然只是个人喜好哈哈。
但是,以防万一,您可以在if / else语句中省略大括号中的括号:
mouse_move_win(x,y,horizontal:="left",vertical:="top",mouse_click:="")
{
wingetpos,wx,wy,ww,wh,a
global screen_scaling_factor
if (horizontal="left")
x1 := wx + x * screen_scaling_factor
else
x1 := wx + ww - x * screen_scaling_factor
if (vertical="top")
y1 := wy + y * screen_scaling_factor
else
y1 := wy + wh - y * screen_scaling_factor
DllCall("SetCursorPos", int, x1, int, y1)
}
编辑:哦,看来您已编辑您的帖子。在您进行编辑之前,我已经开始输入该文字,但是后来我不得不去做一些事情。
无论如何,我的回答应该可以回答您的问题。
答案 1 :(得分:0)
使用mouse_move _win
(200,300)代替mouse_move(200,300)
当定义horizontal:=“ left”时,它表示Left是其默认值,这意味着如果未提供任何值,则假定它为left。所以
如果horizontal = left
不必要。
因此,我想您的代码应该与if和else组合相反。
^p::mouse_move_win(200, 300)
mouse_move_win(x, y, horizontal:="left", vertical:="top", mouse_click:="") {
wingetpos,wx,wy,ww,wh,a
global screen_scaling_factor
if horizontal=right
x1 := wx + ww - x * screen_scaling_factor
else
x1 := wx + x * screen_scaling_factor
if vertical=bottom
y1 := wy + wh - y * screen_scaling_factor
else
y1 := wy + y * screen_scaling_factor
DllCall("SetCursorPos", int, x1, int, y1)
}
这对我来说很完美