Я устанавливаю обработчик события InstantMessageReceived, но он только срабатывает исходящие текстовые сообщения, а не входящие. Вот код, я бегу:Где в API Microsoft Lync я могу установить обработчик событий для входящих мгновенных сообщений?
# Register the app with Growl
$icon = "https://docs.google.com/uc?export=download&id=0B1Weg9ZlwneOZmY2b1NSVXJ0Q2s"
$types = '"new-im","new-call","invitation","share"'
& 'C:\Program Files (x86)\Growl for Windows\growlnotify.exe' /a:Lync /ai:$icon /r:$types "Registration."
#We just need the Model API for this example
import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.Dll"
#Get a reference to the Client object
$client = [Microsoft.Lync.Model.LyncClient]::GetClient()
#Set the client to reference to the local client
$self = $client.Self
# What do we do here?
$conversationMgr = $client.ConversationManager
# Register events for existing conversations.
$i = 0
for ($i=0; $i -lt $conversationMgr.Conversations.Count; $i++) {
Register-ObjectEvent -InputObject $conversationMgr.Conversations[$i].Modalities[1] -EventName "InstantMessageReceived" `
-SourceIdentifier "new im $i" `
-action {
$message = $EventArgs.Text
Write-Host "DEBUG: New incoming IM - $message"
# Try to get the name of the person...
$contactInfo = $Event.Sender.Conversation.Participants[1].Contact.GetContactInformation([Microsoft.Lync.Model.ContactInformationType[]] @("FirstName", "LastName", "DisplayName", "PrimaryEmailAddress", "Photo", "IconUrl", "IconStream"))
$name = " "
if ($contactInfo.Get_Item("FirstName")) { $name = $contactInfo.Get_Item("FirstName") + " " + $contactInfo.Get_Item("LastName") + ":" }
elseif ($contactInfo.Get_Item("DisplayName")) { $name = $contactInfo.Get_Item("DisplayName") + ":"}
else { $name = $contactInfo.Get_Item("PrimaryEmailAddress") + ":" }
# We need to check if the Lync window (conversation?) has focus or not.
if (1) {
# We need to send our growl notification.
& 'C:\Program Files (x86)\Growl for Windows\growlnotify.exe' /a:Lync /n:new-im /t:"New Instant Message" "$name $message"
}
}
}
# If this exits, no more events.
while (1) { }
Каждый раз, когда я впечатать сообщение IM для кого-то другого, он делает то, что я пытаюсь сделать для входящих сообщений. Но ничто никогда не срабатывает для тех, кто просто уходит. Я прошел через всю документацию, и нет никаких других событий-кандидатов, я уверен, что это одно. Но объект Modality просто хранит некоторые вещи о том, является ли это чатом или экранизацией и т. П., Ничего полезного.
Где я завинчивание на это? Я предпочитаю ответы в Powershell, но я не думаю, что это проблема, характерная для Powershell, поэтому, если вы знаете, как это сделать на C# или Visual Basic или что-то в этом роде, я тоже был бы признателен.
Спасибо за ответ, но если бы я сделать подсчет на условиях, я на самом деле получить 6. http://msdn.microsoft. com/en-us/library/microsoft.lync.model.conversation.modalitytypes_di_3_uc_ocs14mreflyncclnt.aspx Свойство модальности объекта беседы является одним из этих значений, оно не похоже на предмет для каждого участника. Я буду копаться в нем больше, хотя я бы не первый раз, когда я был немым. –
Вы действительно правы. Для каждого участника есть объект «Модальность», а объект «Беседа» имеет свой собственный для себя участника. Теперь, когда я получаю доступ к правильному, я получаю то, что ожидаю. Спасибо. Я должен изучить несколько лучших способов отладки в Powershell, это заняло бы 10 секунд, если бы я мог просто увидеть список дочерних объектов для любого данного. –
Рад, что я мог бы помочь. :) Был ли код правильным или вы каким-либо образом его модифицировали? Я бы хотел, чтобы в моем ответе был рабочий пример. –