快手软件

【AAuto】QQ 客户端全源码

【简介】 
快手W.QQ2012,采用腾讯QQ之w.qq.com协议(手机网页版)。 

【目的】 
1、第一次尝试Web UI开发应用 
2、进阶学习快手 
3、制作QQ机器人,应用于PHP或者直接数据库交互 

【分享包】 
1、快手项目包(aau、htm、js、css、picture) 
2、Png源文件以及QQ素材 

【开发用的工具有】 
1、IDE:快手AAuto最新版  
2、网页设计:DreamWeaver CS5.5 + Jquery插件智能提示 
3、图形UI设计:FireWorks CS5.5 
4、快速编辑器:EditPlus3 
5、调试Debug浏览器:FireFox8 + fireBug插件 
6、应用图标设计:IconWorkshop 

【准备与流程】 
1、熟看快手范例 
2、熟悉Javascript语言 
3、熟悉Jquery框架 
4、熟悉CSS层叠样式设计 
5、参考腾讯官方QQ界面,构思UI 
5、获取基本素材,通过QQ资源包获取 
6、了解w.qq.com功能,分析网页js以及firebug进行抓包对比分析

【协议】 
1、登陆协议: 由于腾讯所有WEB登陆应用,都是同一协议。我会在细化补充 
2、w.qq.com协议看似比较简单,但也有难度。简单:利用官方的rpcservice.js文件能看懂逻辑交互类似(MVC里的M和C),views.js相当于V。复杂:数据相对复杂,没有json那样的美观,一句话简陋得不能再简陋(需要靠读rpcservice.js和dump结果分析)。 
3、我下次会专门抽时间,把协议简单理一下,并画出w.qq.com中的js简单逻辑流程图

【备注】 
1、源码开源!“自由”请理解好,请不要拿这个东西干坏事,切忌切忌! 
2、可以转载,可以二次开发,可以商用,反正“自由”。 

全源码下载地址:
 http://www.aau.cn/thread-4216-1-1.html 

 

【界面】 

                     

 

 

import web.ui;
import web.util;
import process;
import fsys;
import qq;
/*DSG{{*/
var winform = win.form(parent=...; text="Web UI";title=false;bottom=226;max=false;right=353;border="none";mode="popup" )
winform.add( 
pic_validate={ dl=1;bottom=294;text="picturebox";left=48;dt=1;top=241;z=1;right=178;hide=1;cls="picturebox" }
)
/*}}*/

winform.text = "W.QQ2012";
var wb = web.form( winform, 0x4/*_UIFLAG_NO3DBORDER*/ );
wb.showMenu=function(x,y,id,ele){ 
    return false;//关闭右键菜单
}
wb.go("/res/login.htm");
//web.ui( wb, 354, 242);    
web.ui( wb, false);
wb.jQuery(); 

wb.attachAll(  
    /* html节点ID = 事件触发函数表 */
    caption_button_website = {
        onclick = function(event){
            process.execute("http://www.ninja911.com");
            //web.util.ieBrowser("http://www.ninja911.com")
        } 
        onmouseup = function(event){
            event.srcElement.blur();
        }
        
    }
);
var dir_data = "\data";
if (!io.exist(dir_data)) {
    fsys.createDir(dir_data);
}
var file_my_qqpcs = "\data\my_qqpcs.js";
if (!io.exist(file_my_qqpcs)) {
    string.save(file_my_qqpcs, $"\res\js\my_qqpcs.js");
}
var qqClass = qq.myqq();

var qq_number = "";
var qq_password = "";
var webqq_type = "";
var tmid = null;

winform.show(true);

wb.external = { 
    ext_qq_login = function (qq_number, qq_password, webqq_type, remember, validate) {
        qq_login(qq_number, qq_password, webqq_type, remember, validate);
    };
    ext_reload_validate = function(qq_number, qq_password, webqq_type){
        reload_validate(qq_number, qq_password, webqq_type);
    };
    ext_recheck_qq_number_validate = function(qq_number){
        recheck_qq_number_validate(qq_number);
    }
    
    
};

