<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Siddhartha Pandey - MSFT</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/siddharthapandey/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:51:22 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Make sure Codeduitest is able to identify element inside a Hidden TabItem</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/make-sure-codeduitest-is-able-to-identify-element-inside-a-hidden-tabitem</link>
      <pubDate>Fri, 04 May 2012 00:52:51 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2012/05/04/make-sure-codeduitest-is-able-to-identify-element-inside-a-hidden-tabitem/</guid>
      <description><![CDATA[Recently there was a customer who reported an issue (Details...]]></description>
      <content:encoded><![CDATA[<p>Recently there was a customer who reported an issue (Details <span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA;"><a href="http://social.msdn.microsoft.com/Forums/en-US/vsautotest/thread/e977a27a-bb67-4919-af84-1d06ce891047/">http://social.msdn.microsoft.com/Forums/en-US/vsautotest/thread/e977a27a-bb67-4919-af84-1d06ce891047/).</a></span></p>
<p><span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA;">In his application there was a TabItem who's Visibility property was set to Collapsed. Due to this AutomationElement.FromPoint (UIA api) was not able to return correct element(inside the hidden tabitem) from point (and hence codeduitest test was not able to recognize element from point). This looks like some optimization which WPF UIA implementation has when drilling down for element from point.</span></p>
<p><span style="font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: JA; mso-bidi-language: AR-SA;">The workaround is to override the default TabItemAutomationPeer implementation and override few properties so that the drilling works fine. Attached is the custom TabItem class which I wrote to make this possible. You just need to use the TabItemCustom class instead of default TabItem class to achieve this. TabItemCustomPeer is the automationpeer implementation of TabItemCustom. TabItemCustomPeer is the important class which made this possible.</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/30/08/53/TabItemCustom%20(2).cs" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-30-08-53/TabItemCustom-_2800_2_2900_.cs">TabItemCustom (2).cs</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Actionlog Configuration</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/actionlog-configuration</link>
      <pubDate>Tue, 21 Feb 2012 06:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2012/02/21/actionlog-configuration/</guid>
      <description><![CDATA[You can goto the link http://msdn.microsoft.com/en-us/library/dd286736.aspx and check out what all...]]></description>
      <content:encoded><![CDATA[<p>You can goto the link <a href="http://msdn.microsoft.com/en-us/library/dd286736.aspx">http://msdn.microsoft.com/en-us/library/dd286736.aspx</a> and check out what all options are there to configure Actionlog data collector.</p>
<p>There was an instance I came across&nbsp;where in the user actions where not getting recorded. It turned out that the user was interacting with a excel sheet. If you notice the below snap shot (from action log config UI), there are some list of process for which recording is disabled.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/4657.Capture.PNG" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-32-37/4657.Capture.PNG"><img border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/4657.Capture.PNG" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-32-37/4657.Capture.PNG" /></a></p>
<p>So if at any point of time you notice that your actions are not getting recorded using MTM you might want to check if that particular process is part of ignored process list.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Zindex issue while automating WPF application</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/zindex-issue-while-automating-wpf-application</link>
      <pubDate>Sat, 10 Jul 2010 06:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/07/10/zindex-issue-while-automating-wpf-application/</guid>
      <description><![CDATA[Below is a simple XAML code.
&lt;Grid.ColumnDefinitions&gt;...]]></description>
      <content:encoded><![CDATA[<p>Below is a simple XAML code.</p>
<p><span style="color: #0080c0;">&lt;Grid.ColumnDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition MaxWidth="400" MinWidth="250" Width="250" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 0--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition Width="2" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 1--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition Width="*" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 2--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Grid.ColumnDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Grid.RowDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="67" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 0--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="30" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 1--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="*" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 2--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="57" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 3--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Grid.RowDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Resize Border--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Frame x:Name="ResizeBorders" Grid.RowSpan="4" Grid.ColumnSpan="3" Panel.ZIndex="100"/&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Button Name="button1" Grid.Column="2" Grid.Row="1"&gt;&lt;/Button&gt;</span></p>
<p>&nbsp;</p>
<p>A user tries to automate his/her button in the application. If you record action on the button using Codeduitest builder you will notice that it actually records action on a Pane control instead of Button.</p>
<p>Let&rsquo;s try to figure out what can be the problem here. If you notice the above code Frame has a Zindex = 100 which is greater than any other controls in the application. Internal the UIA implementation does a hit test based on Zindex. Hence if the user tries to get element from point (by clicking or doing Win + I) he/she gets pane (which is a Frame inside the XAML) instead of button. To fix this the user needs to make the Zindex of the button control greater than Zindex of frame.</p>
<p>Below code should work fine</p>
<p><span style="color: #0080c0;">&lt;Grid.ColumnDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition MaxWidth="400" MinWidth="250" Width="250" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 0--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition Width="2" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 1--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ColumnDefinition Width="*" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Column 2--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Grid.ColumnDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Grid.RowDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="67" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 0--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="30" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 1--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="*" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 2--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;RowDefinition Height="57" /&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Row 3--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Grid.RowDefinitions&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Resize Border--&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Frame x:Name="ResizeBorders" Grid.RowSpan="4" Grid.ColumnSpan="3" Panel.ZIndex="100"/&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Button Name="button1" Grid.Column="2" Grid.Row="1" <span style="color: #008000;">Panel.ZIndex="101"&gt;&lt;/</span>Button&gt;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>NotSupportedException/NotImplementedException thrown when debugging Codeduitest</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/notsupportedexceptionnotimplementedexception-thrown-when-debugging-codeduitest</link>
      <pubDate>Sat, 10 Jul 2010 05:55:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/07/10/notsupportedexceptionnotimplementedexception-thrown-when-debugging-codeduitest/</guid>
      <description><![CDATA[Many of the customers have reported that they see NotSupportedException/NotImplementedException...]]></description>
      <content:encoded><![CDATA[<p>Many of the customers have reported that they see NotSupportedException/NotImplementedException being thrown when debugging a Codeduitest. </p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/8562.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/8562.image_5F00_2.png"><img height="241" width="458" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/3632.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/3632.image_5F00_thumb.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /></a> </p>
<p>The NotSupportedException/NotImplementedException here in innocuous and is expected. The reason why we see debugger breaking at this exception is because the debugger option has of &ldquo;Breaking at any CLR exceptions is switched on&rdquo;. So any time an exception is thrown the VS Debugger will break at that point even if it is handled else where.</p>
<p>To disable this follow the below steps.</p>
<blockquote>
<p>1) Click Debug-&gt;Exception menu item.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/8473.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/8473.image_5F00_4.png"><img height="460" width="439" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/3630.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/3630.image_5F00_thumb_5F00_1.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /></a> </p>
</blockquote>
<p>&nbsp;</p>
<blockquote></blockquote>
<p>&nbsp;</p>
<blockquote>
<p>2) It will open an exception dialog. Uncheck Common language runtime exception check box (under thrown column header). See below </p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/7673.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/7673.image_5F00_6.png"><img height="355" width="702" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/32/37/metablogapi/7802.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-32-37-metablogapi/7802.image_5F00_thumb_5F00_2.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /></a> </p>
</blockquote>
<p>&nbsp;</p>
<blockquote>
<p>Now you are good to go with debugging your codeduitest.</p>
</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>SearchConfiguration.NextSibling</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/searchconfiguration-nextsibling</link>
      <pubDate>Sat, 10 Apr 2010 12:50:03 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/04/10/searchconfiguration-nextsibling/</guid>
      <description><![CDATA[In this post I will be describing what does NextSibling means in context of search. But before doing...]]></description>
      <content:encoded><![CDATA[<p>In this post I will be describing what does <a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitest.extension.searchconfiguration.nextsibling(v=VS.100).aspx">NextSibling</a> means in context of search. But before doing that I will mention the ways in which search can happen.</p>  <p>There are two ways (exclusive) in which search can happen:-</p>  <blockquote>   <p>a)&#160;&#160;&#160; <strong><u>Plugin search</u></strong> :- By plugin search I mean that the respective plugin for that <a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitesting.uitestcontrol.technologyname(v=VS.100).aspx">Technology</a> (as specified by the user) searches for the control.</p>    <p>b)&#160;&#160;&#160; <strong><u>Playback Engine search</u></strong> :- In this case playback navigates through the UI tree of the Application in BFS manner to search for the control.</p>    <p>Today in case of <strong>MSAA (Winforms/Win32 controls) and UIA (WPF controls)</strong> plugins, playback searches for the control, where as in case of <strong>Web (IE controls)</strong> the search happens using plugin search.</p>    <p>Let us try to understand a simple search that happens using Playback engine. Consider the following UI tree.</p> </blockquote>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_2.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb.png" width="244" height="233" /></a>&#160;</p>  <p>Suppose user specifies following Search Criteria for Control “F”. (I will name the variable same as what is specified in the blocks to make things clear)</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_6.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_6.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="image" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_2.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_2.png" width="429" height="186" /></a></p>  <p>If you see in above case A is the container element for C and C is container element for F. Container elements are those element which act as a pivot for for searching another element. In above case playback engine will search C only inside C and will search F only inside C (and not B). As mentioned before playback search happens using BFS traversal of the UI tree. Lets try to mimic what happens when engine tries to search for Control F.</p>  <p>In the above case A is the Toplevel element. Top Level search happens using Window search. Lets assume that playback was able to find A using Window based search. Lets put A in the array. This A will now act as the Pivot.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_8.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_3.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_3.png" width="244" height="42" /></a> </p>  <p>Now engine gets all the children of A (it queries the plugin for all the child) and puts them in the array. Here is what the updated array looks like</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_10.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_4.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_4.png" width="244" height="42" /></a> </p>  <p>Now engine sees that the C’s search properties matches the Search properties that user has specified in the code. Bingo! element is found!!</p>  <p>So till now engine is able to search for A and then inside A, C. Now it goes and tries to search for F. It puts C in the array. Updated array looks something like (just cleared the array for clarity)</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_12.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_5.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_5.png" width="244" height="44" /></a> </p>  <p>As it did before it gets the child of C and tries to match the properties. In this case the array looks like</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_14.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_14.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_6.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_6.png" width="244" height="43" /></a>&#160; </p>  <p></p>  <p></p>  <p></p>  <p>In this case it matches the properties specified by the user and properties of F, which eventually matches and hence engine is able to search F.</p>  <p>Above example is a very basic scenario in which search happens, just to get things setup.</p>  <p>&#160;</p>  <p>Now let us analyze the UI tree drawn above and try to get relationship among the controls. As you can see <strong>D and E are siblings which has common parent B.</strong></p>  <p>F does not have a real sibling. <strong>But it has siblings D and E with common ancestor being A.</strong></p>  <p><strong></strong></p>  <p><strong>Question:</strong> What if we are able to define a relation of controls (like what we do for ancestor elements what we say container elements) which are siblings of each other for in case of search.</p>  <p><strong>Answer: </strong>Yes it is possible. This is why NextSibling SearchConfiguration is there.</p>  <p>&#160;</p>  <p>Moving ahead with NextSibling SearchConfiguration. Today this is used in case of MSAA and UIA plugin which also means that this configuration is understood by the playback engine.</p>  <p><strong><u><font size="4">EXAMPLE 1</font></u></strong></p>  <p>Lets take for example the below code</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_20.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_9.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_9.png" width="502" height="268" /></a> </p>  <p></p>  <p></p>  <p><strong>In short I have defined a relationship between E as a next sibling of D with common ancestor B.</strong></p>  <p>Below diagram shows how search for E happens in this case. Let us assume that B is already searched by Playback engine. Hence the array will look something like :</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_22.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_22.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_10.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_10.png" width="244" height="45" /></a> </p>  <p>Now the motive of Engine is to search D (because that is the next element it needs to search before searching E). So it gets the children of B one by one and puts it into the array. So it puts D (The first child of B) in the array and eventually marks it as element D because search properties matches. Here is the updated array</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_24.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_24.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_11.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_11.png" width="244" height="43" /></a> </p>  <p>Now it goes and try to search E. Engine on seeing that NextSibling is the SearchConfiguration for E, it doesn’t gets the children of D (as it did in the original search example) rather it continues getting children of B, because E will be the next sibling of D. Doing so it finally hits E which matches the search properties specified by the user. </p>  <p>This was a simple scenario of a NextSibling match. </p>  <p><strong><u><font size="4">EXAMPLE 2</font></u></strong></p>  <p>Let us discuss one complex example. Below code shows one of the complex scenarios :</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_26.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_26.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_12.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_12.png" width="510" height="219" /></a> </p>  <p>In this above scenario I am trying to search F with NextSilbling configuration. If you notice A is the common ancestor of both D and F and hence I have written the code in this way (have not used B as the container element of D).</p>  <p>Let us see how does this work. Assume A is already searched and part of the array. So the array looks like</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_28.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_28.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_13.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_13.png" width="244" height="44" /></a> </p>  <p>As the search progresses for element D engine pushes children of A inside the array, but none of them matches. The state of array will be like: </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_30.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_30.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_14.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_14.png" width="244" height="45" /></a> </p>  <p>The pivot element (meaning the element of whose children was getting queued in the array) was initially A. Now when all the children of A is in the array the pivot element becomes B (next element in the array). Hence children of B is now queried for and queued into the array. In this case D is the element which matches the search properties specified for control D. Hence the state of array looks like</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_32.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_32.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_15.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_15.png" width="244" height="45" /></a> </p>  <p>Now the engine tries to search for F. It sees a NextSibling Search configuration of F. Hence rather getting children of D it continues getting children of B which has only one element left that is E. Array looks something like :</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_34.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_34.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_16.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/SearchConfiguration.NextSibling_140A8/image_thumb_16.png" width="244" height="42" /></a> </p>  <p>The pivote element moves from B to C. The only child of C ie F gets queued into the array and also matches the SearchProperties specified by the user. Hence engine returns element F.</p>  <p><strong><u><font size="4">Uses of NextSibling SearchConfiguration</font></u></strong></p>  <p>The codeduitest recorder (in case of UIA and MSAA plugin cases) generates NextSibling SearchConfiguration when the element does not have a good Searchable properties (ie they have just have ControlType property), but it’s previous sibling has good identification strings.</p>  <p>In <strong>example 1</strong> E didn’t had any searchable property but D had. Hence recorder in this case will generate NextSibling for element E.</p>  <p>In <strong>example 2</strong> F didn’t had searchable property and so did E. Hence it generated NextSibling for F with D being the previous sibling with good Searchable property.</p>  <p>User can always hand code and use this configuration as and when required.</p>  <p><strong>Note:</strong> As mentioned before NextSibling today is applicable for MSAA/UIA plugin and not web.</p>]]></content:encoded>
    </item>
    <item>
      <title>Automating Mouse actions with two button clicked at same time</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/automating-mouse-actions-with-two-button-clicked-at-same-time</link>
      <pubDate>Thu, 25 Mar 2010 12:46:52 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/03/25/automating-mouse-actions-with-two-button-clicked-at-same-time/</guid>
      <description><![CDATA[There is no workaround in recording. But you can do hand coding to make things work during playback....]]></description>
      <content:encoded><![CDATA[<p>There is no workaround in recording. But you can do hand coding to make things work during playback.</p>  <p><strong><u>If you just want to Click the control with both middle and left button&#160; then you can do this by following steps</u></strong></p>  <p>1) Record the scenario of click using only one Mouse button. Say Left</p>  <p>2) The code that gets generated will be something like</p>  <p><strong><font color="#008000">Mouse.Click (uIForm1Client, new Point(63, 226));</font></strong></p>  <p>3) Now modify the code as follows</p>  <p><strong><font color="#008000">Mouse.Hover(uIForm1Client, new Point(63, 226), 3);</font></strong></p>  <p><strong><font color="#008000">// Press down of two buttons</font></strong></p>  <p><strong><font color="#008000">DoMouseAction(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MIDDLEDOWN);</font></strong></p>  <p><strong><font color="#008000">// Now do up</font></strong></p>  <p><strong><font color="#008000">DoMouseAction(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MIDDLEUP);</font></strong></p>  <p><strong><u></u></strong></p>  <p><strong><u></u></strong></p>  <p><strong><u>If you just want to Drag on the control with both middle and left button&#160; then you can do this by following steps</u></strong></p>  <p>1) Record your drag scenario with only one Button</p>  <p>2) The code that gets generated will be something like</p>  <p><strong><font color="#008000">// Move 'Form1' client from (63, 226) to (194, 230)</font></strong></p>  <p><strong><font color="#008000">Mouse.StartDragging(uIForm1Client, new Point(63, 226));</font></strong></p>  <p><strong><font color="#008000">Mouse.StopDragging(uIForm1Client, 131, 4);</font></strong></p>  <p>3) Now modify the code as follows. </p>  <p><strong><font color="#008000">Mouse.Hover(uIForm1Client, new Point(63, 226), 3);</font></strong></p>  <p><strong><font color="#008000">// Press down of two buttons</font></strong></p>  <p><strong><font color="#008000">DoMouseAction(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MIDDLEDOWN);</font></strong></p>  <p><strong><font color="#008000">// The points should be used as much as needed. These points resembles the Screen coordinate</font></strong></p>  <p><strong><font color="#008000">Mouse.Move(new Point(Cursor.Position.X + 40, Cursor.Position.Y));</font></strong></p>  <p><strong><font color="#008000">// Now do up</font></strong></p>  <p><strong><font color="#008000">DoMouseAction(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MIDDLEUP);</font></strong></p> <strong>   <p>     <br /></p>    <br />Definition of <strong><u>DoMouseAction</u></strong> and related const are:-</strong>   <p>   <br /><strong><font color="#0000ff">private const int MOUSEEVENTF_ABSOLUTE = 0x8000;        <br />private const int&#160; MOUSEEVENTF_LEFTDOWN = 0x2;         <br />private const int&#160; MOUSEEVENTF_LEFTUP = 0x4;         <br />private const int&#160; MOUSEEVENTF_MIDDLEDOWN = 0x20;         <br />private const int&#160; MOUSEEVENTF_MIDDLEUP = 0x40;         <br />private const int&#160; MOUSEEVENTF_MOVE = 0x1;         <br />private const int MOUSEEVENTF_RIGHTDOWN = 0x8;         <br />private const int&#160; MOUSEEVENTF_RIGHTUP = 0x10;</font></strong></p>  <p><strong><font color="#0000ff">[DllImport(&quot;user32.dll&quot;, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]        <br />public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);</font></strong></p>  <p><strong><font color="#0000ff">public void DoMouseAction(int buttons)        <br />{         <br />&#160;&#160;&#160; //Call the imported function with the cursor's current position         <br />&#160;&#160;&#160; int X = Cursor.Position.X;         <br />&#160;&#160;&#160; int Y = Cursor.Position.Y;         <br />&#160;&#160;&#160; mouse_event(buttons, X, Y, 0, 0);         <br />}</font></strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Understanding the Window Search and Windowed Properties</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/understanding-the-window-search-and-windowed-properties</link>
      <pubDate>Fri, 15 Jan 2010 06:52:52 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/01/15/understanding-the-window-search-and-windowed-properties/</guid>
      <description><![CDATA[There has been questions regarding how do you search a particular control giving ControlName or...]]></description>
      <content:encoded><![CDATA[<p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">There has been questions regarding how do you search a particular control giving ControlName or ControlId etc. So I thought it is a good opportunity to blog about it. I will be covering the following :-</p>  <blockquote  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">   <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">a) Which plugin gets picked up for which controls</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">b) Introducing MSAA plugin</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">c)&#160; Introducing what does it mean that a control is windowed.</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">d) Properties specific to Windowed control.</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">e) How to do Windowed based search and how to search a particular non windowed control using a windowed properties. </p> </blockquote>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Plugins currently picked up (Beta2)</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Below is the info in which plugins gets picked up for which controls</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">1) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">IEPlugin (web)</u></strong> :- This is picked up for web controls inside IE 7/8.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">2) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">UIA</u></strong>:- This is picked up for WPF controls.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">3) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">MSAA (Default plugin)</u></strong>:- This is picked for Winforms Controls, Win32 controls, MFC applications. In short which ever controls that are not specified in above two plugins gets picked up by this plugin which is a default plugin. Thing to note here is that if for some platform we are sure that default plugin wont work (for eg. FireFox, SIlverlight etc) this plugin also doesn’t get picked up and we throw exception.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">&#160;</p>  <h6  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"></h6>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Introducing MSAA plugin</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">MSAA plugin uses <a href="http://msdn.microsoft.com/en-us/library/ms971310.aspx" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">“Micorsoft Active Accessibility”</a> to identify controls. So if a control has a good Accessibility support then it could be identified by the plugin (if there is no other plugin that support that control this plugin is hit. To see how to write your own plugin for the platform that are not supported please go through <a href="http://blogs.msdn.com/gautamg/archive/2010/01/05/series-on-coded-ui-test-extensibility.aspx" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">this</a>.) </p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Internally the plugin generates search properties/exposes properties given by interface IAccessible. For richer properties for Winforms/Win32 controls it uses Windows messages to get those properties. Also some of the SearchProperties are windowed specific properties. In the next couple of topic we will be seeing what does a windowed control means and what are the specific properties that this plugin generate.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">&#160;</p>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">What are windowed controls?</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">By Windowed controls we mean all the controls who have their own window handle. You can identify if a particular control has a window handle of it’s own by using <a href="http://msdn.microsoft.com/en-us/library/aa264396(VS.60).aspx" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">SPY++.</a> Below are the steps to check if a control has a window handle of it’s own or not.</p>  <blockquote  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">   <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">1) Open SPY++.</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">2) Press Ctrl+F.</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">3) Use the Cross hair and drag it to task bar button of any application that is opened. You will notice that the whole task bar is getting highlighted instead of the buttons. This is because it uses a window handle from point and highlights it. In this case the buttons don’t have their own window handle instead the whole task bar’s window. This means all the these buttons inherits the window handle of the parent task bar window control.</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"></p> </blockquote>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><strong><u>Note:</u></strong> Not all controls with ControlType = Window are windowed and also even a control which is of ControlType other than Window can also be a Windowed control (eg the hosting control inside the Internet Explorer who’s controltype is a client)</p>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"></h4>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Properties of Windowed Control</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Some the properties that a windowed control can have are :-</p>  <blockquote  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">   <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">1) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ControlName</u></strong> (The ControlName which is got by Sending WM_GETCONTROLNAME message to the window handle of the control)</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">2) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ControlId</u></strong> (Got using GWL_ID message)</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">3) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ClassName</u></strong> (Got using GetClassName Pinvoke)</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">4) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WindowText</u></strong> (Got using GetWindowText PInvoke)</p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">5) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">AccessibleName</u></strong> (Got using IAccessible pointer for the control)</p> </blockquote>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">All of these properties are got using window handle of the control and hence these are specific to windowed controls. The last property though (as the name suggest is not a property got using window handle but using IAccessible pointer. </p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">How is Name and AccessibleName different?</u></strong></p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">With Respect to the MSAA <u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">plugin</u><strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"> <u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Name</u></strong> is IAccessible name for a non windowed control. In case of Windowed controls the name Property returns <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WindowText</u></strong> and <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">AccessibleName</u></strong> returns IAccessible Name. For Non Windowed controls AccessibleName property should not return anything and you will get IAccessible name using Name property as mentioned before.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">&#160;</p>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Searching of a control</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">You can do two type of Search using MSAA plugin :-</p>  <blockquote  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">   <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">1) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Window based search</u></strong> :- This is done by navigating through all the window either inside Desktop or inside a specified Window handle. </p>    <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">2) <strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><u  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">MSAA search</u></strong> :-<strong  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"> </strong>This uses IAccessible based navigation to search a particular control.</p> </blockquote>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">&#160;</p>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Search a Window Control using Window Search</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">If you want to search a window control you can do that by specifying atleast one Window Property (as mentioned above)</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">So you can do this to search a control who’s ControlName is “foo” and who’s controltype is window</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinWindow</font> window = new <font color="#008080" __vsttTracked="1">WinWindow</font> (containerelement);     <br  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }" />window.SearchProperties.Add(<font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties</font>.<font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Common</font>.ControlName, &quot;foo&quot;);</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Internally the plugin checks if there is even a single window property mentioned in SearchProperty. Seeing that it does a Window based search.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Note: Following are the properties you can mention as part of SearchProperties so that a window based search kicks in. </p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ControlName</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ControlId</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinProperties.Common.ClassName</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">“AccessibleName”</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">&#160;</p>  <h4  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Searching a Non Windowed control using Windowed property</h4>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Let’s take an example of a Simple Windows Form Application which has a button inside it. I want to search the button if I know it’s parent window’s ControlName (let’s say “foo”) and don’t want to search using button’s name property. Below code will show how to search a button using it’s window’s controlname property</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinWindow</font> window = new <font color="#008080" __vsttTracked="1">WinWindow</font> (topLevelElement);</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><font color="#00ff80" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">// Assign a ControlName property to the window control so that a window search kicks in.</font>     <br  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }" />window.SearchProperties.Add(WinProperties.Common.ControlName, &quot;button1&quot;); </p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><font color="#00ff80" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">// Now you search a button control without specifying any property here</font></p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }"><font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">WinButton</font> button = new <font color="#008080" __vsttTracked="1">WinButton</font> (window);     <br  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }" /><font color="#008080" __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Mouse</font>.Click(button);</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Let’s understand the code. The window instance is having a Windowed SearchProperty assigned to it. Hence it will hit a window search which matches the control name property before returning the element.</p>  <p  __vsttTracked="1" insertadjacenthtml="function (loc, code)
                    {
                        // HTML Content changing..
                        _baseInsertFunction(loc, code);

                        try
                        {
                            vsttTrackHover.NodeAddition();
                            vsttTrackHover.OverrideNodes(domElement.parentNode.all, 0);
                        }
                        catch (ex)
                        {
                        }
                    }">Now we have assigned the Container element as window of the button control (see the ctor of the button control). So internally a search for the window will happen first using window search&#160; and then button will be searched under the window control using MSAA based search.</p>]]></content:encoded>
    </item>
    <item>
      <title>Recording of MSDN Webcast on "Extending the Coded UI Test"</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/recording-of-msdn-webcast-on-extending-the-coded-ui-test</link>
      <pubDate>Thu, 14 Jan 2010 21:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/01/14/recording-of-msdn-webcast-on-extending-the-coded-ui-test/</guid>
      <description><![CDATA[Folks can use the following link to view the recording of the MSDN web cast on &quot;Extending the...]]></description>
      <content:encoded><![CDATA[Folks can use the following <a title="link" href="https://www.livemeeting.com/cc/mseventsbmo/view?id=1032438055&amp;role=attend&amp;pw=9BFA548A" target="_blank" mce_href="https://www.livemeeting.com/cc/mseventsbmo/view?id=1032438055&amp;role=attend&amp;pw=9BFA548A">link</a> to view the recording of the MSDN web cast on &quot;<a title="&quot;Extending the Coded UI Test&quot;" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;EventID=1032438056&amp;CountryCode=US" mce_href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=en-US&amp;EventID=1032438056&amp;CountryCode=US">Extending the Coded UI Test</a>&quot;.   ]]></content:encoded>
    </item>
    <item>
      <title>Webcast on “Extending Coded UI Test”</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/webcast-on-extending-coded-ui-test</link>
      <pubDate>Tue, 05 Jan 2010 08:51:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2010/01/05/webcast-on-extending-coded-ui-test/</guid>
      <description><![CDATA[Language(s):

English. 


Product(s):

Microsoft Visual Studio 2010....]]></description>
      <content:encoded><![CDATA[<P>
<TABLE border=0 cellSpacing=0 cellPadding=0>
<TBODY>
<TR>
<TD vAlign=top width=97>
<P><B>Language(s):</B></P></TD>
<TD vAlign=top width=541>
<P>English. </P></TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Product(s):</B></P></TD>
<TD vAlign=top width=541>
<P>Microsoft Visual Studio 2010. </P></TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Audience(s): </B></P></TD>
<TD vAlign=top width=541>
<P>Pro Dev/Programmer. </P></TD></TR>
<TR>
<TD vAlign=top width=97>&nbsp;</TD>
<TD vAlign=top width=541>&nbsp;</TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Duration:</B></P></TD>
<TD vAlign=top width=541>
<P>60 Minutes </P></TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Start Date:</B></P></TD>
<TD vAlign=top width=541>
<P>Wednesday, January 13, 2010 10:00 AM Pacific Time (US &amp; Canada) </P></TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B></B></P></TD>
<TD vAlign=top width=541>
<P><B></B></P></TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Event Link:</B></P></TD>
<TD vAlign=top width=541>
<P><A href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032438055&amp;Culture=en-US">http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032438055&amp;Culture=en-US</A></P></TD></TR>
<TR>
<TD vAlign=top width=97>&nbsp;</TD>
<TD vAlign=top width=541>&nbsp;</TD></TR>
<TR>
<TD vAlign=top width=97>
<P><B>Presenters: </B></P></TD>
<TD vAlign=top width=541>
<P>Siddhartha Pandey, Software Development Engineer, Microsoft Corporation and Gautam Goenka, Senior Development Manager, Microsoft Corporation</P></TD></TR></TBODY></TABLE></P>
<P><B>Event Overview</B></P>
<P>Coded UI Test is a new feature in Microsoft Visual Studio 2010 for functional UI automation testing. Coded UI Test is targeted towards automation engineers and developers who can use the feature to ensure there are no regressions in the UI. Coded UI Test includes a rich API library to code against and a resilient record and playback tool. In this webcast, we discuss various extensibility features of Coded UI Test like extending the support to custom controls or using the record and playback tool for completely different scenarios.</P>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Indic Language Input Tool (Beta)</title>
      <link>https://docs.microsoft.com/archive/blogs/siddharthapandey/microsoft-indic-language-input-tool-beta</link>
      <pubDate>Sun, 20 Dec 2009 20:06:00 GMT</pubDate>
      <dc:creator><![CDATA[Siddhartha Pandey - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/siddharthapandey/2009/12/20/microsoft-indic-language-input-tool-beta/</guid>
      <description><![CDATA[It wasn’t easy to write in Hindi before with ENU keyboard. 
Here comes Microsoft Indic Language...]]></description>
      <content:encoded><![CDATA[<P>It wasn’t easy to write in Hindi before with ENU keyboard. </P>
<P>Here comes <A href="http://specials.msn.co.in/ilit/Hindi.aspx" mce_href="http://specials.msn.co.in/ilit/Hindi.aspx">Microsoft Indic Language Input tool</A>. It currently supports <A href="http://specials.msn.co.in/ilit/Bengali.aspx" mce_href="http://specials.msn.co.in/ilit/Bengali.aspx">Bengali</A>, <A href="http://specials.msn.co.in/ilit/Hindi.aspx" mce_href="http://specials.msn.co.in/ilit/Hindi.aspx">Hindi</A>, <A href="http://specials.msn.co.in/ilit/Kannada.aspx" mce_href="http://specials.msn.co.in/ilit/Kannada.aspx">Kannada</A>, <A href="http://specials.msn.co.in/ilit/Malayalam.aspx" mce_href="http://specials.msn.co.in/ilit/Malayalam.aspx">Malayalam</A>, <A href="http://specials.msn.co.in/ilit/Tamil.aspx" mce_href="http://specials.msn.co.in/ilit/Tamil.aspx">Tamil</A> and <A href="http://specials.msn.co.in/ilit/Telugu.aspx" mce_href="http://specials.msn.co.in/ilit/Telugu.aspx">Telugu</A>. </P>
<P>This is what I get when I type “Hindi”.</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_2.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_2.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_thumb.png" width=217 height=238 mce_src="http://blogs.msdn.com/blogfiles/siddharthapandey/WindowsLiveWriter/MicrosoftIndicLanguageInputToolBeta_F363/image_thumb.png"></A> </P>
<P>I suggest giving it a try.</P>]]></content:encoded>
    </item>
  </channel>
</rss>