【教程】批处理第三方Cmos使用教程
bat吧
全部回复
仅看楼主
level 14
Iona💧 楼主
1L百度 觉得字多不想看请绕道~~~
首先目录,禁止插楼。。。
1L敬百度
2L Cmos简介
3L以后 讲解
2012年02月05日 07点02分 1
level 14
Iona💧 楼主
cmos.exe是一个批处理第三方,目前最新版本是V3.1,我的网盘里即是最新,这个版本bug少,强烈推荐使用。
cmos可以捕捉鼠标点击位置,还可以移动光标。当然,移动光标的功能很多第三方都有,如果只用这个功能cmos明显逊色——因为cmos移动光标的速度不快。
要注意的是,在V3.1版本中作者加入了输入cmos显示帮助信息,我们先从这里讲起吧。
2012年02月05日 07点02分 2
level 14
Iona💧 楼主
首先,我们看看它的帮助信息。
Cmos Tool
Ver 3.1 (VC++) By Defanive
Cmos c t l [X Y]
c Click Mode. 0-Left Button, 1-Right Button
t Stop Time(sec). t<0 - No Stop Time
l Clip Mouse. 0-True, Other-False
X Y Return to X,Y
这个帮助信息明显太笼统了,没法让我们明白,也不全面。但我们至少可以知道,cmos的参数格式:
Cmos c t l x y
这个x y参数可以省略,所以作者使用[]括起来。我们先从C参数开始看。
2012年02月05日 07点02分 3
level 14
Iona💧 楼主
cmos c t l x y:第一个参数,c
这个c是干嘛的呢?作者的帮助信息:点击模式。0左键,1右键。
这个很难理解吧?其实并不难。我们先看看,这个c的参数到底怎么用。请在批处理里输入:
@echo off
cmos 0 -1 1
::后面参数以后讲解
pause
这下,你明白了:0表示单击左键后停止获取,并把光标移到单击的位置,pause命令很好地证明了这一点。举一反三,1和0不同的只是1为按右键停止。
另外,还有一个参数2,作者没有介绍。c为2,单击鼠标中键后停止。
2012年02月05日 07点02分 4
level 14
Iona💧 楼主
cmos c t l x y:第二个参数,t
首先,多练习c参数。当你觉得熟练以后,可以继续了~~~
有人可能已经发现:当c大于2时,鼠标无论怎么操作都不会停止,这是怎么回事呢?
这下,就该t出马了。作者介绍:停止时间(秒)。t<0时不停止。
明白了吗?先看代码。
@echo off
cmos 3 5 1
pause
你会发现,无论怎么点鼠标,都不会停止,而是五秒后自动停止。知道t的作用了吧?
我相信,练习出真才,所以多尝试总是好的。
而如果c参数小于3,也就是像LS讲的那样,会怎样?
这下,无论点击鼠标,还是等待5秒,都会停止。
明白了吧?下面讲最简单的l参数。
2012年02月05日 07点02分 5
level 14
Iona💧 楼主
cmos c t l x y:第三个参数,l
大家已经发现,以上的代码l都是1,那么为0怎么样呢?作者给出解释:鼠标控制。0打开,其它关闭。
这话怎么说?试试吧。
@echo off
cmos 0 -1 0
pause
哇塞,鼠标被困住,出不了cmd窗口了!这也正是cmos的独特作用:除非关掉cmd,否则必须点击后才能使用其它程序。
所以,为了避免给用户造成麻烦,在一般情况下,都不要把l设为0。
2012年02月05日 08点02分 6
level 14
Iona💧 楼主
cmos c t l x y:最后的参数,x和y
先看作者解释:跳转到x y。
其实,这就是在停止后跳转光标到x,y,x为列数,y为行数。注意,这句命令最好这样理解:跳转到离顶部y行,离左边x列的地方。也就是说,cmos 0 0 1 2 5其实会跳转到第6行第3列,以后写P时可要注意哦。
当t为0时,这句命令就是跳转,没有任何等待,所以也有直接改变输出位置的作用。如果不规定x和y,就会跳转到用户点击的地方。
所有参数讲完了,多尝试吧。现在讲最难的获取位置。
2012年02月05日 08点02分 7
level 14
Iona💧 楼主
获取位置怎么获取呢?cmos结束后,将会返回一个errorlevel值,没错,就是它了!
先来看。
@echo off
cmos 0 -1 1
echo.%errorlevel%
pause
现在,看到了一个奇怪的数字,对吧?现在,仔细看看,千位和万位,不就是你点击位置所在的列吗?而百位、十位和个位,就是你点击位置所在的行。所以,获取位置可以这样写:
cmos 0 -1 1
set /a dj=%errorlevel%
set /a dja=%dj:~0,-3%
set /a djb=%dj%-1000*%dja%
::这些变量名随意
这样,变量djb即为点击位置所在行,dja则为点击位置所在列,这不就简单了吗?直接用就行了。
但是,如果用户不是使用鼠标点击来停止,而是时间到了而停止,返回值就不一样了。
如果是时间到了而停止,返回的errorlevel便会为负值!但是,其绝对值是一样的,也就是说他们除了符号没有差别。所以,可以用简单的if判断它是否小于零,便可以知道是时间到了自动停止,还是用户按了鼠标停止。接着,set /a dj=-%dj%,便可以再次套用刚刚那段代码了。如:
cmos 0 10 1
set /a dj=%errorlevel%
set /a dj=-%dj%
set /a dja=%dj:~0,-3%
set /a djb=%dj%-1000*%dja%
好了,讲解结束!多练习吧。

