import console; import winex; SendMessage = ::User32.api("SendMessageA","int(int hwnd,int wMsg,int wParam,struct & lParam)") COPYDATASTRUCT = class{ int dwData; int cbData; str lpData; } var hwnd = winex.find("AutoHotkeyGUI","AHK_Monitor"); var a = "ab为cd" console.log(a,#a); var msg = COPYDATASTRUCT() msg.dwData = 3353; msg.cbData = #a; msg.lpData = a; SendMessage(hwnd,0x4a,0x0,msg) console.pause(true);
import win.ui; ..ShowWindow = ::User32.api("ShowWindow","int(int hwnd,int nCmdShow)") /*DSG{{*/ var winform = ..win.form(text="MainForm";right=269;bottom=133) winform.add( button={cls="button";text="子窗口";left=61;top=39;right=200;bottom=86;z=1} ) /*}}*/ var subform = ..win.form(text="SubForm";right=200;bottom=100) subform.add( ) subform.onClose = function(hwnd,message,wParam,lParam){ ShowWindow(subform.hwnd,0x0) //显示 return 0 } winform.button.oncommand = function(id,event){ //winform.msgbox( winform.button.text ); ShowWindow(subform.hwnd,0x5) //隐藏 return 0 } winform.show() win.loopMessage();
varDump = function(...){ var args = {...}; var str = ''; var b,e = ..table.range(args); for(i=b;e){ var arg = args[i]; var t = type(arg); str = string.concat(str,"参数位置:",i,' ',"数据类型:",t,' '); if( t != type.table ){ str = string.concat(str,"变量值:",tostring(arg),' '); } else { str = string.concat(str,"变量值: {",' '); var logged = { _struct = 1 }; for k,v in ..table.eachName(arg){ logged[k] = true; str = string.concat(str,' ', k,' = ',tostring(v) ,' '); } for(i=1;#arg;1){ logged[i] = true; str = string.concat(str,' [', i,'] = ',tostring(arg[i]) ,' '); } for(k,v in arg){ if( !logged[k] ){ str = string.concat(str,' [', tostring(k),'] = ',tostring(v) ,' '); } } str = string.concat(str,'}',' '); if(#arg){ str = string.concat(str,"序列数组长度:",#arg,' '); } if(arg._struct){ try{ str = string.concat(str,L("结构体大小:"),..raw.sizeof(arg),' '); } catch(e){ str = string.concat(str,"结构体大小:未知(包含动态数组)",' '); } } } } return str }
import win.ui; import win.mm /*DSG{{*/ mainForm = ..win.form(text="AAuto Form";right=233;bottom=323) mainForm.add( button={cls="button";text="转语音";left=35;top=278;right=97;bottom=310;z=2}; button2={cls="button";text="朗读";left=119;top=278;right=181;bottom=310;z=3}; edit={cls="edit";left=5;top=8;right=227;bottom=268;autohscroll=false;edge=1;multiline=1;vscroll=1;z=1} ) /*}}*/ mainForm.button2.oncommand = function(id,event){ win.mm.playMp3("/temp.mp3") } mainForm.button.oncommand = function(id,event){ if(mainForm.edit.text = "") return ; mainForm.button.disabled = true var bdmp3 = win.invoke(text2audio,mainForm.edit.text) if(bdmp3){ string.save("/temp.mp3",bdmp3 ) win.msgbox("转语音成功") }else { win.msgbox("转语音失败") } mainForm.button.disabled = false } text2audio = function(ctext){ import inet.whttp; import inet.url var whttp = inet.whttp() ctext = inet.url.encode(inet.url.encode(ctext,true),true) whttp.beginRequest("http://tts.baidu.com/text2audio?idx=1&tex="+ctext+"&cuid=baidu_speech_demo&cod=2&lan=zh&ctp=1&pdt=1&spd=5&per=0&vol=5&pit=5") whttp.send() var ctype = whttp.readHeader("Content-type") var bdmp3 = whttp.readAll() whttp.endRequest() if(!string.indexOf(ctype,"mp3")) return null; return bdmp3; } mainForm.show() return win.loopMessage();
Pub端(服务器):
import zeromq; //准备上下文和PUB套接字 var context = zeromq.context() var publisher = context.zmq_socket_pub() publisher.bind("tcp://*:5556") //publisher.bind("ipc://weather.ipc") //初始化随机数生成器 math.randomize(time.tick()) while(1){ //获取数据,忽悠下老板 var zipcode = math.random(10000, 11000) var temperature = math.random(-80, 135) var relhumidity = math.random(10, 60) //向所有订阅者发送消息 publisher.sendMsg( string.format("%05d %d %d", zipcode, temperature, relhumidity) ) } publisher.close() context.term()
Sub端:
import zeromq; io.open() start = function(filter,tcp){ var context = zeromq.context() //用于和服务端通信的套接字 io.print("Collecting updates from weather server...") var subscriber = context.zmq_socket_sub() subscriber.connect( tcp : "tcp://localhost:5556" ) //设置订阅信息,默认为纽约,邮编10001 filter := {byte value[] = "10001 "} subscriber.setsockopt(6/*_ZMQ_SUBSCRIBE*/,filter) // var ret = subscriber.setsockopt(0x11/*_ZMQ_LINGER*/,{int value = 0}) io.print(ret); //处理100条更新信息 var updateNum = 100; var totalTemp = 0; for(i=1;updateNum){ var msg = zeromq.message() var ret = subscriber.recvMsg(msg,1/*_ZMQ_NOBLOCK*/); if(ret){ var str = ..raw.tostring( msg.getData(),1,msg.getSize()) msg.close(); var zipcode, temperature, relhumidity = string.match(str,"(\d*) ([\d-]*) (\d*)") io.print(i,temperature) totalTemp += temperature; } sleep(1000)//加点延迟 } io.print(string.format("Average temperature for zipcode '%s' was %dF, total = %d", filter.value, (totalTemp / updateNum), totalTemp)) subscriber.close(); context.term(); } start()
以下是一个监听AMI socket消息并广播的Pub端实例代码:
import win.ui; import zeromq; import thread.command; /*DSG{{*/ mainForm = ..win.form(cls="ChannelMon";text="ChannelMon";right=0;bottom=0;border="none";exmode="none";max=false;min=false;mode="popup";sysmenu=false;title=false) mainForm.add() /*}}*/ //准备上下文和PUB套接字 var context = zeromq.context() var publisher = context.zmq_socket_pub() publisher.bind("tcp://*:5556") var listener = thread.command(); listener.amierror = function(msg){ mainForm.msgbox("致命错误:"++msg) } listener.callin = function(obj){ msg = string.concat(obj.exten," ",obj.phone," ",obj.channel," ",obj.uniqid); //console.log(msg); publisher.sendMsg(msg); } //AMI桥接通道监控 listener.invoke( function(hwnd){ import thread.command; import wsock.tcp.client; //开启AMI连接 var tcp = wsock.tcp.client(); tcp.connect("192.168.1.2",5038); //传递句柄 thread.command.post("posthandle",tcp._handle) //登陆 tcp.write('Action:login\r\nUsername:user\r\nSecret:passwd\r\n\r\n') //等待回复 tcp.recv() //监听消息 var ok = true while(ok = true){ var pkg = tcp.recv() if(pkg!=null){ var msg = string.split(pkg,'<\r\n\r\n>') //按双回车分割消息单元 for k,v in msg { var line = string.split(v,'<\r\n>') //按回车分割消息行 if(table.range(line)>0){ var msgobj = {}; for m,n in line { var part = string.split(n,":") //按冒号分割key和value if(part[1]!=null && part[2]!=null){ msgobj[part[1]] = tostring(string.trimleft(part[2],space)) //msgobj[part[1]] = string.trimleft(part[2],space) } //if part } //for line //msgobj生成完毕 if(msgobj["Event"]="Bridge" and msgobj["Bridgestate"]="Link" and msgobj["Channel1"]!=null){ //通道桥接 if(string.find(msgobj["Channel1"],"DAHDI/.*")){ var obj = {}; obj.exten = msgobj["CallerID2"]; obj.phone = msgobj["CallerID1"]; obj.channel = msgobj["Channel1"]; obj.uniqid = msgobj["Uniqueid2"]; thread.command.post("callin",obj); } } } //if line }// for msg }else{ ok = false } //if pkg } //while tcp.close(); thread.command.post("amierror","到呼叫系统的AMI连接已断开!") return } ); mainForm.onClose = function(hwnd,message,wParam,lParam){ publisher.close() } win.loopMessage(); context.term()
Autohotkey示例:
Gui Add, ActiveX, xm w700 h100 vwmp, {6BF52A52-394A-11D3-B153-00C04F79FAA6} Gui Show ;wmp.Settings.AutoStart := 0 wmp.Settings.Volume := 100 wmp.Url := "D:\我的文档\My Music\brave.mp3"
AAuto示例:
import win.ui; import fsys.dlg; /*DSG{{*/ var winform = ..win.form(text="AAuto Form";right=322;bottom=157) winform.add( static={cls="static";left=5;top=5;right=314;bottom=153;db=1;dl=1;dr=1;dt=1;edge=1;transparent=1;z=1} ) /*}}*/ //创建控件 var wmplay = winform.static.createEmbed("{6BF52A52-394A-11d3-B153-00C04F79FAA6}"); var filepath=fsys.dlg.open("mp3音乐|*.mp3","打开"); wmplay._object.Url = filepath; winform.show() win.loopMessage();
import console; import inet.ftp; var p = string.split(_CMDLINE," "); if(p[1]!=null and p[2]!=null and p[3]!=null and p[4]!=null and p[5]!=null){ ftp = inet.ftp(p[1],p[2],p[3]); if(!ftp){ console.log("请输入正确的服务器参数"); return; } file = ftp.upload(p[4],p[5],2) ftp.close() }else{ console.log('参数:服务器 用户名 密码 源文件 目标ftp路径\n所有参数不能包含空格'); } console.close();
import console; import mysql.client; //本地数据库 console.log("正在连接本地数据库服务器..."); var localdb,err = mysql.client( server = "localhost"; uid = "root"; pwd = "123456"; ); if(!localdb){ console.log("连接数据库失败",err) return; } localdb.selectDb("blog"); console.log("本地数据库连接成功"); //远端数据库 console.log("正在连接远端数据库服务器..."); var remotedb,err = mysql.client( server = "8.8.8.8"; uid = "xxxxx"; pwd = "xxxxx"; ); if(!remotedb){ console.log("连接数据库失败",err) return; } remotedb.selectDb("blog"); console.log("远端数据库连接成功"); //同步本地日志到远端 console.log("同步本地日志到远端"); //查询最大ID var result = remotedb.query("SELECT max(ID) as MAXID FROM wp_posts"); var remote_post_max_id = result.fetchObject()["MAXID"]; //console.log("远端最大ID:"++remote_post_max_id) result.free(); //查询本地 var result = localdb.query("SELECT ID FROM wp_posts where ID>"++tostring(remote_post_max_id)); var local_post_sync_count = result.numRows(); console.log("需同步"++local_post_sync_count) result.free(); //执行同步 if(local_post_sync_count>0){ //首先替换网址 localdb.exec("update wp_posts set post_content=replace(post_content,'thinkai.net','thinkai.net') where ID>"++tostring(remote_post_max_id)); var result = localdb.query("SELECT * FROM wp_posts where ID>"++tostring(remote_post_max_id)); for(i=1;local_post_sync_count){ var row = result.fetchObject(); console.log(string.concat("同步ID:",row['ID']," 标题:",row['post_title'])); remotedb.exec("insert into wp_posts values (@ID, @post_author, @post_date, @post_date_gmt, @post_content, @post_title, @post_excerpt, @post_status, @comment_status, @ping_status, @post_password, @post_name, @to_ping, @pinged, @post_modified, @post_modified_gmt, @post_content_filtered, @post_parent, @guid, @menu_order, @post_type, @post_mime_type, @comment_count)",row) } } //同步本地日志分类到远端 console.log("同步本地日志分类到远端"); //查询最大ID var result = remotedb.query("SELECT max(object_id) as MAXID FROM wp_term_relationships"); var remote_term_max_id = result.fetchObject()["MAXID"]; result.free(); //查询本地 var result = localdb.query("SELECT object_id FROM wp_term_relationships where object_id>"++tostring(remote_term_max_id)); var local_term_sync_count = result.numRows(); console.log("需同步"++local_term_sync_count) result.free(); //执行同步 if(local_term_sync_count>0){ var result = localdb.query("SELECT * FROM wp_term_relationships where object_id>"++tostring(remote_term_max_id)); for(i=1;local_term_sync_count){ var row = result.fetchObject(); console.log(string.concat("同步ID:",row['object_id'])); remotedb.exec("insert into wp_term_relationships values (@object_id, @term_taxonomy_id, @term_order)",row) } } //同步本地分类项目到远端 console.log("同步本地分类项目到远端"); //查询最大ID var result = remotedb.query("SELECT max(term_taxonomy_id) as MAXID FROM wp_term_taxonomy"); var remote_termt_max_id = result.fetchObject()["MAXID"]; result.free(); //查询本地 var result = localdb.query("SELECT term_taxonomy_id FROM wp_term_taxonomy where term_taxonomy_id>"++tostring(remote_termt_max_id)); var local_termt_sync_count = result.numRows(); console.log("需同步"++local_termt_sync_count) result.free(); //执行同步 if(local_termt_sync_count>0){ var result = localdb.query("SELECT * FROM wp_term_taxonomy where term_taxonomy_id>"++tostring(remote_termt_max_id)); for(i=1;local_termt_sync_count){ var row = result.fetchObject(); console.log(string.concat("同步ID:",row['term_taxonomy_id'])); remotedb.exec("insert into wp_term_taxonomy values (@term_taxonomy_id, @term_id, @taxonomy, @description, @parent, @count)",row) } } //查询最大ID var result = remotedb.query("SELECT max(term_id) as MAXID FROM wp_terms"); var remote_term_max_id = result.fetchObject()["MAXID"]; result.free(); //查询本地 var result = localdb.query("SELECT term_id FROM wp_terms where term_id>"++tostring(remote_term_max_id)); var local_term_sync_count = result.numRows(); console.log("需同步"++local_term_sync_count) result.free(); //执行同步 if(local_term_sync_count>0){ var result = localdb.query("SELECT * FROM wp_terms where term_id>"++tostring(remote_term_max_id)); for(i=1;local_term_sync_count){ var row = result.fetchObject(); console.log(string.concat("同步ID:",row['term_id'])); remotedb.exec("insert into wp_terms values (@term_id, @name, @slug, @term_group)",row) } } localdb.close(); remotedb.close(); console.pause();
50 queries in 2.852 seconds |