- 〖教程达人〗
- 1177301
- 19467
- 14
- 1382 朵
- 23747 个
- -27 个
- 114120
- 2012-06-11
|
1#
t
T
发表于 2014-07-09 15:30
|
|只看楼主
本帖最后由 兄弟工程师05 于 2014-7-9 18:05 编辑 本期主题:如何用脚本编写一个闹钟程序。 题材缘由:由于近期(省略100字,不是球迷,不看球赛)所以常常睡过头,至此写了个脚本来提醒自己起床上班,完成时我随手给取了个名字Niko,大家无视吧。 重点需知:有的小朋友可能会说,手机有自带闹钟啊,但作为一个资深上班族来告诉你,不管什么样的闹钟,迟早会被自己无视。 优缺对比:优点:可以通过判断网络连接名称确认手机真实位置,来控制是否无限制的闹铃下去。 首先,把硬件停止脚本功能关闭,只由触屏展开功能浮窗的方式来启动或关闭,这样可以很大程度杜绝还未完全清醒的自己把闹钟一拍继续梦游。 其二,脚本只要未被正确的方式结束,则坚挺着执行代码命令,一直播放音乐来制造噪音,为了安全起见,在播放音乐时如判断到屏幕被关闭或画面变动,则等待一分钟后继续吵闹!不然就循环播放音乐。(啦啦啦德玛西亚,啦啦啦蛮王开大……) 注:脚本播放音乐时,脚本被停止,音乐是无法被关闭的,所以作为闹铃的音乐建议不超过15秒,以免某些暴躁的小朋友把自家手机砸飞…… | 缺点:昨晚睡前测试,手机运行脚本待机到早上9点报警,直至我在9点26分完全清醒关闭脚本,大约把电量消耗掉了接近20%,看来我又得换个方式来解决这个严峻的问题了。 |
进入正题,脚本思路:通过获取手机系统时间进行判断,当到达上班时间后,通过判断手机的WLAN连接名称来确认我是在家里还是已外出或到公司;如还在家里则死命的播放音乐(德玛西亚!)来强迫自己清醒,脚本设定判断在播放音乐时如果画面被关闭(屏幕关闭或离开WLAN界面,则休息一分钟后,继续播放。 源码展示:由于这脚本属于个人手机专用,所以无需考虑多分辨率比例换算问题,模块中我去除了“换算比例”,此外源码中的多点点阵特征信息是属于我个人手机主题的图像特征,不适用于他人。如果你们有兴趣,可以复制回家,理解我代码框架思路后,自行补充自己手机的图像特征信息替换上即可。 相关资料: 关于图色判断相关资料说明 从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》 关于如何把手机图片导入PC按键抓抓来获取多点找色的点阵特征信息 从零学起之安卓篇《如何简单获取手机画面导入PC按键抓抓》 关于……(自己看标题) 从零学起之安卓篇《独立APK小精灵制作流程介绍》 【源码抢鲜看,看完点个赞!】UI源码部分:- 界面1:
- {
- 水平布局:
- {
- 输入框:
- {
- 注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"小时",
- 提示内容:"提示用户应该输入什么内容",
- 初始文本:"9",
- 仅输入数字:true,
- 文字大小:0,
- 最大输入长度:0,
- 高度:0,
- 宽度:100
- },
- 文字框:
- {
- 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"文字框1",
- 显示内容:"时",
- 文字大小:0,
- 高度:0,
- 宽度:0
- },
- },
- 水平布局:
- {
- 输入框:
- {
- 注释:"初始文本、文字大小、最大输入长度、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"分钟",
- 提示内容:"提示用户应该输入什么内容",
- 初始文本:"15",
- 仅输入数字:true,
- 文字大小:0,
- 最大输入长度:0,
- 高度:0,
- 宽度:100
- },
- 文字框:
- {
- 注释:"文字大小、高度、宽度是可选属性,如需使用默认值,可保持值为0或直接删除此属性",
- 名称:"文字框1",
- 显示内容:"分",
- 文字大小:0,
- 高度:0,
- 宽度:0
- },
- },
- }
复制代码 脚本源码部分:- /////////////////////////////////////////////////////////////////////////////
- '定义一些常用变量:IntX IntY 找色模块返回值用,win_x win_y 屏幕分辨率用,win_w win_h 分辨率比例用
- Dim IntX,IntY
- Dim win_x,win_y
- win_x = GetScreenX()
- win_y = GetScreenY()
- TracePrint "当前分辨率:" & win_x & "*" & win_y
- SetControlBarPos 0.5
- Randomize
- /////////////////////////////////////////////////////////////////////////////
- '定义一些常用变量,加刮号是为了定义变量类型为数组类型
- Dim 锁屏图标(),解锁坐标(),设置图标(),全部设置(),WLAN选项(),WLAN界面(),公司网络(),家里网络()
- /////////////////////////////////////////////////////////////////////////////
- 锁屏图标=Array(360,621,"FFFA43","0|34|FFFA43,13|611|FFFA43,-62|598|FFFA43",0.9)
- 解锁坐标=Array(100,100,300,100)
- 设置图标=Array(52,850,"FFFFA7","105|0|FFFFA1,64|135|FFFFFF",0.9)
- 全部设置=Array(494,83,"CBC6B4","0|11|CCC7B4,0|17|CAC6B4,35|2|CCC7B4,64|21|C8C4B4,90|9|CBC7B4",0.9)
- WLAN选项=Array(80,502,"B1AFAB","0|8|B1AFAB,0|16|B1AFAB,0|24|B1AFAB,139|15|D8D7D5",0.9)
- WLAN界面=Array(36,99,"DDDBD1","66|-11|FFFFFF,88|12|FFFFFF,120|-11|FFFFFF,159|13|FFFFFF",0.9)
- 公司网络=Array(75,414,"C55F20","21|0|C55F20,-12|16|C55F20,2|16|C55F20,9|16|C55F20,23|16|C55F20,15|25|C55F20,37|10|3A372B,37|13|C55F20,37|16|3C382C,81|12|C55F20,97|9|C55F20,97|23|C55F20,101|17|3A372B,5|51|9D9C96",0.9)
- 家里网络=Array(73,416,"C55F20","-9|12|C55F20,1|23|C55F20,17|0|C55F20,17|22|C55F20,30|22|C55F20,39|14|C55F20,118|14|C55F20,141|7|C55F20,188|11|C55F20,204|11|C55F20,232|11|C55F20,246|15|C55F20,246|19|3C382C",0.9)
- /////////////////////////////////////////////////////////////////////////////
- '获取UI界面设置参数
- Dim ui_str,txt_hour,txt_minute
- ui_str="Niko,上班时间:"
- txt_hour=Int(ReadUIConfig("小时",9))
- txt_minute=Int(ReadUIConfig("分钟",10))
- ShowMessage ui_str & txt_hour & "时" & txt_minute & "分"
- //Delay 3000
- Dim txt_path
- txt_path="/sdcard/lolBoxCache/lolBoxSound/commSoundNames/Common_啦啦啦德玛西亚"
- /////////////////////////////////////////////////////////////////////////////
- '调试区
- //TracePrint Join(设置图标,",")
- //KeepCapture
- //TracePrint 判断(设置图标)
- //TracePrint IntX&"|"&IntY
- //ReleaseCapture
- //EndScript
- /////////////////////////////////////////////////////////////////////////////
- '主线循环
- Do
- Call 上班时间(txt_hour,txt_minute)
- KeepCapture
- If 判断(锁屏图标)=True Then
- TracePrint "解锁"
- KeyPress "Power"
- Delay 1000
- Call 触屏划动(解锁坐标)
- ElseIf 判断点击延时消失(设置图标,3)=True Then
- ElseIf 判断点击延时消失(全部设置,3)=True Then
- TracePrint "全部设置"
- ElseIf 判断点击延时消失(WLAN选项,3)=True Then
- TracePrint "WLAN选项"
- ElseIf 判断(WLAN界面)=True Then
- TracePrint "WLAN界面"
- If 判断(公司网络)=True Then
- TracePrint "公司网络"
- ElseIf 判断(家里网络)=True Then
- TracePrint "家里网络"
- Call 制造噪音(txt_path)
- End If
- Else
- KeyPress "Home"
- TracePrint "未知界面"
- End If
- Delay 1000 '循环中适当的延时给予CPU响应时间,使脚本更为流畅
- Loop
- '功能模块
- Sub 制造噪音(路径)
- Dim i
- '这里因为我手机里正好有三个音乐文件:Common_啦啦啦德玛西亚1.mp3,Common_啦啦啦德玛西亚2.mp3,Common_啦啦啦德玛西亚3.mp3,所以这里用了点随机数,来随机播放音乐。
- PlaySound 路径 & Int(3*Rnd()+1) & ".mp3"
- For i=15 To 0 Step -1
- ShowMessage "该上班了!要迟到了!快起床啦![" & i & "]"
- Delay 1000
- '中途判断到画面变动,则休息一分钟后继续闹铃。
- KeepCapture
- If 判断(家里网络)=False Then
- For i=60 To 0 Step -1
- ShowMessage "倒计" & i & "秒后继续报警!"
- Delay 1000
- Next
- Exit For
- End If
- Next
- End Sub
- '功能模块
- Sub 上班时间(时,分)
- Dim str,arr()
- Do
- str=Now()
- ShowMessage "Niko:" & str
- arr=Split(str," ")
- arr=Split(arr(3),":")
- If Int(arr(0)) >= 时 Then If Int(arr(1)) >= 分 Then Exit Do
- Delay 1000
- Loop
- End Sub
- /////////////////////////////////////////////////////////////////////////////
- '固定模块
- Sub 返回桌面结束脚本(提示内容)
- ShowMessage 提示内容 & ",脚本停止!"
- Delay 3000
- KeyPress "Home"
- EndScript
- End Sub
- Sub 触屏划动(数组特征)
- Dim arr(),n
- arr=数组特征
- n=Int(10*Rnd())
- TouchDown arr(0)+n,arr(1)+n,1
- TouchMove arr(2)+n,arr(3)+n,1,1
- Delay 500
- TouchUp 1
- Delay 100
- End Sub
- Function 判断(数组)
- 判断=False
- Dim arr()
- arr=数组
- If IsNumeric(arr(3))=True Then
- If InStr(1,Join(arr,","),"|")>0 Then
- 判断=FindMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5),arr(6))
- Else
- 判断=FcEx(arr(0),arr(1),arr(2),arr(3),arr(4),arr(5))
- End If
- ElseIf IsNumeric(arr(1))=True Then
- 判断=CmpMultiCol(arr(0),arr(1),arr(2),arr(3),arr(4))
- End If
- End Function
- Sub 点击(数组)
- Dim arr()
- arr=数组
- Tap arr(0), arr(1)
- End Sub
- Function 判断延时消失(数组,秒)
- 判断延时消失=False
- Dim t
- t=Time()
- Do
- Delay 1000
- KeepCapture
- If 判断(数组)=False Then
- 判断延时消失=True
- Exit Do
- End If
- Loop Until Time()-t > 秒
- End Function
- Function 判断点击延时消失(数组,秒)
- 判断点击延时消失=False
- If 判断点击(数组)=True Then
- 判断点击延时消失=判断延时消失(数组,秒)
- End If
- End Function
- Function 判断点击(数组)
- 判断点击=False
- If 判断(数组)=True Then
- Tap IntX,IntY
- 判断点击=True
- End If
- End Function
- /////////////////////////////////////////////////////////////////////////////
- '本脚本相关教程资料(都是重点,想学就把我的教程看完,如不懂可以各大按键群(官方群)里联系我)
- '从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》
- 'http://bbs.anjian.com/thread-523396-1-1.html
- '从零学起之基础核心《麻雀虽小五脏俱全》
- 'http://bbs.anjian.com/thread-509172-1-1.html
- /////////////////////////////////////////////////////////////////////////////
- '判断两个16进制值相似度是否到达对应百分比
- Function IsCol(col1,col2,n)
- IsCol=False
- Dim r1,g1,b1
- Dim r2,g2,b2
- ColorToRGB col1,r1,g1,b1
- ColorToRGB col2,r2,g2,b2
- If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=True
- End Function
- '固定坐标单点模糊找色
- Function CmpCol(x,y,col,n)
- CmpCol=False
- If x < 0 or y < 0 Then Exit Function
- Dim temp_col
- temp_col=GetPixelColor(x,y)
- If temp_col=col Then
- CmpCol=True
- Else
- CmpCol=IsCol(col,temp_col,n)
- End If
- End Function
- '固定坐标多点模糊找色
- Function CmpMultiCol(x,y,col,str,n)
- CmpMultiCol=False
- IntX=x
- IntY=y
- If CmpCol(x,y,col,n)=True Then
- If MultiColor(x,y,str,n)=True Then
- CmpMultiCol=True
- Exit Function
- End If
- End If
- CmpMultiCol=FindMultiCol(x-1,y-20,x+1,y+20,col,str,n)
- End Function
- '区域范围多点模糊找色
- Function FindMultiCol(x1,y1,x2,y2,col,str,n)
- FindMultiCol=False
- FindMultiColor x1,y1,x2,y2,col,str,0,n,intX,intY
- If IntX >=0 Then FindMultiCol=True
- End Function
- '多点偏移点阵匹配
- Function MultiColor(x,y,str,n)
- MultiColor=False
- Dim arr1,i,arr2(),x1,y1
- arr1=Split(str,",")
- For Each i In arr1
- arr2=Split(i,"|")
- x1=x+Int(arr2(0))
- y1=y+Int(arr2(1))
- If x1 < 0 or y1 < 0 or x1 > win_x or y1 > win_y Then Exit Function
- If CmpCol(x1,y1,arr2(2),n)=False Then Exit Function
- Next
- MultiColor=True
- End Function
- //////////////////////////////////////////////////////////////////////////////////////////
- '自定义固定模块组合应用,以下部分大家请理解函数模块功能作用后自行组合使用。(请理解后调用,以免出错都不懂原因)
- Function Cm(x,y,col,str)
- Cm=CmEx(x,y,col,str,0.9)
- End Function
- Function CmEx(x,y,col,str,n)
- KeepCapture
- CmEx=CmpMultiCol(x,y,col,str,n)
- ReleaseCapture
- End Function
- Function Fm(x1,y1,x2,y2,col,str)
- Fm=FmEx(x1,y1,x2,y2,col,str,0.9)
- End Function
- Function FmEx(x1,y1,x2,y2,col,str,n)
- KeepCapture
- FmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)
- ReleaseCapture
- End Function
- Function Fc(x1,y1,x2,y2,col)
- Fc=FcEx(x1,y1,x2,y2,col,0.9)
- End Function
- Function FcEx(x1,y1,x2,y2,col,n)
- FcEx=False
- FindColor x1,y1,x2,y2,col,0,n,intX,intY
- If intX >= 0 Then FcEx=True
- End Function
- //////////////////////////////////////////////////////////////////////////////////////////
复制代码
|