<?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>GSaraiva&#039;s Projects &#187; CreateToolhelp32Snapshot</title>
	<atom:link href="http://projects.pro.br/gsaraiva/tag/createtoolhelp32snapshot/feed/" rel="self" type="application/rss+xml" />
	<link>http://projects.pro.br/gsaraiva</link>
	<description>Step by step</description>
	<lastBuildDate>Tue, 01 Sep 2009 13:14:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Delphi: Utils :: AppRunningCount</title>
		<link>http://projects.pro.br/gsaraiva/2009/07/delphi-utils-apprunningcount/</link>
		<comments>http://projects.pro.br/gsaraiva/2009/07/delphi-utils-apprunningcount/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 20:13:38 +0000</pubDate>
		<dc:creator>Gilberto Saraiva</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[AppRunningCount]]></category>
		<category><![CDATA[CreateToolhelp32Snapshot]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Process32First]]></category>
		<category><![CDATA[Process32Next]]></category>
		<category><![CDATA[TH32CS_SNAPPROCESS]]></category>
		<category><![CDATA[TProcessEntry32]]></category>
		<category><![CDATA[Usefull Function]]></category>

		<guid isPermaLink="false">http://projects.pro.br/gsaraiva/?p=470</guid>
		<description><![CDATA[Folks,
For everybody thats need to limit the instance number of your application:
uses SysUtils, TLHelp32;&#160;function AppRunningCount&#40;const AExeName: string&#41;: integer;var&#160;&#160;hSnap: THandle;&#160;&#160;p32: TProcessEntry32;begin&#160;&#160;Result := 0;&#160;&#160;hSnap := CreateToolHelp32SnapShot&#40;TH32CS_SNAPPROCESS, 0&#41;;&#160;&#160;p32.dwSize := Sizeof&#40;TProcessEntry32&#41;;&#160;&#160;Process32First&#40;hSnap, p32&#41;;&#160;&#160;repeat&#160;&#160;&#160;&#160;if SameText&#40;AExeName, ExtractFileName&#40;p32.szExeFile&#41;&#41; then&#160;&#160;&#160;&#160;&#160;&#160;inc&#40;Result&#41;;&#160;&#160;until not Process32Next&#40;hSnap, p32&#41;;&#160;&#160;CloseHandle&#40;hSnap&#41;;end;
Use:
// On DPR// Limit to 1 instancebegin &#160;&#160;if AppRunningCount&#40;ExtractFileName&#40;ParamStr&#40;0&#41;&#41;&#41; = 1 then&#160;&#160;begin&#160;&#160;// Application codes&#160;&#160;end;end.
Explaining more about this approach:
In a situation of multiples [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Folks,</strong></p>
<p>For everybody thats need to limit the instance number of your application:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Delphi"><div class="devcodeoverflow"><ol><li><span style="color: #000000; font-weight: bold;">uses</span> SysUtils<span style="color: #000066;">,</span> TLHelp32<span style="color: #000066;">;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">function</span> AppRunningCount<span style="color: #000066;">&#40;</span><span style="color: #000000; font-weight: bold;">const</span> AExeName<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">string</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">var</span></li><li>&nbsp;&nbsp;hSnap<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">THandle</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;p32<span style="color: #000066;">:</span> TProcessEntry32<span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #0000ff;">0</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;hSnap <span style="color: #000066;">:</span><span style="color: #000066;">=</span> CreateToolHelp32SnapShot<span style="color: #000066;">&#40;</span>TH32CS_SNAPPROCESS<span style="color: #000066;">,</span> 0<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;p32<span style="color: #000066;">.</span><span style="color: #006600;">dwSize</span> <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">Sizeof</span><span style="color: #000066;">&#40;</span>TProcessEntry32<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;Process32First<span style="color: #000066;">&#40;</span>hSnap<span style="color: #000066;">,</span> p32<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">repeat</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000066;">SameText</span><span style="color: #000066;">&#40;</span>AExeName<span style="color: #000066;">,</span> <span style="color: #000066;">ExtractFileName</span><span style="color: #000066;">&#40;</span>p32<span style="color: #000066;">.</span><span style="color: #006600;">szExeFile</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066;">inc</span><span style="color: #000066;">&#40;</span>Result<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">until</span> <span style="color: #000000; font-weight: bold;">not</span> Process32Next<span style="color: #000066;">&#40;</span>hSnap<span style="color: #000066;">,</span> p32<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;CloseHandle<span style="color: #000066;">&#40;</span>hSnap<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Use:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Delphi"><div class="devcodeoverflow"><ol><li><span style="color: #808080; font-style: italic;">// On DPR</span></li><li><span style="color: #808080; font-style: italic;">// Limit to 1 instance</span></li><li><span style="color: #000000; font-weight: bold;">begin</span> </li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> AppRunningCount<span style="color: #000066;">&#40;</span><span style="color: #000066;">ExtractFileName</span><span style="color: #000066;">&#40;</span><span style="color: #000066;">ParamStr</span><span style="color: #000066;">&#40;</span>0<span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span> <span style="color: #000066;">=</span> 1 <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;<span style="color: #808080; font-style: italic;">// Application codes</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">.</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Explaining more about this approach:<br />
In a situation of multiples logons at the same machine the Mutex cannot provide a correctly singleton structure because the mutex handle still only under the local scope of the user. So the way to control the instance number is counting the number of times the process appear on the process list of the machine.</p>
]]></content:encoded>
			<wfw:commentRss>http://projects.pro.br/gsaraiva/2009/07/delphi-utils-apprunningcount/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi: Utils :: WalkOnHandles</title>
		<link>http://projects.pro.br/gsaraiva/2008/07/delphi-utils-walkonhandles/</link>
		<comments>http://projects.pro.br/gsaraiva/2008/07/delphi-utils-walkonhandles/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 01:36:31 +0000</pubDate>
		<dc:creator>Gilberto Saraiva</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[CreateToolhelp32Snapshot]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[GetNextWindow]]></category>
		<category><![CDATA[GetTopWindow]]></category>
		<category><![CDATA[GetWindowThreadProcessID]]></category>
		<category><![CDATA[Usefull Function]]></category>
		<category><![CDATA[WalkOnHandlesOfExe]]></category>

		<guid isPermaLink="false">http://gsaraiva.projects.pro.br/?p=138</guid>
		<description><![CDATA[Folks,
A light for everybody. First of all, I&#8217;ll use two other usefull functions I posted on this site:
GetHwndClass
GetHwndText
And now the magic:
uses Windows, TLHelp32;&#160;type&#160;&#160;TWalkOnHandlesCallback = function&#40;AHwnd, AParentHWnd: HWND;&#160;&#160;&#160;&#160;AClass, AText: string; AFlag: Integer&#41;: boolean of object;&#160;function WalkOnHandles&#40;AParent: HWND; AFlag: integer;&#160;&#160;ACallback: TWalkOnHandlesCallback&#41;: Integer;var&#160;&#160;CurrHWnd: HWND;begin&#160;&#160;Result := 0;&#160;&#160;CurrHWnd := GetTopWindow&#40;AParent&#41;;&#160;&#160;while CurrHWnd &#60;&#62; 0 do&#160;&#160;begin&#160;&#160;&#160;&#160;Result := Result + 1;&#160;&#160;&#160;&#160;if Assigned&#40;ACallback&#41; then&#160;&#160;&#160;&#160;&#160;&#160;if [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Folks,</strong></p>
<p>A light for everybody. First of all, I&#8217;ll use two other usefull functions I posted on this site:</p>
<li><a href="http://gsaraiva.projects.pro.br/?p=127">GetHwndClass</a></li>
<li><a href="http://gsaraiva.projects.pro.br/?p=125">GetHwndText</a></li>
<p>And now the magic:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Delphi"><div class="devcodeoverflow"><ol><li><span style="color: #000000; font-weight: bold;">uses</span> Windows<span style="color: #000066;">,</span> TLHelp32<span style="color: #000066;">;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">type</span></li><li>&nbsp;&nbsp;TWalkOnHandlesCallback <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #000066;">&#40;</span>AHwnd<span style="color: #000066;">,</span> AParentHWnd<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;AClass<span style="color: #000066;">,</span> AText<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">string</span><span style="color: #000066;">;</span> AFlag<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">boolean</span> <span style="color: #000000; font-weight: bold;">of</span> <span style="color: #000000; font-weight: bold;">object</span><span style="color: #000066;">;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">function</span> WalkOnHandles<span style="color: #000066;">&#40;</span>AParent<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span> AFlag<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;ACallback<span style="color: #000066;">:</span> TWalkOnHandlesCallback<span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">var</span></li><li>&nbsp;&nbsp;CurrHWnd<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #0000ff;">0</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;CurrHWnd <span style="color: #000066;">:</span><span style="color: #000066;">=</span> GetTopWindow<span style="color: #000066;">&#40;</span>AParent<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">while</span> CurrHWnd &lt;&gt; 0 <span style="color: #000000; font-weight: bold;">do</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> Result <span style="color: #000066;">+</span> <span style="color: #0000ff;">1</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000066;">Assigned</span><span style="color: #000066;">&#40;</span>ACallback<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000000; font-weight: bold;">not</span> ACallback<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">,</span> AParent<span style="color: #000066;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetHwndClass<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> GetHwndText<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> AFlag<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066;">Break</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;CurrHWnd <span style="color: #000066;">:</span><span style="color: #000066;">=</span> GetNextWindow<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">,</span> GW_HWNDNEXT<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">function</span> WalkOnHandlesOfExe<span style="color: #000066;">&#40;</span>AExeName<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">string</span><span style="color: #000066;">;</span> AFlag<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">integer</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;ACallback<span style="color: #000066;">:</span> TWalkOnHandlesCallback<span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">var</span></li><li>&nbsp;&nbsp;PID<span style="color: #000066;">,</span> CheckPID<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">DWord</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;hSnapShot<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">THandle</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;ProcessEntry<span style="color: #000066;">:</span> TProcessEntry32<span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;CurrHWnd<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #0000ff;">0</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;PID <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #0000ff;">0</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;hSnapShot <span style="color: #000066;">:</span><span style="color: #000066;">=</span> CreateToolhelp32Snapshot<span style="color: #000066;">&#40;</span><span style="color: #000066;">&#40;</span>TH32CS_SNAPALL<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> 0<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;ProcessEntry<span style="color: #000066;">.</span><span style="color: #006600;">dwSize</span> <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000066;">SizeOf</span><span style="color: #000066;">&#40;</span>TProcessEntry32<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;Process32First<span style="color: #000066;">&#40;</span>hSnapShot<span style="color: #000066;">,</span> ProcessEntry<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">repeat</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> ProcessEntry<span style="color: #000066;">.</span><span style="color: #006600;">szExeFile</span> <span style="color: #000066;">=</span> AExeName <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PID <span style="color: #000066;">:</span><span style="color: #000066;">=</span> ProcessEntry<span style="color: #000066;">.</span><span style="color: #006600;">th32ProcessID</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066;">Break</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">until</span> Process32Next<span style="color: #000066;">&#40;</span>hSnapShot<span style="color: #000066;">,</span> ProcessEntry<span style="color: #000066;">&#41;</span> <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;CloseHandle<span style="color: #000066;">&#40;</span>hSnapShot<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> PID &gt; 0 <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;CurrHWnd <span style="color: #000066;">:</span><span style="color: #000066;">=</span> GetTopWindow<span style="color: #000066;">&#40;</span>GetDesktopWindow<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">while</span> CurrHWnd &lt;&gt; 0 <span style="color: #000000; font-weight: bold;">do</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> Result <span style="color: #000066;">+</span> <span style="color: #0000ff;">1</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetWindowThreadProcessID<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">,</span> <span style="color: #000066;">@</span>CheckPID<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> CheckPID <span style="color: #000066;">=</span> PID <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000066;">Assigned</span><span style="color: #000066;">&#40;</span>ACallback<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000000; font-weight: bold;">not</span> ACallback<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">,</span> 0<span style="color: #000066;">,</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetHwndClass<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> GetHwndText<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">&#41;</span><span style="color: #000066;">,</span> AFlag<span style="color: #000066;">&#41;</span> <span style="color: #000000; font-weight: bold;">then</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000066;">Break</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrHWnd <span style="color: #000066;">:</span><span style="color: #000066;">=</span> GetNextWindow<span style="color: #000066;">&#40;</span>CurrHWnd<span style="color: #000066;">,</span> GW_HWNDNEXT<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Now let me explain what this big code do.</p>
<p>This code its only a light, a simple idea, about how you can navigate through the Windows Objects (Handle) from everywhere.</p>
<p>A simple example:</p>
<li>Create a TMemo named mmoLog</li>
<li>Link OnCreate of the Main Form</li>
<li>Create a the callback on the Main Form class</li>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="Delphi"><div class="devcodeoverflow"><ol><li></li><li>&nbsp;&nbsp;TForm1 <span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">class</span><span style="color: #000066;">&#40;</span>TForm<span style="color: #000066;">&#41;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;mmoLog<span style="color: #000066;">:</span> TMemo<span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">procedure</span> FormCreate<span style="color: #000066;">&#40;</span>Sender<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">TObject</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">private</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; font-style: italic;">{ Private declarations }</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">public</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">function</span> WalkCall<span style="color: #000066;">&#40;</span>AHwnd<span style="color: #000066;">,</span> AParentHWnd<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AClass<span style="color: #000066;">,</span> AText<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">string</span><span style="color: #000066;">;</span> AFlag<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">boolean</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;<span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--><br />
The rest of the code:<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Delphi"><div class="devcodeoverflow"><ol><li></li><li><span style="color: #000000; font-weight: bold;">procedure</span> TForm1<span style="color: #000066;">.</span><span style="color: #006600;">FormCreate</span><span style="color: #000066;">&#40;</span>Sender<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">TObject</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;WalkOnHandlesOfExe<span style="color: #000066;">&#40;</span><span style="color: #ff0000;">'delphi32.exe'</span><span style="color: #000066;">,</span> 0<span style="color: #000066;">,</span> WalkCall<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li>&nbsp;</li><li><span style="color: #000000; font-weight: bold;">function</span> TForm1<span style="color: #000066;">.</span><span style="color: #006600;">WalkCall</span><span style="color: #000066;">&#40;</span>AHwnd<span style="color: #000066;">,</span> AParentHWnd<span style="color: #000066;">:</span> HWND<span style="color: #000066;">;</span> AClass<span style="color: #000066;">,</span></li><li>&nbsp;&nbsp;AText<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">string</span><span style="color: #000066;">;</span> AFlag<span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">Integer</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">:</span> <span style="color: #000066; font-weight: bold;">boolean</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">begin</span></li><li>&nbsp;&nbsp;Result <span style="color: #000066;">:</span><span style="color: #000066;">=</span> <span style="color: #000000; font-weight: bold;">True</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;mmoLog<span style="color: #000066;">.</span><span style="color: #006600;">Lines</span><span style="color: #000066;">.</span><span style="color: #006600;">Add</span><span style="color: #000066;">&#40;</span><span style="color: #000066;">stringofChar</span><span style="color: #000066;">&#40;</span><span style="color: #ff0000;">' '</span><span style="color: #000066;">,</span> AFlag<span style="color: #000066;">&#41;</span>&nbsp;&nbsp;<span style="color: #000066;">+</span> <span style="color: #000066;">Format</span><span style="color: #000066;">&#40;</span><span style="color: #ff0000;">'%d: [ %s ] %s'</span><span style="color: #000066;">,</span> <span style="color: #000066;">&#91;</span>AHwnd<span style="color: #000066;">,</span> AClass<span style="color: #000066;">,</span> AText<span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li>&nbsp;&nbsp;WalkOnHandles<span style="color: #000066;">&#40;</span>AHwnd<span style="color: #000066;">,</span> AFlag <span style="color: #000066;">+</span> 2<span style="color: #000066;">,</span> WalkCall<span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span></li><li><span style="color: #000000; font-weight: bold;">end</span><span style="color: #000066;">;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>This example will list all Windows Objects on the Delphi application and will result a idented log on the mmoLog. </p>
<p>Simple uhm?</p>
<li><strong>WalkOnHandles</strong><br />
Walk on all handles by the Z-order of the specified Parent.
</li>
<li><strong>WalkOnHandlesOfExe</strong><br />
Walk on all handles by the Z-order that have DesktopWindow as parent and the Application as owner.
</li>
]]></content:encoded>
			<wfw:commentRss>http://projects.pro.br/gsaraiva/2008/07/delphi-utils-walkonhandles/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
