<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>TSF Aware : TSF Manager</title><link>http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx</link><description>Tags: TSF Manager</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Where are the TSF Samples?</title><link>http://blogs.msdn.com/tsfaware/archive/2008/10/22/where-are-the-tsf-samples.aspx</link><pubDate>Wed, 22 Oct 2008 23:57:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9011695</guid><dc:creator>Eric Brown</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/9011695.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=9011695</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=9011695</wfw:comment><description>&lt;p&gt;Many people have emailed me asking about the TSF samples on MSDN.&amp;#160; They’re supposed to be on MSDN code gallery, although they don’t appear to be there.&lt;/p&gt;  &lt;p&gt;They are, however, part of the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&amp;amp;displaylang=en"&gt;Windows SDK&lt;/a&gt;. After installation, you'll find them in %programfiles%\Microsoft SDKs\Windows\v6.1\Samples\winui\Input\tsf.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;There are actually more samples in the Windows SDK than were on MSDN, including some examples of how to write a text store, as well as how to interact with TSF in UILess mode.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9011695" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/Text+Services/default.aspx">Text Services</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/Applications/default.aspx">Applications</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>More ways to fix problems with dictation</title><link>http://blogs.msdn.com/tsfaware/archive/2008/09/05/more-ways-to-fix-problems-with-dictation.aspx</link><pubDate>Fri, 05 Sep 2008 22:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8926767</guid><dc:creator>Eric Brown</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/8926767.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=8926767</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=8926767</wfw:comment><description>&lt;p&gt;One common cause of dictation not working is that CTFMon is not running.&amp;#160; This is a helper process used by the Text Services Framework to implement things like global compartments and the like.&lt;/p&gt;  &lt;p&gt;If dictation is not working, try running this command from an elevated command prompt:&lt;/p&gt;  &lt;p&gt;schtasks /Query /TN \Microsoft\Windows\TextServicesFramework\MsCtfMonitor&lt;/p&gt;  &lt;p&gt;(all on one line)&lt;/p&gt;  &lt;p&gt;You should get some output that looks like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="3"&gt;TaskName&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Next Run Time&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Status     &lt;br /&gt;=================== =============&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; =======      &lt;br /&gt;MsCtfMonitor&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; N/A&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Running&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If the status doesn’t say ‘Running’, then you need to restart CTFMon like this:&lt;/p&gt;  &lt;p&gt;schtasks /Run /TN \Microsoft\Windows\TextServicesFramework\MsCtfMonitor&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Run the query again, and verify that the MsCtfMonitor task is running.&lt;/p&gt;  &lt;p&gt;Once it is, restart Windows Speech Recognition, and dictation should work again.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8926767" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/dictation/default.aspx">dictation</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF: Miscellaneous Functions</title><link>http://blogs.msdn.com/tsfaware/archive/2007/05/05/a-tour-through-tsf-miscellaneous-functions.aspx</link><pubDate>Sat, 05 May 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2381755</guid><dc:creator>Eric Brown</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2381755.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2381755</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2381755</wfw:comment><description>The last set of interfaces implemented by the TSF manager are the 'odd-ball' interfaces that don't really fall into any other logical groups.&amp;nbsp; 
&lt;H3&gt;Helpers&lt;/H3&gt;
&lt;P&gt;The interfaces in this category provide auxiliary services for applications or text services.&amp;nbsp; &lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538387.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538387.aspx"&gt;ITextStoreACPServices&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538395.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538395.aspx"&gt;ITextStoreACPSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538395.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538395.aspx"&gt;ITextStoreACPSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Passed to &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538414.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538414.aspx"&gt;ITextStoreACP::AdviseSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538901.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538901.aspx"&gt;ITfEditRecord&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Passed to &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628963.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628963.aspx"&gt;ITfTextEditSink::OnEndEdit&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&amp;nbsp; 
&lt;H3&gt;MSAA interoperability&lt;/H3&gt;
&lt;P&gt;These interfaces were originally created to allow TSF to interoperate with MSAA.&amp;nbsp; Unfortunately, no 3&lt;SUP&gt;rd&lt;/SUP&gt; party developers implemented the MSAA client support needed to make these interfaces work, so at this point, these interfaces are effectively obsolete.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=265 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538090.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538090.aspx"&gt;IAnchor&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628809.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628809.aspx"&gt;ITfMSAAControl&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538453.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538453.aspx"&gt;ITextStoreAnchor&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538454.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538454.aspx"&gt;ITextStoreAnchorSink&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2381755" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF: Language Bar</title><link>http://blogs.msdn.com/tsfaware/archive/2007/05/04/a-tour-through-tsf-language-bar.aspx</link><pubDate>Fri, 04 May 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2381732</guid><dc:creator>Eric Brown</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2381732.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2381732</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2381732</wfw:comment><description>&lt;P&gt;These interfaces manage the language bar and the items that display on the language bar.&amp;nbsp; These interfaces are used exclusively by text services, and will be discussed further in a future post.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628748.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628748.aspx"&gt;ITfLangBarMgr&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;CoCreateInstance(CLSID_TF_LangBarMgr)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628780.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628780.aspx"&gt;ITfMenu&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Passed to:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628711.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628711.aspx"&gt;ITfLangBarItemBitmapButton::InitMenu&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628720.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628720.aspx"&gt;ITfLangBarItemButton::InitMenu&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628953.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628953.aspx"&gt;ITfSystemDeviceTypeLangBarItem&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx"&gt;ITfLangBarItem&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628956.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628956.aspx"&gt;ITfSystemLangBarItem&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628780.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628780.aspx"&gt;ITfMenu&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383169.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383169.aspx"&gt;ITfTransitoryExtensionUIElement&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P mce_keep="true"&gt;QI on &lt;A class="" title=ITfUIElement href="http://msdn2.microsoft.com/aa383175.aspx" mce_href="http://msdn2.microsoft.com/aa383175.aspx"&gt;ITfUIElement&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2381732" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF: Enumerators</title><link>http://blogs.msdn.com/tsfaware/archive/2007/05/03/a-tour-through-tsf-enumerators.aspx</link><pubDate>Thu, 03 May 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2381683</guid><dc:creator>Eric Brown</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2381683.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2381683</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2381683</wfw:comment><description>&lt;P&gt;The next set of TSF manager interfaces are&amp;nbsp;the&amp;nbsp;enumerators.&amp;nbsp; These are rather boring interfaces; they just enumerate things.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Generally speaking, the enumerators enumerate things owned by&amp;nbsp;the item that provides the enumerator.&amp;nbsp; For example, IEnumTfContexts is returned from ITfDocumentMgr.&amp;nbsp; Therefore, it enumerates the contexts owned by that document manager, and not by any other document manager.&amp;nbsp; Similarly, IEnumTfFunctionProviders is returned from ITfThreadMgr.&amp;nbsp; Therefore, it enumerates the function providers registered with that thread, and not any others.&lt;/P&gt;
&lt;P&gt;The only interesting&amp;nbsp;thing about these interfaces&amp;nbsp;is how you get them.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538115.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538115.aspx"&gt;IEnumITfCompositionView&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538710.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538710.aspx"&gt;ITfContextComposition::FindComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538135.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538135.aspx"&gt;IEnumTfContexts&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538891.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538891.aspx"&gt;ITfDocumentMgr::EnumContexts&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538164.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538164.aspx"&gt;IEnumTfDocumentMgrs&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628983.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628983.aspx"&gt;ITfThreadMgr::EnumDocumentMgrs&amp;nbsp;&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538172.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538172.aspx"&gt;IEnumTfFunctionProviders&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628984.aspx"&gt;ITfThreadMgr::EnumFunctionProviders&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538185.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538185.aspx"&gt;IEnumTfLangBarItems&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628727.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628727.aspx"&gt;ITfLangBarItemMgr::EnumItems&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538196.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538196.aspx"&gt;IEnumTfLanguageProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628558.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628558.aspx"&gt;ITfInputProcessorProfiles::EnumLanguageProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538218.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538218.aspx"&gt;IEnumTfProperties&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538785.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538785.aspx"&gt;ITfContext::EnumProperties&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538230.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538230.aspx"&gt;IEnumTfPropertyValue&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538798.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538798.aspx"&gt;ITfContext::TrackProperties&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538241.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538241.aspx"&gt;IEnumTfRanges&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628937.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628937.aspx"&gt;ITfReadOnlyProperty::EnumRanges&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(and therefore, ITfProperty::EnumRanges)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538905.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538905.aspx"&gt;ITfEditRecord::GetTextAndPropertyChanges&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa380866.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa380866.aspx"&gt;IEnumTfUIElements&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;ITfUIElementMgr::EnumUIElements&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2381683" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF: Event sinks</title><link>http://blogs.msdn.com/tsfaware/archive/2007/05/02/a-tour-through-tsf-event-sinks.aspx</link><pubDate>Wed, 02 May 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2341870</guid><dc:creator>Eric Brown</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2341870.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2341870</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2341870</wfw:comment><description>&lt;P&gt;The interfaces in this category allow you to&amp;nbsp;be called back&amp;nbsp;when certain events happen on another interface.&amp;nbsp; These callbacks are generally referred to as 'event sinks'. &lt;/P&gt;
&lt;P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx"&gt;ITfSource&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538621.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538621.aspx"&gt;ITfCompartment&lt;/A&gt;, &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;, &lt;A class="" title=ITfDocumentMgr href="http://msdn2.microsoft.com/ms538878.aspx" mce_href="http://msdn2.microsoft.com/ms538878.aspx"&gt;ITfDocumentMgr&lt;/A&gt;, or &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx"&gt;ITfLangBarItem&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628942.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628942.aspx"&gt;ITfSourceSingle&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt; or &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H2&gt;
&lt;H3&gt;Event Sinks&lt;/H3&gt;&lt;/H2&gt;
&lt;P&gt;TSF can call your application or text service back when certain events occur.&amp;nbsp; Many event sinks are installed by a two-step process:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;1) Call QueryInterface() on a host interface (described in the table) for &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx"&gt;ITfSource&lt;/A&gt;;&lt;/LI&gt;
&lt;LI&gt;2) Call &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628945.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628945.aspx"&gt;ITfSource::AdviseSink()&lt;/A&gt; with the target interface IID and the target interface pointer.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;You will get back a cookie that you will need to pass back to &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628946.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628946.aspx"&gt;ITfSource::UnadviseSink()&lt;/A&gt; when it's time to detach from the event source (e.g., when the host or target object is about to be destroyed, or the text service is uninitializing).&lt;/P&gt;
&lt;P&gt;Your application or text service must implement the target interface; these interfaces are typically implemented on the main object (i.e., the object that implements either &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538384.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538384.aspx"&gt;ITextStoreACP&lt;/A&gt; or &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628964.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628964.aspx"&gt;ITfTextInputProcessor&lt;/A&gt; for applications or text services, respectively).&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;B&gt;Target Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;B&gt;Hosting Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538490.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538490.aspx"&gt;ITfActiveLanguageProfileNotifySink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538625.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538625.aspx"&gt;ITfCompartmentEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538621.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538621.aspx"&gt;ITfCompartment&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538718.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538718.aspx"&gt;ITfContextKeyEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538869.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538869.aspx"&gt;ITfDisplayAttributeNotifySink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538910.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538910.aspx"&gt;ITfEditTransactionSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628691.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628691.aspx"&gt;ITfKeyTraceEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628736.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628736.aspx"&gt;ITfLangBarItemSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx"&gt;ITfLangBarItem&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628769.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628769.aspx"&gt;ITfLanguageProfileNotifySink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628879.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628879.aspx"&gt;ITfPreservedKeyNotifySink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628951.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628951.aspx"&gt;ITfStatusSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628957.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628957.aspx"&gt;ITfSystemLangBarItemSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628701.aspx"&gt;ITfLangBarItem&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628962.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628962.aspx"&gt;ITfTextEditSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628967.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628967.aspx"&gt;ITfTextLayoutSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628969.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628969.aspx"&gt;ITfThreadFocusSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628973.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628973.aspx"&gt;ITfThreadMgrEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383163.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383163.aspx"&gt;ITfTransitoryExtensionSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P mce_keep="true"&gt;&lt;A class="" title=ITfDocumentMgr href="http://msdn2.microsoft.com/ms538878.aspx" mce_href="http://msdn2.microsoft.com/ms538878.aspx"&gt;ITfDocumentMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383201.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383201.aspx"&gt;ITfUIElementSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383178.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383178.aspx"&gt;ITfUIElementMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H3&gt;Single sinks&lt;/H3&gt;
&lt;P&gt;Some event sources can only have a single sink attached.&amp;nbsp; Attaching an single event sink is similar to installing a regular event sink, except that you QueryInterface() for &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628942.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628942.aspx"&gt;ITfSourceSingle&lt;/A&gt; instead of &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628941.aspx"&gt;ITfSource&lt;/A&gt;; one then attaches the sink by calling &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628943.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628943.aspx"&gt;ITfSourceSingle::AdviseSingleSink().&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;B&gt;Hosting Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538609.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538609.aspx"&gt;ITfCleanupContextSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538601.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538601.aspx"&gt;ITfCleanupContextDurationSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H3&gt;Specialized Sinks&lt;/H3&gt;
&lt;P&gt;Some event sinks are attached by calling specific methods.&amp;nbsp; The following table describes the installation method for these sinks:&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 width=599 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;B&gt;Installation Method&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628793.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628793.aspx"&gt;ITfMouseSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628805.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628805.aspx"&gt;ITfMouseTracker::AdviseMouseSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538654.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538654.aspx"&gt;ITfCompositionSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538713.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538713.aspx"&gt;ITfContextComposition::StartComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628694.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628694.aspx"&gt;ITfLangBarEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628750.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628750.aspx"&gt;ITfLangBarMgr::AdviseEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628601.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628601.aspx"&gt;ITfKeyEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=334&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628677.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628677.aspx"&gt;ITfKeystrokeMgr::AdviseKeyEventSink&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2341870" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF: Contexts and Ranges</title><link>http://blogs.msdn.com/tsfaware/archive/2007/05/01/a-tour-through-tsf-contexts-and-ranges.aspx</link><pubDate>Tue, 01 May 2007 17:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2316907</guid><dc:creator>Eric Brown</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2316907.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2316907</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2316907</wfw:comment><description>&lt;P&gt;Our next stop&amp;nbsp;on our tour through TSF brings us to the two most heavily used&amp;nbsp;interfaces in text services:&amp;nbsp; Contexts and Ranges.&amp;nbsp; But first, a quick diversion to discuss the relationship between threads, documents, and contexts.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt; object is the primary object implemented by TSF.&amp;nbsp; TSF ensures that no more than one &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt; object exists in each thread.&amp;nbsp;&amp;nbsp; The &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt; object manages documents, text services, and handles focus changes between documents.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538878.aspx"&gt;ITfDocumentMgr&lt;/A&gt; object represents a logical document.&amp;nbsp; It isn't heavily used, though; its primary purpose is to be a container for edit contexts.&amp;nbsp; There is usually only one context in the document manager, although sometimes &lt;A href="http://msdn2.microsoft.com/ms538899.aspx"&gt;there can be two&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt; object represents a view of the document that you can interact with; it manages selections, properties, &amp;amp; ranges.&lt;/P&gt;
&lt;H3&gt;Contexts&lt;/H3&gt;
&lt;P&gt;A context represents a view of the document that a text service can interact with.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Varies widely.&amp;nbsp; Common examples:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538895.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538895.aspx"&gt;ITfDocumentMgr::GetTop()&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538890.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538890.aspx"&gt;ITfDocumentMgr::CreateContext()&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538779.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538779.aspx"&gt;ITfContextView&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538787.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538787.aspx"&gt;ITfContext::GetActiveView&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538705.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538705.aspx"&gt;ITfContextComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538734.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538734.aspx"&gt;ITfContextOwnerCompositionServices&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538750.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538750.aspx"&gt;ITfContextOwnerServices&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628595.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628595.aspx"&gt;ITfInsertAtSelection&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628797.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628797.aspx"&gt;ITfMouseTracker&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628906.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628906.aspx"&gt;ITfQueryEmbedded&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538703.aspx"&gt;ITfContext&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538653.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538653.aspx"&gt;ITfComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538713.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538713.aspx"&gt;ITfContextComposition::StartComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538660.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538660.aspx"&gt;ITfCompositionView&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Passed to any of:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538745.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538745.aspx"&gt;ITfContextOwnerCompositionSink::OnStartComposition&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538747.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538747.aspx"&gt;ITfContextOwnerCompositionSink::OnUpdateComposition&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538743.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538743.aspx"&gt;ITfContextOwnerCompositionSink::OnEndComposition&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Once you have a context (and usually an edit cookie - most of the things you can do with contexts can only be done from within edit sessions), you can start to manipulate the document.&amp;nbsp; &lt;/P&gt;
&lt;H3&gt;Ranges&lt;/H3&gt;
&lt;P&gt;These interfaces deal with pieces of text within a logical document.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628908.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628908.aspx"&gt;ITfRange&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;Varies widely;&amp;nbsp; common instances are:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538792.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538792.aspx"&gt;ITfContext::GetSelection&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628909.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628909.aspx"&gt;ITfRangeACP&lt;/A&gt; &lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628908.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628908.aspx"&gt;ITfRange&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=241&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628912.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628912.aspx"&gt;ITfRangeBackup&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=358&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538784.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538784.aspx"&gt;ITfContext::CreateRangeBackup&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2316907" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item><item><title>A Tour through TSF:  TSF Managers</title><link>http://blogs.msdn.com/tsfaware/archive/2007/04/30/a-tour-through-tsf-tsf-managers.aspx</link><pubDate>Mon, 30 Apr 2007 17:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2315189</guid><dc:creator>Eric Brown</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/tsfaware/comments/2315189.aspx</comments><wfw:commentRss>http://blogs.msdn.com/tsfaware/commentrss.aspx?PostID=2315189</wfw:commentRss><wfw:comment>http://blogs.msdn.com/tsfaware/rsscomments.aspx?PostID=2315189</wfw:comment><description>&lt;P&gt;The next stop&amp;nbsp;on the tour is an extended visit through the TSF manager interfaces.&amp;nbsp;Since TSF implements a lot of interfaces, I decided to break them up into separate posts.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've also included a (very brief) description of how a text service (or application) would obtain an instance of each interface.&amp;nbsp; By default, an instance of the interface is returned by the method listed.&amp;nbsp; Some interfaces are obtained by calling QueryInterface() on the specified interface, other interfaces are passed as parameters to specified methods, and yet others are obtained by calling CoCreateInstance() with a particular CLSID. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;This post describes the 'top-level' interfaces in TSF.&amp;nbsp; You either create them directly, or you obtain them either when your application initializes TSF, or when your text service is activated.&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=0 border=1&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;B&gt;Interface&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;&lt;B&gt;How to Obtain&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538500.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538500.aspx"&gt;ITfCategoryMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;CoCreateInstance(CLSID_TF_CategoryMgr)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538808.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538808.aspx"&gt;ITfDisplayAttributeMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;CoCreateInstance(CLSID_TF_DisplayAttributeMgr)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538878.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538878.aspx"&gt;ITfDocumentMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;Application:&amp;nbsp; &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628981.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628981.aspx"&gt;ITfThreadMgr::CreateDocumentMgr&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Text Service: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628985.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628985.aspx"&gt;ITfThreadMgr::GetFocus&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628974.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628974.aspx"&gt;ITfThreadMgrEventSink::OnInitDocumentMgr&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628977.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628977.aspx"&gt;ITfThreadMgrEventSink::OnSetFocus&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628978.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628978.aspx"&gt;ITfThreadMgrEventSink::OnUninitDocumentMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa381941.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa381941.aspx"&gt;ItfInputProcessorProfileMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;CoCreateInstance(CLSID_TF_InputProcessorProfiles)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538985.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538985.aspx"&gt;ITfInputProcessorProfilesEx&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538987.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538987.aspx"&gt;ITfInputProcessorProfileSubstituteLayout&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538984.aspx"&gt;ITfInputProcessorProfiles&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;Application: CoCreateInstance(CLSID_TF_ThreadMgr)&lt;/P&gt;
&lt;P&gt;Text Service: Passed to &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628965.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628965.aspx"&gt;ITfTextInputProcessor::Activate&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383146.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383146.aspx"&gt;ITfThreadMgrEx&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538615.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538615.aspx"&gt;ITfClientId&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms538692.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms538692.aspx"&gt;ITfConfigureSystemKeystrokeFeed&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628676.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628676.aspx"&gt;ITfKeystrokeMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628723.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628723.aspx"&gt;ITfLangBarItemMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms628783.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628783.aspx"&gt;ITfMessagePump&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=265&gt;
&lt;P&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa383178.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa383178.aspx"&gt;ITfUIElementMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=354&gt;
&lt;P&gt;QI on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms628972.aspx"&gt;ITfThreadMgr&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Update (7/3):&amp;nbsp; I incorrectly listed &lt;A href="http://msdn2.microsoft.com/en-us/library/aa381941.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa381941.aspx"&gt;ItfInputProcessorProfileMgr&lt;/A&gt;&amp;nbsp;as an interface that could be directly created.&amp;nbsp; Gael pointed out that this was incorrect, and I've updated the table to list the correct method.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2315189" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tsf/default.aspx">tsf</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/tour/default.aspx">tour</category><category domain="http://blogs.msdn.com/tsfaware/archive/tags/TSF+Manager/default.aspx">TSF Manager</category></item></channel></rss>