├── 有趣的小代码.aau.js ├── README.md ├── 自动化测试.aau ├── 读取utf8格式txt文件.aau ├── 读取文件并分析人数(方法二).aau ├── 读取文件并分析人数.aau ├── 发送文本到窗口的多种实现方式.aau ├── win7计算器自动按键easy版.aau ├── 实用案例.js ├── 简单倒计时器.aau └── aardio学习手册(notepad++版).js /有趣的小代码.aau.js: -------------------------------------------------------------------------------- 1 | execute("start http://www.baidu.com/"); //命令行直接打开百度 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Aardio 2 | 存放个人用aardio编写的源代码 3 | 4 | 1. [aardio wiki参考手册](https://github.com/benojan/Aardio/wiki/aardio%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C) 5 | -------------------------------------------------------------------------------- /自动化测试.aau: -------------------------------------------------------------------------------- 1 | //导入winex库 2 | import winex; 3 | 4 | //查找 5 | var hwnd = win.find("Notepad");//查找父窗口 6 | 7 | //查找指定的菜单("文件"菜单下的子菜单"另存为") 8 | hmenu,menuid = winex.findMenu(hwnd ,"文件","另存为" ); 9 | 10 | //前置窗口 11 | win.setForeground(hwnd) 12 | 13 | //点击菜单项 14 | winex.click( hwnd,menuid) 15 | -------------------------------------------------------------------------------- /读取utf8格式txt文件.aau: -------------------------------------------------------------------------------- 1 | var file = assert(io.open("C:\Users\Administrator\Desktop\a.txt",'r'),"打开失败") 2 | //w不设置写入方式,若w,ccs=UTF-8将出错 3 | //r+不清除原先的内容,直接覆盖 4 | //往文件里写u8编码就是u8,写gbk编码就是gbk 5 | 6 | io.open() 7 | io.print(string.fromto(file.read(),,936 ) )//读取utf-8编码文件内容,并转成gbk输出 8 | io.close() 9 | file.close() 10 | -------------------------------------------------------------------------------- /读取文件并分析人数(方法二).aau: -------------------------------------------------------------------------------- 1 | io.open() 2 | //----------------------------------------- 3 | //此处输入代码 4 | 5 | var fname = "C:\Users\Administrator\Desktop\uv.txt"; 6 | var file = io.open(fname,'r'); 7 | var uid = {} 8 | var line = file.read() 9 | while line!=null { 10 | var note = string.split(line,' ') 11 | uid[note[2] ] = note[2] 12 | line = file.read() 13 | } 14 | io.print( table.count(uid) ) 15 | 16 | //----------------------------------------- 17 | execute("pause") 18 | io.close() 19 | -------------------------------------------------------------------------------- /读取文件并分析人数.aau: -------------------------------------------------------------------------------- 1 | io.open() 2 | //----------------------------------------- 3 | //此处输入代码 4 | 5 | var fname = "C:\Users\Administrator\Desktop\uv.txt"; 6 | var content = string.load(fname); //读取数据 7 | var t = string.split(content,'\n') //拆分行 8 | var uid = {} //保存不重复用户 9 | for k, v in t { 10 | if(v!="") { //非空行 11 | var note = string.split(v,' ') //或取行中用户名 12 | uid[note[2] ] = note[2] //添加入uid 13 | } 14 | } 15 | io.print( table.count(uid) ) //统计uid数 16 | 17 | //----------------------------------------- 18 | execute("pause") 19 | io.close() 20 | -------------------------------------------------------------------------------- /发送文本到窗口的多种实现方式.aau: -------------------------------------------------------------------------------- 1 | import winex; 2 | import win; 3 | var hwnd = win.find("Notepad"); // 获取无窗口句柄,或win.findEx(0,0,"Notepad") 4 | var hedit = win.findEx(hwnd,0,"Edit"); // 获取子窗口句柄 5 | //io.print(hwnd, hedit) 6 | if(hwnd and hedit) { //都不为0,即找到了 7 | winex.attach(hwnd) //窗口显示最前 8 | win.setFocus(hedit) //设置焦点 9 | winex.say('say\n',hedit) //发送文本1 10 | winex.say2('say2\n',hedit) //发送文本2 11 | winex.sayIme('sayIme\n',hedit) //发送文本3 12 | winex.sendString('sendString\r\n',hedit) //发送文本4 13 | winex.setText(hedit,"fast") //巧用,发送文本5 14 | } 15 | 16 | //mainForm.show() 17 | return win.loopMessage(); 18 | -------------------------------------------------------------------------------- /win7计算器自动按键easy版.aau: -------------------------------------------------------------------------------- 1 | import win 2 | import winex 3 | 4 | //win7下的计算机自动化 5 | 6 | //找到计算器句柄 7 | var hf = win.find('CalcFrame','计算器') 8 | if(!hf) return 9 | win.center(hf) //居中 10 | win.setForeground(hf) //显示到最前 11 | var hwnd = win.findEx(hf,0,'CalcFrame') //找到计算器界面句柄 12 | 13 | //各按钮句柄顺序 14 | var btnIndex = { [0]=6;[1]=5;[2]=11;[3]=16;[4]=4; 15 | [5]=10;[6]=15;[7]=3;[8]=9;[9]=14;["."]=17; 16 | ["+"]=23;["-"]=22;["*"]=21;["/"]=20;["="]=28; 17 | ["%"]=26;["1/X"]=27;["SQRT"]=25;["+-"]=19; 18 | ["BACK"]=2;["CE"]=8;["C"]=13;["MC"]=1;["MR"]=7; 19 | ["MS"]=12;["M+"]=18;["M-"]=24 } 20 | 21 | //自动点击方法 22 | function keydown(key) { 23 | winex.click( winex.findEx(hwnd,btnIndex[key],'Button') ) 24 | } 25 | 26 | //调用测试 27 | keydown(7) 28 | keydown(3) 29 | keydown(4) 30 | keydown(5) 31 | keydown('*') 32 | keydown(1) 33 | keydown(2) 34 | keydown(3) 35 | keydown(4) 36 | keydown('=') 37 | -------------------------------------------------------------------------------- /实用案例.js: -------------------------------------------------------------------------------- 1 | 1. 按行读取文本 2 | 3 | 方法一、 4 | string.save("/test.txt",str ); 5 | //每次读一行 6 | for line in io.lines("/test.txt") { 7 | console.log( line ) 8 | } 9 | 方法二、 10 | //上面的代码基本等价于下面的过程 11 | file = io.open("/test.txt","r+t") 12 | while( 13 | var lineNum,line = 0; 14 | lineNum++, line = file.read(); 15 | line 16 | ){ 17 | console.log(lineNum,line ) 18 | } 19 | 20 | 方法三、 21 | string.save("/test.txt",str ); 22 | io.getLines = function(path,from=1,to){ 23 | var i = 1; 24 | var ret = {}; 25 | if(!to)from = to; 26 | for line in io.lines("/test.txt") { 27 | if( i >= from ){ 28 | ..table.push( ret,line); 29 | if( i >= to ){ 30 | break; 31 | } 32 | } 33 | i++; 34 | } 35 | return string.join( ret,'\r\n'); 36 | } 37 | var str = io.getLines("/test.txt",2,3); 38 | console.log(str) 39 | 40 | 方法四、 41 | var next = io.lines("/test.txt") 42 | for( i=1;2 ){ 43 | next() //跳过2行 44 | } 45 | while( var line ; line = next();line ) { 46 | console.log( line ) 47 | } 48 | 49 | 方法五、 50 | var str = string.load("/test.txt"); 51 | var tab = ..table.slice( string.split(str,'<\r\n>'),2,3) //取第二行到第三行 52 | console.varDump(tab) 53 | 54 | 2. 打开网页 55 | import process 56 | process.execute("http://www.baidu.com/") 57 | -------------------------------------------------------------------------------- /简单倒计时器.aau: -------------------------------------------------------------------------------- 1 | import win.ui; 2 | /*DSG{{*/ 3 | mainForm = ..win.form(text="倒计时器";right=297;bottom=121) 4 | mainForm.add( 5 | button={cls="button";text="开始";left=105;top=79;right=198;bottom=110;z=1}; 6 | edit={cls="edit";left=25;top=43;right=76;bottom=64;edge=1;num=1;z=5}; 7 | edit2={cls="edit";left=112;top=43;right=163;bottom=64;edge=1;num=1;z=6}; 8 | edit3={cls="edit";left=198;top=43;right=249;bottom=64;edge=1;num=1;z=7}; 9 | static2={cls="static";text="小时";left=82;top=46;right=110;bottom=65;transparent=1;z=2}; 10 | static3={cls="static";text="分";left=173;top=46;right=190;bottom=65;transparent=1;z=3}; 11 | static4={cls="static";text="秒";left=259;top=46;right=276;bottom=65;transparent=1;z=4}; 12 | static5={cls="static";text="倒计时:";left=128;top=14;right=180;bottom=33;transparent=1;z=8} 13 | ) 14 | /*}}*/ 15 | 16 | mainForm.button.oncommand = function(id,event){ 17 | var hour, minute, second 18 | if(mainForm.edit.text!="") { 19 | hour = tonumber(mainForm.edit.text); 20 | } 21 | else hour = 0; 22 | if(mainForm.edit2.text!="") { 23 | minute = tonumber(mainForm.edit2.text); 24 | } 25 | else minute = 0; 26 | if(mainForm.edit3.text!="") { 27 | second = tonumber(mainForm.edit3.text); 28 | } 29 | else second = 0; 30 | var yes = mainForm.msgboxTest("按确定开始计时!"); 31 | if(yes) { 32 | mainForm.show(false); 33 | win.delay((hour*60*60+minute*60+second) * 1000); 34 | mainForm.msgbox("过了"++tostring(hour)++"小时"++tostring(minute)++"分"++tostring(second)++"秒,时间到!"); 35 | mainForm.show(true); 36 | } 37 | } 38 | 39 | mainForm.show() 40 | return win.loopMessage(); 41 | -------------------------------------------------------------------------------- /aardio学习手册(notepad++版).js: -------------------------------------------------------------------------------- 1 | 1. 语言相关 2 | 1.1. 关于字符串 3 | 'a'# >> 取字符a的ASCII值97 4 | 'abc'# >> 取首个字符a的ASCII值97 5 | 'UTF16字符串'u >> utf-16 LE编码(代码页:1200)字符串 6 | 'UTF8字符串'u8 >> utf-8 编码(代码页:65001)字符串 7 | '\u0061\u0062\u0063' >> utf-16 LE编码(代码页:1200)字符串 8 | gbk: 936 9 | utf-8: 65001 10 | utf-16: 1200 11 | 12 | 字符串形式: 13 | str = 'abcd 14 | \"\nefgh' >> abcd"换行efgh //多行不换行,内部转义,\"输出" 15 | str = "abcd 16 | ""\nefgh" >> abcd换行"\nefgh //多行换行,不转义,""输出" 17 | str = //abcdefgh\n >> abcdefgh\n //单行注释内容,不转义 18 | str = /*abcd\n 19 | efgh*/ >> abcd\n回车换行efgh //多行注释内容,不转义 20 | 21 | 经典案例: 22 | for( chr='A'#; 'Z'# ) { 23 | str = string.pack( chr ) 24 | io.print( str, str[1], chr, str[[1]] ); //猜猜输出结果是什么?---------------------------A 65 65 A -> Z 90 90 Z 25 | } 26 | 27 | 1.2. 表+数组 28 | tab = {x=100;y=200;"Sunday";"Monday"} 29 | tab.x //100 30 | tab[1] //"Sunday" 31 | 32 | //table中不符合变量命名规则的键必须通过[]操作符访问 33 | tab = { [1]=300;[2]=400;["+"]=200;[1+1]=200 }; //OK 34 | tab = { 1=300; 2=400; "+"=200; 1+1=200 }; //Error 35 | 36 | tab2 = {"1"=1;"2"=2;1;2;3} 37 | #tab2 //3 38 | table.len(tab2) //3,table内数组长度 39 | table.count(tab2) //5,table总大小 40 | //http://bbs.aardio.com/forum.php?mod=viewthread&tid=269&highlight=table 41 | 42 | 43 | bytes = { string.unpack(str) } //多个返回值转数组 44 | 45 | 1.3. 变量、局部变量、常量 46 | value = '123' //当然名字空间下的变量,无var声明 47 | var value = '123' //局部变量,var声明 48 | _value = '123' //成员常量,下划线开始,小写 49 | _Value = '123' //全局常量,下划线开始,大写 50 | : 同 or 同 || 51 | ? 同 and 同 && 52 | ::Kernel32 := raw.loadDll("Kernel32.dll"); //全局常量赋值,首字母大写 53 | //::Kernel32 := ... 等同于 ::Kernel32 = Kernel32 or ... 54 | value = null //删除变量 55 | 56 | 1.4. 条件赋值 57 | a = a : 123;//如果a为false、null、0时赋值为123 58 | a := 123; //等价于上面的语句,通常用于常量赋值,以避免重复赋值。 59 | 60 | str = "abcdefg" 61 | str ?= string.left(str,3); //如果str为null,则不赋值,以避免string.left抛出错误 62 | 63 | 1.5 包含操作符 64 | io.print ( $"/my.txt" ) //my.txt文件内容,发布程序后自动嵌入 65 | 66 | 67 | 68 | 2. 常用函数 69 | 2.1. io库 70 | io.exist(文件路径) //判断文件是否存在 71 | 72 | 73 | 2.2. string库 74 | //unicode编码的字符串,即utf-8、utf-16编码等 75 | string.fromUnicodeIf(unicode字符串) //将@1转成默认代码页,若已经是则不转。返回字符串 76 | string.fromUnicode(unicode字符串,目标编码) //将@1的u/u8编码(只能字符串?)转换成@2编码,省略@2则默认转成what??编码。返回字符串 77 | string.toUnicode(字符串,源编码,是否允许指针) //将@2编码的字符串转换成unicode,当@1注明u/u8时,忽略@2,@3可以是true,false,或源数据长度。返回字符串 78 | string.fromto('UTF-8字符串'u8,65001,936) //将@2编码的字符串转换成@3编码,当@1注明u/u8时,忽略@2。返回字符串 79 | 80 | string.getUtf(字符串) //获取@1的编码。返回0,8,16 81 | string.setUtf(字符串,编码格式) //基本无用。以@2设置@1字符串。无返回 82 | 83 | string.len(字符串) //自动识别并计算@1长度。返回长度 84 | string.utf8len(字符串) //以utf-8格式取@1的长度。返回长度,若非utf-8格式,返回0(个别字符有误,如“联通”) 85 | string.sub(字符串,开始,结束,文本模式) //取@2到@3位置的@1子串,@4为true时支持u/u8编码。返回子串 86 | string.left(字符串,截取长度,文本模式) //取@1左侧@2长度的子串,@3为true时支持u/u8编码。返回子串 87 | string.right(字符串,截取长度,文本模式) //取@1右侧@2长度的子串,@3为true时支持u/u8编码。返回子串 88 | 89 | string.startWith(字符串,开始串,忽略大小写) //@2是否是@1的开始部分,@3为true时忽略大小写。返回true/false 90 | string.endWith(字符串,结束串,忽略大小写) //@2是否是@1的结束部分,@3为true时忽略大小写。返回true/false 91 | 92 | string.cmp(字符串,字符串2,比较长度=null) //比较@1和@2,比较长度为@3。返回正、负、0 93 | string.reverse(字符串) //翻转字符串。返回字符串 94 | string.unpack(字符串 [,i ,j] ) //取@1中第i到第j个字符的字节码。返回多个字节码 95 | bytes = { string.unpack(str) } //转换为一个数组 96 | string.pack(65,66,67); string.pack( {65;66;67} );//连接成字符串。返回字符串 97 | string.lower(str) //转小写 98 | string.upper(str) //转大写 99 | 100 | string.indexAny("abcdefg",'c'# ) //查找@2在@1中的位置。返回位置3 101 | string.lastIndexAny("abcdefg",'cde' ) //反向查找@2在@1中的位置。返回反向位置5 102 | string.find(字符串,模式串,开始位置) //在@1中从@3位置开始查找@2。返回起始位置i,结束位置j。 103 | string.match(字符串, 模式串, 开始位置) //在@1中从@3位置开始查找@2。返回找到的字符串 104 | string.replace(字符串,@@字符串,字符串,次数) //把@1中的@2替换成@3,替换@4次,默认全替。返回结果和次数 105 | /* 106 | @前缀声明在查找替换函数中禁用模式匹配语法,仍然基于二进制模式查找替换。 107 | @@前缀声明在查找替换函数中禁用模式匹配语法,但是会基于文本模式查找替换,不会截断双字节字符。 108 | 模式匹配函数:http://bbs.aardio.com/doc/reference/libraries/kernel/string/pattern%20matching.html 109 | 模式表达式语法:http://bbs.aardio.com/doc/reference/libraries/kernel/string/pattern%20syntax.html 110 | */ 111 | 112 | string.escape('abc'u) //返回@1的转义符\u0061\u0062\u0063,支持u/u8 113 | string.trim(字符串,字符) //清除首尾的@2,默认为空格、\t\r\n\v\f等。返回字符串 114 | string.trimleft(字符串,字符) //清除首@2 115 | string.trimright(字符串,字符) //清除尾@2 116 | string.concat(字符串,字符串,...) //连接字符串,可以为null。返回总字符串 117 | string.split('a;b,c',';,') //拆分@1字符串,@2可以多个字符,所以中文两端必须加<>表示整体,但只能用在首尾一次,如用<;,>匹配'a;,b;,c'。返回数组{'a';'b';'c'} 118 | string.splitEx('中文的字符','<文>|<字>') //支持模式匹配。返回{中;的;符} 119 | string.join({"ab";"cd";"ef"}," ") //合并@1数组,以@2隔开。返回字符串"ab cd ef" 120 | 121 | string.format("%X",123) //转换进制:%b二进制数,%x%X大小写十六进制数,%o八进制数,%d十进制数 122 | 123 | //一次性读写文件用这两个,不要用io对象 124 | string.load(路径) //读取@1中文本内容。返回内容。 125 | string.save(路径,字符串,追加方式) //将@2保存到@1文件中,@3为true则追加。 126 | 127 | string.random(长度, "这是中文字符集" ) //生成长度为@1的@2内随机字符,@2不能同时有中英文。返回字符串 128 | 129 | 2.3. math库 130 | math.randomize() //随机数发生器种子 131 | math.random(1,100) //配合上一个使用,产生@1到@2中随机的数字 132 | 133 | 2.4. win, winex库 134 | match(.(句柄,文本,类名,ID) = 指定一个窗口句柄,检测是否符合给定参数\n所有参数可选,类名与文本支持模式表达式 135 | find(.(类名模式串,标题模式串,进程ID,线程ID)=查找顶层窗口,所有参数都是可选参数\n返回值为:句柄,线程ID,进程ID 136 | findMainWnd(.(类名模式串,标题模式串,进程ID,线程ID) = 查找独立不属于其他窗口所有的顶层窗口所有参数都是可选参数\n返回值为:句柄,线程ID,进程ID 137 | findEx(.(父窗口句柄,第几个匹配,类名模式串 ,标题模式串, 控件ID )=查找子窗口,除父窗口句柄外所有参数可选\n返回值为句柄 138 | findExists(.(父窗口标题,控件文本,父窗口类名,控件类名,控件ID,进程ID,第几个匹配) = 查找包含指定控件窗口的父窗口,所有参数可选\n返回值为:窗口句柄,控件句柄,线程ID,进程ID 139 | findActivate(.(父窗口标题,控件文本,父窗口类名,控件类名,控件ID,进程ID,第几个匹配) = 调用winex.findExists查找并激活包含指定控件窗口的父窗口,所有参数可选\n返回值为:窗口句柄,控件句柄,线程ID,进程ID 140 | 141 | winex.attach(hwnd) //附加到“外部”线程窗口并共享输入状态,注意该函数会重置键盘状态。返回值为是否成功附加 142 | winex.attach(hwnd,false) //解除共享输入状态。返回值为是否成功解除 143 | winex.sendString(文本, 窗口句柄=前台窗口) //发送@1给@2,\r\n表示换行 144 | winex.say(文本, 窗口句柄=前台窗口) //发送@1给@2,\n表示换行 145 | winex.say2(文本,窗口句柄=前台窗口) //发送@1给@2,\n表示换行 146 | winex.sayIme(文本,窗口句柄=前台窗口) //发送@1给@2,\n表示换行 147 | hwnd,线程ID,进程ID = winex.find( 类名,标题,进程ID,线程ID ) //查找窗口 148 | winex.key.combine(hedit,"CTRL","s") //在hedit窗口中按下Ctrl+S,需import winex.key 149 | winex.key.click(hedit,"ENTER" ) //在hedit窗口中按下Enter键,需import winex.key 150 | winex.key.altClick(hedit,"F" ) //在hedit窗口中按下Alt+F键,需import winex.key 151 | 152 | win.isChild(.(父窗口句柄,子窗口句柄) //判断@2是否是@1的子窗口或隶属子窗口。返回1/0 153 | win.isVisible(hwnd) //判断窗口是否可见,可通过win.show()改变。返回true/false 154 | win.isWindow(hwnd) //判断是否有效窗口。返回true/false 155 | win.isIconic(hwnd) //判断窗口是否最小化为任务栏图标。返回true/false 156 | win.isZoomed(hwnd) //判断窗口是否最大化。返回true/false 157 | win.isEnable(__/*输入窗口句柄*/) = 判断窗口是否启用状态 158 | win.show(hwnd,_SW_...) //显示窗口,任务栏中出现,并不是显示到最前面,@2是以_SW_为前缀的可选显示参数,参见windows编程SW_ 159 | win.show(hwnd,false) //隐藏窗口,任务栏中消失 160 | win.close(hwnd) //关闭窗口\n关闭外部进程窗口请使用winex.close()替代 161 | win.enable(__/*输入窗口句柄*/,true) = 启用窗口 162 | win.enable(__/*输入窗口句柄*/,false) = 禁用窗口 163 | win.setTop(__/*输入窗口句柄*/)=前置窗口到当前线程Z序顶部\n顶层窗口或者设置了 _WS_CLIPSIBLINGS 重叠裁剪样式的窗口向前移动\n子窗口会向后面移动. 164 | win.getForeground()=获取前台窗口句柄 165 | win.getActive()=获取当前线程激活窗口句柄,如果要获取全局激活窗口请使用win.getForeground() 166 | win.setActive(hwnd) //设置激活窗口(激活窗口是什么?) 167 | win.getFocus() //获取输入焦点所在窗口句柄 168 | win.setFocus(hwnd) //设置输入焦点,只用于当前线程 169 | win.getDesktop() //获取桌面句柄 170 | win.setTopmost(hwnd) //置顶窗口(不是win.setForeground()) 171 | win.setTopmost(hwnd,false) //取消置顶窗口 172 | win.setForeground(__/*输入窗口句柄*/) //前置窗口并获取输入焦点(把窗口显示在屏幕最前面,最小化窗口自动还原+获取焦点),\n当前程序是背景窗口时,win7以上系统令在任务栏闪烁, 173 | win.showForeground(.(窗口句柄,x,y,cx,cy) //把窗口显示在屏幕最前面,最小化窗口自动还原\n类似setForeground但不会改变输入焦点,\n除句柄外,其他参数为可选参数 174 | win.find(.(类名,标题) //查找顶层窗口,参数都是可选参数。返回句柄 175 | win.findEx(.(父窗口句柄,上一个窗口句柄,类名,标题) //查找子窗口,除父窗口句柄以外,其他参数都是可选参数 176 | win.setCapture(.(窗口句柄) = 开始捕获鼠标消息,返回上次调用该函数的窗口句柄 177 | win.releaseCapture() = 释放鼠标捕获,成功返回true 178 | win.registerClassEx(.("类名",类参数表,"源类名") = 并注册新类名\n如果参数@3指定了源类名则复制该类\n可选用参数@2指定 WNDCLASSEX的部份字段值 179 | win.registerFormClass("类名",类参数表,"源类名") = @.registerFormClass("类名",{\n style = _CS___\n} ); 180 | 181 | win.delay(1000* 5) //毫秒延时,区别sleep()使用于无窗口、无消息循环时 182 | win.getClass(hwnd) //返回窗口类名 183 | win.getId(hwnd) //返回控件ID 184 | win.getText(hwnd, 缓冲区长度=文本长度) //返回控件文本内容,@2可选 185 | win.setText(hwnd,文本,缓冲区长度=文本长度) //设置控件文本,外部进程窗口使用winex.setText() 186 | 187 | win.flash(hwnd,次数,时间间隔,选项) //闪烁窗口 188 | win.msgbox(文本,标题,样式,所有者hwnd) //弹出对话框 189 | win.msgboxErr(文本,标题,所有者hwnd) //弹出错误对话框 190 | win.msgboxTimeout(文本,标题,超时毫秒值,样式,所有者hwnd) //弹出对话框,超时自动关闭 191 | win.msgboxTest(文本,标题,所有者hwnd) //返回布尔值表示用户是否按了“确定”按钮 192 | win.getScreen() //返回屏幕宽度、高度 193 | win.center(hwnd,目标窗口句柄) //居中窗口,并调整以保证显示在可见范围内,目标窗口句柄如果为空则取父窗口或所有者窗口,为0表示桌面 194 | 195 | hwndroot = win.getRoot() //获取最顶层父窗口句柄 196 | win.enable(hwnd, 1) //启用窗口,使可以操作 197 | win.enable(hwnd, 0) //禁用窗口,使不能操作 198 | --------------------------------------------------------------------------------