<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Chris Mayo's Blog - Unified Communications Development</title><subtitle type="html">The Unified Communications Platform - Office Communications Server, Office Communicator, Exchange and the UC SDKs</subtitle><id>http://blogs.msdn.com/cmayo/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/cmayo/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-08-19T15:03:00Z</updated><entry><title>UC 14 Metro - OCS 14/OC 14 platform early adopter program</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/20/uc-14-metro-ocs-14-oc-14-platform-early-adopter-program.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/20/uc-14-metro-ocs-14-oc-14-platform-early-adopter-program.aspx</id><published>2009-11-20T22:00:28Z</published><updated>2009-11-20T22:00:28Z</updated><content type="html">&lt;p&gt;&amp;quot;Metro&amp;quot; is the Microsoft Early Adopter Program for partners and customers that want to invest in our future platform technologies to get competitive advantage.&lt;/p&gt;  &lt;p&gt;After our PDC09 sessions on Office Communications Server “14”, Office Communicator “14” and the new platform SDKs, I’ve been getting a lot of questions about getting access to the new bits.&lt;/p&gt;  &lt;p&gt;UC “14” Metro is the program to get early access to these bits before they become publically available.&lt;/p&gt;  &lt;p&gt;To join UC “14” Metro, you need to have a non-disclosure agreement with Microsoft and have a project scoped/planned for leveraging the UC “14” platform SDKs.&lt;/p&gt;  &lt;p&gt;UC “14” Metro benefits include early access to the UC “14” products and platform SDKs to build your project, technical briefings on the platform, deep technical training and developer support.&lt;/p&gt;  &lt;p&gt;To be considered for the program, talk to your Microsoft representative and let them know you’d like to be nominated for UC “14” Metro.&amp;#160;&amp;#160;&amp;#160; If you don’t know who to ask, email details about your company and project to &lt;a href="mailto:metroreq@microsoft.com"&gt;metroreq@microsoft.com&lt;/a&gt;, and we’ll put you in touch with the right person.&lt;/p&gt;  &lt;p&gt;The program will start in January with technical briefing webcasts and training will start in the second quarter of next year.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926473" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="Exchange Web Services Managed API" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services+Managed+API/default.aspx" /><category term="OCS 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OCS+14/default.aspx" /><category term="OC 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+14/default.aspx" /><category term="UCMA 3.0 Core SDK" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Core+SDK/default.aspx" /><category term="UCMA 3.0 Workflow Activities" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Workflow+Activities/default.aspx" /><category term="Office Communicator 14 Managed API*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Managed+API_2A00_/default.aspx" /><category term="Office Communicator 14 Controls for WPF and Silverlight*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Controls+for+WPF+and+Silverlight_2A00_/default.aspx" /></entry><entry><title>PDC09: Microsoft Unified Communications: Developer Platform Futures on demand now</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/20/pdc09-microsoft-unified-communications-developer-platform-futures-on-demand-now.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/20/pdc09-microsoft-unified-communications-developer-platform-futures-on-demand-now.aspx</id><published>2009-11-20T21:38:00Z</published><updated>2009-11-20T21:38:00Z</updated><content type="html">&lt;P&gt;My PDC09 session &lt;A href="http://microsoftpdc.com/Sessions/P09-12" mce_href="http://microsoftpdc.com/Sessions/P09-12"&gt;Microsoft Unified Communications: Developer Platform Futures&lt;/A&gt; is now available as an on demand video.&lt;/P&gt;
&lt;P&gt;Thanks,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Chris &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926457" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="Exchange Web Services Managed API" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services+Managed+API/default.aspx" /><category term="OCS 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OCS+14/default.aspx" /><category term="OC 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+14/default.aspx" /><category term="UCMA 3.0 Core SDK" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Core+SDK/default.aspx" /><category term="UCMA 3.0 Workflow Activities" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Workflow+Activities/default.aspx" /><category term="Office Communicator 14 Managed API*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Managed+API_2A00_/default.aspx" /><category term="Office Communicator 14 Controls for WPF and Silverlight*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Controls+for+WPF+and+Silverlight_2A00_/default.aspx" /></entry><entry><title>@PDC09: Meet me @ Ask the Experts</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-meet-me-ask-the-experts.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-meet-me-ask-the-experts.aspx</id><published>2009-11-19T00:41:26Z</published><updated>2009-11-19T00:41:26Z</updated><content type="html">&lt;p&gt;I’ve had some really great discussions around UC Wave 14 and UC development while here at the PDC09.&amp;#160; If we haven’t managed to sit down and talk, meet me tonight in hall G from 5:30 pm to 7:00 pm.&lt;/p&gt;  &lt;p&gt;I’ll see you there.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924937" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/cmayo/archive/tags/PDC09/default.aspx" /></entry><entry><title>@PDC09: Free Programming for Unified Communications book @ UC booth</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-free-programming-for-unified-communications-book-uc-booth.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-free-programming-for-unified-communications-book-uc-booth.aspx</id><published>2009-11-18T18:40:58Z</published><updated>2009-11-18T18:40:58Z</updated><content type="html">&lt;p&gt;Come see us at the booth and we’ll give you a copy of the UC development book.&amp;#160; We have a limited supply, so come by soon.&lt;/p&gt;  &lt;p&gt;I’ll see you there.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924509" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/cmayo/archive/tags/PDC09/default.aspx" /></entry><entry><title>@PDC09: Integrating and Extending OC 14 Session</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-integrating-and-extending-oc-14-session.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-integrating-and-extending-oc-14-session.aspx</id><published>2009-11-18T16:29:00Z</published><updated>2009-11-18T16:29:00Z</updated><content type="html">&lt;P&gt;Just waiting for the Day 2 Keynote to start.&amp;nbsp; Remember to head over to David’s session on integrating OC 14 features into your WPF and Silverlight apps right after the keynote.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://microsoftpdc.com/Sessions/PR13" mce_href="http://microsoftpdc.com/Sessions/PR13"&gt;Integrating and Extending the Microsoft Office Communicator Experience with Windows Presentation Foundation and Microsoft Silverlight&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://microsoftpdc.com/Speakers/David-Ollason" mce_href="http://microsoftpdc.com/Speakers/David-Ollason"&gt;David Ollason&lt;/A&gt; in 408A on Wednesday at 11:30 AM.&lt;/P&gt;
&lt;P&gt;I’ll see you there.&lt;/P&gt;
&lt;P&gt;Thanks,&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Chris.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924354" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/cmayo/archive/tags/PDC09/default.aspx" /><category term="OC 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+14/default.aspx" /><category term="Office Communicator 14 Managed API*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Managed+API_2A00_/default.aspx" /><category term="Office Communicator 14 Controls for WPF and Silverlight*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Controls+for+WPF+and+Silverlight_2A00_/default.aspx" /></entry><entry><title>@PDC09: Microsoft Unified Communications: Developer Platform Futures (PRO5)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-microsoft-unified-communications-developer-platform-futures-pro5.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/18/pdc09-microsoft-unified-communications-developer-platform-futures-pro5.aspx</id><published>2009-11-18T06:15:34Z</published><updated>2009-11-18T06:15:34Z</updated><content type="html">&lt;p&gt;Thanks to everyone that attended my PDC09 session today.&amp;#160; I’ll link to the session recording when it’s posted on Ch. 9, but here’s a quick recap of what was covered:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The UC “14” Wave will consist of Exchange 2010 (released last week at TechEd Europe), Office Communications Server “14”* and Office Communicator “14”*.&amp;#160; With the release of those products we’ll also release a totally new client platform and a largely revamped server platform.&lt;/li&gt;    &lt;li&gt;The Office Communicator 14* platform SDKs will include:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Office Communicator 14 Controls for WPF and Silverlight*: Allows you to integrate the OC 14 UI and features (presence, contact lists, contact info and communications) into your applications with very little code.&lt;/li&gt;      &lt;li&gt;Office Communicator 14 Managed API*: Exposes the OC 14 object model as a set of managed classes, providing you the ability to extend the client communications experience.&amp;#160; You can use the API to send application data as conversation context and take action on that communication context on the receiving side by launching your application or extending the conversation window using Silverlight to display application data and features.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt; The Office Communications Server 14* SDKs will include:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Unified Communications Managed API 3.0 Workflow Activities: Exposes OCS 14 communications as a set of Windows Workflows Activities that execute on an incoming or outgoing call.&amp;#160; The API supports IM, voice, presence and call control activities.&amp;#160; Use this API to integrate OCS 14 communications into your business processes (from a SharePoint 2010 workflow, for example).&amp;#160; &lt;/li&gt;      &lt;li&gt;Unified Communications Managed API 3.0 Core SDK: Provides a managed code object model API for the end to end communications stack for OCS 14.&amp;#160; UCMA 3.0 will add programmatic access to the new OCS 14 features as well as streamlining many common server side development scenarios.&amp;#160; Use this API to build sophisticated communication solutions like personal virtual assistants, web click to chat/click to call solutions, web service gateways, etc. &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The Exchange 2010 SDKs will include:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Exchange Web Services: Provides a web services API for accessing data and business logic exposed by Exchange.&amp;#160; Available now, details are &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=155ab218-3cd5-439f-9ce3-5e6983ab6b79&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/li&gt;      &lt;li&gt;Exchange Web Services Managed API 1.0: Provides a managed class library for EWS, making EWS development very discoverable and productive.&amp;#160; Available now, details &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=155ab218-3cd5-439f-9ce3-5e6983ab6b79&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;I’ll provide more details over the common weeks.&amp;#160; Exciting times ahead!&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;*Not the final names.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924093" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="Exchange Web Services" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services/default.aspx" /><category term="Exchange Web Services Managed API" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services+Managed+API/default.aspx" /><category term="OCS 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OCS+14/default.aspx" /><category term="OC 14" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+14/default.aspx" /><category term="UCMA 3.0 Core SDK" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Core+SDK/default.aspx" /><category term="UCMA 3.0 Workflow Activities" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+3.0+Workflow+Activities/default.aspx" /><category term="Office Communicator 14 Managed API*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Managed+API_2A00_/default.aspx" /><category term="Office Communicator 14 Controls for WPF and Silverlight*" scheme="http://blogs.msdn.com/cmayo/archive/tags/Office+Communicator+14+Controls+for+WPF+and+Silverlight_2A00_/default.aspx" /></entry><entry><title>@PDC09: Please fill out your evals!!!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/16/pdc09-please-fill-out-your-evals.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/16/pdc09-please-fill-out-your-evals.aspx</id><published>2009-11-17T05:35:37Z</published><updated>2009-11-17T05:35:37Z</updated><content type="html">&lt;p&gt;Everything is ready to go for my &lt;u&gt;Microsoft Unified Communications: Developer Platform Futures&lt;/u&gt; (PRO5) session @ 11 AM tomorrow in 515B.&amp;#160; I hope to see you there.&lt;/p&gt;  &lt;p&gt;We always appreciate your feedback on sessions at PDC, so please fill out your evals.&amp;#160; Your feedback has a real positive affect on future PDC sessions.&lt;/p&gt;  &lt;p&gt;And, new this year, filling out your evals will have a positive impact on the Boys and Girls Club of Los Angeles.&amp;#160; For every attendee who completes an eval, Microsoft will donate $1 to this worthwhile charity.&amp;#160; For every attendee who completes 5 session evals, Microsoft will donate $2.&amp;#160; &lt;/p&gt;  &lt;p&gt;So please, fill out those evals!&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923382" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="PDC09" scheme="http://blogs.msdn.com/cmayo/archive/tags/PDC09/default.aspx" /></entry><entry><title>Unified Communications @ PDC09</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/06/unified-communications-pdc09.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/06/unified-communications-pdc09.aspx</id><published>2009-11-06T13:38:00Z</published><updated>2009-11-06T13:38:00Z</updated><content type="html">&lt;p&gt;I love the PDC.&amp;#160; Before I joined Microsoft in 2000, I went to every PDC so I could evaluate the future of the Microsoft platform and integrate it into my development and architecture.&lt;/p&gt;  &lt;p&gt;Since I joined the company, I’ve attended every PDC to share what we’re doing at Microsoft with regards to the future of the platform to start the conversation with other developers around feedback and early adoption.&lt;/p&gt;  &lt;p&gt;From either side of the conversation, it’s always been worth getting out of the office.&lt;/p&gt;  &lt;p&gt;Here are the 3 sessions we’ll have on the UC platform at PDC09:&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://microsoftpdc.com/Sessions/P09-12"&gt;&lt;font size="3"&gt;Microsoft Unified Communications: Developer Platform Futures&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://microsoftpdc.com/Speakers/Chris-Mayo"&gt;Chris Mayo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Learn how Microsoft Communications Server and Microsoft Exchange provide a comprehensive and flexible communications platform for developers. Get a first look at the next generation of this platform through a series of demos and code examples. See how to embed Communicator features in your application using new Microsoft Silverlight and Windows Presentation Foundation (WPF) controls, and learn about the new API to develop full custom clients for Communications Server. Also see how the UC Managed API 3.0 provides access to the new Voice-over-IP features of Communication Server.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://microsoftpdc.com/Sessions/PR13"&gt;&lt;font size="3"&gt;Integrating and Extending the Microsoft Office Communicator Experience with Windows Presentation Foundation and Microsoft Silverlight&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://microsoftpdc.com/Speakers/David-Ollason"&gt;David Ollason&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Come take an in-depth look at how to integrate and extend the Office Communicator experience into your Windows Presentation Foundation (WPF) and Silverlight applications. See how to provide the same integration experience as Office and Outlook including contact search, contact lists, presence, contact details and more. Learn how to pass contextual data from your application using the new contextual conversation API.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://microsoftpdc.com/Sessions/PR30"&gt;&lt;font size="3"&gt;The Exchange 2010 Developer Story: Building Rich Exchange-enabled Applications for the Enterprise and the Cloud&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://microsoftpdc.com/Speakers/Jason-Henderson"&gt;Jason Henderson&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Learn how to make your application calendar or contact aware with the Exchange Web Services Managed API and Exchange Online. Get a first look at our new Exchange Web Services and Exchange Online developer story. See how developers can leverage the power of Azure and Exchange Web Services to create rich Software + Services solutions on Windows Presentation Foundation (WPF) or Microsoft Silverlight. Come learn how quick and easy it is to develop an Exchange Web Services application that can be deployed to millions of seats both on-premises and in the cloud.&lt;/p&gt;  &lt;p&gt;When I’m not speaking or attending the other UC platform sessions, I’ll be in the Expo or at the evening events.&amp;#160; &lt;/p&gt;  &lt;p&gt;I hope to see you &lt;a href="http://microsoftpdc.com/"&gt;there&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918188" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="UCMA 2.0" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+2.0/default.aspx" /><category term="OCS 2007 R2" scheme="http://blogs.msdn.com/cmayo/archive/tags/OCS+2007+R2/default.aspx" /><category term="OC 2007 R2" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+2007+R2/default.aspx" /><category term="Exchange Web Services" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services/default.aspx" /><category term="Exchange Web Services Managed API" scheme="http://blogs.msdn.com/cmayo/archive/tags/Exchange+Web+Services+Managed+API/default.aspx" /><category term="PDC09" scheme="http://blogs.msdn.com/cmayo/archive/tags/PDC09/default.aspx" /></entry><entry><title>My Schedule at TechEd Europe 2009</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/11/05/my-schedule-at-teched-europe-2009.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/11/05/my-schedule-at-teched-europe-2009.aspx</id><published>2009-11-05T19:27:41Z</published><updated>2009-11-05T19:27:41Z</updated><content type="html">&lt;p&gt;I’ll be at TechEd Europe this year speaking on the future of the UC platform (OCS, OC, Exchange and Outlook) and meeting up with my European friends and colleagues.&lt;/p&gt;  &lt;p&gt;I’m speaking at the following session:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;UNC304 The State of the Art in Microsoft's Unified Communications Developer Platform (*PDC at TechEd)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Presenter: Chris Mayo&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Tue 11/10 | 17:00-18:15 | Paris 1 - Hall 7-1c&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Programmable Communications have become a reality over the last two years. Developers can now easily embed email, chat, and voice/video deeply into their software leveraging their .NET skills. This session gives an overview of the capabilities of the Microsoft Unified Communications platform and shows an in-depth code walk-through of key scenarios any developer can use in their software.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;When I’m not in that session, I’ll be at the Expo in the UC booth and hanging out at the various evening events.&lt;/p&gt;  &lt;p&gt;We’ve got over 60 sessions in the UC track this year for both developers and IT professionals (and those of us that do both).&amp;#160; You can get details on the track here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.msteched.com/europe/public/sessionlist.aspx" href="http://www.msteched.com/europe/public/sessionlist.aspx"&gt;http://www.msteched.com/europe/public/sessionlist.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I hope to see you there.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918180" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author></entry><entry><title>Exchange 2010 and Exchange Web Services - What’s New Webcasts</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/10/07/exchange-2010-and-exchange-web-services-what-s-new-webcasts.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/10/07/exchange-2010-and-exchange-web-services-what-s-new-webcasts.aspx</id><published>2009-10-08T03:15:10Z</published><updated>2009-10-08T03:15:10Z</updated><content type="html">&lt;p&gt;Exchange Web Services gives you programmatic access to the information and business logic in Exchange 2010.&amp;#160; If you think about all the stuff you do in Outlook 2007 to manage your daily life (mail to communicate with friends and coworkers, calendar items to manage your day and tasks to track the things that you need to get done), all that information and business logic (think free/busy when scheduling a meeting) is provided by Exchange and accessible via the Exchange Web Services Managed API.&lt;/p&gt;  &lt;p&gt;This is a quick video with Jason Henderson and David Claux of the EWS team to show what you can do with the new EWS Managed API and what’s new in Exchange 2010 for developers.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=http://ecn.channel9.msdn.com/o9/ch9/7/9/7/6/9/4/Ex2010EwsMa20091007_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/7/9/7/6/9/4/Ex2010EwsMa20091007_320_ch9.png, postid=496797" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;Check out the following web casts to learn more.&amp;#160; &lt;/p&gt;  &lt;p&gt;10/13/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427565&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 1 of 6): Migrating Applications to Exchange Web Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10/14/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427588&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 2 of 6): A Deep Dive into Using Autodiscover Service in Exchange Web Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10/15/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427593&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 3 of 6): A Deep Dive into Impersonation and Delegation in Exchange Web Services&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10/20/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427597&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 4 of 6): A Deep Dive into Exchange Web Services Notifications (Push/Pull)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10/21/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427601&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 5 of 6): A Deep Dive into the Exchange Web Services Managed API&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;10/22/2009 - &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427605&amp;amp;Culture=en-US"&gt;Exchange Server 2010 Development (Part 6 of 6): Best Practices for Building Scalable Exchange Server Applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032427605&amp;amp;Culture=en-US" target="_blank"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9904658" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author></entry><entry><title>How to get presence using Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/09/21/how-to-get-presence-using-office-communicator-sdk.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/09/21/how-to-get-presence-using-office-communicator-sdk.aspx</id><published>2009-09-21T22:20:51Z</published><updated>2009-09-21T22:20:51Z</updated><content type="html">&lt;p&gt;Displaying the presence information for the local user or their contacts is a common scenario when adding Unified Communications features to your client applications.&amp;#160;&amp;#160; For example, after Office Communicator is installed, Outlook 2007 displays the presence of contacts on the To: and the From: line so the user can make intelligent communication decisions (“should I reply in email or are there enough people online that a concall would be better?”) directly in Outlook 2007.&lt;/p&gt;  &lt;p&gt;Luckily, it’s easy to integrate presence information into your client applications.&amp;#160; This video shows a great example:&lt;/p&gt; &lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/106091/OCSDK_ContactPresence/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Let’s break down the code in the above video.&amp;#160; When displaying presence information, you need to get the initial value to display and then update your client UI when changes to presence elements occur.&amp;#160; In the code below, Messenger.GetContact() is used to get an instance of IMessengerContactAdvanced for displaying the initial presence information and the Messenger.OnMyStatusChange and Messenger.OnContactStatusChange events are used to get updated presence information:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; CommunicatorAPI;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ContactPresence&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Messenger _messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;new&lt;/span&gt; Messenger();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            _messenger.OnContactStatusChange += &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnContactStatusChangeEventHandler(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    _messenger_OnContactStatusChange);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            _messenger.OnMyStatusChange += &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnMyStatusChangeEventHandler(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    _messenger_OnMyStatusChange);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            IMessengerContactAdvanced localUser = &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                (IMessengerContactAdvanced)_messenger.GetContact(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                _messenger.MySigninName, _messenger.MyServiceId);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (localUser != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                DisplayContactPresence(localUser);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            }   &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\nPress Enter key to exit the application.\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            Console.ReadLine();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            _messenger.OnContactStatusChange -= &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnContactStatusChangeEventHandler(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                    _messenger_OnContactStatusChange);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            _messenger.OnMyStatusChange -= &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnMyStatusChangeEventHandler(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                    _messenger_OnMyStatusChange);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            System.Runtime.InteropServices.Marshal.ReleaseComObject(_messenger);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            System.Runtime.InteropServices.Marshal.ReleaseComObject(localUser);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            localUser = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In order to display presence information, I’ve created a function called DisplayContactPresence.&amp;#160; This function uses IMessengerContactAdvanced.PresenceProperties to access the presence for a contact (their status, availability, presence note, etc.).&amp;#160; For example, the following code writes all the presence information for a contact out to the console:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DisplayContactPresence(IMessengerContactAdvanced contact)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt;[] presenceProps = (&lt;span class="kwrd"&gt;object&lt;/span&gt;[])contact.PresenceProperties;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (contact.IsSelf)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Local User Presence Info for {0}:&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                    contact.FriendlyName);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Contact Presence Info for {0}:&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                    contact.FriendlyName);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="rem"&gt;// Status or Machine State.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tStatus: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                (MISTATUS)presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_MSTATE]);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tStatus String: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                GetStatusString((MISTATUS) presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_MSTATE]));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            &lt;span class="rem"&gt;// Status string if status is set to custom.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tCustom Status String: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_CUSTOM_STATUS_STRING]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="rem"&gt;// Presence or User state.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tAvailability: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_AVAILABILITY]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tAvailability String: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                GetAvailabilityString((&lt;span class="kwrd"&gt;int&lt;/span&gt;) presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_AVAILABILITY]));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="rem"&gt;// Presence note.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tPresence Note: \n'{0}'&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_PRESENCE_NOTE]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            &lt;span class="rem"&gt;// Blocked status.  &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tIs Blocked: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_IS_BLOCKED]);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            &lt;span class="rem"&gt;// OOF message for contact, if specified.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tIs OOF: {0}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_IS_OOF]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="rem"&gt;// Tooltip.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\tTool Tip: \n'{0}'\n&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                presenceProps[(&lt;span class="kwrd"&gt;int&lt;/span&gt;)PRESENCE_PROPERTY.PRESENCE_PROP_TOOL_TIP]);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAvailabilityString(&lt;span class="kwrd"&gt;int&lt;/span&gt; availability)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            &lt;span class="kwrd"&gt;switch&lt;/span&gt; (availability)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 3000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Available&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 4500:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Inactive&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 6000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Busy&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 7500:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Busy-Idle&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 9000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Do not disturb&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 12000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Be right back&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 15000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Away&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; 18000:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Offline&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetStatusString(MISTATUS mStatus)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;            &lt;span class="kwrd"&gt;switch&lt;/span&gt; (mStatus)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_ALLOW_URGENT_INTERRUPTIONS:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Urgent interuptions only&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_AWAY:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Away&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_BE_RIGHT_BACK:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Be right back&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_BUSY:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Busy&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_DO_NOT_DISTURB:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Do no disturb&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_IDLE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Idle&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_INVISIBLE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Invisible&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_IN_A_CONFERENCE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;In a conference&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_IN_A_MEETING:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;In a meeting&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_LOCAL_CONNECTING_TO_SERVER:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Connecting to server&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  94:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_LOCAL_DISCONNECTING_FROM_SERVER:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  95:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Disconnecting from server&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  96:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_LOCAL_FINDING_SERVER:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  97:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Finding server&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  98:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_LOCAL_SYNCHRONIZING_WITH_SERVER:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  99:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Synchronizing with server&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 100:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_MAY_BE_AVAILABLE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 101:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Inactive&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 102:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_OFFLINE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 103:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Offline&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 104:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_ONLINE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 105:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Online&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 106:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_ON_THE_PHONE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 107:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;In a call&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 108:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_OUT_OF_OFFICE:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 109:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Out of office&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 110:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_OUT_TO_LUNCH:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 111:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Out to lunch&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 112:  &lt;/span&gt;                &lt;span class="kwrd"&gt;case&lt;/span&gt; MISTATUS.MISTATUS_UNKNOWN:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 113:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Unknown&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 114:  &lt;/span&gt;                &lt;span class="kwrd"&gt;default&lt;/span&gt;:&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 115:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 116:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 117:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;When the presence of the local user or any of their contacts changes, the Messenger.OnMyStatusChange and Messenger.OnContactStatusChange events fire, respectively:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnMyStatusChange(&lt;span class="kwrd"&gt;int&lt;/span&gt; hr, MISTATUS mMyStatus)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="rem"&gt;// Your code to work with presence goes here...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\n***OnMyStatusChange***&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            DisplayContactPresence((IMessengerContactAdvanced) &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                _messenger.GetContact(_messenger.MySigninName, _messenger.MyServiceId));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnContactStatusChange(&lt;span class="kwrd"&gt;object&lt;/span&gt; pMContact, MISTATUS mStatus)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="rem"&gt;// Your code to work with presence goes here...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;\n***OnContactStatusChange***&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            DisplayContactPresence((IMessengerContactAdvanced) pMContact);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;One thing to note, both events have a MISTATUS value passed to provide the current status of the contact.&amp;#160; Using IMessengerContactAdvanced.PresenceProperties is preferred to using this value since it provides access to all the presence information for a contact, not just status.&lt;/p&gt;

