http://falldog7.googlepages.com/Skype_simple_example_window.cpp
這隻程式,用純Win32 API寫的,只是單純的可以開始控制Skype,然後出現視窗,在視窗內點左鍵,就會送出"PING"這個指令給Skype,正常來說,Skype會回傳"PONG"的訊息回來,這樣的結果就是正確的!!!
Skype API基本流程(請對照著我寫好的範例程式):
1. 首先必須先透過RegisterWindowMessage定義一個Message ID,並存起來
UINT uiGlobal_MsgID_SkypeControlAPIAttach = RegisterWindowMessage("SkypeControlAPIAttach");
UINT uiGlobal_MsgID_SkypeControlAPIDiscover = RegisterWindowMessage("SkypeControlAPIDiscover");
2. 透過SendMessage() 將uiGlobal_MsgID_SkypeControlAPIDiscover廣播出去
SendMessage( HWND_BROADCAST, uiGlobal_MsgID_SkypeControlAPIDiscover, (WPARAM)hwnd, 0);
3. 接著就可以在WndProc()裡接收uiGlobal_MsgID_SkypeControlAPIAttach的訊息,若是LPARAM的值為程式開頭enum中定義的SKYPECONTROLAPI_ATTACH_SUCCESS,則表示有偵測到Skype。此時要將WPARAM記錄起來,因為它就是Skype Window Handle。
hGlobal_SkypeAPIWindowHandle = (HWND)wParam;
4. 接著Skype就會不斷地送WM_COPYDATA的訊息過來,當我們收到後可以將訊息中的結果Show到視窗上。另外,很重要的是…在收到WM_COPYDATA後,務必要return 1;否則Skype會主動Disconnect!!!
5. 要控制Skype的話,就可以透過SendMessage() 將WM_COPYDATA的訊息,送給hGlobal_SkypeAPIWindowHandle,要傳輸的指令寫入COPYDATASTRUCT中即可。
執行結果頁面:
1.首先執行程式後,會出現一個Skype的詢問視窗,問使用者是否要開放這個試圖操控Skype的程式,當然要選Yes啦~不然怎麼Run....=_=
2. 接著可以看到一堆Skype送過來的訊息產生的訊息視窗。
如果以上步驟都完成,而你也都了解其中的意義的話,那Skype API應該就算是入門完畢了:)
6 則留言:
你好。
最近工作关系要弄Skype API,写了个BCB的小程序,但发现发送了广播以后,第一个WM_COPYDATA之后的消息都接收不到了,搞了1天了,都搞不清楚问题出在哪!刚看了你的文章,才发现,原来callback那里要设置返回1才行,一试,果然可以了。真是太感谢你了。
最后说一句,我原来也以为这个API是可以直接使用的……谁知竟然还要开着个Skype才行,也够无聊的。呵呵
當初我也是卡在那邊卡很久,所以想說po上blog分享給有需要的人:)
你好
是否可以請教一個問題
要做與skype連接並傳出"PING"字串
而連接成功後顯示"PONG"這個動作
是否可以不用視窗就做到呢??
To Sennin32'S:
既然想在連接成功後「顯示"PONG"」,那當然需要視窗才能做到囉。
因為Skype API是透過Windows Message傳遞,所以你如果想在背後執行的話,可以直接將你的程式視窗預設就縮到最小即可。這樣子可能比較符合你的需求吧。
呃...
那是否可以像developer skype的範例一樣
只顯示出那個像DOS的畫面呢?
我是直接跑他的.exe檔的
因為我是了4.5種compiler都不能compile原始碼= =
然後還有一個問題
這個範例中
屬於skype API的部份是要傳給skype的
是"PING"
還是"SkypeControlAPIAttach跟
SkypeControlAPIDiscover"呢@@?
如果是其中一個
那另一個的功能是?
麻煩你了 這真是非常難懂啊
囧
呃...
我建議你先了解一下Win32的基本程式概念再來學習可能會比較快一點。你可以來這個網站學些基本的Win32概念。
等基本概念都了解後,再回來看這個Skype API會比較簡單。
還有,這種Win32的程式,必須用Visual C++, Borland C++ Builder, Dev-C++...來Compile才可以。
張貼留言