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 1.341 seconds |