﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Robertxiao-随笔分类-Windows/MFC探索</title><link>http://www.cppblog.com/Robertxiao/category/5519.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 06 Nov 2012 11:05:43 GMT</lastBuildDate><pubDate>Tue, 06 Nov 2012 11:05:43 GMT</pubDate><ttl>60</ttl><item><title>打造自己的DEBUG_NEW</title><link>http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Mon, 05 Nov 2012 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/194547.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/194547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/194547.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 构建自己的DEBUG_NEW&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/194547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2012-11-05 11:53 <a href="http://www.cppblog.com/Robertxiao/archive/2012/11/05/194547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操控NT式驱动小工具的源码</title><link>http://www.cppblog.com/Robertxiao/archive/2010/04/21/113159.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Wed, 21 Apr 2010 12:08:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2010/04/21/113159.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/113159.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2010/04/21/113159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/113159.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/113159.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 操控NT式驱动小工具的源码&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2010/04/21/113159.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/113159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2010-04-21 20:08 <a href="http://www.cppblog.com/Robertxiao/archive/2010/04/21/113159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三种操作文件存储方案的比较</title><link>http://www.cppblog.com/Robertxiao/archive/2009/07/22/90806.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Wed, 22 Jul 2009 02:51:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/07/22/90806.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/90806.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/07/22/90806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/90806.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/90806.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这段时间，我正在负责升级公司中一个产品的几个版本。这几个系统的基本框架都相同，架构都是以第一个系统为模型，只是后续的产品扩展了许多功能。总的说来这几个产品逻辑也不是很复杂，但因几易开发员，而且没有标准和缺乏设计，所以系统的可维护性较低。&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/Robertxiao/archive/2009/07/22/90806.html'>阅读全文</a><img src ="http://www.cppblog.com/Robertxiao/aggbug/90806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-07-22 10:51 <a href="http://www.cppblog.com/Robertxiao/archive/2009/07/22/90806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于vc的程序加载多个资源文件的方式 </title><link>http://www.cppblog.com/Robertxiao/archive/2009/04/20/80553.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Mon, 20 Apr 2009 10:20:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2009/04/20/80553.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/80553.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2009/04/20/80553.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/80553.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/80553.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了在程序中更合理地组织程序的结构，以便日后的维护。在资源方面，如果同时存在多语言的版本，而且在各个版本中有些图片不同、有些相同。如何组织好这些图片资源？我认为有如下的3种方式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1：把程序中的所有图片都随着一个资源DLL发布。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2：把程序中的所有图片都放在可执行文件的一个相对目录中，程序运行时到指定的目录去加载指定名称的图片。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3：把在各个版本相同的图片放在一个公共的DLL中，把彼此不同的图片放在各自的DLL中。<br></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这里介绍下第三种方式，也就是如何让一个exe程序加载多个DLL资源，并在这些DLL中找相应的资源的问题：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hResDll = ::LoadLibrary(_T("rc1.dll"));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hResDll2 = ::LoadLibrary(_T("rc2.dll"));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pExeModule = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxSetResourceHandle(m_hResDll);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pExeModule2 = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxSetResourceHandle(m_hResDll2);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这里值得注意的是：要调用<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pExeModule = new CDynLinkLibrary(AfxGetInstanceHandle(), AfxGetResourceHandle());<br>这个语句，如果没有这个语句，那么这个程序的原有资源模块将视为释放。也就不会到原有的资源模块中去搜索。<br></p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/80553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2009-04-20 18:20 <a href="http://www.cppblog.com/Robertxiao/archive/2009/04/20/80553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>develop cusom control</title><link>http://www.cppblog.com/Robertxiao/archive/2008/09/27/62897.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Sat, 27 Sep 2008 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/09/27/62897.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/62897.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/09/27/62897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/62897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/62897.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不久前，因为需要我必须开发一个继承</span><span>MFC</span><span>中</span><span>CWnd</span><span>类别的控件。这个控件将会放在一个</span><span>DLL</span><span>中来让使用者来调用，这样就可以在每次的复用时不要停留在批量的拷文件的过程。我不是说批量拷文件到新的工程中的做法不好，但是经过几个项目的批量拷文件的做法很有可能会让原来简单的几个文件变成一大堆耦合很强的文件，这将给再次复用带来不便。但是文件直接包含在使用者处也会带来些好处，如调试要来得方便一些，要修改一些特性也是很容易。所以有人说做事是一个决策的过程，我认为不假。如果其中没有决策，那只能说明一件事，我们忽略了某些东西。这往往也是很危险的。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个开发的过程中，我自认为对整个过程是清晰的，明了的。但是在开发的过程中却因一个细节问题而迫使我花了整整一个上午的时间来调试，最后得以发现这个问题。这里我就简单地回顾这个开发过程。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>1</span><span>：利用向导产生</span><span>MFC Regular DLL </span><span>框架。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>2</span><span>：在</span><span>app</span><span>文件中加入一个导出的哑函数（就是什么事也不做的函数）来让这个</span><span>DLL</span><span>支持隐式的加载</span><span>.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>如</span><span>&nbsp;extern &#8220;C&#8221; __declspec(dllimport) DummyExport() {}</span></p>
<p><span>&nbsp;&nbsp;&nbsp;3: </span><span>添加一个自</span><span>CWnd</span><span>派生的类，就叫</span><span>MyCWnd</span><span>好了。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;</span>4</span><span>：为这个</span><span>MyApp</span><span>映射消息。如映射一个</span><span>OnLButtonDown</span><span>。并在这个消息中向父控件发<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出自己的消息（当然实际项目中可不会是这样简单，这里只是让控件的框架<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先能跑起来证明与外界的消息是畅通的）</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>GetParent()-&gt;SendMessage(WM_COMMAND, GetCtrlID(), GetSafeHwnd());</span></p>
<p><span>&nbsp;&nbsp;&nbsp;5:&nbsp;</span><span>自定义一个消息</span><span><span>&nbsp;&nbsp; </span>#define WM_MYWNDLAUGH (WM_USER + 106)</span><span>并完成相应的映射。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;6</span><span>：为了注册这自己的这个窗体类别，我们必须有一个静态的注册函数，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以便在</span><span>CWinApp::InitInstance</span><span>时注册窗体类。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>这里就是关键了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">WNDCLASS&nbsp;wc;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">wc.style&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CS_GLOBALCLASS&nbsp;;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里曾让我花了数小时来找这个bug.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">wc.lpfnWndProc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;myFunc;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">LRESULT&nbsp;CALLBACK&nbsp;AFX_EXPORT&nbsp;myFunc(HWND&nbsp;hwnd,&nbsp;UINT&nbsp;message,&nbsp;WPARAM&nbsp;wparam,&nbsp;LPARAM&nbsp;lparam)<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AFX_MANAGE_STATE(AfxGetStaticModuleState());<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CWnd&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pWnd;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pWnd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CWnd::FromHandlePermanent(hWnd);<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pWnd&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL)<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;pWnd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MyWnd();&nbsp;pWnd</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">attach(hwnd);&nbsp;}<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;AfxCallWndProc(pWnd,&nbsp;hWnd,&nbsp;message,&nbsp;wParam,&nbsp;lParam);<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"></span></div>
<p><br></span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span></span><span>&nbsp;&nbsp;&nbsp;7: </span><span>在</span><span>CWinApp::InitInstance</span><span>中调用注册函数。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;8: </span><span>在使用者界面中添加自定义控件，控件的类别就是上面的</span><span>wc.lpszClassName</span><span>对应的名称。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;9: </span><span>在使用者类中映射子控件消息</span></p>
<p><span>&nbsp;&nbsp;&nbsp;10:</span><span>在早期就调用上述的哑函数。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;11:</span><span>向自定义控件发送消息。这样就搭起了一个自定义控件的框架，在上面的这些步聚中就是<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第６步要细心。余下的就是加特性的工作了。上述参考了</span><span>MFC</span><span>技术内幕等有关资料。</span></p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/62897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-09-27 15:42 <a href="http://www.cppblog.com/Robertxiao/archive/2008/09/27/62897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程初探之&lt;五&gt;</title><link>http://www.cppblog.com/Robertxiao/archive/2008/06/17/53766.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Tue, 17 Jun 2008 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/06/17/53766.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/53766.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/06/17/53766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/53766.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/53766.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一段时间，我的心情开始低落了。对自已不象以前那样有信心，总感觉自己知道的太少，跟别人比起来我似乎总是差了那么一些。可是，我总认为我是一个努力勤奋的人，我在不断地努力钻研，学习。从标准的C++、windowsSDK，windows的内核再到COM、ATL这些知识，我总是象一个饥饿的人一样扑进去，在这些代码的片断中我能找到我前进的脚印。可是在现实中我却还少了一个给我表演的舞台，我难抑自我的失落。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一段时间，广州这里的雨水特别的多，比广州春天的雨水还要多。每天都有几场大雨，路上的行人也总有些被淋得浑身湿透，我很向往能&#8220;自然&#8221;地雨中洗礼一番，享受这自然的赋予，冲去一身的尘埃。心里在想这么这个老天变成了一个爱哭的神仙了，抑或是悲泣于我国的自然灾害。神仙也是有感情的，这也难怪了，他这也是情不自禁罢了。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进程是程序在一个数据集合上的一次活动。我们的程序是执行这个活动的逻辑实现体，我们可以在窗口中同时启动多个我们的这个程序（当然这要得到程序的允许，通常情况下是允许的，如果要做到不允许可以通过比如互斥器等来实现）。我很想知道我有多少个实例被启动了，有时我就是这样的好奇。我尝试着如下做时我达到了我的目的。<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#pragma&nbsp;data_seg(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Shared</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">volatile</span><span style="COLOR: #000000">&nbsp;LONG&nbsp;g_lApplicationInstances&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#pragma&nbsp;data_seg()<br>&nbsp;&nbsp; #pragma comment(linker,"/Section:Shared,RWS")</span></div>
<p><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;APIENTRY&nbsp;WinMain(HINSTANCE&nbsp;hInstance,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPSTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpCmdLine,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCmdShow)<br><img id=Codehighlighter1_158_310_Open_Image onclick="this.style.display='none'; Codehighlighter1_158_310_Open_Text.style.display='none'; Codehighlighter1_158_310_Closed_Image.style.display='inline'; Codehighlighter1_158_310_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_158_310_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_158_310_Closed_Text.style.display='none'; Codehighlighter1_158_310_Open_Image.style.display='inline'; Codehighlighter1_158_310_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_158_310_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_158_310_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;InterlockedExchangeAdd((PLONG)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">g_lApplicationInstances,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">do&nbsp;some&nbsp;work</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;InterlockedExchangeAdd((PLONG)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">g_lApplicationInstances,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br><br>每当进入主函数，我就对这个计数器进行递增一次，每次离开前我就减少一。我要的时候我就在程序中直接取这个计数器就行了。这样我很好地达到了我的目标。当然把这个数据段放在某个共享的DLL中的也是可以的，这个为什么能够实现还得从PE文件来说。在这里我只要知道这些宏会在生成PE文件时会这把这个段放到共享段中去，这样windows在加载多个时并不会对这个数据段进行多份复制就行了。<br></p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/53766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-06-17 22:26 <a href="http://www.cppblog.com/Robertxiao/archive/2008/06/17/53766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>winsock 程序</title><link>http://www.cppblog.com/Robertxiao/archive/2008/06/10/52811.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Tue, 10 Jun 2008 15:19:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/06/10/52811.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/52811.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/06/10/52811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/52811.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/52811.html</trackback:ping><description><![CDATA[<p>服务端:<br>#include &lt;stdlib.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;WINSOCK2.H&gt;<br>#include &lt;WS2TCPIP.H&gt;<br>#include &lt;windows.h&gt;</p>
<p><br>//////////////////////////////////////////////////////////////////////////</p>
<p>#define DEFAULT_BUFLEN&nbsp;512<br>#define DEFAULT_PORT&nbsp;"27015"</p>
<p>//////////////////////////////////////////////////////////////////////////</p>
<p>int&nbsp; main()<br>{<br>&nbsp;WSADATA wsaData;<br>&nbsp;SOCKET&nbsp;listenSocket = INVALID_SOCKET;<br>&nbsp;SOCKET clientSocket = INVALID_SOCKET;<br>&nbsp;char recvBuf[DEFAULT_BUFLEN];<br>&nbsp;int iResult,iSendResult;<br>&nbsp;int recvBuflen = DEFAULT_BUFLEN;</p>
<p>&nbsp;iResult = WSAStartup(MAKEWORD(2,0),&amp;wsaData);<br>&nbsp;if(iResult)<br>&nbsp;{<br>&nbsp;&nbsp;printf("WSASTATUP failed!\n");<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;<br>&nbsp;listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br>&nbsp;if(listenSocket == INVALID_SOCKET)<br>&nbsp;{<br>&nbsp;&nbsp;printf("socket failed:%ld\n", WSAGetLastError());<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>&nbsp;sockaddr_in saServer;<br>&nbsp;saServer.sin_family = AF_INET;<br>&nbsp;saServer.sin_addr.s_addr = inet_addr("127.0.0.1");<br>&nbsp;saServer.sin_port = htons(5150);</p>
<p>&nbsp;iResult = bind(listenSocket,(sockaddr *)&amp;saServer, sizeof(saServer));<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("bind failed!");<br>&nbsp;&nbsp;closesocket(listenSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;iResult = listen(listenSocket, SOMAXCONN);<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("LISTEN failed!");<br>&nbsp;&nbsp;closesocket(listenSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;printf("Wait client connect");<br>&nbsp;clientSocket = accept(listenSocket, NULL, NULL);<br>&nbsp;if(clientSocket == INVALID_SOCKET)<br>&nbsp;{<br>&nbsp;&nbsp;printf("accept failed!");<br>&nbsp;&nbsp;closesocket(listenSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;closesocket(listenSocket);<br>&nbsp;printf("Now wait the data arrive...\n");<br>&nbsp;do <br>&nbsp;{<br>&nbsp;&nbsp;iResult = recv(clientSocket, recvBuf, recvBuflen, 0);<br>&nbsp;&nbsp;if(iResult &gt; 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("Bytes received:%d\n",iResult);<br>&nbsp;&nbsp;&nbsp;iSendResult = send(clientSocket, recvBuf, iResult, 0);<br>&nbsp;&nbsp;&nbsp;if(iSendResult == SOCKET_ERROR)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("send failed");<br>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(clientSocket);<br>&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else if (iResult == 0)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("Connect closed!");<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("recv failed");<br>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(clientSocket);<br>&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;} while(iResult &gt; 0);</p>
<p>&nbsp;iResult = shutdown(clientSocket, SD_SEND);<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("shut dowm failed!");<br>&nbsp;&nbsp;closesocket(clientSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;closesocket(clientSocket);<br>&nbsp;WSACleanup();<br>&nbsp;getchar();<br>&nbsp;return 0;<br>}<br><br>//客户端<br>#include &lt;stdlib.h&gt;<br>#include &lt;stdio.h&gt;<br>#include &lt;WINSOCK2.H&gt;<br>#include &lt;WS2TCPIP.H&gt;<br>#include &lt;windows.h&gt;</p>
<p>//////////////////////////////////////////////////////////////////////////</p>
<p>&nbsp;</p>
<p>//////////////////////////////////////////////////////////////////////////</p>
<p>#define DEFAULT_BUFLEN&nbsp;512<br>#define DEFAULT_PORT&nbsp;"27015"</p>
<p>//////////////////////////////////////////////////////////////////////////</p>
<p>int main()<br>{<br>&nbsp;WSADATA wsaData;<br>&nbsp;SOCKET connectSocket = INVALID_SOCKET;<br>&nbsp;char *sendBuf = "This is a test";<br>&nbsp;char recvBuf[DEFAULT_BUFLEN];<br>&nbsp;int iResult;<br>&nbsp;int recvBufLen = DEFAULT_BUFLEN;<br>// &nbsp;if(argc != 2)<br>// &nbsp;{<br>// &nbsp;&nbsp;printf("useage:%s server -name\n",argv[0]);<br>// &nbsp;&nbsp;return 1;<br>// &nbsp;}<br>&nbsp;iResult = WSAStartup(MAKEWORD(2,0),&amp;wsaData);<br>&nbsp;if(iResult)<br>&nbsp;{<br>&nbsp;&nbsp;printf("WSASTATUP FAILED.");<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;sockaddr_in addr;<br>&nbsp;addr.sin_family = AF_INET;<br>&nbsp;addr.sin_port = htons(5150);<br>&nbsp;addr.sin_addr.s_addr = inet_addr("127.0.0.1");<br>&nbsp;connectSocket =&nbsp; socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br>&nbsp;if(connectSocket == INVALID_SOCKET)<br>&nbsp;{<br>&nbsp;&nbsp;printf("Error at socket!");<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;iResult = connect(connectSocket, (sockaddr *)&amp;addr, sizeof(addr));<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("Connect failed!");<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}</p>
<p>&nbsp;iResult = send(connectSocket, sendBuf, (int)strlen(sendBuf), 0);<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("Send failed");<br>&nbsp;&nbsp;closesocket(connectSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;printf("Bytes send.");<br>&nbsp;iResult = shutdown(connectSocket, SD_SEND);<br>&nbsp;if(iResult == SOCKET_ERROR)<br>&nbsp;{<br>&nbsp;&nbsp;printf("shut down failed");<br>&nbsp;&nbsp;closesocket(connectSocket);<br>&nbsp;&nbsp;WSACleanup();<br>&nbsp;&nbsp;return 1;<br>&nbsp;}<br>&nbsp;do <br>&nbsp;{<br>&nbsp;&nbsp;iResult = recv(connectSocket, recvBuf, recvBufLen, 0);<br>&nbsp;&nbsp;if(iResult &gt; 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("Bytes received:%d\n",iResult);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else if(iResult == 0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("connect closed");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("Recv failed");<br>&nbsp;&nbsp;}<br>&nbsp;} while(iResult &gt; 0);<br>&nbsp;closesocket(connectSocket);<br>&nbsp;WSACleanup();<br>&nbsp;return 0;<br>}<br>注意要加入链接库WS2_32.lib</p>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/52811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-06-10 23:19 <a href="http://www.cppblog.com/Robertxiao/archive/2008/06/10/52811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程初探之&lt;4&gt;</title><link>http://www.cppblog.com/Robertxiao/archive/2008/05/02/48633.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 02 May 2008 06:51:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/05/02/48633.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/48633.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/05/02/48633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/48633.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/48633.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;继写完上篇&lt;进程初探之终结&gt;文章，我有很长时间没有来管理我博客中的闲言片断了。五一，公司放了三天假，原计划在此期间去公园散散步，拿本书在大树下的石凳上坐上半天，累了休息一下，欲在这喧嚣都市中寻找心中的那份宁静。再花一天时间去植物园中观赏游玩一趟，让满眼的绿意来驱赶满脑子的项目需求设计，让这重负的脑袋断电休息一天。然这几天老天不作美，却阴着脸，下起雨来了。看来计划又得落空。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;时下很多介绍人际交往、公关之类的书藉。大凡其中都谈到了要因人而异，了解对方。然后才能展开有效的交际方法。是的，比如说有些人就喜欢与少言之人做朋友，而有些人却喜欢与能言者做朋友。有的人喜欢谈政治，有的人喜欢谈利益。你如果与刚愎自用之人谈与其相悖的观点，我估计会闹个不欢而散，而与虚怀若谷的纳言人则可能会视你为良友。同一番话给与不同的人，就产生了截然不同的效果，所以我们要有因人而异的交际策略。这也就提出了要我们在想好这个策略之前就要了解一个人。进程之间也会是如此的吗？<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面说了这么多的引言，下面来说一进程的发现，认识。下面用一段代码示例枚举了当前系统中的进程。
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#ifndefine&nbsp;_XIAO_TOOLHELP_H_<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;_XIAO_TOOLHELP_H_</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TLHELP32.H</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">tchar.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_96_158_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_158_Open_Text.style.display='none'; Codehighlighter1_96_158_Closed_Image.style.display='inline'; Codehighlighter1_96_158_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_96_158_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_158_Closed_Text.style.display='none'; Codehighlighter1_96_158_Open_Image.style.display='inline'; Codehighlighter1_96_158_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_96_158_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_96_158_Open_Text><span style="COLOR: #808080">////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">&nbsp;6</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CToolHelp<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_176_456_Open_Image onclick="this.style.display='none'; Codehighlighter1_176_456_Open_Text.style.display='none'; Codehighlighter1_176_456_Closed_Image.style.display='inline'; Codehighlighter1_176_456_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_176_456_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_456_Closed_Text.style.display='none'; Codehighlighter1_176_456_Open_Image.style.display='inline'; Codehighlighter1_176_456_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_176_456_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_176_456_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CToolHelp(DWORD&nbsp;dwFlags&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,DWORD&nbsp;dwProcessId&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CToolHelp();<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;CreateSnapshot(DWORD&nbsp;dwFlags,DWORD&nbsp;dwProcessId&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;ProcessFirst(PPROCESSENTRY32&nbsp;ppe);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;ProcessNext(PPROCESSENTRY32&nbsp;ppe);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;ProcessFind(DWORD&nbsp;dwProcessId,PPROCESSENTRY32&nbsp;ppe)&nbsp;;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">；<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpp实现文件如下<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img id=Codehighlighter1_0_79_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_79_Open_Text.style.display='none'; Codehighlighter1_0_79_Closed_Image.style.display='inline'; Codehighlighter1_0_79_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_79_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_79_Closed_Text.style.display='none'; Codehighlighter1_0_79_Open_Image.style.display='inline'; Codehighlighter1_0_79_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_79_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_79_Open_Text><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">/</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">&nbsp;2</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CToolHelp::CToolHelp(DWORD&nbsp;dwFlags,DWORD&nbsp;dwProcessId)<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_135_210_Open_Image onclick="this.style.display='none'; Codehighlighter1_135_210_Open_Text.style.display='none'; Codehighlighter1_135_210_Closed_Image.style.display='inline'; Codehighlighter1_135_210_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_135_210_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_135_210_Closed_Text.style.display='none'; Codehighlighter1_135_210_Open_Image.style.display='inline'; Codehighlighter1_135_210_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_135_210_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_135_210_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_hSnapshot</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">INVALID_HANDLE_VALUE;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CreateSnapshot(dwFlags,dwProcessId);<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_213_291_Open_Image onclick="this.style.display='none'; Codehighlighter1_213_291_Open_Text.style.display='none'; Codehighlighter1_213_291_Closed_Image.style.display='inline'; Codehighlighter1_213_291_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_213_291_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_213_291_Closed_Text.style.display='none'; Codehighlighter1_213_291_Open_Image.style.display='inline'; Codehighlighter1_213_291_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_213_291_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_213_291_Open_Text><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////</span></span><br><span style="COLOR: #008080">10</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>CToolHelp::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">CToolHelp()<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_317_394_Open_Image onclick="this.style.display='none'; Codehighlighter1_317_394_Open_Text.style.display='none'; Codehighlighter1_317_394_Closed_Image.style.display='inline'; Codehighlighter1_317_394_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_317_394_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_317_394_Closed_Text.style.display='none'; Codehighlighter1_317_394_Open_Image.style.display='inline'; Codehighlighter1_317_394_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_317_394_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_317_394_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hSnapshot&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INVALID_HANDLE_VALUE)<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_361_392_Open_Image onclick="this.style.display='none'; Codehighlighter1_361_392_Open_Text.style.display='none'; Codehighlighter1_361_392_Closed_Image.style.display='inline'; Codehighlighter1_361_392_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_361_392_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_361_392_Closed_Text.style.display='none'; Codehighlighter1_361_392_Open_Image.style.display='inline'; Codehighlighter1_361_392_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_361_392_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_361_392_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(m_hSnapshot);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_397_475_Open_Image onclick="this.style.display='none'; Codehighlighter1_397_475_Open_Text.style.display='none'; Codehighlighter1_397_475_Closed_Image.style.display='inline'; Codehighlighter1_397_475_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_397_475_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_397_475_Closed_Text.style.display='none'; Codehighlighter1_397_475_Open_Image.style.display='inline'; Codehighlighter1_397_475_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_397_475_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_397_475_Open_Text><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////</span></span><br><span style="COLOR: #008080">20</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;CToolHelp::CreateSnapshot(DWORD&nbsp;dwFlags,DWORD&nbsp;dwProcessId)<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_541_800_Open_Image onclick="this.style.display='none'; Codehighlighter1_541_800_Open_Text.style.display='none'; Codehighlighter1_541_800_Closed_Image.style.display='inline'; Codehighlighter1_541_800_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_541_800_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_541_800_Closed_Text.style.display='none'; Codehighlighter1_541_800_Open_Image.style.display='inline'; Codehighlighter1_541_800_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_541_800_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_541_800_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m_hSnapshot&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INVALID_HANDLE_VALUE)<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_585_616_Open_Image onclick="this.style.display='none'; Codehighlighter1_585_616_Open_Text.style.display='none'; Codehighlighter1_585_616_Closed_Image.style.display='inline'; Codehighlighter1_585_616_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_585_616_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_585_616_Closed_Text.style.display='none'; Codehighlighter1_585_616_Open_Image.style.display='inline'; Codehighlighter1_585_616_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_585_616_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_585_616_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(m_hSnapshot);<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dwFlags&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_637_678_Open_Image onclick="this.style.display='none'; Codehighlighter1_637_678_Open_Text.style.display='none'; Codehighlighter1_637_678_Closed_Image.style.display='inline'; Codehighlighter1_637_678_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_637_678_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_637_678_Closed_Text.style.display='none'; Codehighlighter1_637_678_Open_Image.style.display='inline'; Codehighlighter1_637_678_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_637_678_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_637_678_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hSnapshot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;INVALID_HANDLE_VALUE;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img id=Codehighlighter1_687_753_Open_Image onclick="this.style.display='none'; Codehighlighter1_687_753_Open_Text.style.display='none'; Codehighlighter1_687_753_Closed_Image.style.display='inline'; Codehighlighter1_687_753_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_687_753_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_687_753_Closed_Text.style.display='none'; Codehighlighter1_687_753_Open_Image.style.display='inline'; Codehighlighter1_687_753_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_687_753_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_687_753_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hSnapshot&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CreateToolhelp32Snapshot(dwFlags,dwProcessId);<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;m_hSnapshot&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;INVALID_HANDLE_VALUE;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id=Codehighlighter1_803_879_Open_Image onclick="this.style.display='none'; Codehighlighter1_803_879_Open_Text.style.display='none'; Codehighlighter1_803_879_Closed_Image.style.display='inline'; Codehighlighter1_803_879_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_803_879_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_803_879_Closed_Text.style.display='none'; Codehighlighter1_803_879_Open_Image.style.display='inline'; Codehighlighter1_803_879_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_803_879_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_803_879_Open_Text><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">/</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">39</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;CToolHelp::ProcessFirst(PPROCESSENTRY32&nbsp;ppe)<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img id=Codehighlighter1_931_1066_Open_Image onclick="this.style.display='none'; Codehighlighter1_931_1066_Open_Text.style.display='none'; Codehighlighter1_931_1066_Closed_Image.style.display='inline'; Codehighlighter1_931_1066_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_931_1066_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_931_1066_Closed_Text.style.display='none'; Codehighlighter1_931_1066_Open_Image.style.display='inline'; Codehighlighter1_931_1066_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_931_1066_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_931_1066_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;fOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Process32First(m_hSnapshot,ppe);<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(fOk&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(ppe</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">th32ParentProcessID</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id=Codehighlighter1_1022_1051_Open_Image onclick="this.style.display='none'; Codehighlighter1_1022_1051_Open_Text.style.display='none'; Codehighlighter1_1022_1051_Closed_Image.style.display='inline'; Codehighlighter1_1022_1051_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1022_1051_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1022_1051_Closed_Text.style.display='none'; Codehighlighter1_1022_1051_Open_Image.style.display='inline'; Codehighlighter1_1022_1051_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1022_1051_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1022_1051_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ProcessNext(ppe);<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;fOk;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img id=Codehighlighter1_1069_1145_Open_Image onclick="this.style.display='none'; Codehighlighter1_1069_1145_Open_Text.style.display='none'; Codehighlighter1_1069_1145_Closed_Image.style.display='inline'; Codehighlighter1_1069_1145_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1069_1145_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1069_1145_Closed_Text.style.display='none'; Codehighlighter1_1069_1145_Open_Image.style.display='inline'; Codehighlighter1_1069_1145_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1069_1145_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1069_1145_Open_Text><span style="COLOR: #808080">///////////////////////////////////////////////////////////////////////////</span><span style="COLOR: #008000">/</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">51</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;CToolHelp::ProcessNext(PPROCESSENTRY32&nbsp;ppe)<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img id=Codehighlighter1_1196_1330_Open_Image onclick="this.style.display='none'; Codehighlighter1_1196_1330_Open_Text.style.display='none'; Codehighlighter1_1196_1330_Closed_Image.style.display='inline'; Codehighlighter1_1196_1330_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1196_1330_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1196_1330_Closed_Text.style.display='none'; Codehighlighter1_1196_1330_Open_Image.style.display='inline'; Codehighlighter1_1196_1330_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1196_1330_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1196_1330_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;fOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Process32Next(m_hSnapshot,ppe);<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(fOk&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(ppe</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">th32ParentProcessID</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img id=Codehighlighter1_1286_1315_Open_Image onclick="this.style.display='none'; Codehighlighter1_1286_1315_Open_Text.style.display='none'; Codehighlighter1_1286_1315_Closed_Image.style.display='inline'; Codehighlighter1_1286_1315_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1286_1315_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1286_1315_Closed_Text.style.display='none'; Codehighlighter1_1286_1315_Open_Image.style.display='inline'; Codehighlighter1_1286_1315_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1286_1315_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1286_1315_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ProcessNext(ppe);<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;fOk;<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img id=Codehighlighter1_1333_1411_Open_Image onclick="this.style.display='none'; Codehighlighter1_1333_1411_Open_Text.style.display='none'; Codehighlighter1_1333_1411_Closed_Image.style.display='inline'; Codehighlighter1_1333_1411_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1333_1411_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1333_1411_Closed_Text.style.display='none'; Codehighlighter1_1333_1411_Open_Image.style.display='inline'; Codehighlighter1_1333_1411_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1333_1411_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_1333_1411_Open_Text><span style="COLOR: #808080">//////////////////////////////////////////////////////////////////////////////</span></span><br><span style="COLOR: #008080">63</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>BOOL&nbsp;CToolHelp::ProcessFind(DWORD&nbsp;dwProcessId,PPROCESSENTRY32&nbsp;ppe)<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img id=Codehighlighter1_1480_1665_Open_Image onclick="this.style.display='none'; Codehighlighter1_1480_1665_Open_Text.style.display='none'; Codehighlighter1_1480_1665_Closed_Image.style.display='inline'; Codehighlighter1_1480_1665_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1480_1665_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1480_1665_Closed_Text.style.display='none'; Codehighlighter1_1480_1665_Open_Image.style.display='inline'; Codehighlighter1_1480_1665_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1480_1665_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1480_1665_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;fFound&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;FALSE;<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(BOOL&nbsp;fOk</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ProcessFirst(ppe);&nbsp;fOk&nbsp;;fOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ProcessNext(ppe))<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img id=Codehighlighter1_1567_1649_Open_Image onclick="this.style.display='none'; Codehighlighter1_1567_1649_Open_Text.style.display='none'; Codehighlighter1_1567_1649_Closed_Image.style.display='inline'; Codehighlighter1_1567_1649_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1567_1649_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1567_1649_Closed_Text.style.display='none'; Codehighlighter1_1567_1649_Open_Image.style.display='inline'; Codehighlighter1_1567_1649_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1567_1649_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1567_1649_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fFound&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(ppe</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">th32ProcessID&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;dwProcessId);<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(fFound)<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img id=Codehighlighter1_1632_1646_Open_Image onclick="this.style.display='none'; Codehighlighter1_1632_1646_Open_Text.style.display='none'; Codehighlighter1_1632_1646_Closed_Image.style.display='inline'; Codehighlighter1_1632_1646_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1632_1646_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1632_1646_Closed_Text.style.display='none'; Codehighlighter1_1632_1646_Open_Image.style.display='inline'; Codehighlighter1_1632_1646_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1632_1646_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1632_1646_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;TRUE;<br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;声明：上面的代码的构思及实现都是Jeffrey这位顶级大牛的一些片断代码。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进程是系统的内核对象，内核对象就是仅有系统内核管理的一块内存数据结构。从这段内核对象的代码里我们可以看出内核对象为系统内核所专有访问权，也说明了内核对象在系统中存有其数信息。为此上面就用了这个函数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp; m_hSnapshot&nbsp; =&nbsp; CreateToolhelp32Snapshot(dwFlgs,dwProcessId);<br>来建立一份系统的快照。对于这个函数的两个参数，前一个是指明将立快照的类型，后一个是指明是否针对某一个特殊的进程ID的快照。在我们有了系统的快照之后。我们将用下面的两个函数来浏览快照中的进程信息。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROCESSENTRY32 pe = { sizeof(pe) };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp; Process32First(m_hSnapshot,&amp;pe);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp; Process32Next(m_hSnapshot,&amp;pe);<br>对于上述要注明一点的是pe结构必须初始化，否则将不会成功。这样数来要实现系统进程的枚举也就这么几个函数了。上面这种实现方法在win95 ,win98,win2000,winxp,及win2003中都能够这样。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面介绍了通用的一种方法，下面再介绍一种不能在win95,win98中的枚举方法，这原因还得从MS的windows NT开发小组说起，他们更中意下面的枚举方法。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;利用psapi.dll中提供的函数来实现进程等内核对象的枚举。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL EnumProcesses(DWORD *pdwProcess,DWORD cb,DWORD cbNeeded);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然还可枚举其它的内核对象。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了系统进程的枚举暂且就回忆到这里。<br>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/48633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-05-02 14:51 <a href="http://www.cppblog.com/Robertxiao/archive/2008/05/02/48633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程初探之&lt;3&gt; 进程死亡</title><link>http://www.cppblog.com/Robertxiao/archive/2008/03/22/45113.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Sat, 22 Mar 2008 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/03/22/45113.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/45113.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/03/22/45113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/45113.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/45113.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;人这一生都会经过出生、生长、死亡这几个阶段，出生就意味着必须面对死亡。故佛学经典中常有空即是色、色即是空，生就是死、死就是生这些深奥的佛义。纵观这世间的一切又何尝不是这样。海龟可以说是长寿的动物了，经常可以看到报说某只海龟活了几千年，但地球自从诞生生物以来又何止几千年了。在前面，进程已经被启动起来了，也已经在跑了，现在还有一个过程它也是必须经历的了那就是死亡了。本人觉得写这个进程死亡这个题目有点沉重，人总是希望听到生长有关的，而不愿听到诸如一些灰色的词语。至少对于我来说是这样的了，本想起标题为进程的退出，或者进程的隐藏但觉总不得体。退出含有一种自愿性的离开之意，但有时的情况却往往不会是这样的，比如我们通过任务管理器来终止一个应用程序，这时我想它就是非自愿的动作了。还有一促极端的情况，电脑掉电了。隐藏这个词语就有更不贴切的地方，还有隐藏这个词对进程来说是它确实存在的一种状态，这将更为复杂。故起名为进程死亡一题，前也说过死亡有正常死亡，寿终正寝、及意外死亡这两种。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正常死亡，寿终正寝指的是进程完成了它的工作，它走到了它生命的尽头。于是穿过一个花括号，好似穿过一片淡薄的白云而登仙乐。<br>如下的一个简单的例子。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_34_101_Open_Image onclick="this.style.display='none'; Codehighlighter1_34_101_Open_Text.style.display='none'; Codehighlighter1_34_101_Closed_Image.style.display='inline'; Codehighlighter1_34_101_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_34_101_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_34_101_Closed_Text.style.display='none'; Codehighlighter1_34_101_Open_Image.style.display='inline'; Codehighlighter1_34_101_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_34_101_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_34_101_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_66_85_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_85_Open_Text.style.display='none'; Codehighlighter1_66_85_Closed_Image.style.display='inline'; Codehighlighter1_66_85_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_66_85_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_85_Closed_Text.style.display='none'; Codehighlighter1_66_85_Open_Image.style.display='inline'; Codehighlighter1_66_85_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_66_85_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_66_85_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
上面这个例子就会在执行完return i;之后的"{"寿终正寝。没有执行完这个花括号就不能算作寿终正寝。比如说这时有一个高优先级的线程取得了CPU的使用权，并用将这个进程杀死掉。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进程的意外死亡可以有自己来操纵也可以是外部使力而使它突然终止。进程要杀死自己很简单，只要调用ExitProcess就行了。这个函数功能是很强，以致有些霸道。会使进程来不及释放有关的资源比如用new操作符申请的一段内存，调用了第三组件而不能再去为第三方的组件执行一个Release 这样的通知。这样引起的问题似乎相当不妙。幸好这个进程的内核对象会随着它的死亡而减少引用计数或者被收回。所以使用这个函数时还是三思而行，应尽量避免。那么外部的一个线程又该如何终止进程呢？这得用TerminateProcess这个函数了，想说的是这个函数象前面的函数一样也是立即终止一个进程，而不会给被终止的进程留一口气。上述这两种方法用起来还是三思为好。对于有窗口的应用程序有更漂亮的方法来让它退出，找到这个进程的窗口，然后对着这个窗口发一个退出的消息。这样就比较文明了，因为有机会给程序做一些善后的工作。如下的程序就可以终止你已经开启的计算器程序。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br><img id=Codehighlighter1_97_504_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_504_Open_Text.style.display='none'; Codehighlighter1_97_504_Closed_Image.style.display='inline'; Codehighlighter1_97_504_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_97_504_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_504_Closed_Text.style.display='none'; Codehighlighter1_97_504_Open_Image.style.display='inline'; Codehighlighter1_97_504_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_97_504_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_97_504_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwCurrentId,dwControlId;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;dwCurrentId</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">GetCurrentProcessId();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Current&nbsp;process&nbsp;Id:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">dwCurrentId</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hwnd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">FindWindow(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SciCalc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,NULL);&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;GetWindowThreadProcessId(hwnd,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">dwControlId);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;controlHandle</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwControlId);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Calc&nbsp;Process&nbsp;Id&nbsp;:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">dwControlId</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">PostMessage(hwnd,WM_QUIT,0,0);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;TerminateProcess(controlHandle,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
我注释掉的post方法就是文明终止进程的例子。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当我玩游戏过了通关时，只能自豪地看着我操控的角色穿着金色的战衣，神采飞扬地面对着东方徐徐升起的太阳几分钟。而后机器又恢复到了启动的状态，这一切也就过去了。我也得赶快返回学校去上晚自习。但是这里的并不是我玩游戏的所有乐趣，真的乐趣还是在战斗的过程中。进程的吸引人也不会只这么一点，还有更精采的将要上演........。
<img src ="http://www.cppblog.com/Robertxiao/aggbug/45113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-03-22 16:05 <a href="http://www.cppblog.com/Robertxiao/archive/2008/03/22/45113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程初探之&lt;2&gt; 创建进程</title><link>http://www.cppblog.com/Robertxiao/archive/2008/03/21/45079.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Fri, 21 Mar 2008 14:02:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/03/21/45079.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/45079.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/03/21/45079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/45079.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/45079.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今年前段时间，我原来的一个同事突然打电话给我。起因是客户不让开发商在服务器上安装任何的应用程序，只允许部署网站。但是，这个应用系统的部份功能又用到了第三方的组件。组件肯定是要进行安装的，当然这样说也存在不对的地方，比如我可引用这个组件就像引用一个私有程序集的引用一样，而再专门做一个适配器来做一个中转，这样肯定也能解决问题。我想在我前段的论述中可能已经存一定的批漏了，首先我假设了客户知道组件的内部实现这些行为了，而这一点就与COM要求的隐藏性相违背了。就算后一种方法能够实现，这时我们就把组件退化成一个DLL也行，这样的&#8220;退化&#8221;如在项目之初到也是可以的。但到了进行交互之时要做这些的改动，肯定会对这个系统产生诸如项目DELAY，系统的改动大也会相应地引起系统的不稳定，开发人员的重新投入，测试的重新进行。在后期进行这项工作对一个开发商来说无疑是一个噩梦。或许有人会说这个客户也太不讲理了，但是开发商也有一定的疏忽之责，如果在开发之初便已了解到这个约束那么在开发之初就可以确定许多很好的方案来解决这个问题。这时是该&#8220;糊弄&#8221;客户的时候了，其实这种安装组件并不会对客户造成影响，当然本人是说这个组件要是可信懒的，如果真的重新来修改应用系统的话，可能造成系统不稳定及客户错过恰当的应用时机，这样会对客户造成一定的损失。这是对客户的一种&#8220;伤害&#8221;。就象我们很多人怕了吃苦药，小孩子就更是了，有的小孩吃到苦药就全部吐出来，这时药厂就在这个苦药上包上一层的糖衣。这种&#8220;欺骗&#8221;就是善意了。于是上面的问题就可以用后台启动注册进程来完成这项伟大的工作。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOWS创建进程的方法有多种，我更喜欢VC编程，我这里就列举几种VC的进程创建方法。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;WinExec 这种创建进程的方法是沿用原来win16系统下使用的方法。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;ShellExecute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win32 api<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;ShellExecuteEx&nbsp;&nbsp;&nbsp;&nbsp; win32 api<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;CreateProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; win32 api<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;使用组件的进程激活方法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在下面的例子中我只用上面的四种方法，组件的激活方法在这里就不叙述了。<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;CreateProcess.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;the&nbsp;console&nbsp;application.<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shellapi.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">#pragma&nbsp;comment(lib,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shell32.lib</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp; 如果在链接项中没有设置，就在这里加上这个链接。<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">/*******************************************************************************</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;printf&nbsp;the&nbsp;help&nbsp;message<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">******************************************************************************/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>void&nbsp;Help()<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Here&nbsp;are&nbsp;there&nbsp;some&nbsp;create&nbsp;process&nbsp;method!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1:Use&nbsp;winexec.\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2:Use&nbsp;ShellExecute.\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3:Use&nbsp;ShellExecuteEx.\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">4:Use&nbsp;CreateProcess.\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Q:Quit&nbsp;the&nbsp;application.\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>}<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;bQuit</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;uCode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SHELLEXECUTEINFO&nbsp;Info;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;STARTUPINFO&nbsp;startInfo;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PROCESS_INFORMATION&nbsp;pInfo;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(!bQuit)<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Help();<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;ch</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getchar();<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(ch)<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">1':</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uCode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">WinExec(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">notepad.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,SW_SHOW);<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">2':</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uCode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(UINT)ShellExecute(</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">notepad.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,SW_SHOW);<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">3':</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Info,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,sizeof(Info));<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.cbSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sizeof(Info);<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.lpVerb</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.lpFile</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">notepad.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.lpParameters</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.fMask</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">SEE_MASK_NOCLOSEPROCESS;<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Info.nShow</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">SW_SHOWDEFAULT;<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShellExecuteEx(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Info);<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">4':</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">56</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">startInfo,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,sizeof(startInfo));<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startInfo.cb</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sizeof(startInfo);<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateProcess(</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">notepad.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">FALSE</span><span style="COLOR: #000000">,NORMAL_PRIORITY_CLASS,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">startInfo,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pInfo);<br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">'</span><span style="COLOR: #008000">Q':</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">63</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bQuit</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br></span><span style="COLOR: #008080">66</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的示例代码就这么少，当然使用起来不会象文章中这样简单，但是关键的也就是这些了。对创建进程就是这么简单。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我很喜欢玩两个人比武的游戏，在其中我取得了很多的乐趣，给开游戏厅的老板尽了身为热血少年的一份心，也为国家多一份税收。我玩的角色武功套路也就只有这么几招，招式是简单了些，但很有用，不是吗？我经常两个铜牌就可以玩上一两个时时辰。<br></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.cppblog.com/Robertxiao/aggbug/45079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-03-21 22:02 <a href="http://www.cppblog.com/Robertxiao/archive/2008/03/21/45079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程初探之&lt;1&gt;    基础知识</title><link>http://www.cppblog.com/Robertxiao/archive/2008/03/16/44642.html</link><dc:creator>Robertxiao</dc:creator><author>Robertxiao</author><pubDate>Sun, 16 Mar 2008 13:59:00 GMT</pubDate><guid>http://www.cppblog.com/Robertxiao/archive/2008/03/16/44642.html</guid><wfw:comment>http://www.cppblog.com/Robertxiao/comments/44642.html</wfw:comment><comments>http://www.cppblog.com/Robertxiao/archive/2008/03/16/44642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Robertxiao/comments/commentRss/44642.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Robertxiao/services/trackbacks/44642.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在读书的时候，我非常喜欢玩电玩。所幸未达废寝忘食之境界，否则向来生活拮据的父母定要为生此"败家子"而伤感万分。但是却又是我的每日必修之课。下午，一下完课对当日所学作好一个复习笔记或是回到寝室稍作回忆。及至吃完晚饭藉以散步之名而往游戏厅方向急行。唯恐到晚了便没有机子玩。每天定量消费两个铜牌也就5毛钱吧，但那时算是贵了。更有一次到外地玩，发现那里铜牌便宜1元钱有10个，背了10元钱回校，我也因此而在班里扬名。自觉此为本人所赚之第一笔钱，可美其名&#8220;勤工俭学&#8220;。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自思电玩也就是一台破机器而已，何以让如此多的英雄为它竟折腰。百思之，终一日得其解。就我而言，是莫过于我能控制其中的角色，虽我能操控制，但却又屡不能达自如之程度。常常在游戏机前暴跳如雷又或嗟叹不已，偶而也能神采奕奕，自为天下之大，我皆能胜，吾后定有为。<img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emsmile.gif" align=absMiddle border=0><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而后吾又为电脑而痴，总也想在本人的&#8221;杰作&#8220;之中操控已有应用程序，似乎于此便有些成就之感。可谓之童心有增，或可谓之好事之人。<br>我将如何来操纵这些应用程序呢？这里就先得说进程这个东西了。记得李莫愁曾有云：问天下情为何物，直叫人生死相许之词。进程又为何物<br>它是系统中进行系统资源分配、调度和管理的最小单位了。情为人之所发，而进程却又是随程序的运行而产生，程序是静态的，进程是活动的。程序运行才会有进程，程序并不一定只有一个进程，它可以对应多个进程。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进程是动态的，它在整个生命周期中可以经过几个状态大致上说是：运行态，就绪态，阻塞态。而如果细分之就可为五种，另外多的这两种是挂起就绪态，挂起阻塞态。整个控制过程如下<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>&nbsp;&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;↙</span>&#8593;</span>&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">↘</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就绪&nbsp;&nbsp;<span>&#8592;</span>&nbsp; 阻塞<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&#8595;</span>&nbsp;&#8593;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8593;<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-theme-font: minor-fareast; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-fareast; mso-bidi-font-size: 11.0pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&#8595;</span>&nbsp;</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 挂起就绪&nbsp;&nbsp;&nbsp;&nbsp;<span>&#8592;</span>&nbsp;&nbsp;&nbsp;挂起阻塞<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(其运行还可以直接转到挂起就绪态)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统是如何才能对进程如此灵活地控制呢？可谓要其生，其便生，要其休息其便要休息。这全功于每个进程都有一个标记，叫做进程控制块这样的一个数据结构，这个数据结构是一个内核对象。何又为内核对象，内核对象本质就是内核分配的一个内存块它只能为内核才能访问。它是进程可以被打断而后又能在打断点恢复运行的基础，一般来说这个信息是常驻内存的。正是有上述这个数据结构系统才能对进程进行自如地调度。简单地说系统对进程的调度主要有以下三种方法：先来先服务，优先数调度，轮转法。<br>
<img src ="http://www.cppblog.com/Robertxiao/aggbug/44642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Robertxiao/" target="_blank">Robertxiao</a> 2008-03-16 21:59 <a href="http://www.cppblog.com/Robertxiao/archive/2008/03/16/44642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>