AAuto编程语言简介
AAuto编程语言AAuto是专用于桌面软件快速开发的新一代混合型编程语言, 兼具动态、静态语言优势,语法更可兼容大部分流行语言,学习成本低,开发速度快,并永久免费。
AAuto是一种动态语言,但是同时支持静态类型开发,下面的代码定义了一个结构体,在这个结构体中可以象静态语言一样使用静态类型,又可以象动态语言一样使用动态类型;
//定义类
class POINT {
int x; int y; //静态类型
func = function(){
//动态类型
}
}
这种全新的混合编程语言开创了一种全新的编程方式,AAuto拥有动态语言轻便、灵活、快速开发的特性,同时又可以象静态语言一样强大,直接支持原生DLL,方便的声明API函数,并且可以将AAuto的函数对象转换为C语言兼容的函数指针,即使是外部EXE进程中的函数,也可以使用一句代码声明为普通的AAuto函数对象( 原生call支持 )。
AAuto虽然小,但是支持的接口很丰富,可支持标准DLL的stdcall,cdecl,thiscall等调用约定,可以支持C++导出的类对象,可以支持com静态动态双接口,象VBS一样原生支持com对象。
AAuto还可以直接嵌入汇编机器码,C语言,Java,PHP,C#,Python,Javascript,VBScript......等等数量众多的第三方编程语言,方便的互调函数,并且这些调用第三方语言的功能模块都是使用AAuto实现,并且开放源码。混合型语言让我们可以体验到激动人心的全新编程方式。
AAuto可以将硬盘目录,硬盘文件一键嵌入EXE文件,将全部程序包含所有资源生成独立的绿色EXE文件,所有文件读写的相关函数自动支持,无需更改代码,AAuto制作的程序不需要安装程序,也不需要释放DLL运行库,AAuto制作的程序都是免安装绿色软件。
AAuto语法优美,最大兼容流行的C系,Pascal语法,并且可以自定义一套自己的语法。有其他语言基础的可以轻松上手,学习AAuto以后学习其他编程语言更可事半功倍,AAuto不象其他的一些编程语言,在语法风格,函数命名上都保持了良好的兼容性、通用性。
AAuto原生支持多线程开发,复杂的多线程开发在AAuto中变得非常简单,AAuto所有对象先天线程安全,自动解决所有并发问题,标准库提供大量简化多线程开发的辅助支持库。例如 thread.command 实现的线程命令订阅模式,为多线程软件开发带来很大的方便。
AAuto的标准库基本使用纯AAuto源码实现,并且全部开源,标准库提供了大量的简化编程的常用函数,涉及到软件开发的方方面面,极大的简化了桌面软件开发过程。
软件界面快速开发
AAuto提供web.form支持库( 开源 ),可以创建web窗体加载网页创建web风格的软件界面,网页与本机代码可以直接交互,在快手工程向导里,就提供了 WEB UI 的模板。在使用web窗体时,你能感受到AAuto这种混合语言带来的巨大方便,较之传统编程语言,AAuto 可以更快更加方便的创建 WEB UI 程序,在AAuto自带的范例中,就有一个多窗口浏览器的范例,仅仅使用了一页300行源码就实现了一个功能较完整的多窗口网页浏览器,可以看出使用AAuto极大的简化了Web相关开发技术。
另外,AAuto提供了web.layout支持库,封装了轻量快速的界面引擎HTMLayout,可以使用传统的HTML,CSS技术,更加方便的实现漂亮的界面,而且运行,响应速度极快,官方也提供了大量HTMLayout的范例,教程。
当然,使用AAuto开发传统界面也非常的方便,AAuto提供可视化开发工具,可以象VB一样(实际上比VB更简单)的通过拖拉控件创建程序。
快手 - AAuto集成开发环境
快手是用于AAuto程序开发的可视化集成开发环境(IDE)。 面向个人或企业用户,商业或非商业应用,本软件永久免费。快手内置AAuto标准库,以及大量范例全部开源。AAuto用户可以自由使用无需付费,使用AAuto制作的软件产品不需要声明使用AAuto开发,免费使用AAuto无任何附加条件。
AAuto发布两年以来,
创建的EXE文件保持通过全世界37款主流杀毒软件的安全检测无病毒,无误报。
快手(AAuto) 是360软件宝库推荐的安全放心软件,
并且是编程开发类精选推荐软件中唯一入选的国产开发工具:
AAuto官方网站:http://www.aau.cn/
部份用户评价供参考:
lujjh
说心里话,快手(AAuto)的确是一个我非常喜欢的编程语言。倒也并不仅仅是因为它出于国人之手,即便是同国外其他编程语言放在同一水平线上比,快手依然有它的优势,有它的闪光点。这让我想起了国内编程界的两类极端人物:一类拼命为国产编程语言说好话,把编程语言的选择硬是扯到了爱国层面;另一类人则背道而驰,有着“国外月亮圆”的思想,只要是国人的东西,骂了再说。
这两类人,当然是两个极端,显然不妥。另有人将快手与C、C++,甚至与汇编相比较,由诸如快手生成空白窗体的EXE文件比C++大而得出结论——快手不及C++。这样的比较是毫无意义的,这些编程语言的设计意图不同,面向的人群也不同,这样盲目比较就好比说,吃米饭比喝白开水更容易填饱肚子,所以米饭比白开水好。快手,为快速开发桌面软件而生,花费了作者很多年的心血。那么,是否如同它的名字一般,开发桌面软件非常快呢?至少,我用下来的感觉是肯定的,这也是我写这份教程的原因之一。
如果你是一名彻头彻尾的快手初学者,并且之前从来没有听说过快手,那么恭喜你,因为你今天发现了一个宝盒。如果你愿意花费几个月的时间打开这个宝盒,你将会收获无数的宝藏。快手,为快速开发桌面软件而生(我预计很少有人会认真对待前言,在此特地重复一下这句话)。换言之,用快手开发小型桌面软件的效率是绝对一流的,不信就跟着我一起学下去,你会体验到快手的魅力所在。快手,追求简洁。不知大家是否听说过KISS(Keep It Simple, Stupid) 这个理念,就目前而言,快手的发行包在压缩后不到7M,并且是不折不扣的免安装绿色软件。
笑问天
十多年来,我不曾写出有用的小程序,悲哀我今生无用、与编程无缘;仅几个月,快手让我写出几个好应用,感叹快手的强大、我也有能耐;我也有成就了,谁会与我一同享受这份喜悦与快乐?我感谢一鹤,感谢他无私的奉献、不懈的追求!我感谢快手,感谢它灵活而强大、强悍而精炼!我感谢群里、论坛里的兄弟姐妹们,我从你们的帖子吸收了营养,我从你们的帮助学到了许多东西。我爱你们,爱这里的一切!
漂泊的心
努力学习!体积小巧,纯绿色,全免费的快手的出世是电脑爱好者的福音! 我现在学会了2种(完全理解,并能熟练运用)1:找图2:web登陆在此得瑟一下,并借此机会向老大报喜,向老大致敬! 学会的知识以个人日志的形式记录下来!
我是老废
是快手帮助我在30多岁的时候终于赚到一点钱不说别的,只要快手需要,我什么都愿意做但是,本人比较懒,学习方面真的很差只是做些简单的应用,惭愧啊
zero
以前的时候我对编程其实并没有什么自己的心得,甚至觉得也许自己并不太适合编程而最近,接触快手到今天刚好3周,第一周学习,这两周写程序,我发现原来感觉很复杂的东西,在这两周的编写中变得非常顺畅,脑子里面的思路也似乎一下子就拓宽了很多,我是一个快手新手,这两周总会在论坛里面求助,真的非常感谢look,笑问天,xauto对我的问题的解答,对我帮助很大。实现想要的功能所带给我的成就感让我非常享受,感谢快手,感谢一鹤老大
赜氏
快手让我解决了10几年来一直没能解决的问题。高效!易懂易学。谢谢老大
cbtan
2010年8月份的时候在QQ 邮件中,看到一封标题是“有了VB,VC,我为什么要选择AAuto语言” 的文章,很认真的看完之后,埋葬在自己心底多年的编程梦,一口气的蹦了过去!其实我很好奇,感觉那些程序员很神秘,写的代码很英文,而我又喜欢电脑知识............玩快手都到现在 7月份都快有 10个月了,时间过的真快!现在白天还是上班,晚上网络上的朋友有单做的话,我就做呗!我也就是从5月份才开始在网络做点事,这几个月每月平均除了工资也有网络的收入,我也只是晚上做几小时,感觉真好!想当年,我学 “快手” 纯粹是自己的兴趣而学,我还真没想到半年后能帮助到我的生活!突然想起那句话--------快手,只有想不到,没有做不到!
qhxn1231
我看过其他的语言一直看不懂,若干年。今年我又看有什么语言能学习,AAUTO让我很快入门。至少知道,每天在进步。
qq__147
初识快手,是两年前的事了。当时正在找一个自动按鼠标的工具,偶然接触到了快手,即为它的永久免费和开源所折服。两年过去了,自己用来做了几个小工具自已用,能减轻自己的工作量。本人非软件专业出身,只能用点简单的功能,未及快手强大功能的万分之一。经过快手作者及快手支持者们的努力,快手也本升级到现在的V2.3.4,功能更加强大了。需快速开发桌面软件者选择它绝不会后悔!
jyb21
这是一门唯一让我能够静下心来学习的语言,也愿意潜心学习的语言,而且完全是自学,我从来没想到自学也可以学会一门编程语言,毕竟大学毕业都10来年了,学的又不是计算机专业。我已经通过自学写了不少小软件了,这是其中一
AAuto 自绘 listbox,三下五除二
http://www.aau.cn/data/attachment/forum/201101/09/223523xzm2c8754zpmxp91.gif
import win.ui;
import win.graphics;
/*DSG{{*/
var winform = win.form(parent=...; bottom=344;text="AAuto Form";border="resizable";right=472 )
winform.add(
listbox={ dr=1;dl=1;bgcolor=16777215;vscroll=1;right=458;left=12;dt=1;db=1;cls="listbox";bottom=332;text="listbox";
items={};font=LOGFONT( name="宋体";h=-12 );style=0x20/*_LBS_OWNERDRAWVARIABLE*/|0x40/*_LBS_HASSTRINGS*/;z=1;top=11 }
)
/*}}*/
winform.wndproc = function (hwnd,message,wparam,lparam){
select(message) {
case 0x2C/*_WM_MEASUREITEM*/ {
var m = ::MEASUREITEMSTRUCT();
raw.convert(topointer(lparam), m);
m.itemHeight = 51; // 每个 Item 高 51 个像素
::CopyMemoryByStruct(topointer(lparam), m, raw.sizeof(m));
}
case 0x2B/*_WM_DRAWITEM*/ {
var ds = ::DRAWITEMSTRUCT();
raw.convert(topointer(lparam), ds);
if (ds.hwndItem == winform.listbox.hwnd) {
var cvs = win.graphics.canvas(); // 创建一个画布
cvs.fromHDC(ds.hDC); // 传入 hDC
cvs.brush.color = 0xffffff; // 定义刷子颜色
cvs.fillRect(ds.rcItem);
if (ds.itemID > 0) { // 除了第一个 Item,其他的都画线
cvs.pen.color = 0xebebeb; // 定义画笔的颜色
cvs.moveTo(ds.rcItem.left, ds.rcItem.top); // 想像画画的过程,落笔
cvs.lineTo(ds.rcItem.right, ds.rcItem.top); // 提笔
}
if (ds.itemState & 0x1/*_ODS_SELECTED*/) { // 选中 Item 的绘制
cvs.brush.color = 0xaeebff;
cvs.frameRect(ds.rcItem); // 边框
var rect = ::RECT(ds.rcItem.left + 1, ds.rcItem.top + 1, ds.rcItem.right - 1, ds.rcItem.bottom - 1);
// 结构体在 AAuto 中传递的是内存地址,所以重新构造一个 ::RECT
cvs.brush.color = 0xedfcff;
cvs.frameRect(rect); // 内边框
rect.left++; rect.top++; rect.right--; rect.bottom--;
cvs.gradientFill(rect, 0xddf8fe, 0xb7edff, 0x1/*_GRADIENT_FILL_RECT_V*/);
}
var data = string.split(winform.listbox.getItemText(ds.itemID + 1), "|");
if (#data == 2) {
cvs.font.bold = true; // 粗体
cvs.font.color = 0x000000; // 颜色
cvs.textOut(ds.rcItem.left + 18, ds.rcItem.top + 10, data);
cvs.font.bold = false;
cvs.font.color = 0x666666;
cvs.textOut(ds.rcItem.left + 18, ds.rcItem.top + 26, data);
}
cvs.destroy();
}
return 1;
}
}
}
winform.listbox.add("腾讯QQ|一款及时聊天软件");
winform.listbox.add("Microsoft Office|一款办公套装");
winform.show();
win.loopMessage();
示例:快盘API AAuto支持库
import console;
import kpan;
//创建快盘客户端
var kpClient = kpan.client(
appKey = "请在这里输入快盘开放平台申请的 consumer_key ";
appSecret = "请在这里输入快盘开放平台申请的 consumer_Secret "
);
//oAuth登录快盘
var token,err,err2 = kpClient.oAuth.authorise(
function( authoriseUrl ){
//使用Web窗体打开 authoriseUrl 让用户登录即可
import win.ui;
import web.form;
var winform = ..win.form( bottom=541;scroll=1;text="快盘账号登录";right=843 )
var wb = web.form( winform);
wb.go( authoriseUrl )
winform.show()
var ele = wb.waitQueryEles(innerHTML="授权码";tagName="DIV");
if( ele ){ };
winform.close();
win.loopMessage();
}
)
if( !token ){
console.log("登录失败",err,err2 )
return;
}
//显示用户信息
var accountInfo = kpClient.oAuth.getAccountInfo();
console.varDump( kpClient.oAuth.getAccountInfo() )
//定义上传函数
upload = function(localPath,remotePath){
var uploadUrl = kpClient.getUploadUrl(remotePath);
if( uploadUrl ){
var formdata = ..web.uploadData("","file",localPath);
return kpClient.session.post(uploadUrl, formdata.data ,formdata.header )
}
}
//定义下载函数
download = function(remotePath,localPath){
var downloadUrl = kpClient.getDownloadUrl(remotePath);
if( downloadUrl ){
var data = kpClient.session.get(downloadUrl);
if( data ){
string.save( localPath,data )
return true;
}
}
}
//创建目录
var ret = kpClient.createFolder("test/abc")
//创建一个测试文件
string.save("/test.txt","测试文件" )
//测试上传
var ret = upload("/test.txt","/test/test123.txt");
//测试下载
download( "/test/test123.txt","/download.txt" )
AAuto + FastCGI 开发web服务端程序
http://www.aau.cn/thread-8213-1-1.html
http://www.aau.cn/data/attachment/forum/201209/25/231257z7e3x4avvgei0z03.png
精仿360界面
http://www.aau.cn/thread-8528-1-1.html
http://www.aau.cn/data/attachment/forum/201211/05/143847c00d8tca0e6teew0.jpg
桌面宠物虎鲸
http://www.aau.cn/thread-8485-1-1.html
/**
桌面虎鲸
Author: hai321
参考资料:
[源码分享] HTMLayout 使用APNG制作桌面透明动画窗口<a >http://www.aau.cn/thread-7922-1-1.html</a>
**/
import win.ui;
import winex;
/*DSG{{*/
winform = ..win.form( text="虎鲸";bottom=170;parent=...;right=297;border="none";topmost=1;exmode="toolwindow";mode="popup";cls="hujing" )
winform.add()
/*}}*/
//启用分层窗口
winform.modifyStyleEx(,0x80000/*_WS_EX_LAYERED*/)
import web.layout;
wbLayout = web.layout(winform);
wbLayout.html =/***
<div id="myTab"><img src="/res/daddy-left.png"/></div>
<menu.context id="menuId">
<li>桌面图标
<menu>
<li id="i1">隐藏图标</li>
<li id="i2">显示图标</li>
</menu>
</li>
<li>选择鲸鱼
<menu>
<li id="i5">鲸鱼爸爸</li>
<li id="i6">鲸鱼妈妈</li>
<li id="i6">鲸鱼宝宝</li>
</menu>
</li>
<li id="i7">关于虎鲸</li>
<li id="i8">退出</li>
</menu>
***/
wbLayout.css = /**
html {
background-color:transparent; /*网页背景透明*/
context-menu:selector(menu#menuId);
}
menu{
width: max-intrinsic; /*内容的最大宽度,可以超出屏幕*/
background: url(/res/menu-back-office.png) expand;
background-position: 0 0 0 24;
text-align:left;
}
**/
//修改节点代码
xghtml=function(){
if( thread.get("我是") = "爸爸"){
var myTab = wbLayout.getEle("myTab")//获取节点
if(myTab){
if(向左游动 = false){
myTab.child(1).innerHTML = '<img src="/res/daddy-right.png" />'
}else {
myTab.child(1).innerHTML = '<img src="/res/daddy-left.png" />'
}
}
}
elseif( thread.get("我是") = "妈妈"){
var myTab = wbLayout.getEle("myTab")//获取节点
if(myTab){
if(向左游动 = false){
myTab.child(1).innerHTML = '<img src="/res/mummy-right.png" />'
}else {
myTab.child(1).innerHTML = '<img src="/res/mummy-left.png" />'
}
}
}
elseif( thread.get("我是") = "宝宝"){
var myTab = wbLayout.getEle("myTab")//获取节点
if(myTab){
if(向左游动 = false){
myTab.child(1).innerHTML = '<img src="/res/son-right.png" />'
}else {
myTab.child(1).innerHTML = '<img src="/res/son-left.png" />'
}
}
}
是否游动 = true;
winform.settimer(tmid,15);//修改定时器
}
wbLayout.documentElement.attachEventHandler(
//鼠标按下拖动触发下面的函数
onMouseMove = function (ltTarget,ltEle,x,y,ltMouseParams) {
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
是否游动 = false;
winform.settimer(tmid,5000)
var wx,wy = winform.getPos();
wx = wx + (x - winform.downPos.x)
wy = wy + (y - winform.downPos.y)
ltTarget.getForm().setPos( wx,wy)
return true;
}
}
//鼠标按下触发下面的函数
onMouseDown = function (ltTarget,ltEle,x,y,ltMouseParams) {
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
是否游动 = false
winform.settimer(tmid,1000000)//定时器暂停3秒等待退出等命令
winform.capture = true;
winform.downPos = { x = x ;y = y}
}
elseif(ltMouseParams.button_state==2){
是否游动 = false
winform.settimer(tmid,1000000)//定时器暂停3秒等待退出等命令
winform.capture = true;
winform.downPos = { x = x ;y = y}
}
}
//鼠标弹起触发下面的函数
onMouseUp = function (ltTarget,ltEle,x,y,ltMouseParams) {
if( ltMouseParams.button_state == 1/*_HL_MAIN_MOUSE_BUTTON*/ ){
winform.settimer(tmid,15);//修改定时器
是否游动 = true;
}
}
)
//桌面句柄
var hDskManager,hShellView = winex.findExists("Program Manager",,"Progman","SHELLDLL_DefView")
//右键菜单触发下面的函数
wbLayout.onMenuItemClick = function (ltTarget,ltEle,reason,behaviorParams) {
是否游动 = false;
if( ltTarget.innerText == "退出" ){
win.show(hShellView,true);//退出前显示桌面图标
winform.close();
}
elseif(ltTarget.innerText == "隐藏图标"){
win.show(hShellView,false);//隐藏桌面图标
winform.settimer(tmid,15);//修改定时器
是否游动 = true;
}
elseif(ltTarget.innerText == "显示图标"){
win.show(hShellView,true);//显示桌面图标
winform.settimer(tmid,15);//修改定时器
是否游动 = true;
}
elseif( ltTarget.innerText == "鲸鱼爸爸" ){
thread.set("我是","爸爸" )
xghtml();//修改代码
}
elseif( ltTarget.innerText == "鲸鱼妈妈" ){
thread.set("我是","妈妈" )
xghtml();//修改代码
}
elseif( ltTarget.innerText == "鲸鱼宝宝" ){
thread.set("我是","宝宝" )
xghtml();//修改代码
}
elseif( ltTarget.innerText == "关于虎鲸" ){
import process
process.execute("http://baike.baidu.com/view/9005.htm")
winform.settimer(tmid,15);//修改定时器
是否游动 = true;
}
}
//默认设置
横位置,纵位置 = win.getScreen();//取系统分辨率
var hwnd = winform.hwnd;
win.setPos(hwnd,横位置-200,200);//起始位置
winform.show()
math.randomize()
num = 1;
r = 0;
thread.set("我是","爸爸" )
向左游动 = true; //向左移动
是否游动 = true; //开始时游动
//随机向上向下平行游动
randmove=function(tmid,xnum){
if(num>200 and cy<纵位置 and cy>0 ){//在屏幕内游动200次后,随机改变方向
r = math.random(-1,1);
num = 1;
}
elseif(cy>纵位置+20){//游动超出屏幕下方时改为向上游动
r=-1
}
elseif(cy<-20){//游动超出屏幕上方时改为向下游动
r=1
}
num =num+ 1;
if(r=0){//直线游动时减慢速度
winform.settimer(tmid,25)
}
else{//加快速度
winform.settimer(tmid,15)
}
win.setPos(hwnd,cx+xnum,cy+r)
}
//向左移动
left=function(tmid){
cx,cy = win.getPos(hwnd,true)
if(cx>-240){//未超出屏幕左边时,随机游动
xnum=-1
randmove(tmid,xnum)//随机游动
}
else {
向左游动 = false;;//调用向右移动;
xghtml();//修改代码
}
}
//向右移动
right=function(tmid){
cx,cy = win.getPos(hwnd,true)
if(cx<横位置){//未超出屏幕右边时,随机游动
xnum=1
randmove(tmid2,xnum);//随机游动
}
else {
向左游动 = true; ;//向左移动
xghtml();//修改代码
}
}
//定时器控制游动
tmid = winform.addtimer(
15/*毫秒*/,
function(hwnd,msg,id,tick){
if(是否游动 = true){
if(向左游动 = true){
left(tmid)
}
else {
right(tmid)
}
}
}
);
win.loopMessage(); 这个语言很简单学么
自动玩扫雷,鼠标模拟+远程call
import process;
import winex;
import mouse;
import key;
//地址是在我的xp机器上找到的,不知道一不一样~~~~
/*
MOD:
模式
0:call模式
1:鼠标模拟模式
*/
var MOD = 1
var CALLADDR = 0x010037E1 //call地址
var DATABASE = 0x1005340 //棋盘基址
var SETBASE = 0x01005330 //设置基址+0:雷点个数 +4:棋盘宽 +8:棋盘高
var XYBASE = 0x01005118 //call参数:XYBASE:x XYBASE+4:y
var prc = process("winmine.exe") //创建扫雷进程
var act,hwnd;
if(MOD){//鼠标模式
hwnd = winex.waitVisible("扫雷");//获取窗口句柄
win.getActive(hwnd); //激活窗口
x,y,cx,cy=win.getPos(hwnd); //获取窗口坐标
}else{//call模式
act = prc.remoteApi("void()", CALLADDR);//获取远程call
}
var width = prc.readNumber(SETBASE+4,"INT")
var height = prc.readNumber(SETBASE+8,"INT")
for(j=1;height)
for(i=1;width)
{
n = prc.readNumber(DATABASE+i+32*j,"byte")//棋盘基址+x+y*32=棋盘点的值
/*
n:棋盘点的值
未点击时:无雷:0f;;;有雷,8f (有用)
点击后:无雷:4x,x=周围雷的个数;;;有雷8x
*/
if(n==0x0f)
{
if(MOD){
mouse.move(x+4+16*i,y+96+16*j,true);//移动到坐标点
mouse.click(); //点击
//sleep(500)
}else{
prc.writeNumber(XYBASE,i,"INT")//写X坐标
prc.writeNumber(XYBASE+4,j,"INT")//写Y坐标
act(); //点击函数
}
}
}
prc.free(); //释放句柄
//外部CALL读取命令行
//列出所有已运行进程的命令行参数
import winex;
io.open()
io.print("请关闭所有监控软件")
execute("pause") //按任意键继续
//遍历所有窗口
for hwnd,title,theadId,processId in winex.each( ) {
if(title != ""){ //如果标题不为空
//在外部EXE进程创建函数
try{
//一句代码创建CALL函数
var getCommandLine_call = raw.remoteApi(processId,"string()"
,"Kernel32.dll","GetCommandLineA");
//象API一样使用
str = getCommandLine_call()
io.print(processId,title,str)
}
}
}
AAuto调用python演示
io.open()
import py;
pyCode = /**
def sign_request():
from hashlib import sha1
import hmac
import binascii
key = "\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
raw = "Hi There" # as specified by oauth
hashed = hmac.new(key, raw, sha1)
return binascii.b2a_base64(hashed.digest())[:-1]
**/
py.run( pyCode )
__main__ = py.addModule("__main__") //创建模块对象
sign_request = __main__.getPyAttr("sign_request")//返回函数对象
var ret = sign_request.callPyFunction().parseString()//调用函数并获取返回值
//上面的代码也可以简写为一句, io.print() 自动调用 tostring( ret )
io.print( __main__.sign_request())
execute("pause") //按任意键继续
io.close();//关闭控制台
AAuto调用JAVA演示
import java;
var jvm = java();
var jmain = jvm.getStaticClassMethod(
"HelloworldApp", //类名
"main", //函数名
"string(string[])"//函数原型语法与API相同,不同的是可以使用[]表示数组参数
);
io.open()
//运行java静态函数,获取返回值.
var str = jmain( "测试","运行java")
io.print( str )
//创建java类实例
var jstring = jvm.newJavaObject(
"java.lang.String",
"void(WORD[])",
string.fromto("测试",0,65001)
);
//创建java类实例,并调用其成员方法
var helloworld = jvm.newJavaObject( "HelloworldApp","void()");
test = helloworld.getMethod("test","int(int)")
io.print( test(3) );
execute("pause") //按任意键继续
io.close();//关闭控制台
AAuto嵌入PHP演示
import php;
//打开控制台
io.open()
//PHP代码
phpcode =/*
$a="我是PHP中的变量a";
function main(){
global $a;
return $a." 这是main()函数的返回值";
};
*/
//运行PHP代码
php.exec(phpcode)
//运行PHP代码,调用函数返回值,不要使用eval执行太长的代码,eval不能捕获PHP中的致命错误
var ret = php.eval("main()")
io.print( ret );
//运行php代码,返回表达式的值
var ret = php.eval("8899")
io.print( ret );
//再用eval函数访问PHP中的变量
var ret = php.eval("$a")
io.print( ret );
//更简单一些,直接读PHP中的变量
io.print("直接读取PHP中的变量", php.a )
//同上,也可以直接修改PHP中的变量
php.global_abc = 2011