<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodeUtopia - The blog of Jani Hartikainen &#187; C#</title>
	<atom:link href="http://codeutopia.net/blog/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeutopia.net/blog</link>
	<description>Software development with a focus on web-related technologies</description>
	<lastBuildDate>Thu, 02 Sep 2010 14:25:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Find an application&#8217;s icon with WinAPI</title>
		<link>http://codeutopia.net/blog/2007/12/18/find-an-applications-icon-with-winapi/</link>
		<comments>http://codeutopia.net/blog/2007/12/18/find-an-applications-icon-with-winapi/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 22:47:37 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2007/12/18/find-an-applications-icon-with-winapi/</guid>
		<description><![CDATA[I was working on some C# code today, and had to figure out how to find a specific application&#8217;s icon. There&#8217;s a lot of basic information on this, including messages like WM_GETICON in MSDN, but it just wouldn&#8217;t work. One of the reasons I like C# is how it makes doing things easy, and it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on some C# code today, and had to figure out how to find a specific application&#8217;s icon.</p>
<p>There&#8217;s a lot of basic information on this, including messages like WM_GETICON in MSDN, but it just wouldn&#8217;t work. </p>
<p><span id="more-61"></span></p>
<p>One of the reasons I like C# is how it makes doing things easy, and it&#8217;s also very easy to figure out how to do something that you haven&#8217;t done before with it.</p>
<p>The thing I dislike in C/C++ is that it&#8217;s so damn difficult to figure out at times, especially some things, such as this one. Sure, there&#8217;s a lot of documentation available about the Windows API, but how do I know where to look?</p>
<p>I did <i>eventually</i> figure out how to do this, so here&#8217;s the solution for anyone else who might be struggling with the same</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> Icon GetAppIcon<span style="color: #000000;">&#40;</span>IntPtr hwnd<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  IntPtr iconHandle <span style="color: #008000;">=</span> SendMessage<span style="color: #000000;">&#40;</span>hwnd,WM_GETICON,ICON_SMALL2,<span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>iconHandle <span style="color: #008000;">==</span> IntPtr.<span style="color: #0000FF;">Zero</span><span style="color: #000000;">&#41;</span>
    iconHandle <span style="color: #008000;">=</span> SendMessage<span style="color: #000000;">&#40;</span>hwnd,WM_GETICON,ICON_SMALL,<span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>iconHandle <span style="color: #008000;">==</span> IntPtr.<span style="color: #0000FF;">Zero</span><span style="color: #000000;">&#41;</span>
    iconHandle <span style="color: #008000;">=</span> SendMessage<span style="color: #000000;">&#40;</span>hwnd,WM_GETICON,ICON_BIG,<span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>iconHandle <span style="color: #008000;">==</span> IntPtr.<span style="color: #0000FF;">Zero</span><span style="color: #000000;">&#41;</span>
    iconHandle <span style="color: #008000;">=</span> GetClassLongPtr<span style="color: #000000;">&#40;</span>hwnd, GCL_HICON<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>iconHandle <span style="color: #008000;">==</span> IntPtr.<span style="color: #0000FF;">Zero</span><span style="color: #000000;">&#41;</span>
    iconHandle <span style="color: #008000;">=</span> GetClassLongPtr<span style="color: #000000;">&#40;</span>hwnd, GCL_HICONSM<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>iconHandle <span style="color: #008000;">==</span> IntPtr.<span style="color: #0000FF;">Zero</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
&nbsp;
  Icon icn <span style="color: #008000;">=</span> Icon.<span style="color: #0000FF;">FromHandle</span><span style="color: #000000;">&#40;</span>iconHandle<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #0600FF;">return</span> icn<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The constants and other methods used:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> GCL_HICONSM <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">34</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> GCL_HICON <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">14</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> ICON_SMALL <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> ICON_BIG <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> ICON_SMALL2 <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">const</span> <span style="color: #FF0000;">int</span> WM_GETICON <span style="color: #008000;">=</span> 0x7F<span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> IntPtr GetClassLongPtr<span style="color: #000000;">&#40;</span>IntPtr hWnd, <span style="color: #FF0000;">int</span> nIndex<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>IntPtr.<span style="color: #0000FF;">Size</span> <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">4</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">return</span> GetClassLongPtr64<span style="color: #000000;">&#40;</span>hWnd, nIndex<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">else</span>
    <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> IntPtr<span style="color: #000000;">&#40;</span>GetClassLongPtr32<span style="color: #000000;">&#40;</span>hWnd, nIndex<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#91;</span>DllImport<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;user32.dll&quot;</span>, EntryPoint <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;GetClassLong&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">extern</span> <span style="color: #FF0000;">uint</span> GetClassLongPtr32<span style="color: #000000;">&#40;</span>IntPtr hWnd, <span style="color: #FF0000;">int</span> nIndex<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #000000;">&#91;</span>DllImport<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;user32.dll&quot;</span>, EntryPoint <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;GetClassLongPtr&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">extern</span> IntPtr GetClassLongPtr64<span style="color: #000000;">&#40;</span>IntPtr hWnd, <span style="color: #FF0000;">int</span> nIndex<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #000000;">&#91;</span>DllImport<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;user32.dll&quot;</span>, CharSet <span style="color: #008000;">=</span> CharSet.<span style="color: #0600FF;">Auto</span>, SetLastError <span style="color: #008000;">=</span> <span style="color: #0600FF;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">static</span> <span style="color: #0600FF;">extern</span> IntPtr SendMessage<span style="color: #000000;">&#40;</span>IntPtr hWnd, <span style="color: #FF0000;">int</span> Msg, <span style="color: #FF0000;">int</span> wParam, <span style="color: #FF0000;">int</span> lParam<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2007/12/18/find-an-applications-icon-with-winapi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
