|
楼主 |
发表于 2011-7-17 00:35:15
|
显示全部楼层
本帖最后由 qqmmcc 于 2011-8-2 12:22 编辑
二。窗体主程序main.aardio
2.1知识要点
新建对话框工程后,系统则进入该页面,在工具箱-界面控件选择所需的控件直接拖到窗体即可
功能组件,非可视控件,点击所选组件,即进入代码编辑界面,自动生成代码
若想了解相关的windows窗体使用控件的属性、事件、消息等用法,详尽的资料可参阅微软的MSDN档案
aardio的库源码及软件携带的windows消息大全也有部分内容
在论坛的win程序设计(win) 版面也有许多相关讨论,遇到问题请善用论坛搜索,如搜索不到可提出问题。
2.2实例程序
在此实例中,功能简单设计:
导入账号资料---->点击开始----->打开WEB窗体(隐藏不显示)---->循环自动登录并摇一摇---->结束运行
[一键续期] 功能暂未实现,有兴趣的朋友可以自己实现,作为练习
作为账号资料的简单保存配置文件,可选择ini、txt、lst后缀文件,在此示例我选择了lst文件(string.list库支持)关于lst文件及用法可参考软件自带范例:文件操作---字符串列表
在主程序创建子窗口,在资源文件夹(res)添加文件即可。
然后直接拖动aardio文件至主窗口代码区,即自动生成以下代码:
var child,wb = winform.loadForm("\res\115web.aardio", );
child.show();
使用winform.loadForm 导入子窗体aardio文件,父子窗体之间调用函数非常方便,无论在子窗口或主窗口定义的全局函数,在各自窗体调用对方文件定义的函数时直接写:函数名() 即可
按照思路设计控件窗口,并就近原则封装定义函数,详见代码:
import win.ui
import fsys.dlg;
import process;
import my;//导入用户库
/*DSG{{*/
var winform = win.form( right=349;bgcolor=15780518;bottom=450;max=false;text="115工具 by qqmmcc" )
winform.add(
importing={ bottom=258;right=103;left=33;top=229;font=LOGFONT( name="宋体";h=-12 );z=8;text="导入";cls="button" };
static={ bottom=444;color=0;right=290;left=70;top=426;font=LOGFONT( underline=1;h=-12;name="宋体"; );z=11;transparent=1;notify=1;text="点击获取该软件教程及源码";cls="static" };
chooseip={ bottom=69;right=104;left=32;
items={ "1";"3";"5" };font=LOGFONT( name="宋体";h=-12 );text="3";z=6;top=49;mode="dropdownlist";edge=1;cls="combobox" };
ip={ bottom=69;right=297;left=137;top=51;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=9;text="<---选择运行N个账户后换IP";cls="static" };
renewal={ bottom=37;right=299;left=228;top=22;font=LOGFONT( name="宋体";h=-12 );z=4;text="一键续期";cls="checkbox" };
login={ checked=1;bottom=38;right=92;left=29;top=22;font=LOGFONT( name="宋体";h=-12 );z=2;text="登录";cls="radiobutton" };
exit={ bottom=185;right=102;left=32;top=156;font=LOGFONT( name="宋体";h=-12 );z=7;text="退出";cls="button" };
status={ bgcolor=16777215;bottom=261;text="listbox";left=134;right=308;top=80;font=LOGFONT( name="宋体";h=-12 );z=5;vscroll=1;
items={ };edge=1;cls="listbox" };
yao={ checked=1;bottom=37;right=192;left=128;top=22;font=LOGFONT( name="宋体";h=-12 );z=3;text="摇一摇";cls="checkbox" };
start={ bottom=117;right=101;left=31;top=88;font=LOGFONT( name="宋体";h=-12 );z=1;text="开始";cls="button" };
account={ bgcolor=16777215;vscroll=1;bottom=418;text="listview";left=34;fullRow=1;top=282;font=LOGFONT( name="宋体";h=-12 );z=10;gridLines=1;right=309;edge=1;cls="listview" }
)
/*}}*/
//初始设置
winform.chooseip.selIndex=2//设置默认运行3个账户后换IP
//设置账户列表
winform.account.insertColumn("账号",90,1)
winform.account.insertColumn("密码",90,2)
winform.account.insertColumn("获取空间",90,3)
//设置最小化窗口弹出托盘图标,使用用户库封装的函数
my.traypopMenu(winform)
my.trayPop(winform,"115网盘工具")
/*
设置手动登录操作弹出菜单
*/
winform.lvpopmenu = win.ui.popmenu(winform);//创建弹出菜单
winform.lvpopmenu.add('手动登录操作',function(id){
//在下面输入菜单响应代码
child,wb = winform.loadcode("\res\115web.aardio",winform /*指定父窗口*/ )
child.show()//由于WEB窗体默认不显示,这里需要显示手动操作
user=winform.account.getItemText(winform.account.selIndex,1)
pass=winform.account.getItemText(winform.account.selIndex,2)
login(user,pass)
});
import mouse;
winform.account.onnotify = function(id,code,ptr){
if(code==0xFFFFFFFB/*_NM_RCLICK*/){
var x,y = mouse.getPos()
winform.lvpopmenu.popup(x,y,true);//弹出菜单
}
}
//点击"开始",再点击"停止"
winform.start.oncommand = function(id,event){
if(!tlist){win.msgbox("请导入资料","aardio");return ; }
if( winform.start.text == "开始" ){ //开始循环
winform.start.text = "停止"
child,wb = winform.loadcode("\res\115web.aardio",winform /*指定父窗口*/ );
win.delay(100)
execuLoop()//执行循环操作
return ;
}
if(winform.start.text=="停止"){ //结束循环
winform.start.text = "开始"
return ;
}
}
//退出程序
winform.exit.oncommand = function(id,event){
winform.close();
win.quitMessage();
}
//导入账号密码
import string.list;
winform.importing.oncommand = function(id,event){
dir=fsys.dlg.open();//打开文件夹选择文件
tlist = string.list(dir)
for i,na,ps in tlist.each() {
winform.account.addItem()
winform.account.setItemText(na,i,1)
winform.account.setItemText(ps,i,2)
}
}
//定义选择运行N个账户换ip
chooseIp = function(n,m){
if(n>=m&&n%m=0){
msg("正在断线拨号请稍候")
my.dialLink()
my.randomTime(10000,15000)
msg("-------------------------")
}
}
//判断选择项,若勾选了摇一摇则执行摇一摇
selChecked = function(row,user){
if(winform.yao.checked=1){
msg("准备摇盘...")
var text = yao()//yao()函数在web窗体定义,在主窗体执行
winform.account.setItemText(text,row,3)
msg(user+"获取"+text+"空间")
return ;
}
if(winform.yao.checked=0){
return ;
}
}
//定义循环执行事件
execuLoop=function(){
var num = tonumber(winform.chooseip.text);
for i,na,ps in tlist.each() {
if(winform.start.text=="开始"){
break ;
}
win.delay(1000)
msg(na+"正在登录,请稍候...")
checkLogin(na,ps)
msg("登录成功...")
my.randomTime(1990,4999)
selChecked(i,na)
my.randomTime(2990,5999)
msg(na+"正在退出...")
logout()
msg("-------------------------")
my.randomTime(5000,10000)
chooseIp(i,num)
}
msg("所有账户操作完毕")
winform.start.text="开始";
return ;
}
/*显示消息*/
msg = function(s){
//信息在列表框里显示
winform.status.add(s);
winform.status.redraw();
::SendMessageInt(winform.status.hwnd,0x115/*_WM_VSCROLL*/,0x3/*_SB_PAGEDOWN*/,0); //自动滚动列表框到底部
}
winform.static.oncommand = function(id,event){
process.execute("http://bbs.aardio.com/thread-2355-1-1.html")
}
import win.cur;
//鼠标回到窗体上时,切换鼠标为箭头
winform.wndproc = function(hwnd,message,wparam,lparam){
if(message = 0x20/*_WM_SETCURSOR*/){
win.cur.load(0x7F00/*_IDC_ARROW*/)
win.cur.setCur();
}
}
//当鼠标指针移到静态控件上是,切换鼠标为手形
var hand = win.cur.load(32649/*_IDC_HAND*/)
winform.static.wndproc = function(hwnd,message,wparam,lparam){
if(message = 0x200/*_WM_MOUSEMOVE*/) {
win.cur.setCur(hand);
}
}
winform.show();
win.loopMessage();
return winform;
|
|