&lt;p&gt;If you’d like to try this code out for yourself, you’ll need to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en"&gt;download the Office Communicator 2007 SDK&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/04/10/building-a-virtualized-uc-development-environment-part-1-building-the-ts-virtual-machine.aspx"&gt;setup a UC development environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=5001D612-533A-4721-91EA-DA990D94FF0F&amp;amp;displaylang=en" target="_blank"&gt;download the WPF Presence Controls for Office Communicator 2007&lt;/a&gt; example used in the first demo to see how this code is used in a solution.&lt;/p&gt;

&lt;p&gt;More details, tips and tricks on UC development can be found in the &lt;a href="http://www.amazon.com/Programming-Unified-Communications-Microsoft%C2%AE-Office/dp/0735626235/ref=sr_1_1?ie=UTF8&amp;amp;qid=1249960696&amp;amp;sr=8-1"&gt;Programming for Unified Communications&lt;/a&gt; book. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9897703" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author></entry><entry><title>How to save IM conversations using Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/09/10/how-to-save-im-conversations-using-office-communicator-sdk.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/09/10/how-to-save-im-conversations-using-office-communicator-sdk.aspx</id><published>2009-09-10T19:57:00Z</published><updated>2009-09-10T19:57:00Z</updated><content type="html">&lt;p&gt;Archiving the contents of an IM conversation using the Office Communicator SDK is something that I get asked about pretty routinely.&amp;#160; For example, let’s say that you want to launch an IM call from your application using the OC SDK and archive that conversation to be retrieved later (displaying all the application specific conversations in your application or on a SharePoint site, etc.).&lt;/p&gt;  &lt;p&gt;The OC SDK provides the IMessengerConversationWndAdvanced.History property to access the body of an IM conversation.&amp;#160; For example, the following console application launches an IM call and then writes out the IM history to the console:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; History&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Messenger _messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IMessengerAdvanced _messengerAdv;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; _myConvHWND = 0;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IMessengerConversationWndAdvanced _myConv;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;new&lt;/span&gt; Messenger();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            _messengerAdv = (IMessengerAdvanced)_messenger;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            _messenger.OnIMWindowCreated +=&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowCreatedEventHandler(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                _messenger_OnIMWindowCreated);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            _messenger.OnIMWindowDestroyed += &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowDestroyedEventHandler(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                _messenger_OnIMWindowDestroyed);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt;[] sipUris = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;kf@fabrikam.com&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cb@fabrikam.com&amp;quot;&lt;/span&gt;  };&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt; obj = _messengerAdv.StartConversation(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                &lt;span class="rem"&gt;// The call media.            &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                CONVERSATION_TYPE.CONVERSATION_TYPE_IM,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                &lt;span class="rem"&gt;// The participants.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                sipUris,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                &lt;span class="rem"&gt;// The conversation window title as as string.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;Account: Johnson (ID:12345)&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.  Pass &amp;quot;1&amp;quot;.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;            _myConvHWND = &lt;span class="kwrd"&gt;long&lt;/span&gt;.Parse(obj.ToString());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            Console.WriteLine(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;Press the Enter key to see IM conversation History.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            Console.ReadLine();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (_myConv != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                    Console.WriteLine(_myConv.History);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                &lt;span class="kwrd"&gt;catch&lt;/span&gt; (COMException ce)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                    Console.WriteLine(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                        &lt;span class="str"&gt;&amp;quot;COM Exception &amp;quot;&lt;/span&gt; + ce.ErrorCode.ToString());&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Press the Enter key to exit the application.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;            Console.ReadLine();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;            _messenger.OnIMWindowCreated -=&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowCreatedEventHandler(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                _messenger_OnIMWindowCreated);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            _messenger.OnIMWindowDestroyed -=&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowDestroyedEventHandler(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                _messenger_OnIMWindowDestroyed);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;            Marshal.ReleaseComObject(_messenger);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;            Marshal.ReleaseComObject(_messengerAdv);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            _messengerAdv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (_myConv != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;                Marshal.ReleaseComObject(_myConv);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;                _myConv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In the code above, I’m registering for the OnIMWindowCreated and OnIMWindowDestroyed events to get and release my reference to the conversation window (_myConv) so I can access the History property.&amp;#160; The code below shows how I manage the _myConv reference:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnIMWindowCreated(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            IMessengerConversationWndAdvanced newConv =&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                (IMessengerConversationWndAdvanced)pIMWindow;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (newConv.HWND == _myConvHWND)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                newConv.SendText(&lt;span class="str"&gt;&amp;quot;This is a ongoing conversation &amp;quot;&lt;/span&gt; +&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                    &lt;span class="str"&gt;&amp;quot;about the Account: Johnson (ID:12345) &amp;quot;&lt;/span&gt; +&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                    &lt;span class="str"&gt;&amp;quot;and will be saved on the account site.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                _myConv = newConv;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnIMWindowDestroyed(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {   &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals((&lt;span class="kwrd"&gt;object&lt;/span&gt;)_myConv, pIMWindow))&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                Marshal.ReleaseComObject(_myConv);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                _myConv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;In OnIMWindowCreated, I set _myConv using the pIMWindow object passed as an event argument after confirming it’s the conversation I started in code (by comparing the HWNDs).&amp;#160; When OnIMWindowDestroyed fires, I check to make sure the window being destroyed is mine by using object.ReferenceEquals and release the reference.&amp;#160; Note that I can’t use the HWND property in OnIMWindowDestroyed since conversation window no longer exists and _myConv is no longer a valid reference.&lt;/p&gt;

