QQ API
                            
                            
                            QQ API設(shè)計說明書目錄一、引言??? 31.1 編寫目的??? 31.2 更新時間??? 3二、總體設(shè)計??? 3三、注冊的系統(tǒng)消息??? 33.1 WM_QQAPI_REGISTER??? 33.2 WM_QQAPI_REGISTER_RESP??? 43.3 WM_QQAPI_AVAILABLE??? 4四、從設(shè)備到QQ的自定義事件??? 54.1 EVENT_QQAPI_SET_AUDIODEVICE??? 54.2 EVENT_QQAPI_GET_USERINFO??? 54.3 EVENT_QQAPI_PRESS_KEY??? 54.4 EVENT_QQAPI_CALL??? 64.5 EVENT_QQAPI_MUTE??? 64.6 EVENT_QQAPI_UNREGISTER??? 7五、從QQ到設(shè)備的自定義事件??? 75.1 EVENT_QQAPI_USERINFO??? 75.2 EVENT_QQAPI_STATUS_CHANGE??? 75.3 EVENT_QQAPI_SHUTDOWN??? 8六、雙向的自定義事件??? 86.1 EVENT_QQAPI_CALL_STATUS??? 8七、錯誤碼定義??? 107.1 從QQ到設(shè)備――EVENT_QQAPI_ERROR??? 10八、參數(shù)類型碼表??? 11 一、引言1.1 編寫目的本文檔提供了QQ API接口說明,以供第三方應(yīng)用程序使用,用于QQ和硬件設(shè)備(例如USB Phone)的交互。1.2 更新時間最后修訂日期:2005-05-24版本號:v1.0二、總體設(shè)計QQ應(yīng)用程序和第三方應(yīng)用程序以收發(fā)消息的方式進(jìn)行通訊。雙方未成功注冊之前,采用RegisterWindowMessage(Windows API)注冊的系統(tǒng)消息進(jìn)行交互,注冊成功后,雙方分別獲取對方的窗口句柄,接下來的交互通過收發(fā)WM_COPYDATA(Windows消息)消息完成。WM_COPYDATA的wParam參數(shù)為發(fā)送方的窗口句柄,lParam為指向COPYDATASTRUCT結(jié)構(gòu)的指針,COPYDATASTRUCT定義如下:typedef struct tagCOPYDATASTRUCT{????? ULONG_PTR??? dwData;????? DWORD???????? cbData;????? PVOID???????? lpData;}COPYDATASTRUCT, *PCOPYDATASTRUCT;dwData:事件碼,標(biāo)示傳送的消息事件碼lpData:消息參數(shù),采用多個相連的“類型(1字節(jié))+長度(4字節(jié))+值”的格式。所有的參數(shù)類型碼表見8 參數(shù)類型碼表cbData:消息參數(shù)總長度,單位字節(jié)三、注冊的系統(tǒng)消息第三方程序使用Windows SDK――RegisterWindowMessage,進(jìn)行下列系統(tǒng)消息的注冊。例如:RegisterWindowMessage(“WM_QQAPI_REGISTER”);3.1 WM_QQAPI_REGISTER消息名:注冊消息方向:設(shè)備?QQwParam:發(fā)送方的窗口句柄lParam:QQ API版本號,目前為100,表示1.00。第三方應(yīng)用程序啟動并檢測到可用的設(shè)備后,向所有Windows窗口廣播這個消息,帶上自己的窗口句柄作為消息參數(shù),如下:SendMessage( HWND_BROADCAST, WM_QQAPI_REGISTER, 發(fā)送端窗口句柄, 0);當(dāng)QQ收到這個消息時,彈出“外設(shè)控制”窗口等待用戶選擇,如下: 3.2 WM_QQAPI_REGISTER_RESP消息名:注冊回復(fù)消息方向:QQ?設(shè)備wParam:值如下:WAITING(1):等待用戶選擇OK(2):用戶選擇“允許使用”REJECT(3):用戶選擇“禁止使用”lParam:當(dāng)wParam為OK(2)時,lParam為QQ應(yīng)用程序的窗口句柄。當(dāng)用戶選擇“禁止使用”之后,如果第三方應(yīng)用程序再次發(fā)送WM_QQAPI_REGISTER消息,QQ不再彈出“QQ安全警告”框,直接返回REJECT的WM_QQAPI_REGISTER_RESP消息,直到QQ程序重新啟動為止。3.3 WM_QQAPI_AVAILABLE消息名:QQ API可用消息方向:QQ?設(shè)備wParam:發(fā)送方的窗口句柄,即QQ程序的窗口句柄lParam:QQ API版本號,目前為1當(dāng)QQ啟動后,向所有Windows窗口廣播這個消息:SendMessage( HWND_BROADCAST, WM_QQAPI_AVAILABLE, QQ窗口句柄, 0);當(dāng)?shù)谌綉?yīng)用程序收到這個消息時,再發(fā)起WM_QQAPI_REGISTER消息進(jìn)行注冊。這種情況出現(xiàn)在,當(dāng)?shù)谌綉?yīng)用程序先啟動,而QQ程序后啟動的情況下。四、從設(shè)備到QQ的自定義事件4.1 EVENT_QQAPI_SET_AUDIODEVICE事件說明:設(shè)置QQ使用的音頻設(shè)備參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):10lpData:如下表cbData:消息參數(shù)總長度參數(shù)類型碼??? 長度??? 值說明5??? 設(shè)備名長度??? 音頻設(shè)備名,類型:以Null結(jié)尾的字符串6??? 4字節(jié)??? 音頻設(shè)備的設(shè)備ID號,類型:DWORD第三方應(yīng)用程序可通過音頻設(shè)備名字字符串或者通過設(shè)備ID號,來發(fā)送設(shè)置音頻設(shè)備事件。4.2 EVENT_QQAPI_GET_USERINFO事件說明:獲取QQ用戶信息參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):11lpData:NULLcbData:0QQ返回的用戶信息,見5.1 EVENT_QQAPI_USERINFO。4.3 EVENT_QQAPI_PRESS_KEY事件說明:發(fā)送按鍵消息,當(dāng)用戶在設(shè)備上按下任何鍵時,發(fā)送此事件給QQ參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):12lpData:如下表cbData:消息參數(shù)總長度參數(shù)類型碼??? 長度??? 值說明7??? 1字節(jié)??? 鍵值,詳見“鍵值映射表” 鍵值映射表:鍵名??? 鍵值0??? 0x801??? 0x812??? 0x823??? 0x834??? 0x845??? 0x856??? 0x867??? 0x878??? 0x889??? 0x89Down??? 0x8DUp??? 0x8EClear??? 0x8FOK (呼叫鍵)??? 0x91Cancel (掛斷鍵)??? 0x92STAR (*)??? 0x93SHARP (#)??? 0x94Mute (靜音鍵)??? 0x95RINGTONG (切換鈴聲鍵)??? 0x964.4 EVENT_QQAPI_CALL事件說明:直接呼叫一個好友用戶參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):13lpData:如下表cbData:消息參數(shù)總長度通過QQ號呼叫:參數(shù)類型碼??? 長度??? 值說明1??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串通過昵稱呼叫:參數(shù)類型碼??? 長度??? 值說明2??? 昵稱長度??? 昵稱,類型:以Null結(jié)尾的字符串通過速播號呼叫:參數(shù)類型碼??? 長度??? 值說明3??? 速播號長度??? 速播號,類型:以Null結(jié)尾的字符串通過PSTN號碼呼叫:參數(shù)類型碼??? 長度??? 值說明4??? PSTN號碼長度??? PSTN號碼,類型:以Null結(jié)尾的字符串4.5 EVENT_QQAPI_MUTE事件說明:靜音設(shè)置,根據(jù)參數(shù)決定是打開靜音或者關(guān)閉靜音參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):14lpData:如下表cbData:消息參數(shù)總長度參數(shù)類型碼??? 長度??? 值說明12??? 1字節(jié)??? 靜音狀態(tài)標(biāo)志。1:靜音打開;0:靜音關(guān)閉4.6 EVENT_QQAPI_UNREGISTER事件說明:反注冊參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):15lpData:NULLcbData:0當(dāng)?shù)谌綉?yīng)用程序退出時,向QQ發(fā)送此事件消息,QQ將音頻設(shè)備切換回系統(tǒng)原有設(shè)備。五、從QQ到設(shè)備的自定義事件5.1 EVENT_QQAPI_USERINFO事件說明:返回本地QQ用戶信息。對應(yīng)于4.2 EVENT_QQAPI_GET_USERINFO參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):16lpData:如下表cbData:消息參數(shù)總長度參數(shù)類型碼??? 長度??? 值說明1??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串2??? 昵稱長度??? 昵稱,類型:以Null結(jié)尾的字符串5.2 EVENT_QQAPI_STATUS_CHANGE事件說明:QQ上的各種狀態(tài)變化通知參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):17lpData:如下表cbData:消息參數(shù)總長度狀態(tài)變化類型說明:(1)??? DIALNUM說明:撥號時的號碼變化。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明11??? 1字節(jié)??? DIALNUM,狀態(tài)變換類型碼:11??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串當(dāng)用戶撥號,QQ在收號時,如果號碼發(fā)生變換,例如用戶在鍵盤上按一個號碼,或用戶在PC上按一個號碼,或用戶按清除鍵Clear,那么,QQ向第三方程序發(fā)送此事件通知。第三方程序可通過此事件通知來進(jìn)行撥號過程中LCD的顯示操作。5.3 EVENT_QQAPI_SHUTDOWN事件說明:關(guān)閉QQ應(yīng)用程序參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):18lpData:NULLcbData:0當(dāng)QQ應(yīng)用程序退出時,向第三方程序發(fā)送此事件消息。六、雙向的自定義事件6.1 EVENT_QQAPI_CALL_STATUS事件說明:呼叫狀態(tài)通知參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):19lpData:如下表cbData:消息參數(shù)總長度呼叫狀態(tài)類型說明:(1)CONNECTING方向:從QQ到設(shè)備說明:呼出,正在等待對方應(yīng)答。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? CONNECTING,呼叫狀態(tài)類型碼:19??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD10??? 1字節(jié)??? 通話人數(shù),類型:char1??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串2??? 昵稱長度??? 昵稱,類型:以Null結(jié)尾的字符串其中,呼叫句柄為QQ分配的唯一呼叫標(biāo)識符;通話人數(shù)為同時呼出的QQ個數(shù);接下來緊跟的2個參數(shù)子項為被呼叫的QQ好友信息,如果被呼叫的QQ好友有多個,則有多個QQ好友信息。回鈴音由QQ控制播放。(2)RING方向:從QQ到設(shè)備說明:呼入,振鈴。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? RING,呼叫狀態(tài)類型碼:29??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD1??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串2??? 昵稱長度??? 昵稱,類型:以Null結(jié)尾的字符串4(可選)??? PSTN號碼長度??? PSTN號碼,類型:以Null結(jié)尾的字符串其中,呼叫句柄為QQ分配的唯一呼叫標(biāo)識符;接下來的2個參數(shù)子項為呼入QQ好友信息;最后一個參數(shù)項為可選項,呼出的PSTN號碼,該號碼直接由呼叫方指定,本地QQ完成呼叫轉(zhuǎn)移,轉(zhuǎn)到PSTN號碼上。如果RINGING帶了“呼出的PSTN號碼”,則本地不振鈴,直接轉(zhuǎn)移呼出;如果RINGING沒帶“呼出的PSTN號碼”,則本地振鈴。(3)BUSY(針對轉(zhuǎn)接盒設(shè)備)方向:雙向說明:占線。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? BUSY,呼叫狀態(tài)類型碼:39??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD從QQ到設(shè)備:呼出,等待對方應(yīng)答,且當(dāng)對方的設(shè)備被PSTN占用時,則QQ向本地設(shè)備發(fā)送占線狀態(tài)。從設(shè)備到QQ:呼入,本地振鈴,且當(dāng)本地設(shè)備被PSTN占用時,則本地設(shè)備向QQ發(fā)送占線狀態(tài)。(4)ACCEPT方向:從QQ到設(shè)備說明:呼入或呼出,某方接受,雙方進(jìn)入通話狀態(tài)。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? ACCEPT,呼叫狀態(tài)類型碼:49??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD (5)REJECT方向:從QQ到設(shè)備說明:呼入或呼出,某方拒絕。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? REJECT,呼叫狀態(tài)類型碼:59??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD (6)FINISH方向:從QQ到設(shè)備說明:呼入或呼出,通話結(jié)束,無論哪方發(fā)起。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? FINISH,呼叫狀態(tài)類型碼:69??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD (7)FAIL方向:從QQ到設(shè)備說明:呼出失敗。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? FAIL,呼叫狀態(tài)類型碼:79??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD失敗原因可能是,呼叫的用戶不是QQ好友。(8)HOLD(針對轉(zhuǎn)接盒設(shè)備)方向:從設(shè)備到QQ說明:暫停通話,通話被切換到PSTN。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? HOLD,呼叫狀態(tài)類型碼:89??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD (9)RESUME(針對轉(zhuǎn)接盒設(shè)備)方向:從設(shè)備到QQ說明:恢復(fù)通話,通話被切換到回QQ。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? RESUME,呼叫狀態(tài)類型碼:99??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD (10)MUTE方向:從QQ到設(shè)備說明:靜音狀態(tài)通知。參數(shù)子項依次為:參數(shù)類型碼??? 長度??? 值說明8??? 1字節(jié)??? MUTE,呼叫狀態(tài)類型碼:109??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD12??? 1字節(jié)??? 靜音狀態(tài)標(biāo)志。1:靜音打開;0:靜音關(guān)閉七、錯誤碼定義7.1 從QQ到設(shè)備――EVENT_QQAPI_ERROR事件說明:從QQ到設(shè)備的錯誤通知參數(shù)說明:WM_COPYDATA中的參數(shù)COPYDATASTRUCT結(jié)構(gòu)說明詳見2dwData(事件碼):20lpData:如下表cbData:消息參數(shù)總長度參數(shù)類型碼??? 長度??? 值說明12??? 1字節(jié)??? 錯誤類型,類型:char錯誤碼定義:八、參數(shù)類型碼表參數(shù)類型碼??? 長度??? 值說明1??? QQ號長度??? QQ號,類型:以Null結(jié)尾的字符串2??? 昵稱長度??? 昵稱,類型:以Null結(jié)尾的字符串3??? 速播號長度??? 速播號,類型:以Null結(jié)尾的字符串4??? PSTN號碼長度??? PSTN號碼,類型:以Null結(jié)尾的字符串5??? 設(shè)備名長度??? 音頻設(shè)備名,類型:以Null結(jié)尾的字符串6??? 4字節(jié)??? 音頻設(shè)備的設(shè)備ID號,類型:DWORD7??? 1字節(jié)??? 鍵值,詳見4.3的“鍵值映射表”8??? 1字節(jié)??? 呼叫狀態(tài)的類型,類型:char,主要有:(1)CONNECTING,呼叫狀態(tài)類型碼:1(2)RING,呼叫狀態(tài)類型碼:2(3)BUSY,呼叫狀態(tài)類型碼:3(4)ACCEPT,呼叫狀態(tài)類型碼:4(5)REJECT,呼叫狀態(tài)類型碼:5(6)FINISH,呼叫狀態(tài)類型碼:6(7)FAIL,呼叫狀態(tài)類型碼:7(8)HOLD,呼叫狀態(tài)類型碼:8(9)RESUME,呼叫狀態(tài)類型碼:9(10)MUTE,呼叫狀態(tài)類型碼:109??? 4字節(jié)??? 呼叫句柄(CallHandle),類型:DWORD10??? 1字節(jié)??? 通話人數(shù),類型:char注:通話人數(shù)會影響后續(xù)的參數(shù)子項,例如當(dāng)通話人數(shù)為2,后面會跟兩份的QQ用戶信息。11??? 1字節(jié)??? 狀態(tài)變換的類型,類型:char,主要有:(1)DIALNUM,狀態(tài)變換類型碼:112??? 1字節(jié)??? 靜音狀態(tài)標(biāo)志。1:靜音打開;0:靜音關(guān)閉13??? 1字節(jié)??? 錯誤類型,類型:char文章引用自:
                            
                        
                        
                        總結(jié)
                            
                        - 上一篇: 多线程 进度条 C# .net
 - 下一篇: 安装