web-dev-qa-db-ja.com

Microsoft LyncでIMを受信するたびにトリガーするスクリプトを作成することはできますか?

Lync 2013にアップグレードしたばかりで、Pidgin + SIPEの代わりに使用することを検討しています。 Pidginの多くの素晴らしい機能の1つは、Growlの統合です...そして私はそれを見逃します。

Lync用のGrowlプラグインはなく、作業中もありませんが、実際には必要ありません...シェルスクリプトからGrowl通知を発行する方法をすでに発見しました。必要なのは、Lyncへのフックだけです。 batファイル(またはおそらくPowershell)を起動します。これをジガーしたり、黙認したりする方法はありますか?

Microsoft Lync SDKのドキュメントでは、可能性がある可能性があるように見えますが、私には意味不明のように聞こえます。誰かが私が始めるのを手伝ってくれるか、少なくとも可能性としてスクリプトを除外することはできますか?

3
John O

これから判断して および this 、私の行動方針は、外部実行可能ファイルを呼び出し、引数も渡すコード(たとえば、powershell.exe)を記述し、それを結び付けることです。 IM Receivedイベントに対して、そのようなイベントが存在する場合は、今sdkをダウンロードしているので、見つけたもので更新します。ただし、この方法では、IMを受信したときに何が起こるかに限定されません。

3
MDMoore313

Lync SDKがインストールされている場合(特にMicrosoft.Lync.Model.Dllと呼ばれるdll)、PowershellスクリプトはLyncイベントにフックできます。

次のようなステートメントでインポートします。

import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.Dll"

次に、次のようなクライアントオブジェクトを取得します。

$client = [Microsoft.Lync.Model.LyncClient]::GetClient()

最後に、行動したいイベントにフックする必要があります。

$i = 0
# For each conversation
foreach ($con in $client.ConversationManager.Conversations) {
  # For each participant in the conversation
  $con.Participants | Where { !$_.IsSelf } | foreach {
    Register-ObjectEvent -InputObject $_.Modalities[1] -EventName "InstantMessageReceived" -SourceIdentifier "person $i" -action { newInstantMessage }
    $i++
   }
}

各会話オブジェクト(IMウィンドウ/タブを開く)には少なくとも2人(場合によっては)以上の参加者がいます。上記のコードは、これらの会話のそれぞれとその中の各参加者をチェックしますが、「あなた」(IsSelf)である参加者を無視します。このコードは、誰かがあなたにメッセージを送信するたびに、newInstantMessage関数を起動します。

最も重要なことは、PowerShellスクリプトが終了しないようにするために、PowerShellスクリプトの最後に何かが必要ですが、(1){}で十分です。最後に、ConversationAddedイベントをフックして、その中に新しいInstantMessageReceivedイベントを登録することもできます。それ以外の場合は、既存の会話に対してのみ機能します。

方法や理由に興味がない人のために、近い将来、スクリプトを公開する予定です。 Growl ForWindowsのWebサイトを確認してください。

0
John O