&lt;p&gt;While this code works, it’s not an ideal solution.&amp;#160; I can’t rely on the user to do something (click a button, etc.) in my app before the conversation is closed.&amp;#160; I’d rather just write the IM conversation history out when the conversation is completed.&amp;#160; This leads a lot of developers to try the following:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnIMWindowDestroyed(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {   &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;object&lt;/span&gt;.ReferenceEquals((&lt;span class="kwrd"&gt;object&lt;/span&gt;)_myConv, pIMWindow))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                Console.WriteLine(_myConv.History);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                Marshal.ReleaseComObject(_myConv);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                _myConv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;But, the call to IMessengerConversationWndAdvanced.History throws an exception since _myConv is no longer a valid reference when OnIMWindowDestroyed fires.&lt;/p&gt;

&lt;p&gt;Another solution I’ve seen is polling History on another thread through the life of the conversation and writing out the last value when the conversation window is destroyed.&amp;#160; While this works, it’s less than ideal due to the resource you consume.&lt;/p&gt;

&lt;p&gt;So what does provide a good working scenario?&amp;#160; Creating a UCMA 2.0 IM robot that archives conversations and inviting that bot to all the conversations you want archived is a great solution (and a great future blog post).&lt;/p&gt;

&lt;p&gt;Details on how to start conversations using the Office Communicator SDK can be found in the &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/08/20/how-to-make-calls-via-office-communicator-sdk.aspx"&gt;How to make calls via Office Communicator SDK&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/08/29/how-to-send-im-text-using-office-communicator-sdk.aspx"&gt;How to send IM text using Office Communicator SDK&lt;/a&gt; posts on this blog.&lt;/p&gt;