show_validate = function(qq_number, status = "show"){
    if (status == "hide") {
        var x,y,cx,cy = win.getPos(winform.hwnd);
        if (cy > 226) {
            win.setPos(winform.hwnd,x,y,cx,226);
        }
        winform.pic_validate.hide = true;
        wb.doScript("show_input_validate('hide');");
    } else {
        var x,y,cx,cy = win.getPos(winform.hwnd);
        if (cy < 306) {
            win.setPos(winform.hwnd,x,y,cx,306);
        }
        var validate_file = "\data\" + qq_number +"\validate.bmp";
        if (io.exist(validate_file)) {
            var validate_data = string.load(validate_file);
            winform.pic_validate.redraw();
            winform.pic_validate.image = validate_data;
        }
        winform.pic_validate.hide = false;
        wb.doScript("show_input_validate('show');");
    }
}



qq_login = function(qq_number, qq_password, webqq_type, remember, validate){
    var js_return = -1;
    if (qq_number == "") {
        win.msgbox('错误:QQ不能为空', '错误', '0x10');
        return;
    }
    if (qq_password == "") {
        win.msgbox('错误:密码不能为空', '错误', '0x10');
        return;
    }
    var tb_config = qqClass.get_class_config();
    qqClass.ini(qq_number, qq_password, webqq_type);
    show_validate(qq_number, "hide");
    if (qqClass.get_logined_status() == false) {
        wb.doScript("toggle_btn_login('hide');");
        var login_status, v1_need_validate, v1_verifysession = qqClass.ui_login(validate);
        if (login_status == "0") {
            show_validate(qq_number, "hide");
            winform.show(false);
            child_form_mbar, child_wb = winform.loadcode("\res\aform\mbar.aau");
            mbar_qq_ini(qqClass.get_class_config());
        } elseif (login_status == -9002) {
            wb.doScript("toggle_btn_login('show');");
            win.msgbox('需要输入验证码' + qq_number, '错误', '0x10');
            show_validate(qq_number);
        } else {
            wb.doScript("toggle_btn_login('show');");
            if (login_status == "4") {
                win.msgbox('验证码校验错误,请重新输入', '错误', '0x10');
                var need_validate, str_verifysession = qqClass.login_request_validate();
                if (need_validate == 1) {
                    show_validate(qq_number, "show");
                }
            } else {
                var err_msg = qqClass.err_msg;
                if (v1_verifysession) {
                    err_msg = v1_verifysession;
                } else {
                    if (err_msg == "") {
                        err_msg = "未知错误";
                    }
                }
                win.msgbox(err_msg, '错误', '0x10');
                qqClass.close();
            }
        }
    }
};


reload_validate = function(qq_number, qq_password, webqq_type){
    if (qq_number == "") {
        win.msgbox('错误:QQ不能为空', '错误', '0x10');
        return;
    }
    if (qq_password == "") {
        win.msgbox('错误:密码不能为空', '错误', '0x10');
        return;
    }
    qqClass.ini(qq_number, qq_password, webqq_type);
    var need_validate, str_verifysession = qqClass.login_request_validate();
    if (need_validate == 1) {
        show_validate(qq_number, "show");
    } else {
        show_validate(qq_number, "hide");
    }
}

recheck_qq_number_validate = function(qq_number){
    if (qq_number == "") {
        win.msgbox('错误:QQ不能为空', '错误', '0x10');
        return;
    }
    if (qqClass.get_logined_status() == false) {
        var need_validate, str_verifysession = qqClass.login_request_validate(qq_number);
        if (need_validate == 1) {
            show_validate(qq_number, "show");
        } else {
            show_validate(qq_number, "hide");
        }
    }
}


winform.wndproc = function(hwnd,message,wparam,lparam){
    select(message) {//判断消息类型
        case  0x10/*_WM_CLOSE窗口关闭消息*/{
            winform.show(false);
            qqClass.exit();
            io.close();
            win.quitMessage();
        }
    }
}

//进入消息循环
win.loopMessage();
return winform,wb;

 

posted on 2011-11-16 18:47  快手软件  阅读(1165)  评论(0编辑  收藏  举报

导航