之前的文章介紹過的Skype API,是透過Windows Message去存取Skype的行為。但是這樣子的處理下,有些行為變得比較不直觀,比如,我想得到所有的友人清單,在自己撰寫的一個Function中,下Command : 「Search Friends」,卻必須在另一個Function : WndProc()中才能得到Skype回應的Message,這樣子的寫法會讓程式變得很支離破碎。
而使用Skype4Com就沒有這樣子的困擾了,當你Create出一個Skype的Com物件後,就可以直接存取它裡面的一些變數值。所以就程式的觀點而言,Skype4Com是比較優的!!!
以下的網址可參考:
- Skype官網上 Skype4Com的說明
- Skype4Com的元件說明
- Skype4Com的Example (包含VB, C++, C#, Delphi)
- Skype4Com 1.0.28.2 Release下載 (包含Skype4Com.dll, Skype4Com Windows說明檔)
延伸閱讀:
25 則留言:
您好:
感謝您提供的例子,很容易入門,
現在我碰到一個問題,我想撥給一個好友,在好友接聽時,馬上自動播放一段音樂給好友聽,請問這播放音樂部份該如何寫?
我在 Status==clsInProgress 時
用Mediaplay1撥放WAV,但是聲音是從喇叭傳出來,並沒有傳給對方聽.
請您指導, 謝謝.
Sam14966 敬上
想要在好友接聽時,馬上自動播放一段音樂,必須透過Skype4Com中的ICall Object,改變它的Properties: InputDevice,預設是音效卡,你可以把它改成指向一個File(即你要播放的音樂檔),等播放完畢,再改回音效卡即可聽到麥克風的聲音了。
可以指定的類別包含以下幾種:
enum TCallIoDeviceType
callIoDeviceTypeUnknown indicates that device is unknown.
callIoDeviceTypeSoundcard indicates soundcard.
callIoDeviceTypePort indicates local port.
callIoDeviceTypeFile indicates local file.
你試試看吧 :)
OK了,但 wav檔格式必須是16K,16bit,mono
另外, 再請教一個問題:
PlaceCall給市話,我偵測不到對方的按鍵,
在 void __fastcall Form1::mSkypeCallDtmfReceived(TObject *Sender,ICall *pCall, BSTR code)
當對方按鍵時, 這個Event卻沒有作動, 是不是還要設定哪裡呢?
謝謝
Sam14966 敬上
撥市話我是沒試過啦~聽你說才知道有這功能 XD
你在mSkype create時,有指定Event Handler給它嗎?
Ex:
mSkype->OnCallDtmfReceived = mSkypeCallDtmfReceived;//Event function
我用bcb6
當.dll加入後, 就有一個skype元件在Activex上面了,直接選用就跟 Button,Edit等一般元件一樣了,skype 內定Event就有了, 直接取用即可,無須再指定 mSkype->OnCallDtmfReceived = mSkypeCallDtmfReceived
就像 mSkypeCallStatus 一樣,也是使用skype元件時就可用了.
關於 DTMF :
對方按鍵時, 我電腦喇叭可以聽到對方按鍵值的頻率聲, 表示skype可以接收到dtmf信號, 但就不知道如何轉為按鍵值?
謝謝
Sam14966
https://developer.skype.com/jira/browse/SPA-300
這是skype網站,客戶反映的問題, 原來這是Skype的 Bug,盼以後能修正了.
謝謝您的回答.
Sam14966
原來如此
感謝您的分享 :)
你好
請教一下,在PlaceCall("id1","id2","id3","id4")時
有沒有辦法知道id1、id2、id3、id4個別的CallStatus
這個我不清楚耶 沒試過@@
手邊也沒有電腦可以測試...
你可能要自己測一下喔
最近因為個人興趣接觸各種即時通訊軟體的API
想要嘗試製作結合全部的一個應用程式或WEB服務
不過我找也找不到SKYPE API有關登入登出的方法
上網找資料說是因為安全性問題所以不開放
所以我想用SendKeys的方式去讓他自動輸入
不過她提供了mSkype.Client.Focus();的方法好像也跟一般的Focus()不同
不知道您有沒有試過SendKeys來輸入的方式?
我是沒試過用SendKeys的方式登入,不過我猜應該是可行的啦。而Skype API應該是只有在使用者登入後才會有用,所以在使用者尚未登入的情況下,執行什麼API應該都沒用。
你可能要試著用FindWindow,然後將focus移到text edit身上,再執行SendKeys的動作,才會有用吧。
:)
您的網頁寫得很詳細
對我受用很大
我也在想說要不要去找她的PID找視窗
不知道有沒有一點提示或想法可以建議不才我呢?
Dear 寄情:
你說的提示或想法 指的是找Window嗎?
我記得之前有試過用Skype Window的Class Name去找有成功過喔~
Dear 寄情,
您的問題可能要靠自己囉,那些部分我就沒碰過了,所以不能給你什麼好的建議了,SendKeys這種Windows API應該查一下就知道怎麼用了,加油~
SkypePM.exe跟skypeName.exe,我自己是還沒看過這process啦XD,可能跟你安裝了什麼有關吧~這我也不清楚..
謝謝我明白了: )
我也突然發現我問的不是API的問題: P
所以我就先刪文了
不過您寫的API內容相當詳盡呢~!
您好:
謝謝您提供寶貴的說明和講解,同在撥號給好友,馬上自動播放一段音樂的問題,我使用了InputDevice[callIoDeviceTypeFile] = "D:\\signal.wav";這樣的指令,但好友依然沒辦法聽到音樂,想請問是不是要再加什麼指令
你有先用Tracer.exe下command試過了嗎???
先試試看透過Tracer下command行不行,可以的話,再根據這個流程,想辦法寫進code裡。
您好:
感謝您的建議,但不知道是因為自己不會用Tracer下指令的關係,還是程式結果有問題,Tracer並沒有達到預期的模擬,以下是我使用VC寫的程式:當skype順利接通後,我寫了
while(pSkype->ActiveCalls->GetCount()==count)
{
pCall->InputDevice[callIoDeviceTypeFile] = "D:\\signal.wav";
}
用來將音樂播出,WAV也轉成上面討論過的格式,但對方依然聽不到音樂,想請問要如何修改程式嗎?謝謝您的指導
通常Tracer試不通的話,程式執行也不會行的,因為他們最後執行的程序應該是一樣的喔(都是透過傳送Window Message/COM處理)
所以應該是先研究為何Tracer行不通,可以work後,再把它寫成code
以上 :)
你好:
謝謝你的這篇文章,對於我目前在寫的程式有很大的幫助,只是...我想詢問...將這個object放至VB中後,能夠隨時都保持線上嗎??隨時都處於可以接聽的情形??
另外你文章上附的連結,好像已經無法連至原本的網頁了
謝謝
你是指Skype4Com的object嗎? 隨時保持線上指的是不會讓狀態變為"離開"嗎? 這可能要查一下document,我沒試過,至於隨時可以接聽的話,應該把Skype launch起來後,應該都在可以接聽的狀態吧。
由於Skype官網把API的網頁全拿掉了,只能下載API的zip檔來看,所以文章上有關API的link應該全都失效了...Orz
你好:
skype4Com是否可開發fax(傳真)程式,若是可以那將會很省錢的方案,一紙傳真大陸不到一分鐘僅要0.7圓台幣.是不是很迷人!
Skype4Com應該做不到傳真的功能,如果要的話,或許plug-in可以試試
張貼留言