2012年02月05日 08点02分 8
level 14
Iona💧 楼主
码字好累啊。。。以下可以回复了,有问题问我就行。。。
2012年02月05日 08点02分 9
level 13
前排
火速留名!
2012年02月05日 08点02分 10
level 14
Iona💧 楼主
恩那。。。
2012年02月05日 08点02分 12
level 12
我终于会了,感谢
2012年02月05日 08点02分 15
level 12
对了,这个是啥意思?
if %djb%==2 if %dja% gtr 20 (if %dja% lss 23 goto sysexit)
if %djb%==9 if %dja% gtr 14 (if %dja% lss 21 goto sysnext)
@cyxgg

2012年02月05日 08点02分 16
level 14
Iona💧 楼主
我先确定djb=9,也就是在第九行,然后列数如果大于14小于21就执行操作。
2012年02月05日 09点02分 17
level 12
明白了[Love][Kiss]
2012年02月05日 09点02分 18
level 1
wbat更强悍
2012年02月05日 10点02分 19
在哪下载,能发我邮箱吗? [email protected]
2013年08月29日 09点08分
level 12
@cyxgg
我刚发现,如果在CMD中输入CMOS 0 -1 1(前提,CMOS在C:\···\system32目录下),然后把鼠标移出CMD窗口,按下回车,CMD中的光标会和实际鼠标位置不一样哦,而且如果不限定鼠标,鼠标在移出CMD窗口时,光标还是会错位的,所以还是这样吧
CMOS 0 -1 0
限定上比较好
2012年02月05日 14点02分 20
level 1
cmos建议用b版的,批处理之家里面有,那个感觉BUG比较少。晚点我会重新编译一次,压缩到5KB一下。至于帮助是E文,是前辈建议的,让国外的爱好者也能基本看懂。不错的教程,支持
2012年02月05日 18点02分 21
level 14
Iona💧 楼主
作者来了,呃。。。
2012年02月06日 08点02分 22
level 12
cmos 0 -1 1
set /a dja=%errorlevel%
set /a dja=%dj:~0,-3%
set /a djb=%dj%-1000*%dja%
if %djb%==2 if %dja% gtr 20 (if %dja% lss 23 goto sysexit)
if %djb%==9 if %dja% gtr 14 (if %dja% lss 21 goto sysnext)
:exit
exit
这段为什么点击后没有反应而是定位光标? @cyxgg 
2012年02月06日 09点02分 23
1 2 3 尾页