&lt;p&gt;If you’d like to try this code out for yourself, you’ll need to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en"&gt;download the Office Communicator 2007 SDK&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/04/10/building-a-virtualized-uc-development-environment-part-1-building-the-ts-virtual-machine.aspx"&gt;setup a UC development environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More details, tips and tricks on UC development can be found in the &lt;a href="http://www.amazon.com/Programming-Unified-Communications-Microsoft%C2%AE-Office/dp/0735626235/ref=sr_1_1?ie=UTF8&amp;amp;qid=1249960696&amp;amp;sr=8-1"&gt;Programming for Unified Communications&lt;/a&gt; book. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9894406" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="UCMA 2.0" scheme="http://blogs.msdn.com/cmayo/archive/tags/UCMA+2.0/default.aspx" /><category term="OC 2007 R2" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+2007+R2/default.aspx" /><category term="OC 2007 SDK" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+2007+SDK/default.aspx" /></entry><entry><title>How to send IM text using Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/08/29/how-to-send-im-text-using-office-communicator-sdk.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/08/29/how-to-send-im-text-using-office-communicator-sdk.aspx</id><published>2009-08-29T19:32:53Z</published><updated>2009-08-29T19:32:53Z</updated><content type="html">&lt;p&gt;When starting call from your application using the Office Communicator Automation API, it’s often helpful to send some IM text to provide some context for the call (often using data from your application).&amp;#160; For example, Outlook 2007 does this when you start a conversation using the IM and Call features from an email.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/cmayo/WindowsLiveWriter/HowtosendIMtextusingOfficeCommunicatorSD_7468/SendText_01_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SendText_01" border="0" alt="SendText_01" src="http://blogs.msdn.com/blogfiles/cmayo/WindowsLiveWriter/HowtosendIMtextusingOfficeCommunicatorSD_7468/SendText_01_thumb.jpg" width="244" height="163" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;When the call is placed, Outlook 2007 uses the OC API to set the conversation window title and to provide details on the subject of the call (the email) via IM.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/cmayo/WindowsLiveWriter/HowtosendIMtextusingOfficeCommunicatorSD_7468/SendText_03_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SendText_03" border="0" alt="SendText_03" src="http://blogs.msdn.com/blogfiles/cmayo/WindowsLiveWriter/HowtosendIMtextusingOfficeCommunicatorSD_7468/SendText_03_thumb.jpg" width="244" height="153" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is a quick video that shows how to send IM text using the Office Communicator Automation API:&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/106091/OCSDK_SendText/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Let’s break down some of the details from the video.&amp;#160; First, the IMessengerAdvanced.StartConversation() method is used to start the call.&amp;#160; Once the call is accepted by the callee, a conversation window is created that I can use to send IM as part of the call. Due to the asynchronous nature of the OC API, this conversation window doesn’t get created right away.&amp;#160; Luckily, the StartConversation() method returns the HWND of the conversation window so I can identify it in code when it is created.&amp;#160; Registering for the OnIMWindowCreated event will give me access the conversation window when that happens.&amp;#160; For example, the following code registers for the OnIMWindowCreated event, starts a new audio call and stores the HWND of conversation window to be created in a local variable _myConvHWND:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; StartConversation&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Messenger _messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IMessengerAdvanced _messengerAdv;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; _myConvHWND = 0;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {            &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;new&lt;/span&gt; Messenger();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            _messengerAdv = (IMessengerAdvanced)_messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            _messenger.OnIMWindowCreated += &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowCreatedEventHandler(_messenger_OnIMWindowCreated);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt;[] sipUris = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;kf@fabrikam.com&amp;quot;&lt;/span&gt; };&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt; obj = _messengerAdv.StartConversation(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="rem"&gt;// The call media.            &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                CONVERSATION_TYPE.CONVERSATION_TYPE_AUDIO,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="rem"&gt;// The participants.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                sipUris,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                &lt;span class="rem"&gt;// The conversation window title as as string.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;My Audio Call with IM as Context&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.  Pass &amp;quot;1&amp;quot;.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            _myConvHWND = &lt;span class="kwrd"&gt;long&lt;/span&gt;.Parse(obj.ToString());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Press the Enter key to exit the application.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            Console.ReadLine();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            _messenger.OnIMWindowCreated -= &lt;span class="kwrd"&gt;new&lt;/span&gt; DMessengerEvents_OnIMWindowCreatedEventHandler(_messenger_OnIMWindowCreated);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            Marshal.ReleaseComObject(_messenger);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            Marshal.ReleaseComObject(_messengerAdv);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            _messengerAdv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;When OnIMWindowCreated fires, it passes a reference to the conversation window via the IMessengerConversationWindowAdvanced interface.&amp;#160; I can use the HWND property on this interface to see if the conversation is the one I created with StartConversation() and send some IM using the SendText() method.&amp;#160; I need to check the HWND since OnIMWindowCreated will fire for every new conversation windows created by OC 2007 R2 (incoming or outgoing).&amp;#160; For example:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; _messenger_OnIMWindowCreated(&lt;span class="kwrd"&gt;object&lt;/span&gt; pIMWindow)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            IMessengerConversationWndAdvanced newConv = (IMessengerConversationWndAdvanced)pIMWindow;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (newConv.HWND == _myConvHWND)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                newConv.SendText(&lt;span class="str"&gt;&amp;quot;This IM was sent via SendText()...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Using the SendText() method to provide some application data in the IM channel is a great way to add value to the calls you launch from your application.&amp;#160; Using the Outlook 2007/Office Communicator 2007 R2 integration as an example, you can start to think of ways that you can provide context to the calls your application launches using data from your application.&lt;/p&gt;

