<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3337010162670974019</id><updated>2011-11-14T21:19:02.005-08:00</updated><title type='text'>Ralin's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ralinchimev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ralinchimev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ralin</name><uri>http://www.blogger.com/profile/10345118370897709702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3337010162670974019.post-8071144276909592116</id><published>2011-06-23T04:02:00.000-07:00</published><updated>2011-06-23T04:02:03.950-07:00</updated><title type='text'>How to Develop Google Chrome Extensions (draft)</title><content type='html'>&lt;h1&gt;Create the extension&lt;/h1&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a folder somewhere on your computer to contain your extension's code.&lt;/li&gt;&lt;li&gt;Inside your extension's folder, create a text file called manifest.json, and put this in it:&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "name": "MyExtension",&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "version": "1.0",&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "description": "This is a sample Google Chrome extension.",&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "permissions": [ "http://www.ralin.net/" ]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Load the extension&lt;/h1&gt;&lt;ol&gt;&lt;li&gt;Open the extensions management page by choosing Tools &amp;gt; Extensions menu.&lt;/li&gt;&lt;li&gt;Hit the Load unpacked extension button and a file dialog will appear.&lt;/li&gt;&lt;li&gt;Go to your extension folder and select it.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3337010162670974019-8071144276909592116?l=ralinchimev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ralinchimev.blogspot.com/feeds/8071144276909592116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ralinchimev.blogspot.com/2011/06/how-to-develop-google-chrome-extensions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/8071144276909592116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/8071144276909592116'/><link rel='alternate' type='text/html' href='http://ralinchimev.blogspot.com/2011/06/how-to-develop-google-chrome-extensions.html' title='How to Develop Google Chrome Extensions (draft)'/><author><name>ralin</name><uri>http://www.blogger.com/profile/10345118370897709702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3337010162670974019.post-6924380471210031251</id><published>2011-04-30T01:53:00.000-07:00</published><updated>2011-05-17T10:10:19.297-07:00</updated><title type='text'>C# Programming: Web Scraping with Regular Expressions (draft)</title><content type='html'>&lt;h3&gt;Overview&lt;/h3&gt;&lt;br /&gt;If you want to extract data from a public web site you have to scrape it. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use Case 1:&lt;/b&gt; You need all products from a given online shop catalog to do price comparisons or re-sell them at your own shop. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use Case 2:&lt;/b&gt; You need to know how your site is positioned in search engine result pages (SERP) for given keywords. Then you need to search for your keywords and scrape the SERPs to find the positioning of your web site.&lt;br /&gt;&lt;br /&gt;There are many use cases where web scraping can be applied. Before scraping a web site check the terms and conditions of the web site as there could be legal issues related to scraping information from certain sites. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Crawling before Scraping&lt;/h3&gt;&lt;br /&gt;The scraping part is the easiest part of the exercise. The more complex thing is to get to the pages you want to scrape. And there is only one way to do it - like a spider you need to crawl your way to the desired page.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Use regular expressions&lt;/h3&gt;&lt;br /&gt;Here I show a simple class that receives the HTML string and then extracts all the links and their text into structs. It is fairly fast, but I offer some optimization tips further down. It would be better to use a class here and offer methods that act on its contents.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Use SingleLine mode&lt;/h3&gt;&lt;br /&gt;Many C# developers make the mistake of not specifying that the Regexes work on multiple lines, treating newlines as regular characters. MSDN states that SingleLine "Specifies single-line mode. Changes the meaning of the dot (.) so it matches every character (instead of every character except \n)."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3337010162670974019-6924380471210031251?l=ralinchimev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ralinchimev.blogspot.com/feeds/6924380471210031251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ralinchimev.blogspot.com/2011/04/web-scraping-with-regular-expressions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/6924380471210031251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/6924380471210031251'/><link rel='alternate' type='text/html' href='http://ralinchimev.blogspot.com/2011/04/web-scraping-with-regular-expressions.html' title='C# Programming: Web Scraping with Regular Expressions (draft)'/><author><name>ralin</name><uri>http://www.blogger.com/profile/10345118370897709702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3337010162670974019.post-1045756199172671113</id><published>2011-04-30T01:42:00.000-07:00</published><updated>2011-07-12T04:40:25.006-07:00</updated><title type='text'>Advanced C# Programming: Developing Internet Explorer Extensions</title><content type='html'>&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{ font-size: x-small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;h1&gt;Overview&lt;/h1&gt;&lt;br /&gt;A browser extension or plugin is a software program that lives inside the browser and add new features making the browser suitable for specific personal or business needs. The most common business needs that are easily accomplished with browser plugins are: modify default search, add side frames, inject new content into existing webpage, communicate with remote servers or web services, search highlight, show ads, etc. In this article I will explain how to inject new static and dynamic content into existing webpage.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Use Case&lt;/h1&gt;&lt;br /&gt;You want to develop an Internet Explorer extension which shows some fixed layer containing promotional offers and discounts for the goods you are selling.&lt;br /&gt;To achieve that you need to develop a custom Internet Explorer plugin using Browser Helper Objects (BHO) that will track user browsing activities and display your discounts based on some URL or content filtering using regular expressions or XPath.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Step by Step Walk-Through&lt;/h1&gt;&lt;br /&gt;I will explain here a step by step guide on how to accomplish this task as it is better to learn how to do it instead of just take a ready solution which you don't know how it works and the moment you touch something to make it suit your needs it breaks down and you have no idea why. I will use .NET Framework and C#.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;1. Open your MS Visual Studio 2010 :-)&lt;/h3&gt;&lt;br /&gt;So far so good.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2. Create a new project "Visual C#" -&amp;gt; "Windows" -&amp;gt; "Class Library"&lt;/h3&gt;A new project is opened for you containing a single class "Class1". Rename the class to "BHO". You can use F2 on the CS file in the solution explorer. &lt;br /&gt;Now you have to define the &lt;b&gt;IObjectWithSite&lt;/b&gt; interface which the BHO class will implement. The IObjectWithSite interface provides simple objects with a lightweight siting mechanism (lighter than IOleObject). Often, an object must communicate directly with a container site that is managing the object. Outside of IOleObject::SetClientSite, there is no generic means through which an object becomes aware of its site. The IObjectWithSite interface provides a siting mechanism. This interface should only be used when IOleObject is not already in use. By using IObjectWithSite, a container can pass the IUnknown pointer of its site to the object through SetSite. Callers can also get the latest site passed to SetSite by using GetSite.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3. Add references and imports to the following components&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices; &lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; SHDocVw;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; mshtml;&lt;/pre&gt;&lt;h3&gt;4. Define the IOleObjectWithSite interface just above your BHO class declaration&lt;/h3&gt;&lt;pre class="csharpcode"&gt;[&lt;br /&gt;        ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;),&lt;br /&gt;        InterfaceType(ComInterfaceType.InterfaceIsIUnknown),&lt;br /&gt;        Guid(&lt;span class="str"&gt;"FC4801A3-2BA9-11CF-A229-00AA003D7352"&lt;/span&gt;)&lt;br /&gt;    ]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IObjectWithSite&lt;br /&gt;    {&lt;br /&gt;        [PreserveSig]&lt;br /&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; SetSite([MarshalAs(UnmanagedType.IUnknown)]&lt;span class="kwrd"&gt;object&lt;/span&gt; site);&lt;br /&gt;        [PreserveSig]&lt;br /&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; GetSite(&lt;span class="kwrd"&gt;ref&lt;/span&gt; Guid guid, &lt;span class="kwrd"&gt;out&lt;/span&gt; IntPtr ppvSite);&lt;br /&gt;    }&lt;/pre&gt;&lt;h3&gt;5. Now make the BHO class implement the IOleObjectWithSite interface like &lt;/h3&gt;&lt;pre class="csharpcode"&gt;[&lt;br /&gt;        ComVisible(&lt;span class="kwrd"&gt;true&lt;/span&gt;),&lt;br /&gt;        Guid(&lt;span class="str"&gt;"1056BA25-DA81-56E3-A671B-D38A9B1B2142"&lt;/span&gt;),&lt;br /&gt;        ClassInterface(ClassInterfaceType.None)&lt;br /&gt;    ]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; BHO : IObjectWithSite&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; WebBrowser webBrowser;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; SetSite(&lt;span class="kwrd"&gt;object&lt;/span&gt; site)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (site != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                webBrowser = (WebBrowser)site;&lt;br /&gt;                webBrowser.DocumentComplete += &lt;br /&gt;                    &lt;span class="kwrd"&gt;new&lt;/span&gt; DWebBrowserEvents2_DocumentCompleteEventHandler(&lt;br /&gt;                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.OnDocumentComplete);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                webBrowser.DocumentComplete -= &lt;br /&gt;                    &lt;span class="kwrd"&gt;new&lt;/span&gt; DWebBrowserEvents2_DocumentCompleteEventHandler(&lt;br /&gt;                    &lt;span class="kwrd"&gt;this&lt;/span&gt;.OnDocumentComplete);&lt;br /&gt;                webBrowser = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; GetSite(&lt;span class="kwrd"&gt;ref&lt;/span&gt; Guid guid, &lt;span class="kwrd"&gt;out&lt;/span&gt; IntPtr ppvSite)&lt;br /&gt;        {&lt;br /&gt;            IntPtr punk = Marshal.GetIUnknownForObject(webBrowser);&lt;br /&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; hr = Marshal.QueryInterface(punk, &lt;span class="kwrd"&gt;ref&lt;/span&gt; guid, &lt;span class="kwrd"&gt;out&lt;/span&gt; ppvSite);&lt;br /&gt;            Marshal.Release(punk);&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; hr;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL)&lt;br /&gt;        {&lt;br /&gt;            HTMLDocument document = (HTMLDocument)webBrowser.Document;&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;We have implemented the SetSite and GetSite methods and added an empty event handler for the document loaded event. Thus, we will receive an event every time the document is loaded into the browser. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;6. Implement the OnDocumentComplete method to inject the Javascript code and the DIV element&lt;/h3&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL)&lt;br /&gt;{&lt;br /&gt;    HTMLDocument document = (HTMLDocument)webBrowser.Document;&lt;br /&gt;&lt;br /&gt;    HTMLHeadElement head = (HTMLHeadElement) document.all.tags(&lt;span class="str"&gt;"head"&lt;/span&gt;).item(&lt;span class="kwrd"&gt;null&lt;/span&gt;, 0);&lt;br /&gt;    IHTMLScriptElement script = (IHTMLScriptElement)document.createElement(&lt;span class="str"&gt;"script"&lt;/span&gt;);&lt;br /&gt;    script.type = &lt;span class="str"&gt;@"text/javascript"&lt;/span&gt;;&lt;br /&gt;    script.text = &lt;span class="str"&gt;"function hidediv(){document.getElementById('myOwnUniqueId12345').style.visibility = 'hidden';}"&lt;/span&gt;;&lt;br /&gt;    head.appendChild((IHTMLDOMNode)scriptObject);&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; div = &lt;span class="str"&gt;"&amp;lt;div id=\"myOwnUniqueId12345\" style=\"position:fixed;bottom:0px;right:0px;z-index:9999;width=300px;height=150px;\"&amp;gt;&amp;lt;div style=\"position:relative;float:right;font-size:9px;\"&amp;gt;&amp;lt;a href=\"javascript:hidediv();\"&amp;gt;close&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;" My content goes here ...&amp;lt;/div&amp;gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    document.body.insertAdjacentHTML(&lt;span class="str"&gt;"afterBegin"&lt;/span&gt;, div);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;First we inject the Javascript that we will use to close the div popup. Then we inject the html for the div element in the body with style that it is displayed in the bottom right corner of the browser. And that it is. You may want to filter our URLs and content for which you display the div. &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnDocumentComplete(&lt;span class="kwrd"&gt;object&lt;/span&gt; pDisp, &lt;span class="kwrd"&gt;ref&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; URL)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (URL.ToString().Contains(&lt;span class="str"&gt;"www.google.com"&lt;/span&gt;))&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;// Show div in here ...&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;7. Register your BHO to be loaded by the Internet Explorer&lt;/h3&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; BHO_REGISTRY_KEY_NAME = &lt;br /&gt;&lt;span class="str"&gt;"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;[ComRegisterFunction]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterBHO(Type type)&lt;br /&gt;{&lt;br /&gt;    RegistryKey registryKey = Registry.LocalMachine.CreateSubKey(BHO_REGISTRY_KEY_NAME, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; guid = type.GUID.ToString(&lt;span class="str"&gt;"B"&lt;/span&gt;);&lt;br /&gt;    &lt;br /&gt;    RegistryKey ourKey = registryKey.CreateSubKey(guid);&lt;br /&gt;&lt;br /&gt;    ourKey.SetValue(&lt;span class="str"&gt;"NoExplorer"&lt;/span&gt;, 1, RegistryValueKind.DWord);&lt;br /&gt;&lt;br /&gt;    ourKey.Close();&lt;br /&gt;&lt;br /&gt;    registryKey.Close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[ComUnregisterFunction]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UnregisterBHO(Type type)&lt;br /&gt;{&lt;br /&gt;    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_REGISTRY_KEY_NAME, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; guid = type.GUID.ToString(&lt;span class="str"&gt;"B"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;    registryKey.DeleteSubKey(guid, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The register method simply tells the IE which is the GUID of your extension so that it could be loaded. The "No Explorer" value simply says that we don't want to be loaded by the Windows Explorer. &lt;br /&gt;Now all you have to do is create a simple installation project that will install your IE plugin or install it manually. &lt;br /&gt;&lt;br /&gt;That is - quick and simple!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3337010162670974019-1045756199172671113?l=ralinchimev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ralinchimev.blogspot.com/feeds/1045756199172671113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ralinchimev.blogspot.com/2011/04/advanced-c-programming-ie-extension.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/1045756199172671113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3337010162670974019/posts/default/1045756199172671113'/><link rel='alternate' type='text/html' href='http://ralinchimev.blogspot.com/2011/04/advanced-c-programming-ie-extension.html' title='Advanced C# Programming: &lt;br /&gt;Developing Internet Explorer Extensions'/><author><name>ralin</name><uri>http://www.blogger.com/profile/10345118370897709702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
