【AAuto】QQ 客戶端全源碼
【簡介】
快手W.QQ2012,采用騰訊QQ之w.qq.com協(xié)議(手機網(wǎng)頁版)。
【目的】
1、第一次嘗試Web UI開發(fā)應(yīng)用
2、進階學(xué)習(xí)快手
3、制作QQ機器人,應(yīng)用于PHP或者直接數(shù)據(jù)庫交互
【分享包】
1、快手項目包(aau、htm、js、css、picture)
2、Png源文件以及QQ素材
【開發(fā)用的工具有】
1、IDE:快手AAuto最新版
2、網(wǎng)頁設(shè)計:DreamWeaver CS5.5 + Jquery插件智能提示
3、圖形UI設(shè)計:FireWorks CS5.5
4、快速編輯器:EditPlus3
5、調(diào)試Debug瀏覽器:FireFox8 + fireBug插件
6、應(yīng)用圖標設(shè)計:IconWorkshop
【準備與流程】
1、熟看快手范例
2、熟悉Javascript語言
3、熟悉Jquery框架
4、熟悉CSS層疊樣式設(shè)計
5、參考騰訊官方QQ界面,構(gòu)思UI
5、獲取基本素材,通過QQ資源包獲取
6、了解w.qq.com功能,分析網(wǎng)頁js以及firebug進行抓包對比分析
【協(xié)議】
1、登陸協(xié)議: 由于騰訊所有WEB登陸應(yīng)用,都是同一協(xié)議。我會在細化補充
2、w.qq.com協(xié)議看似比較簡單,但也有難度。簡單:利用官方的rpcservice.js文件能看懂邏輯交互類似(MVC里的M和C),views.js相當(dāng)于V。復(fù)雜:數(shù)據(jù)相對復(fù)雜,沒有json那樣的美觀,一句話簡陋得不能再簡陋(需要靠讀rpcservice.js和dump結(jié)果分析)。
3、我下次會專門抽時間,把協(xié)議簡單理一下,并畫出w.qq.com中的js簡單邏輯流程圖
【備注】
1、源碼開源!“自由”請理解好,請不要拿這個東西干壞事,切忌切忌!
2、可以轉(zhuǎn)載,可以二次開發(fā),可以商用,反正“自由”。
全源碼下載地址: http://www.aau.cn/thread-4216-1-1.html
快手W.QQ2012,采用騰訊QQ之w.qq.com協(xié)議(手機網(wǎng)頁版)。
【目的】
1、第一次嘗試Web UI開發(fā)應(yīng)用
2、進階學(xué)習(xí)快手
3、制作QQ機器人,應(yīng)用于PHP或者直接數(shù)據(jù)庫交互
【分享包】
1、快手項目包(aau、htm、js、css、picture)
2、Png源文件以及QQ素材
【開發(fā)用的工具有】
1、IDE:快手AAuto最新版
2、網(wǎng)頁設(shè)計:DreamWeaver CS5.5 + Jquery插件智能提示
3、圖形UI設(shè)計:FireWorks CS5.5
4、快速編輯器:EditPlus3
5、調(diào)試Debug瀏覽器:FireFox8 + fireBug插件
6、應(yīng)用圖標設(shè)計:IconWorkshop
【準備與流程】
1、熟看快手范例
2、熟悉Javascript語言
3、熟悉Jquery框架
4、熟悉CSS層疊樣式設(shè)計
5、參考騰訊官方QQ界面,構(gòu)思UI
5、獲取基本素材,通過QQ資源包獲取
6、了解w.qq.com功能,分析網(wǎng)頁js以及firebug進行抓包對比分析
【協(xié)議】
1、登陸協(xié)議: 由于騰訊所有WEB登陸應(yīng)用,都是同一協(xié)議。我會在細化補充
2、w.qq.com協(xié)議看似比較簡單,但也有難度。簡單:利用官方的rpcservice.js文件能看懂邏輯交互類似(MVC里的M和C),views.js相當(dāng)于V。復(fù)雜:數(shù)據(jù)相對復(fù)雜,沒有json那樣的美觀,一句話簡陋得不能再簡陋(需要靠讀rpcservice.js和dump結(jié)果分析)。
3、我下次會專門抽時間,把協(xié)議簡單理一下,并畫出w.qq.com中的js簡單邏輯流程圖
【備注】
1、源碼開源!“自由”請理解好,請不要拿這個東西干壞事,切忌切忌!
2、可以轉(zhuǎn)載,可以二次開發(fā),可以商用,反正“自由”。
全源碼下載地址: 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;//關(guān)閉右鍵菜單
}
wb.go("/res/login.htm");
//web.ui( wb, 354, 242);
web.ui( wb, false);
wb.jQuery();
wb.attachAll(
/* html節(jié)點ID = 事件觸發(fā)函數(shù)表 */
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窗口關(guān)閉消息*/{
winform.show(false);
qqClass.exit();
io.close();
win.quitMessage();
}
}
}
//進入消息循環(huán)
win.loopMessage();
return winform,wb;
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;//關(guān)閉右鍵菜單
}
wb.go("/res/login.htm");
//web.ui( wb, 354, 242);
web.ui( wb, false);
wb.jQuery();
wb.attachAll(
/* html節(jié)點ID = 事件觸發(fā)函數(shù)表 */
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窗口關(guān)閉消息*/{
winform.show(false);
qqClass.exit();
io.close();
win.quitMessage();
}
}
}
//進入消息循環(huán)
win.loopMessage();
return winform,wb;
浙公網(wǎng)安備 33010602011771號