<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[阿勇's BLOG]]></title>
<link>http://www.w-yong.com/</link>
<description><![CDATA[]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[pojieyong@163.com(阿勇)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>阿勇&#39;s BLOG</title> 
	<url>http://www.w-yong.com/images/logos.gif</url> 
	<link>http://www.w-yong.com/</link> 
	<description>阿勇&#39;s BLOG</description> 
</image>

			<item>
			<link>http://www.w-yong.com/default.asp?id=18</link>
			<title><![CDATA[IronRuby练手系列之一:写个进程管理器]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[Ruby]]></category>
			<pubDate>Sun,25 Jul 2010 18:16:26 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=18</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用IronRuby+SharpDevelop&nbsp;来开发GUI程序是十分便利的。《IronRuby练手系列》计划是用Ruby来写一系列的小工具，目的是来进一步熟悉IronRuby.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我的机器装的IronRuby是&nbsp;<strong>IronRuby&nbsp;1.0&nbsp;for&nbsp;.NET&nbsp;2.0&nbsp;SP1</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IronRuby的下载地址:<a target="_blank" href="http://ironruby.codeplex.com/releases">http://ironruby.codeplex.com/releases</a><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>本文示例代码下载</strong>:<img src="http://www.w-yong.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.w-yong.com/attachments/month_1007/r2010725191825.rar" target="_blank">点击下载此文件</a>。解压缩后，运行run.dat即可。&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本文章是写一个进程管理器，需要的主要知识点是:Ruby语言，WinForm，Win32&nbsp;API等。本文的重点如题，是以Ruby为主，而不是以&#34;列举进程&#34;为主。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不过，还是略微提一下,取得系统中的进程信息的方法主要有：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.通过&nbsp;Tool&nbsp;Help&nbsp;API&nbsp;获取<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.通过&nbsp;PSAPI&nbsp;获取<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.通过&nbsp;Native&nbsp;API&nbsp;获取<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.通过&nbsp;驱动来遍历EPROCESS&nbsp;获取<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.对于.NET,可以通过System.Diagnostics&nbsp;命名空间下的Process类来获取<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6....<br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们采用方式1，利用Tool&nbsp;Help&nbsp;API来获取进程信息。程序可以列举出系统中正在运行的进程，选中某个进程，程序可以显示出该进程加载的模块，还可以终止选中的进程。程序的运行结果如下:<br/><br/><img src="http://www.w-yong.com/attachments/month_1007/v2010725173723.JPG" border="0" alt=""/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个程序的主要功能实际上是由&nbsp;<strong>ProcessManager</strong>这个类提供的。具体代码的实现，大家可以看process_manager.rb这个文件。ProcessManager中使用了<strong>CStruct</strong>这个类。CStruct是用ruby来模拟C语言的结构体，类似BitStruct。我写CStruct这个类目的很明确，它不需要大而全，功能适中，使用起来比较方便。有了CStruct，我们就可以很方便的和Win&nbsp;API打交道了。关于<strong>CStruct</strong>，我会另写一篇文章来介绍它。在这里，它只是跑龙套的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们先来看看&nbsp;ProcessManager类提供的功能:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.w-yong.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><span style="color:#0000ff">require</span>&nbsp;<span style="color:#00cdcd">&#39;process_manager&#39;</span><br/><br/><span style="color:#008000">#下面是一些使用ProcessManager的例子</span><br/>procmgr&nbsp;<span style="color:#000000">=</span>&nbsp;ProcessManager<span style="color:#000000">.</span>new<br/><br/><span style="color:#008000">#&nbsp;列举所有进程</span><br/>procmgr<span style="color:#000000">.</span>procs&nbsp;<span style="color:#000000">{|</span>proc<span style="color:#000000">|</span>&nbsp;puts&nbsp;proc<span style="color:#000000">.</span>name<span style="color:#000000">}</span><br/><br/><span style="color:#008000">#&nbsp;根据名称查询进程信息.(同名的都会被列举)</span><br/>procmgr<span style="color:#000000">.</span><span style="color:#ff0000">query</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;svchost.exe&#34;</span><span style="color:#000000">){|</span>proc<span style="color:#000000">|</span>&nbsp;&nbsp;puts&nbsp;<span style="color:#00cdcd">&#34;#{proc.name}&nbsp;id&nbsp;=&nbsp;#{proc.id}</span><span style="color:#000000">\n</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">}</span><br/><br/><span style="color:#008000">#&nbsp;按名称终止进程(同名的都会终止)</span><br/>procmgr<span style="color:#000000">.</span><span style="color:#ff0000">kill</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;notepad.exe&#34;</span><span style="color:#000000">)</span><br/><br/><span style="color:#008000">#&nbsp;按ID终止进程</span><br/>procmgr<span style="color:#000000">.</span><span style="color:#ff0000">kill</span><span style="color:#000000">(</span><span style="color:#ff0000">3412</span><span style="color:#000000">)</span><br/><br/><span style="color:#008000">#&nbsp;找出系统中载入了advapi32.dll的进程,</span><br/><span style="color:#008000">#&nbsp;并打印出advapi32.dll在进程中的加载位置</span><br/>procmgr<span style="color:#000000">.</span>procs&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>proc<span style="color:#000000">|</span>&nbsp;<br/>&#160;&#160;&#160;&#160;proc<span style="color:#000000">.</span>modules&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>mod<span style="color:#000000">|</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">if</span>&nbsp;mod<span style="color:#000000">.</span>name<span style="color:#000000">.</span><span style="color:#ff0000">casecmp</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#39;advapi32.dll&#39;</span><span style="color:#000000">)==</span><span style="color:#ff0000">0</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf<span style="color:#00cdcd">&#34;#{proc.name}&nbsp;loaded&nbsp;&#39;advapi32.dll&#39;&nbsp;at&nbsp;%08X</span><span style="color:#000000">\n</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">,</span>mod<span style="color:#000000">.</span>image_base<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">break</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#0000ff">end</span><br/>&#160;&#160;&#160;&#160;<span style="color:#0000ff">end</span><br/><span style="color:#0000ff">end</span><br/></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有了ProcessManager提供的procs(列举进程)和modules(列举模块)这个两个方法，我们就可以写我们的GUI版的进程管理器。大部分工作就是利用&nbsp;SharpDevelop&nbsp;做好界面布局。<strong>有一点需要说明，SharpDevelop&nbsp;生成的变量名不太符合Ruby的命名约定，你若觉得不习惯，可以改改。反正本文没有改，两者兼有之。</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序中有两个主要函数，show_processes和show_modules,代码如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show_processes:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.w-yong.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><span style="font-size:9pt"><span style="color:#0000ff">def</span>&nbsp;show_processes<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;清空&nbsp;ListView&nbsp;控件</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@procListView</span><span style="color:#000000">.</span>Items<span style="color:#000000">.</span>clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@proc_cache</span><span style="color:#000000">.</span>clear<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;列举系统进程</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@procmgr</span><span style="color:#000000">.</span>procs&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>proc<span style="color:#000000">|</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;缓存proc对象</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@proc_cache</span><span style="color:#000000">&lt;&lt;</span>proc<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_mod&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#0000ff">nil</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;取出进程对应的自身模块</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc<span style="color:#000000">.</span>modules&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>mod<span style="color:#000000">|</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">if</span>&nbsp;File<span style="color:#000000">.</span><span style="color:#ff0000">basename</span><span style="color:#000000">(</span>mod<span style="color:#000000">.</span>path<span style="color:#000000">).</span><span style="color:#ff0000">casecmp</span><span style="color:#000000">(</span>proc<span style="color:#000000">.</span>name<span style="color:#000000">)==</span><span style="color:#ff0000">0</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_mod&nbsp;<span style="color:#000000">=</span>&nbsp;mod<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">break</span>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">end</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">end</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;如果取不到自身模块,则造个假的。</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">unless</span>&nbsp;proc_mod<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_mod&nbsp;<span style="color:#000000">=</span>&nbsp;Struct<span style="color:#000000">.</span><span style="color:#ff0000">new</span><span style="color:#000000">(:</span>path<span style="color:#000000">,&nbsp;:</span>image_base<span style="color:#000000">,:</span>image_size<span style="color:#000000">).</span><span style="color:#ff0000">new</span><span style="color:#000000">(</span>proc<span style="color:#000000">.</span>name<span style="color:#000000">,</span><span style="color:#ff0000">0</span><span style="color:#000000">,</span><span style="color:#ff0000">0</span><span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">end</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;取出进程文件的图标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@small_proc_imagelist</span><span style="color:#000000">.</span>Images<span style="color:#000000">.</span>Add&nbsp;AppUtils<span style="color:#000000">.</span><span style="color:#ff0000">get_file_small_icon</span><span style="color:#000000">(</span>proc_mod<span style="color:#000000">.</span>path<span style="color:#000000">.</span><span style="color:#ff0000">gsub</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">\\</span><span style="color:#00cdcd">??</span><span style="color:#000000">\\</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">,</span><span style="color:#00cdcd">&#39;&#39;</span><span style="color:#000000">),</span>AppUtils<span style="color:#000000">.</span><span style="color:#ff0000">is_system_process</span><span style="color:#000000">(</span>proc_mod<span style="color:#000000">.</span>path<span style="color:#000000">))</span><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;将相关信息插入到ListView控件中。</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@procListView</span><span style="color:#000000">.</span>Items<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items&nbsp;<span style="color:#000000">&lt;&lt;</span>&nbsp;System<span style="color:#000000">::</span>String<span style="color:#000000">.</span><span style="color:#ff0000">new</span><span style="color:#000000">(</span>System<span style="color:#000000">::</span>Text<span style="color:#000000">::</span>Encoding<span style="color:#000000">.</span><span style="color:#ff0000">GetEncoding</span><span style="color:#000000">(</span><span style="color:#ff0000">0</span><span style="color:#000000">).</span><span style="color:#ff0000">GetChars</span><span style="color:#000000">(</span>proc_mod<span style="color:#000000">.</span>path<span style="color:#000000">))</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items<span style="color:#000000">[</span>proc_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>ImageIndex&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@small_proc_imagelist</span><span style="color:#000000">.</span>Images<span style="color:#000000">.</span>size-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items<span style="color:#000000">[</span>proc_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>SubItems<span style="color:#000000">.</span>Add&nbsp;<span style="color:#ff0000">sprintf</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;%08X&#34;</span><span style="color:#000000">,</span>proc<span style="color:#000000">.</span>id<span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items<span style="color:#000000">[</span>proc_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>SubItems<span style="color:#000000">.</span>Add&nbsp;<span style="color:#ff0000">sprintf</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;%08X&#34;</span><span style="color:#000000">,</span>proc_mod<span style="color:#000000">.</span>image_base<span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc_items<span style="color:#000000">[</span>proc_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>SubItems<span style="color:#000000">.</span>Add&nbsp;<span style="color:#ff0000">sprintf</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;%08X&#34;</span><span style="color:#000000">,</span>proc_mod<span style="color:#000000">.</span>image_size<span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">end</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;设置&nbsp;ImageList</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@procListView</span><span style="color:#000000">.</span>SmallImageList&nbsp;&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@small_proc_imagelist</span><br/><br/><span style="color:#0000ff">end</span><br/></span><br/></div></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show_modules:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.w-yong.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><span style="font-size:9pt"><span style="color:#0000ff">def</span>&nbsp;show_modules&nbsp;seleced_proc<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">return&nbsp;unless</span>&nbsp;seleced_proc<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;列举选中进程的模块&nbsp;&nbsp;&nbsp;&nbsp;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;seleced_proc<span style="color:#000000">.</span>modules&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>mod<span style="color:#000000">|</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_items&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@modListView</span><span style="color:#000000">.</span>Items<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;取出模块文件的图标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@small_mod_imagelist</span><span style="color:#000000">.</span>Images<span style="color:#000000">.</span>Add&nbsp;AppUtils<span style="color:#000000">.</span><span style="color:#ff0000">get_file_small_icon</span><span style="color:#000000">(</span>mod<span style="color:#000000">.</span>path<span style="color:#000000">.</span><span style="color:#ff0000">gsub</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">\\</span><span style="color:#00cdcd">??</span><span style="color:#000000">\\</span><span style="color:#00cdcd">&#34;</span><span style="color:#000000">,</span><span style="color:#00cdcd">&#39;&#39;</span><span style="color:#000000">),</span>AppUtils<span style="color:#000000">.</span><span style="color:#ff0000">is_system_process</span><span style="color:#000000">(</span>mod<span style="color:#000000">.</span>path<span style="color:#000000">))</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;将相关信息插入到ListView控件中。</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_items&nbsp;<span style="color:#000000">&lt;&lt;</span>&nbsp;System<span style="color:#000000">::</span>String<span style="color:#000000">.</span><span style="color:#ff0000">new</span><span style="color:#000000">(</span>System<span style="color:#000000">::</span>Text<span style="color:#000000">::</span>Encoding<span style="color:#000000">.</span><span style="color:#ff0000">GetEncoding</span><span style="color:#000000">(</span><span style="color:#ff0000">0</span><span style="color:#000000">).</span><span style="color:#ff0000">GetChars</span><span style="color:#000000">(</span>mod<span style="color:#000000">.</span>path<span style="color:#000000">))</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_items<span style="color:#000000">[</span>mod_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>ImageIndex&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@small_mod_imagelist</span><span style="color:#000000">.</span>Images<span style="color:#000000">.</span>size-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_items<span style="color:#000000">[</span>mod_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>SubItems<span style="color:#000000">.</span>Add&nbsp;<span style="color:#ff0000">sprintf</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;%08X&#34;</span><span style="color:#000000">,</span>mod<span style="color:#000000">.</span>image_base<span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_items<span style="color:#000000">[</span>mod_items<span style="color:#000000">.</span>Count-1<span style="color:#000000">].</span>SubItems<span style="color:#000000">.</span>Add&nbsp;<span style="color:#ff0000">sprintf</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#34;%08X&#34;</span><span style="color:#000000">,</span>mod<span style="color:#000000">.</span>image_size<span style="color:#000000">)</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">end</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#008000">#&nbsp;设置&nbsp;ImageList</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880088">@modListView</span><span style="color:#000000">.</span>SmallImageList&nbsp;&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#880088">@small_mod_imagelist</span><br/><span style="color:#0000ff">end</span><br/></span><br/></div></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体的代码，请参考附件中的源码。]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=17</link>
			<title><![CDATA[周伯通-历史上真有其人喔]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[三教]]></category>
			<pubDate>Mon,19 Jul 2010 21:24:19 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=17</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于周伯通这个人物，我想大家也是在金庸老先生的《射雕英雄传》和《神雕侠侣》里看到的吧？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;金庸先生的小说经常把历史上的真实人物和事件融入到小说中。王重阳和全真七子确实是历史上的真实的、响当当的人物，这个历史书上都有说了。而周伯通，我一直以为是金庸老先生凭空杜撰出来的人物，最后才发现我错了。周伯通在历史上也是有其人的，当然这个人的事迹不详，但名字却见于史料。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《全真教祖碑》中记载如下:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;九年巳丑四月，宁海周伯通者，邀真人住庵，榜曰：「金莲堂」。夜有神光，照耀如昼......&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另：从网上又找到一个调查历史上周伯通的文章给:<a href="http://blog.sina.com.cn/s/blog_502b86550100fakq.html" target="_blank">http://blog.sina.com.cn/s/blog_502b86550100fakq.html</a>。还是不错的喔。<br/><br/><br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=16</link>
			<title><![CDATA[使用Ruby统计某个进程CPU占用的情况(Ubuntu)]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[Ruby]]></category>
			<pubDate>Thu,15 Jul 2010 22:37:27 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=16</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近公司的一个移植项目有个任务，要测量我们的程序在Linux下运行一段时间(约几个小时)，看看CPU的占用的情况如何。我的同事(老高)用bash脚本完成了任务。我闲来无事，也顺手用ruby写了一个。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Linux下取得进程的相关信息，可以使用ps命令。我们可以通过ruby来定时调用ps命令，取得一段时间内的某进程的CPU占用率。&nbsp;“ps&nbsp;-A”&nbsp;可以列出所有进程。先看看ps的输出结果：<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.w-yong.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&nbsp;&nbsp;PID&nbsp;TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIME&nbsp;CMD<br/>&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:02&nbsp;init<br/>&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;kthreadd<br/>&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;migration/0<br/>&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;ksoftirqd/0<br/>&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;watchdog/0<br/>&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;events/0<br/>&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;khelper<br/>&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;kstop/0<br/>&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;kintegrityd/0<br/>&nbsp;&nbsp;&nbsp;10&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;kblockd/0<br/>&nbsp;&nbsp;&nbsp;11&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00&nbsp;kacpid<br/>&nbsp;&nbsp;&nbsp;......(略)<br/></div></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如何取得CPU占用率，可以用&nbsp;pcpu这个选项。如:“ps&nbsp;&nbsp;-o&nbsp;pcpu&nbsp;-p&nbsp;11”&nbsp;,数字11&nbsp;指的是进程id。我们只要找到目标进程id的话，就可以用ps这个命令来得到CPU占用率了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;通过分析&#34;ps&nbsp;-A&#34;的输出，我们根据进程的名称(在这个case下，我们要测量的程序只运行一个实例，所以不存在重名的进程)，可以得到目标进程的id。然后进一步就可以得到进程的CPU占用率了，然后把结果以追加的方式重定向到一个文件中。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;ruby的代码如下(代码太短啦，就不解释了):<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.w-yong.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/><span style="font-size:10pt"><span style="color:#008000">#!&nbsp;/usr/bin/ruby</span><br/><br/>proc_id&nbsp;<span style="color:#000000">=</span>&nbsp;<span style="color:#ff0000">0</span><br/><span style="color:#000000">%</span><span style="color:#ff0000">x</span><span style="color:#000000">(</span>ps&nbsp;<span style="color:#000000">-</span>A<span style="color:#000000">).</span>each_line&nbsp;<span style="color:#0000ff">do</span>&nbsp;<span style="color:#000000">|</span>line<span style="color:#000000">|</span><br/>&nbsp;&nbsp;larray&nbsp;<span style="color:#000000">=</span>&nbsp;line<span style="color:#000000">.</span><span style="color:#ff0000">split</span><span style="color:#000000">(</span><span style="color:#00cdcd">&#39;&nbsp;&#39;</span><span style="color:#000000">)</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">if</span><span style="color:#000000">(</span>larray<span style="color:#000000">[</span><span style="color:#ff0000">3</span><span style="color:#000000">].</span>downcase&nbsp;<span style="color:#000000">==</span><span style="color:#00cdcd">&#39;xxxx&#39;</span><span style="color:#000000">)</span>&nbsp;<span style="color:#008000">#&nbsp;xxxx&nbsp;is&nbsp;your&nbsp;app&#39;s&nbsp;name</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;proc_id&nbsp;<span style="color:#000000">=</span>&nbsp;larray<span style="color:#000000">[</span><span style="color:#ff0000">0</span><span style="color:#000000">]</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">break</span><br/>&nbsp;&nbsp;<span style="color:#0000ff">end</span>&nbsp;&nbsp;&nbsp;&nbsp;<br/><span style="color:#0000ff">end</span><br/><br/><span style="color:#0000ff">while&nbsp;true</span><br/>&nbsp;&nbsp;system&nbsp;<span style="color:#00cdcd">&#34;ps&nbsp;&nbsp;-o&nbsp;pcpu&nbsp;-p&nbsp;#{proc_id}&nbsp;&gt;&gt;&nbsp;pcpu.txt&#34;</span><br/>&nbsp;&nbsp;<span style="color:#ff0000">sleep</span><span style="color:#000000">(</span><span style="color:#ff0000">3</span><span style="color:#000000">)</span>&nbsp;<br/><span style="color:#0000ff">end</span><br/></span><br/></div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=15</link>
			<title><![CDATA[章鱼]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[杂事杂记]]></category>
			<pubDate>Sun,11 Jul 2010 22:13:47 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=15</guid>	
		<description><![CDATA[章鱼的第六感比所谓的语言大师厉害得多，不服不行~&nbsp;；）]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=14</link>
			<title><![CDATA[雨]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[杂事杂记]]></category>
			<pubDate>Sat,10 Jul 2010 16:54:49 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=14</guid>	
		<description><![CDATA[沈阳这几天经常下雨~，下完之后又非常的热.&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=10</link>
			<title><![CDATA[用Ruby进行快速GUI程序开发(IronRuby + SharpDevelop)]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[Ruby]]></category>
			<pubDate>Sat,10 Jul 2010 12:41:43 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=10</guid>	
		<description><![CDATA[Ruby本身是门强大和灵活的语言，这个自不必多说。Ruby中有许多GUI框架的绑定，比如:QtRuby，wxRuby,FXRuby等等。利用这些框架，用Ruby来写简单GUI程序是十分方便的。但是如果一旦界面过于复杂，用Ruby来手写GUI的生成代码，那可就是一个辛苦的纯体力活啦。<br/><br/>如果有个GUI&nbsp;设计器(GUI&nbsp;Designer)的话，并且能生成相应的Ruby代码，那就方便多啦。<br/><br/>随着IronRuby1.0的正式发布，赋予了Ruby访问.NET&nbsp;Framework的能力，也就是说我们和C#一样，可以开发基于WinForms的GUI程序啦。但是也同样面临用手写GUI的生成代码，因为IronRuby并没有提供一个GUI&nbsp;Designer。<br/><br/>还好，我们有SharpDevelop(可以从它的主页下载，我用的是4.0&nbsp;beta).它提供了对IronRuby和IronPython的GUI&nbsp;Designer&nbsp;的支持。这样就可以方便的是用动态语言进行GUI开发啦。省心省力啊！<br/><br/>步骤一：用SharpDevelop&nbsp;创建一个Ruby工程<br/><br/><img src="http://www.w-yong.com/attachments/month_1007/k2010710123521.JPG" border="0" alt=""/><br/><br/><br/>步骤二:&nbsp;SharpDevelop&nbsp;自动会生成相关文件，你可以编辑代码<br/><br/><img src="http://www.w-yong.com/attachments/month_1007/d2010710123915.JPG" border="0" alt=""/><br/><br/><br/>步骤三:&nbsp;利用&nbsp;SharpDevelop&nbsp;提供的GUI&nbsp;Designer&nbsp;进行GUI设计（多么熟悉界面啊，工具箱和属性对话框）<br/><br/><img src="http://www.w-yong.com/attachments/month_1007/y201071012201.JPG" border="0" alt=""/><br/><br/>步骤四:&nbsp;我们可以把大部分精力放在程序的逻辑上，界面部分就利用GUI&nbsp;Designer方便的处理吧。呵呵<br/><br/>好了，这次先介绍到这里。另外有一点需要注意,SharpDevelop生成的Ruby代码，在使用内嵌资源的时候，还需要做一些特殊处理才能正确运行(不使用内嵌资源的Ruby程序是没问题的)。我们会在下一篇说说这个问题。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=9</link>
			<title><![CDATA[俺的近况]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[杂事杂记]]></category>
			<pubDate>Mon,18 May 2009 20:56:00 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=9</guid>	
		<description><![CDATA[又潜了将近一年的水，冒个泡吧。好多朋友都以为俺失踪了，咳咳~&nbsp;<br/>一直在做&nbsp;嵌入式相关的开发，开发的平台是WindowsCE(4.2,5.0,6.0)都有。<br/>工作中的事情没什么太多谈的，但是其中有一个工作有可能大家比较感兴趣：Windows&nbsp;CE&nbsp;下&nbsp;壳的编写。<br/>目前这个壳已经支持WindowsCE(4.2,5.0,6.0)，支持的CPU有：X86，ARM，MIPSII和SH4。这个壳还可以继续做得更好一些，由于工期问题，暂时先停止开发了，以后我想还会继续的，把自己的一些新的想法做进去。<br/>抽个时间会写一个&nbsp;“编写Windows&nbsp;CE&nbsp;壳的经验谈”和大家共享一下:)]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=8</link>
			<title><![CDATA[熬夜~]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[杂事杂记]]></category>
			<pubDate>Fri,18 Jul 2008 01:42:54 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=8</guid>	
		<description><![CDATA[又在熬夜加班~&nbsp;做个记号&nbsp;:(]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=7</link>
			<title><![CDATA[The .NET File Format]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[.NET]]></category>
			<pubDate>Wed,25 Jun 2008 22:05:24 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=7</guid>	
		<description><![CDATA[CodeProject上的一篇介绍.NET文件格式的文章“The&nbsp;.NET&nbsp;File&nbsp;Format”。<br/>地址:&nbsp;<a href="http://www.codeproject.com/KB/dotnet/dotnetformat.aspx" target="_blank">http://www.codeproject.com/KB/dotnet/dotnetformat.aspx</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.w-yong.com/default.asp?id=6</link>
			<title><![CDATA[垃圾评论]]></title>
			<author>pojieyong@163.com(阿勇)</author>
			<category><![CDATA[杂事杂记]]></category>
			<pubDate>Tue,24 Jun 2008 20:02:30 +0800</pubDate>
			<guid>http://www.w-yong.com/default.asp?id=6</guid>	
		<description><![CDATA[今天花大半天时间清理了一下垃圾评论和引用.&nbsp;这是为自己偷懒付出的代价.顺便打了两个补丁。]]></description>
		</item>
		
</channel>
</rss>