&lt;p&gt;If you’d like to try this code out for yourself, you’ll need to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en"&gt;download the Office Communicator 2007 SDK&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/04/10/building-a-virtualized-uc-development-environment-part-1-building-the-ts-virtual-machine.aspx"&gt;setup a UC development environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More details, tips and tricks on UC development can be found in the &lt;a href="http://www.amazon.com/Programming-Unified-Communications-Microsoft%C2%AE-Office/dp/0735626235/ref=sr_1_1?ie=UTF8&amp;amp;qid=1249960696&amp;amp;sr=8-1"&gt;Programming for Unified Communications&lt;/a&gt; book. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9888972" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author><category term="OC 2007 R2" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+2007+R2/default.aspx" /><category term="OC 2007 SDK" scheme="http://blogs.msdn.com/cmayo/archive/tags/OC+2007+SDK/default.aspx" /></entry><entry><title>How to make calls via Office Communicator SDK</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/08/20/how-to-make-calls-via-office-communicator-sdk.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/08/20/how-to-make-calls-via-office-communicator-sdk.aspx</id><published>2009-08-21T03:53:00Z</published><updated>2009-08-21T03:53:00Z</updated><content type="html">&lt;p&gt;Starting Office Communicator calls from your code is one of the simplest and most powerful features you can add to your application using the Office Communicator Automation API.&amp;#160; &lt;/p&gt;  &lt;p&gt;This video shows some examples of the types of calls you can start in your code:&lt;/p&gt; &lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/106091/Office%20Communicator%20SDK%20-%20Start%20Conversation/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Let’s dive into the code.&amp;#160; When making calls via the Office Communicator Automation API you call the IMessengerAdvanced.StartConversation() method and specify the participants, the media type (IM, audio, video) and any call specific information (such as the conversation window title).&amp;#160; You get a reference to the IMessengerAdvanced interface by casting an instance of Messenger class.&lt;/p&gt;  &lt;p&gt;For example, the following console application code starts an IM call with a single contact (kf@fabrikam.com) and sets the title of the conversation window to “My IM Call”:&lt;/p&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;







