上回对读者的留言进行了答复,外加向读者挑战。
vampire 在得到了颜色神偷之后,高兴得不得了。今天他又来找掌柜我鸟。
vampire:如何让鼠标移动一像素?
sfufoet:干嘛用的?
vampire:有时候在 PS 处理图片的时需要嘛。比如选择一个 2 × 2 像素的区域。人工移动鼠标根本做不到。
这个好办。我们可以写一个这样的脚本。本文涉及到的代码来自这里:
LEFT::
MouseGetPos, x, y
; 获得鼠标位置,并把获得的 X,Y 坐标分别赋值给 x,y
Mousemove, x-1, y
; 移动鼠标,保持 y 坐标不变,向左移动一个像素。
ReturnUP::
MouseGetPos, x, y
Mousemove, x, y-1
ReturnRIGHT::
MouseGetPos, x, y
Mousemove, x+1, y
ReturnDOWN::
MouseGetPos, x, y
Mousemove, x, y+1
Return
运行脚本后,就可以用上下左右箭头来控制鼠标的移动了。上面的代码好啰嗦哦,对于追求代码之美的程序员来说,下面的代码多完美啊。
Left:: MouseMove, -1, 0,, R
; MouseMove 的完整语法是:
; MouseMove, X, Y [, Speed, R]
; X – X 坐标;Y – Y 坐标;[ ] 里面的是可选参数,Speed – 移动的速度,其范围是 0 – 100,不填写任何数字的话,参数默认是 0 ,最快速移动;最后的 R 表示前面的参数 X、Y 是相对鼠标当前位置,如果不带这个参数, X、Y 就表示屏幕上的坐标。讲起来很啰嗦,大家比较上面的代码就明白。
Up:: MouseMove, 0, -1,, R
Right:: MouseMove, 1, 0,, R
Down:: MouseMove, 0, 1,, R
update:本系列故事纯属虚构,请勿对号入座。
沙发。。。
难道他不知道世界上有放大这种功能么?
这里还能抢沙发 – -!
支持AHK~
@柠檬 ,那只是举个例子啊,又不是非让你这么用~
嗯… 这个例子确实用处不大…
“比如选择一个 2 × 2 像素的区域。人工移动鼠标根本做不到。”
完全做得到。
的确不够实用,这次是想 show 一下 AHK 代码的简洁美。
一像素一像素移动鼠标的最强用法是:验证码识别,传说中的功能。嘿嘿~
我的天啦- -~~~ 连载到这么长了
宁愿使用API的GetCursorPos和SetCursorPos……
AHK的功能太强了,接近一个完善的程序开发语言,所以总有这样的感觉:学习时间可能不短,还不如学一门语言。
晕,啥时候还加一个Logo啊?
@李二嫂,昨晚做的,喜欢么?因为本文不知道配什么图好。煎蛋煎多了,习惯配图。
ahk 的确强大简洁,做 Gui 方面个人觉得不够友好。
学其他语言的话,你想实现一个小小的 AHK 效果都会累死你。比如 java。
晕,楼上的没事做了吧,实现这功能用java。你怎么不说用AHK去写J2EE程序试试?
To 火山:
Logo不错啊~真有点Web 2.0风格呢~
今年7、8月份的时候,有过一阵子AHK,那时是用来做软件的GUI测试的,先录制,再修改,让他输入一些随机数据,确实很方便。至于其它的,就没怎么弄过了。
@李二嫂,我很好奇你这个 ID,i 服了 u。
版聊了。orz~
To 火山:
一小般啦~不过前天玩音速时遇到个克星,他叫“我是李二哥”,当时这个无奈啊~
怎样让代码只在某程序中运行?如我想让下面的只在命令行窗口起作用,其它地方则无效—–
^c::
Send, {Enter}
return
按数学原理,纵坐标-1,坐标点不是向下吗?
怎么这里的y-1是往上走了??
@tireless,这样写:
^c::
WinGetActiveTitle, Title
IfInString, Title, cmd.exe
Send, {Enter}
return
屏幕上的坐标是以屏幕左上角为原点的。然后向左、向下递增。
我是来声明下我不是白痴的
@tireless,试试这样~
#IfWinActive ahk_class ConsoleWindowClass
^c::Send,dir{Enter}
return
@sfufoet,(*^__^*) 嘻嘻……你的代码无效
@helfee,有用。这下可以在该死的命令提示符下使用^c ^v ^a 了
thx sfufoet&helfee
[…] [from darknew] Applications Inn-AHK 快餐店[9] 之 让鼠标移动一像素 […]
[…] AHK 快餐店[9] 之 让鼠标移动一像素 10-30-2007 […]
@tireless,orz,我是根据标题含有 cmd.exe 判断的,helfee 是根据窗口类来判断的。我这样写不够通用。他那样写绝对保险。
hotkey,^left ,a_left
hotkey,^right ,a_right
hotkey,^up ,a_up
hotkey,^down ,a_down
hotkey,^1,init
init:
x := 0
y := 0
tooltip,
return
a_left:
mousemove,-1,0,0,r
x--
tooltip, X:%x% Y:%y%
return
a_right:
mousemove,1,0,0,r
x++
tooltip, X:%x% Y:%y%
return
a_up:
mousemove,0,-1,0,r
y--
tooltip, X:%x% Y:%y%
return
a_down:
mousemove,0,1,0,r
y++
tooltip, X:%x% Y:%y%
return
这是我写着玩的, ctrl + 方向 控制鼠标,下图是用这个工具画的 😀
http://dofy.net/myfiles/autohotkey_test.png
有意思, 研究中, 还不知道怎么在一个自定义函数中调用另一个自定义函数 🙁
@tireless: cmd 窗口中 ctrl+c 是终止, 建议定义其他热键做复制粘贴
@tireless: 偶写了一段, 在cmd窗口中用 win+s 开始选择, win+c 复制, win+v 粘贴, win+q 退出
;—————————————-
#ifWinActive,ahk_class ConsoleWindowClass
beginSelect := false
#s::
if(beginSelect == false){
click right, 10, 50
send k
beginSelect := true
}
return
#c::
if(beginSelect == true){
click right, 10, 50
beginSelect := false
}
return
#v::
click right, 10, 50
send p
;send %clipboard%
; 曾尝试剪贴板, 速度不如右键菜单这个快
return
#q::
send ^c exit {enter}
return
;—————————————-
@dofy
第一种:
Gosub, Label1
MsgBox, The Label1 subroutine has returned (it is finished).
return
Label1:
MsgBox, The Label1 subroutine is now running.
return
第二种:
Goto, MyLabel
…
MyLabel:
Sleep, 100
…
[…] sfufoet: @dofy 第一种: Gosub, Label1 MsgBox, The… […]
@sfufoet 多谢老兄 😀
另外, autohotkey 是不是有多种语法啊? 我找到另外的解决方案, 感觉不错, 而且优化了一下鼠标移动, hoho 🙂 http://blog.dofy.net/?p=479
这两种语法是不一样的,第一种是运行一个代码片段,最后又会返回。第二种是跳到代码片段那里去执行。
其实默认参数是1!!你调到0就知道了