1、我以打开桌面上的“我的电脑”为例。打开“按键精灵”软件,新建一个空白脚本。
2、回到桌面,按PRINTSCREEN键,再回到“按键精灵”。
3、点击右侧的窗口的“图像”按钮。
4、这个时候,在我的电脑图标拖动鼠标,在d出的菜单中选择“位图另存为”。
5、在“位图另存为”窗口,选择文件保存的位置。
6、在“颜色/图形命令”中选择“区域找图”。
7、点击路径按钮,选择刚刚保存的图片。
8、设置好查找图片的区域。区域越小查找速度越快,越准确。
9、再点击“插入”按钮。
10、在“鼠标命令”下点击“鼠标移到边的”插入“按钮。
11、再将代码修改成MoveTo intX, intY。
12、再在“鼠标命令”下”插入“”左键双击“。
13、为了减少CPU占用要适当在代码间添加代码延时。
14、最后点击”调试“按钮。通过默认的F10启动键进行测试。
15、如果没有问题的话可以导出EXE文件。这个方法跟上一次的方法有所不同的是有的时候会查找失败,你可以将图片相似度调小一点即可。
首先,打开按键精灵,新建一个脚本
然后,点击窗口上方的抓抓功能按钮。
在抓抓界面点击图像标签,切换到图像窗口
点击截图按钮,抓抓工具会自动抓取全屏图片,图片不包含当前抓抓窗口。
可以看到截图图片已经被载入到软件中了
我们再图像中框选出要找的图片,右键 保存,注意根据需要,尽量截取得有区分度。
然后,在脚本编辑界面,点击附件图标。
将之前截图的小图片导入到附件中。
在脚本界面找到右侧的颜色图形命令,选择区域找图命令。
设置我们要查找的图片,和查找的屏幕区域.然后插入命令
为了直观显示有没找到图片,我们加入鼠标移动和点击命令
调试下看一下效果吧,可以看到win7的开始菜单被打开了
「按键精灵安卓版」关于“多线程”的理解我平时写脚本基本上是不用多线程的,一是我写长期运行的脚本不多,没有多线程的需求,二是多线程容易造成脚本卡顿。
当然我不用不代表别人也不用,最近就看到群里有一些朋友在问关于多线程的问题,确实对于新手朋友来说容易出问题。
下面就说一下我对于多线程的一些理解:
(一)什么是主线程、什么是子线程
先说一个误区:相信很多新手朋友会觉得主线程是这样的:
Function 主程序()
//这里面是我的脚本主要的功能 *** 作
End Function
这明显是错误的,在多线程脚本中,区分主线程的方法是看它是不是不在function或者sub内部,只要没在函数内部的就是主线程。至于说取个主程序或者主线程这类名字,和它是不是主线程没有一点关系。
上面说的是主线程,再来说说子线程是什么?
只要用Thread.Start启动的都是子线程。比如:
Thread.Start 主程序
Function 主程序()
//这里面是我的脚本主要的功能 *** 作
End Function
当然没有启动的函数就不算了。
(二)子线程可以有多少个?
从语法角度来说没有限制,你写多少个都可以,但是实际应用中基本上也就一到两个,不会再多了,否则脚本会卡顿,甚至直接崩溃。
(三)我只有一个函数,可不可以启动多个子线程?
可以,一个函数启动两次,就会有两个子线程。比如:
Thread.Start 主程序
Thread.Start 主程序
Function 主程序()
//这里面是我的脚本主要的功能 *** 作
End Function
这段代码运行以后,脚本是有两个主程序代码同时运行。
通常我们不会这样用,为了防止一个函数被反复使用,会把启动线程赋值给一个变量。
dim h=Thread.Start(主程序)
赋值给一个变量的好处是啥呢?
如果想要停止某个线程的时候,直接用停止线程命令停止对应的变量。
Thread.Stop (h)
(四)子线程能不能关闭或者启动别的子线程?
不能,控制子线程的开启和关闭只能是主线程。如果想要一个子线程控制另外一个子线程,就需要借助共享变量把“控制信号”先发给主线程,然后在让主线程控制另外一个子线程关闭或者开启。
(五)多线程的脚本可以使用全局变量吗?
不可以,有些朋友写了一个单线程的脚本,测试也没问题,后来觉得脚本运行久了可能会出现卡顿的现象,于是想要加个检测卡顿的子线程。可是原本正常运行的脚本没有做任何变化,变成多线程以后就不能用了。
这是因为原本脚本中可能用到全局变量了,变成多线程以后,全局变量失效导致脚本错误。
什么是按键的全局变量?
Dim m=1
Call 函数()
Function 函数()
TracePrint m
End Function
上面这段代码中变量m是在函数外面定义的,这个就是按键的全局变量。同理还有一个局部变量,就是在函数里面定义的变量。
为了减少上面说到的问题,我们尽量定义局部变量。也就是一个函数中用到所有变量尽量在它内容部定义。
(六)子线程中可以调用函数吗?
可以,但是要注意写法,下面说几个多线程中可能会写错的地方。
①启动子线程的时候代码中,子线程名称后面不能有括号
Thread.Start(主程序) //正确写法
Thread.Start(主程序()) //错误写法
②启动带参数的子线程
Thread.Start(主程序(参数1,参数2)) //错误写法
Thread.Start(主程序,参数1,参数2) //正确写法
③子程序中调用函数
Call 函数 //错误写法
Call 函数() //正确写法
(七)哪些地方可能会用到多线程
我们以双线程为例,一般来说主线程会做非 *** 作性的功能,子线程做具体 *** 作功能。
非 *** 作性的功能,比如:
①检测卡顿
②实时屏幕显示内容
③心跳检测
这些 *** 作有一个共同的特点,不影响界面上原有的其他 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)