2011-04-20 72 views
1

什麼即時試圖做的是,將勸告,使Office Communicator中 音頻電話通過無線連接使用 有線連接,而不是用戶的功能。檢測Office Communicator的音頻呼叫

我一直在四處尋找,但一直沒能找到信息即時搜索

林尋找一種方式來檢測,如果Office Communicator的是音頻呼叫。 有沒有簡單的方法來做到這一點?

回答

2

我不認爲你能夠得到你所需要的Communicator,但你可以接近。 (如果您要升級到Lync,您可能會更接近或完全一致)。

您需要使用自動化API - 文檔here,下載here

嘗試正在追趕的用戶狀態發生變化的第一件事:

MessengerClass _communicator; 

public Form1() 
{ 
    InitializeComponent(); 
    _communicator = new MessengerClass(); 
    _communicator.OnMyStatusChange += new DMessengerEvents_OnMyStatusChangeEventHandler(_communicator_OnMyStatusChange); 
} 

void _communicator_OnMyStatusChange(int hr, MISTATUS mMyStatus) 
{ 
    AddText(string.Format("My Status changed to '{0}'", mMyStatus)); 
} 

您正在尋找的MISTATUS_ON_THE_PHONE

這種方法的缺點狀態是一定的狀態將覆蓋MISTATUS_ON_THE_PHONE狀態。例如如果用戶設置爲「在線」,然後撥打或接聽電話,狀態將變爲MISTATUS_ON_THE_PHONE。但是,如果他們的狀態設置爲「請勿打擾」,並且他們撥打或接聽電話,狀態將不會更改爲MISTATUS_ON_THE_PHONE。

您可以通過檢查創建的調用來解決這個問題。捕獲正在創建一個新的對話窗口是非常簡單的:

_communicator = new MessengerClass(); 
_communicator.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(_communicator_OnIMWindowCreated); 

問題是,這將觸發對IM和AV對話,也傳入對話和傳出。無法直接檢測該呼叫是否是外發音頻呼叫。

您還可以看到「聯繫人已添加」事件,這會爲您提供有關哪些收件人已添加到對話中以及何時添加的信息。有可能發生這種情況的順序會給你一些信息,例如它是傳出還是傳入,你可以查找「tel:」uri被添加來告訴你這個電話是否是給手機的(儘管這不會幫助溝通,以溝通調用)

_communicator.OnIMWindowContactAdded += new DMessengerEvents_OnIMWindowContactAddedEventHandler(_communicator_OnIMWindowContactAdded); 

做的最好的事情就是周圍有一齣戲與活動,並查看在哪些情況下會發生什麼。這段代碼應該讓你啓動並運行。

MessengerClass _communicator; 

public Form1() 
{ 
    InitializeComponent(); 
    _communicator = new MessengerClass(); 
    _communicator.OnIMWindowCreated += new DMessengerEvents_OnIMWindowCreatedEventHandler(_communicator_OnIMWindowCreated); 
    _communicator.OnIMWindowDestroyed += new DMessengerEvents_OnIMWindowDestroyedEventHandler(_communicator_OnIMWindowDestroyed); 
    _communicator.OnIMWindowContactAdded += new DMessengerEvents_OnIMWindowContactAddedEventHandler(_communicator_OnIMWindowContactAdded); 
    _communicator.OnIMWindowContactRemoved += new DMessengerEvents_OnIMWindowContactRemovedEventHandler(_communicator_OnIMWindowContactRemoved); 
    _communicator.OnMyStatusChange += new DMessengerEvents_OnMyStatusChangeEventHandler(_communicator_OnMyStatusChange); 
} 

void _communicator_OnMyStatusChange(int hr, MISTATUS mMyStatus) 
{ 
    AddText(string.Format("My Status changed to '{0}'", mMyStatus)); 
} 

void _communicator_OnIMWindowContactRemoved(object pContact, object pIMWindow) 
{ 
    AddText(string.Format("{0} - Participant removed - '{1}'", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, ((IMessengerContactAdvanced)pContact).SigninName)); 
} 

void _communicator_OnIMWindowContactAdded(object pContact, object pIMWindow) 
{ 
    AddText(string.Format("{0} - Participant added - '{1}'", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, ((IMessengerContactAdvanced)pContact).SigninName)); 
} 

void _communicator_OnIMWindowDestroyed(object pIMWindow) 
{ 
    AddText(string.Format("{0} Conversation Closed, duration = {1}", ((IMessengerConversationWndAdvanced)pIMWindow).HWND, (DateTime.Now - _start).ToString())); 
} 

void _communicator_OnIMWindowCreated(object pIMWindow) 
{ 
    try 
    { 
     AddText(string.Format("{0} Conversation Created", ((IMessengerConversationWndAdvanced)pIMWindow).HWND)); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

private delegate void AddTextDelegate(string text); 

private void AddText(string text) 
{ 
    if (textBox1.InvokeRequired) 
    { 
     textBox1.Invoke(new AddTextDelegate(AddText), text); 
     return; 
    } 
    textBox1.Text += text + "\r\n"; 
} 

順便說一句,不要忘記接受以此爲使用「嘀」的答案,如果你覺得它幫助:)

+0

比你的回答是真的給了我很多的信息的工作將有希望帶領我到那裏。我真的不在乎電話是否打出來,或者只是在打電話。 – Magnus 2011-04-20 10:40:28