.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; CommunicatorAPI;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; StartConversation&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Messenger _messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IMessengerAdvanced _messengerAdv;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;new&lt;/span&gt; Messenger();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            _messengerAdv = (IMessengerAdvanced)_messenger;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt;[] sipUris = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;kf@fabrikam.com&amp;quot;&lt;/span&gt; };&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            _messengerAdv.StartConversation(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="rem"&gt;// The call media.            &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                CONVERSATION_TYPE.CONVERSATION_TYPE_IM,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                &lt;span class="rem"&gt;// The participants.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                sipUris,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="rem"&gt;// The conversation window title as as string.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;My IM Call&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.  Pass &amp;quot;1&amp;quot;.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Press the Enter key to exit the application.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            Console.ReadLine();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            Marshal.ReleaseComObject(_messenger);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            _messenger = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            Marshal.ReleaseComObject(_messengerAdv);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            _messengerAdv = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Changing the call media is just a matter of passing a different value from the CONVERSATION_TYPE enum.&amp;#160; For example, the follow code starts an audio call:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;            _messengerAdv.StartConversation(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;                &lt;span class="rem"&gt;// The call media.            &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                CONVERSATION_TYPE.CONVERSATION_TYPE_AUDIO,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                &lt;span class="rem"&gt;// The participants.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                sipUris,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                &lt;span class="rem"&gt;// The conversation window title as as string.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;My Audio Call&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.  Pass &amp;quot;1&amp;quot;.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Starting a conference is just a matter of starting a call with multiple participants.&amp;#160; For example, the following code starts a video conference:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt;[] sipUris = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;quot;kf@fabrikam.com&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cb@fabrikam.com&amp;quot;&lt;/span&gt; };&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            _messengerAdv.StartConversation(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                &lt;span class="rem"&gt;// The call media.            &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                CONVERSATION_TYPE.CONVERSATION_TYPE_VIDEO,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                &lt;span class="rem"&gt;// The participants.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                sipUris,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                &lt;span class="rem"&gt;// The conversation window title as as string.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;My Video Conference&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.  Pass &amp;quot;1&amp;quot;.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                &lt;span class="rem"&gt;// Not supported.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you’d like to try this code out for yourself, you’ll need to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ED1CCE45-CC22-46E1-BD50-660FE6D2C98C&amp;amp;displaylang=en"&gt;download the Office Communicator 2007 SDK&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/cmayo/archive/2009/04/10/building-a-virtualized-uc-development-environment-part-1-building-the-ts-virtual-machine.aspx"&gt;setup a UC development environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More details, tips and tricks on UC development can be found in the &lt;a href="http://www.amazon.com/Programming-Unified-Communications-Microsoft%C2%AE-Office/dp/0735626235/ref=sr_1_1?ie=UTF8&amp;amp;qid=1249960696&amp;amp;sr=8-1"&gt;Programming for Unified Communications&lt;/a&gt; book. &lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9877972" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author></entry><entry><title>Exchange 2010 RC available now</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/cmayo/archive/2009/08/19/exchange-2010-rc-available-now.aspx" /><id>http://blogs.msdn.com/cmayo/archive/2009/08/19/exchange-2010-rc-available-now.aspx</id><published>2009-08-19T23:03:00Z</published><updated>2009-08-19T23:03:00Z</updated><content type="html">&lt;p&gt;Details can be found at the &lt;a href="http://msexchangeteam.com/default.aspx" target="_blank"&gt;Exchange Team Blog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Chris&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9874643" width="1" height="1"&gt;</content><author><name>cmayo</name><uri>http://blogs.msdn.com/members/cmayo.aspx</uri></author></entry></feed>