<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[[游戏人生]]]></title>
<link>http://www.csinx.org/IBlog/</link>
<description><![CDATA[[创造机会的人是勇者 等待机会的人是愚者]]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[china_fish@163.com(Chinafish)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>[游戏人生]</title> 
	<url>http://www.csinx.org/IBlog/images/logos.gif</url> 
	<link>http://www.csinx.org/IBlog/</link> 
	<description>[游戏人生]</description> 
</image>

			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=18</link>
			<title><![CDATA[UML类图关系模式及C++代码说明]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[代码]]></category>
			<pubDate>Wed,24 Sep 2008 15:11:31 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=18</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在1997年, 对象管理组织(Object Management Group) 发布了统一建模语言UML（Unified Modeling Language）. UML的目标之一就是为开发团队提供标准通用的设计语言来开发和构建计算机应用. UML提出了一套IT专业人员期待多年的统一的标准建模符号. 通过使用UML, 这些人员能够阅读和交流系统架构和设计规划--就像建筑工人多年来所使用的建筑设计图一样.&nbsp;&nbsp;到2003年以后, UML已经获得了业界的认同. 下面主要对UML类图的几种关系模式简要说明:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在UML类图中的关系模式主要有以下几种: 泛化（Generalization）,&nbsp;&nbsp;实现（Realization）, 关联（Association), 聚合（Aggregation）, 依赖(Dependency) 等.<br/><br/>1. 泛化（Generalization）<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;泛化关系: 是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 老虎是动物的一种, 即有老虎的特性也有动物的共性.&nbsp;&nbsp;见下图:<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/x200892414453.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Animal.h<br/>class CAnimal<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;// implement<br/>&#160;&#160;&#160;&#160;virtual HRESULT EatSomething()<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// Do something<br/>&#160;&#160;&#160;&#160;}<br/>};<br/><br/>// Tiger.h<br/>#include &#34;Animal.h&#34;<br/>class CTiger : public CAnimal<br/>{<br/>&#160;&#160;&#160;&#160;// Do something<br/>};<br/></div></div><br/><br/>2. 实现（Realization）<br/>实现关系: 是一种类与接口的关系, 表示类是接口所有特征和行为的实现. 见下图:<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/e200892414548.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Animal.h<br/>class CAnimal<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;// interface<br/>&#160;&#160;&#160;&#160;virtual HRESULT EatSomething() = 0;<br/>};<br/><br/>// Tiger.h<br/>#include &#34;Animal.h&#34;<br/>class CTiger : public CAnimal<br/>{<br/>&#160;&#160;&#160;&#160;// Do something<br/>};<br/></div></div><br/><br/>注: 泛化和实现的区别就在于子类是否继承了父类的实现, 如有继承则关系为泛化, 反之为实现.<br/><br/>3. 关联（Association)<br/>关联关系: 是一种拥有的关系, 可以分为双向关联, 单向关联和自身关联.<br/>双向关联是指双方都拥有对方的引用, 都可以调用对方的公共属性和方法. 见下图:<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/2200892414591.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Husband.h<br/>#include &#34;wife.h&#34;<br/>class CHusband<br/>{<br/>public:<br/>&nbsp;&nbsp;&nbsp;&nbsp;CWife* pWife;<br/>};<br/><br/>// Wife.h<br/>#include &#34;Husband.h&#34;<br/>class CWife<br/>{<br/>public:<br/>&nbsp;&nbsp;&nbsp;&nbsp;CHusband* pHuband;<br/>};<br/></div></div><br/><br/>上图中丈夫和妻子是比较公平的关系, 都可以使用对方公共的属性.<br/><br/>单向关联是指只有某一方拥有另一方的引用, 这样只有拥有对方者可以调用对方的公共属性和方法. 如下图:<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/t200892415126.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Husband.h<br/>class CHusband<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;int nMoney;<br/>&#160;&#160;&#160;&#160;void GoShopping(); <br/>};<br/><br/>// Wife.h<br/>#include &#34;Husband.h&#34;<br/>class CWife<br/>{<br/>public:<br/>&nbsp;&nbsp;&nbsp;&nbsp;CHusband* pHuband;<br/>};<br/></div></div><br/><br/>上图中妻子拥有丈夫, 可以使用对方的属性, 比如钱, 可以让对方做能做的事, 比如去买东西.<br/><br/>自身关联是指拥有一个自身的引用. 如下图<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/9200892415342.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// SingleMan.h<br/>class CSingleMan<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;CSingleMan *pSingleMan;<br/>};<br/></div></div><br/><br/>4. 聚合（Aggregation）和组合(Composition)<br/>聚合关系: 是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.<br/>组合关系: 是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/220089241565.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Car.h<br/>#include &#34;Tyre.h&#34;<br/>class CCar<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;CTyre cTyre;<br/>};<br/><br/>// Tyre.h<br/>#include &#34;Car.h&#34;<br/>class CTyre<br/>{<br/>&#160;&#160;&#160;&#160;// Do something<br/>};<br/></div></div><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Company.h<br/>#include &#34;Department.h&#34;<br/>class CCompany<br/>{<br/>public:<br/>&#160;&#160;&#160;&#160;CDepartment cDepartment;<br/>};<br/><br/>// Tyre.h<br/>#include &#34;Company.h&#34;<br/>class CDepartment<br/>{<br/>&#160;&#160;&#160;&#160;// Do something<br/>};<br/></div></div><br/><br/>5. 依赖(Dependency)<br/>依赖关系: 是一种使用的关系,&nbsp;&nbsp;即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖. 如下图:<br/><br/><img src="http://www.csinx.org/IBlog/attachments/month_0809/3200892415821.gif" border="0" alt=""/><br/><br/>用代码表示如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>// Car.h<br/>class CCar<br/>{<br/>&#160;&#160;&#160;&#160;// Do something<br/>};<br/><br/>// Person.h<br/>#include &#34;Car.h&#34;<br/>class CPerson<br/>{<br/>&#160;&#160;&#160;&#160;void MoveFast(CCar &amp;pCar);<br/>};<br/></div></div><br/><br/>上图中人的快速移动需要有车的协助, 但是这种依赖是比较弱的, 就是人也可以不用车而用其他工具, 与关联不同的是人不必拥有这辆车只要使用就行.<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=17</link>
			<title><![CDATA[使用WSH与WMI获取电池剩余电量和可用时间]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[电脑]]></category>
			<pubDate>Sun,31 Aug 2008 22:57:47 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=17</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 以下代码用于获取获取电池剩余电量和大至可用时间, 要在安装并使用电池供电时才可得到正确信息!<br/>此信息在控制面板的电源选项中可以查看, 如果想自己管理可在程序中使用!<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&#39;/************************************************************************/<br/>&#39;<br/>&#39; FileName: GetBattery.vbs<br/>&#39;<br/>&#39;&nbsp;&nbsp; Author: Chinafish<br/>&#39;<br/>&#39;&nbsp;&nbsp;&nbsp;&nbsp;Email: china_fish@163.com<br/>&#39;<br/>&#39; Homepage: <a href="http://www.csinx.org" target="_blank">http://www.csinx.org</a><br/>&#39;<br/>&#39;&nbsp;&nbsp;&nbsp;&nbsp; Desc: Get battery status<br/>&#39;<br/>&#39;/************************************************************************/<br/><br/>On Error Resume Next<br/><br/>Dim oWmi, Objs<br/><br/>&#39;获取电池信息<br/>Set oWmi = GetObject(&#34;WinMgmts:&#34;)<br/>Set Objs = oWmi.InstancesOf(&#34;Win32_Battery&#34;)<br/>For Each Obj In Objs<br/>&#160;&#160;&#160;&#160;Wscript.Echo &#34;估计可用时间: &#34; &amp; obj.EstimatedRunTime &amp; &#34; 分钟 &#34; &amp; Chr(13) &amp; &#34;估计电量剩余: &#34; &amp; obj.EstimatedChargeRemaining &amp; &#34; %&#34;<br/>Next<br/><br/>Set oWmi = Nothing<br/>Set Objs = Nothing<br/></div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=16</link>
			<title><![CDATA[在MFC对话框程序中禁止使用输入法]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[代码]]></category>
			<pubDate>Thu,24 Jul 2008 16:34:20 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=16</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常我们编写的MFC对话框程序是可以使用输入法, 输入Unicode字符或其他非基本字符的, 而在某些环境下这些字符是不能正常显示的, 因此我们需要在对话框中禁止使用输入法, 可以使用 <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms776194.aspx">ImmDisableIME</a> 和 <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms776077.aspx">ImmAssociateContext</a> 来实现在当前进程禁止使用输入法. 需要注意的是 WINVER 的定义需要大于等于 0x040A 才可以, 修改 stdafx.h 定义 WINVER 为 0x0500, 即 Win2000 以后版本. 在 OnInitDialog() 里加入以下代码:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>HIMC hImc;<br/>ImmDisableIME(GetCurrentThreadId());<br/>hImc = ImmAssociateContext(m_hWnd, NULL);<br/>ImmAssociateContext(m_hWnd, hImc);<br/></div></div><br/><br/>并在文件头部加入包含和链接代码:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>#include &#34;imm.h&#34;<br/>#pragma comment(lib, &#34;imm32.lib&#34;)<br/></div></div><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=15</link>
			<title><![CDATA[判断程序运行在真实电脑还是虚拟机中的代码]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[代码]]></category>
			<pubDate>Thu,17 Jul 2008 15:39:27 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=15</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先我们要了解一下什么是虚拟机, 对虚拟机的通用解释是通过软件模拟的具有完整硬件系统功能的, 运行在一个完全隔离环境中的完整计算机系统. 通过虚拟机软件, 你可以在一台物理计算机上模拟出一台或多台虚拟的计算机, 这些虚拟机就像真正的计算机那样进行工作, 例如你可以安装操作系统, 安装应用程序, 访问网络资源等等. 对于你而言, 它只是运行在你物理计算机上的一个应用程序, 但是对于在虚拟机中运行的应用程序而言, 它就像是在真正的计算机中进行工作. 因此, 当我在虚拟机中进行软件评测时, 可能系统一样会崩溃, 但是, 崩溃的只是虚拟机上的操作系统, 而不是物理计算机上的操作系统, 并且, 使用虚拟机的恢复功能, 我可以马上恢复虚拟机到安装软件之前的状态. 现在比较流行的虚拟机软件有 VMWare 和 Microsoft Virtual PC , 它们都能在 Windows 系统上虚拟出多个计算机, 用于安装 Windows 或其他操作系统. 相比而言, VMWare 不论是在多操作系统的支持上, 还是在执行效率上, 都比 Microsoft Virtual PC 明显高出一筹. 但是 VMWare 没有虚拟显卡, 而是通过 VMWare Tools 才能用上高分辨率和真彩色. Microsoft Virtual PC 模拟了一个比较通用的显卡:S3Trio32/64(4M), 这点看来比较通用, 易用性较好. <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下主要代码主要判断程序是否在虚拟机环境中运行, 测试环境为 Windows 系统, 在 Windows XP SP2 + Microsoft Visual C++ 2003 下调试成功, 附编译的检测程序 <a target="_blank" href="http://www.csinx.org/IDevelope/VPC.exe">下载</a> . <br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">//********************************************************************<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filename: Main.cpp<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author: Chinafish<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Modifier: Chinafish<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cr&#101;ated: 2008-5-15 15:07<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Up&#100;ated: 2008-5-15 15:07<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQ: 149200849<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSN: china_fish@msn.com&nbsp;&nbsp;&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Purpose: 判断程序是否在虚拟机中运行<br/>//=====================================================<br/>//&nbsp;&nbsp;Copyright(C) 2004-2008 by Chinafish. All Rights Reserved.<br/>//********************************************************************<br/><br/>#include &#34;windows.h&#34;<br/><br/>DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep);<br/>bool IsInsideVPC();<br/>bool IsInsideVMWare();<br/>int CheckVPC();<br/><br/>// 发布版本使用MiniPE (3.5KB)<br/>#ifndef _DEBUG<br/><br/>#pragma comment(linker, &#34;/ENTRY:EntryPoint&#34;)<br/>#pragma comment(linker, &#34;/SECTION:VPC,&#34;)<br/>#pragma comment(linker, &#34;/MERGE:.data=VPC&#34;)<br/><br/>int EntryPoint()<br/>{<br/>&#160;&#160;&#160;&#160;CheckVPC();<br/>&#160;&#160;&#160;&#160;ExitProcess(0);<br/>}<br/>#else<br/>int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )<br/>{<br/>&#160;&#160;&#160;&#160;return CheckVPC();<br/>}<br/>#endif // _DEBUG<br/><br/>int CheckVPC()<br/>{<br/>&#160;&#160;&#160;&#160;if(IsInsideVPC())<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBox(NULL, &#34;你在虚拟电脑Microsoft Virtual PC中!&#34;, &#34;提示&#34;, MB_OK|MB_ICONINFORMATION);<br/>&#160;&#160;&#160;&#160;else if(IsInsideVMWare())<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBox(NULL, &#34;你在虚拟电脑VMWare中!&#34;, &#34;提示&#34;, MB_OK|MB_ICONINFORMATION);<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MessageBox(NULL, &#34;你在真实的电脑中!&#34;, &#34;提示&#34;, MB_OK|MB_ICONINFORMATION);<br/><br/>&#160;&#160;&#160;&#160;return 0;<br/>}<br/><br/>DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep)<br/>{<br/>&#160;&#160;&#160;&#160;PCONTEXT ctx = ep-&gt;ContextRecord;<br/>&#160;&#160;&#160;&#160;ctx-&gt;Ebx = -1;<br/>&#160;&#160;&#160;&#160;ctx-&gt;Eip += 4;<br/>&#160;&#160;&#160;&#160;return EXCEPTION_CONTINUE_EXECUTION;<br/>}<br/><br/>bool IsInsideVPC()<br/>{<br/>&#160;&#160;&#160;&#160;bool rc = false;<br/>&#160;&#160;&#160;&#160;__try<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm push ebx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm mov ebx, 0 // It will stay ZERO if VPC is running<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm mov eax, 1 // VPC function number<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm __emit 0Fh<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm __emit 3Fh<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm __emit 07h<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm __emit 0Bh<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm test ebx, ebx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm setz [rc]<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_asm pop ebx<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;// The except block shouldn&#39;t get triggered if VPC is running!!<br/>&#160;&#160;&#160;&#160;__except(IsInsideVPC_exceptionFilter(GetExceptionInformation()))<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;return rc;<br/>}<br/><br/>bool IsInsideVMWare()<br/>{<br/>&#160;&#160;&#160;&#160;bool rc = true;<br/><br/>&#160;&#160;&#160;&#160;__try<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;__asm<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;push edx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;push ecx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;push ebx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mov eax, &#39;VMXh&#39;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mov ebx, 0<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mov ecx, 10<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mov edx, &#39;VX&#39;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;in eax, dx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cmp ebx, &#39;VMXh&#39;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;setz [rc]<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pop ebx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pop ecx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pop edx<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;__except(EXCEPTION_EXECUTE_HANDLER)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;rc = false;<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;return rc;<br/>}</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=14</link>
			<title><![CDATA[使用WSH和WMI实现定时记录系统CPU和内存使用率]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[电脑]]></category>
			<pubDate>Tue,10 Jun 2008 17:00:21 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=14</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSH 是&#34;Windows Scripting Host&#34;的缩略形式, 其通用的中文译名为&#34;Windows 脚本宿主&#34;, 为内嵌于 Windows 操作系统中的脚本语言工作环境. 我们也可以通过了解 WSH 的内置对象来探寻 WSH 可以实现的功能. WSH 共有 14 个内置对象, 它们各自有着明确分工.&nbsp;&nbsp;对象的功能如下: <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>1. Wscript : 主要作用是提取命令行变量, 确定脚本文件名, 确定 WSH 执行文件名(wscript.exe 还是 cscript.exe), 确认 Host 版本信息, 创建, 关连及分离 COM 对象, 写入事件, 按程序结束一个脚本文件的运行, 向默认的输出设备（如对话框, 命令行）输出信息等.<br/>2. WshArguments : 主要作用是获取全部的命令行变量.<br/>3. WshNamed : 负责获取指定的命令行参数集.<br/>4. WshUnnamed : 负责获取未经指定的命令行参数集.<br/>5. WshNetwork : 主要作用是开放或关闭网络共享, 连接或断开网络打印机, 映射或取消网络中的共享, 获取当前登陆用户的信息.<br/>6. WshController : 创建一个远程脚本对象.<br/>7. WshRemote : 实现网络中对计算机系统的远程管理, 也可按计划对其它程序或脚本进行处理.<br/>8. WshRemote Error : 作用是当一个远程脚本（WshRemote 对象）因脚本错误而终止时, 获取可用的错误信息.<br/>9. WshShell : 主要负责程序的本地运行, 处理注册表项, 创建快捷方式, 获取系统文件夹信息, 处理环境变量等.<br/>10. WshShortcut : 主要用于按计划创建快捷方式.<br/>11. WshSpecialFolders : 用于获取任意一个 Windows 特殊文件夹的信息.<br/>12. WshURLShortcut : 用于按程序要求创建进入互联网资源的快捷方式.<br/>13. WshEnvironment : 用于获取任意的环境变量（如 WINDIR, PATH, 或 PROMPT）.<br/>14. WshScriptExec : 用于确定一个脚本文件的运行状态及错误信息.<br/></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSH 的正常工作的前提, 是你必须安装了微软 3.0 或更高版本的 IE, 因为 WSH 在工作时会调用 IE 中的 VBScript (*.vbs) 和 JScript (*.js) 解析引擎. WSH 的优点在于它使我们可以充分利用脚本来实现计算机工作的自动化. 但不可否认, 也正是它的这一特点, 使我们的系统又有了新的安全隐患. 许多计算机病毒制造者正在热衷于用脚本语言来编制病毒, 并利用 WSH 的支持功能, 让这些隐藏着病毒的脚本在网络中广为传播.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WMI 是 &#34;Windows Management Instrumentation&#34; 的缩写, 即Windows管理规范. WMI有许多用途, 其中之一就是通过脚本编程实现管理自动化. 他是Windows 2K/XP管理系统的核心. 对于其他的Win32操作系统, WMI 是一个有用的插件. WMI 以 CIMOM 为基础, CIMOM即公共信息模型对象管理器 (Common Information Model Object Manager), 是一个描述操作系统构成单元的对象数据库, 为 MMC 和脚本程序提供了一个访问操作系统构成单元的公共接口. 有了WMI, 工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的 API.&nbsp;&nbsp;你可以下载 <a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=afe41f46-e213-4cbf-9c5b-fbf236e0e875&amp;displaylang=zh-cn">WMI SDK</a> , 并且可以下载 <a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&amp;displaylang=en">WMI Code Creator v1.0</a> 来生成 WMI 操作脚本. <br/><br/>以下脚本将实现每隔1分钟记录CPU和内存的使用率到C盘的 &#34;Usage.log&#34; 文件中, 当然你也可以使用文本编辑器修改这些参数, 请将以下脚本为存为 &#34;WriteUsage.vbs&#34;, 双击运行或加入系统启动项中均可, 需要中断执行请结束 &#34;wscript.exe&#34; 程序:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>&#39;/************************************************************************/<br/>&#39;<br/>&#39; FileName: WriteUsage.vbs<br/>&#39;<br/>&#39;&nbsp;&nbsp; Author: Chinafish<br/>&#39;<br/>&#39;&nbsp;&nbsp;&nbsp;&nbsp;Email: china_fish@163.com<br/>&#39;<br/>&#39; Homepage: <a href="http://www.csinx.org" target="_blank">http://www.csinx.org</a><br/>&#39;<br/>&#39;&nbsp;&nbsp;&nbsp;&nbsp; Desc: Write CPU &amp; Memory usage <br/>&#39;<br/>&#39;/************************************************************************/<br/><br/>on error resume next<br/><br/>const TargetFile = &#34;C:\Usage.log&#34;<br/><br/>Dim dwTotalMem, dwAvailMem<br/><br/>&#39;定时循环记录<br/>do while true<br/><br/>&#160;&#160;&#160;&#160;const ForReading = 1<br/>&#160;&#160;&#160;&#160;const ForWriting = 2<br/><br/>&#160;&#160;&#160;&#160;Set fso = Cr&#101;ateObject(&#34;Scripting.FileSystemObject&#34;)<br/><br/>&#160;&#160;&#160;&#160;&#39;没有文件先创建文件<br/>&#160;&#160;&#160;&#160;Set MyFile = fso.Cr&#101;ateTextFile(TargetFile, false)<br/>&#160;&#160;&#160;&#160;MyFile.Close<br/><br/>&#160;&#160;&#160;&#160;&#39;打开创建的文件读出原来的内容 <br/>&#160;&#160;&#160;&#160;Set MyFile = fso.OpenTextFile(TargetFile, ForReading)<br/>&#160;&#160;&#160;&#160;strContent = MyFile.ReadAll<br/>&#160;&#160;&#160;&#160;MyFile.Close<br/><br/>&#160;&#160;&#160;&#160;&#39;先写原文件内容<br/>&#160;&#160;&#160;&#160;Set MyFile = fso.OpenTextFile(TargetFile, ForWriting)<br/><br/>&#160;&#160;&#160;&#160;&#39;文件无内容时写文件头<br/>&#160;&#160;&#160;&#160;if strContent &lt;&gt; &#34;&#34; then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteLine(strContent)<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;/*Usage.log file write by Chinafish.*/&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteBlankLines 1<br/>&#160;&#160;&#160;&#160;End if<br/><br/>&#160;&#160;&#160;&#160;&#39;写开始时间<br/>&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;程序启动时间: &#34; &amp; Now())<br/><br/>&#160;&#160;&#160;&#160;&#39;本地电脑<br/>&#160;&#160;&#160;&#160;strComputer = &#34;.&#34;<br/><br/>&#160;&#160;&#160;&#160;&#39;连接到本地电脑<br/>&#160;&#160;&#160;&#160;Set objWMIService = GetObject(&#34;winmgmts:\\&#34; &amp; strComputer &amp; &#34;\root\cimv2&#34;)<br/><br/>&#160;&#160;&#160;&#160;Set colItems = objWMIService.InstancesOf(&#34;Win32_LogicalMemoryConfiguration&#34;)<br/><br/>&#160;&#160;&#160;&#160;&#39;总计物理内存<br/>&#160;&#160;&#160;&#160;For Each colItem In colItems<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dwTotalMem = CLng(colItem.TotalPhysicalMemory / 1024)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;总计物理内存: &#34; &amp; CLng(colItem.TotalPhysicalMemory / 1024) &amp; &#34;MB&#34;)<br/>&#160;&#160;&#160;&#160;Next<br/><br/>&#160;&#160;&#160;&#160;&#39;剩余内存<br/>&#160;&#160;&#160;&#160;Set colItems = objWMIService.ExecQuery(&#34;Sel&#101;ct * from Win32_PerfRawData_PerfOS_Memory&#34;,,48)<br/><br/>&#160;&#160;&#160;&#160;For Each objItem in colItems<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;dwAvailMem = objItem.AvailableMBytes<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;剩余物理内存: &#34; &amp; objItem.AvailableMBytes &amp; &#34;MB&#34;)<br/>&#160;&#160;&#160;&#160;Next<br/><br/>&#160;&#160;&#160;&#160;&#39;物理内存使用率(第一行精确到小数后2位, 第二行取整数) <br/>&#160;&#160;&#160;&#160;&#39;MyFile.WriteLine(&#34;物理内存使用: &#34; &amp; CInt((1 - dwAvailMem/dwTotalMem)*100*100)/100 &amp; &#34;%&#34;)<br/>&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;物理内存使用: &#34; &amp; CInt((1 - dwAvailMem/dwTotalMem)*100) &amp; &#34;%&#34;)<br/><br/>&#160;&#160;&#160;&#160;&#39;CPU数和使用率<br/>&#160;&#160;&#160;&#160;Set colItems = objWMIService.ExecQuery(&#34;Sel&#101;ct * from Win32_Processor&#34;,,48)<br/>&#160;&#160;&#160;&#160;i = 0<br/><br/>&#160;&#160;&#160;&#160;For Each objItem in colItems<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;CPU(&#34; &amp; i &amp; &#34;)使用率: &#34; &amp; objItem.LoadPercentage &amp; &#34;%&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;i = i + 1<br/>&#160;&#160;&#160;&#160;Next<br/><br/>&#160;&#160;&#160;&#160;&#39;写结束时间<br/>&#160;&#160;&#160;&#160;MyFile.WriteLine(&#34;程序结束时间: &#34; &amp; Now())<br/>&#160;&#160;&#160;&#160;MyFile.Close<br/><br/>&#160;&#160;&#160;&#160;Set fso = Nothing<br/>&#160;&#160;&#160;&#160;Set MyFile = Nothing<br/><br/>&#160;&#160;&#160;&#160;&#39;睡眠达到定时操作目的 参数是ms 1000是1秒<br/>&#160;&#160;&#160;&#160;WScript.Sleep 1000*60*1<br/><br/>Loop<br/></div></div><br/><br/>以下为记录文件的效果:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>/*Usage.log file write by Chinafish.*/<br/><br/>程序启动时间: 2008-6-10 16:57:43<br/>总计物理内存: 1535MB<br/>剩余物理内存: 881MB<br/>物理内存使用: 43%<br/>CPU(0)使用率: 4%<br/>CPU(1)使用率: 5%<br/>程序结束时间: 2008-6-10 16:57:45<br/><br/>程序启动时间: 2008-6-10 16:58:06<br/>总计物理内存: 1535MB<br/>剩余物理内存: 882MB<br/>物理内存使用: 43%<br/>CPU(0)使用率: 10%<br/>CPU(1)使用率: 7%<br/>程序结束时间: 2008-6-10 16:58:08<br/></div></div><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=13</link>
			<title><![CDATA[关于ARP的说明与防护软件]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[软件]]></category>
			<pubDate>Thu,05 Jun 2008 11:41:39 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=13</guid>	
		<description><![CDATA[1. 什么是ARP协议?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARP（Address Resolution Protocol）是地址解析协议的简称, 用于将计算机的网络IP地址转化为物理MAC地址的协议. ARP协议的基本功能就是通过目标设备的IP地址, 查询目标设备的MAC地址, 以保证通信的顺利进行. 在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表, 表里的IP地址与MAC地址是一一对应的, 如果系统ARP缓存表被修改不停的通知路由器一系列错误的内网IP或者干脆伪造一个假的网关进行欺骗的话, 网络就肯定会出现大面积的掉线问题. ARP攻击在现今的网络中频频出现, 有效的防范ARP形式的网络攻击已成为确保网络畅通必要条件.<br/><br/>2. ARP协议如何工作?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARP协议是属于链路层的协议, 在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网MAC地址(是网卡出厂时写入固定的硬件地址, 而且是全球唯一的)来确定接口的, 而不是根据32位的IP地址. 内核驱动必须知道目的端的硬件地址才能发送数据. 当然, 点对点的连接是不需要ARP协议的. ARP协议的数据结构为:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">typedef struct arphdr<br/>{<br/>&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;&#160;arp_hrd;&#160;&#160;&#160;&#160;/*硬件类型*/<br/>&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;&#160;arp_pro;&#160;&#160;&#160;&#160;/*协议类型*/<br/>&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;&#160;arp_hln;&#160;&#160;&#160;&#160;/*硬件地址长度*/<br/>&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;&#160;arp_pln;&#160;&#160;&#160;&#160;/*协议地址长度*/<br/>&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;&#160;arp_op;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/*ARP操作类型*/<br/><br/>&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;&#160;arp_sha[6];&#160;&#160;&#160;&#160;/*发送者的硬件地址*/<br/>&#160;&#160;&#160;&#160;unsigned long&#160;&#160;&#160;&#160;arp_spa;&#160;&#160;&#160;&#160;/*发送者的协议地址*/<br/>&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;&#160;arp_tha[6];&#160;&#160;&#160;&#160;/*目标的硬件地址*/<br/>&#160;&#160;&#160;&#160;unsigned long&#160;&#160;&#160;&#160;arp_tpa;&#160;&#160;&#160;&#160;/*目标的协议地址*/<br/>}ARPHDR, *PARPHDR;</div></div><br/>数据在网络上的传输过程是:<br/>1. 应用程序构造数据包提交给内核驱动程序.<br/>2. 内核驱动检查是否能够转化该IP地址为MAC地址, 也就是在本地的ARP缓存中查看IP-MAC对应表.<br/>3. 如果存在该IP-MAC对应关系, 直接到第7步, 如果不存在该IP-MAC对应关系执行下面操作.<br/>4. 内核驱动进行ARP广播, 目的地的MAC地址是FF-FF-FF-FF-FF-FF, ARP命令类型为REQUEST, 其中包含有自己的MAC地址.<br/>5. 当目标主机接收到该ARP请求后, 就发送一个ARP的REPLY命令, 其中包含自己的MAC地址.<br/>6. 本地获得目标主机的IP-MAC地址对应关系, 并保存到ARP缓存中.<br/>7. 内核将把IP转化为MAC地址, 然后封装在以太网头结构中, 再把数据发送出去.<br/><br/>3. 如何使用ARP协议攻击与欺骗?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARP协议并不只在发送了ARP请求才接收ARP应答, 当计算机接收到ARP应答数据包的时候, 就会对本地的ARP缓存进行更新, 将应答中的IP和MAC地址存储在ARP缓存中. 因此如果有攻击者发送ARP应答中包含错误的IP-MAC对应表给目标主机, 将会更新目标主机的ARP缓存, 目标主机使用错误的ARP缓存对应表自然就会产生问题. 这样攻击者若伪造目标主机IP的对应关系就会出现IP冲突, 伪造网关的IP对应表就可以让目标主机数据发向攻击者, 而无法上网. 也可以控制目标主机的数据量(上网速度限制)等. 黑客也可以使用这种方式截取重要数据. 当然由于利用IP冲突的级别比屏保高, 也可以使用ARP攻击让目标主机, 跳出屏幕保护!<br/><br/>4. 如何防范ARP协议攻击与欺骗?<br/>&nbsp;&nbsp;&nbsp;&nbsp;要解决ARP协议的问题也有很多的方法, 可以使用IP-MAC绑定, 也可以设置静态的IP-MAC对应表, 禁止刷新对应关系, 准备一台ARP服务器定时对所有主机更新正确的ARP缓存表, 主机静态绑定网关IP和MAC地址可以使用系统ARP命令, 可以新建一个扩展名为BAT或CMD文件, 内容如下:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>@echo off <br/>arp -d <br/>arp -s 网关IP 网关MAC<br/></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;当然你也可以选择下载使用ARP防护软件或使用本站提供的软件<a target="_blank" href="http://www.csinx.org/IDevelope/ARPSecurity.asp">ARPSecurity</a>.&nbsp;&nbsp;软件界面如下:<br/><br/><img src="http://www.csinx.org/IDevelope/ARPSecurity.JPG" border="0" alt=""/><br/><br/>软件启动即可静态保护, 另外可点击按钮取消保护来停止保护, 在未保护电脑的情况下如在右边列表中发现有某IP对应的MAC与网关MAC相同, 则说明该主机在使用ARP欺骗, 限制上网等. 本软件可以免费使用, 自动更新.]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=12</link>
			<title><![CDATA[网络连接无法正常停用和启用的解决方法]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[电脑]]></category>
			<pubDate>Tue,27 May 2008 22:04:48 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=12</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网络连接中无法正常断开和连接网络, 主要表现在网络连接中右击本地连接图标, 在弹出的菜单中选择&#34;停用&#34;时会弹出停用连接出错的对话框, 内容是&#34;此时无法停用连接. 这个连接可能在用一个或多个不支持即插即用的协议, 或者它是由其他用户或系统帐户初始化的.&#34; 在已禁用的本地连接图标上右击选择&#34;启用&#34;时会弹出正在启用对话框, 然后提示&#34;连接失败!&#34;.&nbsp;&nbsp;出现这种情况是因为安全编录数据库文件(catdb)遭到损坏的原因. <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而系统中有一名为&#34;Cryptographic Services&#34;服务, 主要提供三种管理服务: 1. 编录数据库服务, 主要用于&nbsp;&nbsp;确定 Windows 文件的签字; 2.&nbsp;&nbsp;受保护的根服务, 用于管理计算机受信任根证书机构的证书; 3. 密钥服务, 用于帮助注册计算机获取证书. 所以要解决这个问题我们需要把这个服务停止, 再用没有损坏的安全编录数据库文件(catdb)替换掉原来的即可. 一般安全编录数据库文件(catdb)的位置在系统目录下的 CatRoot2 子目录, 本地连接相关文件在 CatRoot2 子目录下的 {F750E6C3-38EE-11D1-85E5-00C04FC295EE} 目录中, 无线网络连接一般在 CatRoot2 子目录下的 {127D0A1D-4EF2-11D1-8608-00C04FC295EE} 目录中. 我们假设系统安装在C盘, 则在 Win2000 中本地连接相关安全编录数据库文件(catdb)的路径为: <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#34;C:\WINNT\system32\CatRoot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\catdb&#34;</div></div><br/>无线网络连接相关安全编录数据库文件(catdb)的路径为: <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#34;C:\WINNT\system32\CatRoot2\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\catdb&#34;</div></div><br/>在 WinXP 系统中本地连接相关安全编录数据库文件(catdb)的路径为: <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#34;C:\WINDOWS\system32\CatRoot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\catdb&#34;</div></div><br/>无线网络连接相关安全编录数据库文件(catdb)的路径为: <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">&#34;C:\WINDOWS\system32\CatRoot2\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\catdb&#34;</div></div><br/>以下列出几种快速处理的方式:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 你可以在本站下载安全编录数据库文件修复工具CatFix(<a target="_blank" href="http://www.csinx.org/IDevelope/CatFixNT.exe">点此下载</a>) (MD5: 616e29532b0d564f44b6b7aa4b31f8a4),&nbsp;&nbsp;直接执行即可解决. 程序主要是先停止&#34;Cryptographic Services&#34;服务, 替换正常的安全编录数据库文件(catdb), 再重新启动&#34;Cryptographic Services&#34;服务. 本程序只能在 Win2000 及以上系统运行, 在 WinXP SP2 系统下测试通过.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 你可以右击本地连接, 选择属性, 在弹出的对话框中点&#34;配置&#34;按钮, 在设备用法的下拉框中选择&#34;使用这个设备(启用)&#34;或&#34;不要使用这个设备(停用)&#34;, 这种方法可以达到停用或启用本地连接的目的, 但并不能解决问题.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;&nbsp;在我的电脑上右击, 选择管理, 在左边选择设备管理器, 然后在右边的网络适配器下找到你的网卡, 右击选择启用或停用. 一样可以达到目的不能解决根本问题.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4. 卸载网卡驱动, 重新安装驱动达到解决问题的目的. 操作方法是:&nbsp;&nbsp;在我的电脑上右击, 选择管理, 在左边选择设备管理器, 然后在右边的网络适配器下找到你的网卡, 右击选择卸载, 完成后重启电脑, 重新安装驱动, 此方法未测试.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5. 也有人认为可以把网卡换一个插口解决问题, 偶未测试, 有兴趣者可以一试!<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6. 附本站程序安全编录数据库文件修复工具(CatFix)的手动操作方法, 先在运行中输入&#34;cmd&#34;, 回车打开命令行, 输入&#34;net stop cryptsvc&#34;, 回车用于停止&#34;Cryptographic Services&#34;服务, 再复制没有损坏的安全编录数据库文件(catdb)到相应的位置, 位置见以上说明, 安全编录数据库文件(catdb)可以从其他电脑或是新安装相对应操作系统中复制. 再输入&#34;net start cryptsvc&#34;, 回车启动&#34;Cryptographic Services&#34;服务即可解决. 另外网上也有无法替换在DOS下操作的方法可以参考.]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=11</link>
			<title><![CDATA[调用NTDLL紧急关机的代码]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[代码]]></category>
			<pubDate>Thu,15 May 2008 17:00:46 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=11</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常我们从开始菜单关机时系统会通知系统服务和用户程序需要关闭, 程序在关闭时保存数据等, 这需要一些时间来处理, 在某些时候(如发现系统中毒)需要快速的关闭系统, 我们可以使用 CTRL+ALT+DEL 调出关闭系统对话框, 再按住 CTRL 点击关机按钮来执行紧急关机. 要注意的是这种关机模式没有留给其他程序响应关闭的时间, 所以要在确定没有重要数据需要保存的情况下可以使用, 通常可以在2-3秒完成关机动作, 紧急关机不是断电, 对硬件无重大损害. <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主要是通过调用 ntdll.dll 中未公开的函数 NtShutdownSystem 来实现, 该函数也可实现快速重启和快速断电. 我们在调用前需要获取相应的权限, 以下为紧急关机的C++代码, 在 Windows XP SP2 + Visual VC++ 2003 下调试成功, 此代码中定义了发布版本时使用MiniPE模式, 编译程序仅1.5KB大小, 附<a target="_blank" href="http://www.csinx.org/IDevelope/QShut.exe">下载地址</a>. <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先创建一个空的 Win32 工程, 新建 Main.cpp 文件, 文件代码如下:<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">//********************************************************************<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filename: Main.cpp<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author: Chinafish<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Modifier: Chinafish<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cr&#101;ated: 2008-5-15 15:07<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Up&#100;ated: 2008-5-15 15:07<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQ: 149200849<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MSN: china_fish@msn.com&#160;&#160;&#160;&#160;<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Purpose: 紧急关机不保存数据, 硬盘无损害(需要Win2000及以上)<br/>//=====================================================<br/>//&nbsp;&nbsp;Copyright(C) 2004-2008 by Chinafish. All Rights Reserved.<br/>//********************************************************************<br/><br/>#include &#34;windows.h&#34;<br/><br/>typedef enum _SHUTDOWN_ACTION<br/>{<br/>&#160;&#160;&#160;&#160;ShutdownNoReboot,&#160;&#160;&#160;&#160;// 关机<br/>&#160;&#160;&#160;&#160;ShutdownReboot,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;// 重启<br/>&#160;&#160;&#160;&#160;ShutdownPowerOff&#160;&#160;&#160;&#160;// 关闭电源<br/>}SHUTDOWN_ACTION;<br/><br/>DWORD (__stdcall *NtShutdownSystem)(SHUTDOWN_ACTION);<br/><br/>void QShutdown();<br/><br/>// 发布版本使用MiniPE (1.5KB)<br/>#ifndef _DEBUG<br/><br/>#pragma comment(linker, &#34;/ENTRY:EntryPoint&#34;)<br/>#pragma comment(linker, &#34;/SECTION:QShutPE,&#34;)<br/>#pragma comment(linker, &#34;/MERGE:.data=QShutPE&#34;)<br/>#pragma comment(linker, &#34;/MERGE:.text=QShutPE&#34;)<br/>#pragma comment(linker, &#34;/MERGE:.rdata=QShutPE&#34;)<br/><br/>void EntryPoint()<br/>{<br/>&#160;&#160;&#160;&#160;QShutdown();<br/>&#160;&#160;&#160;&#160;return;<br/>}<br/><br/>#else<br/><br/>int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )<br/>{<br/>&#160;&#160;&#160;&#160;QShutdown();<br/>&#160;&#160;&#160;&#160;return 0;<br/>}<br/><br/>#endif<br/><br/>void QShutdown()<br/>{<br/>&#160;&#160;&#160;&#160;HANDLE hToken;<br/><br/>&#160;&#160;&#160;&#160;// 得到关机权限 <br/>&#160;&#160;&#160;&#160;if(OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;hToken))<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;TOKEN_PRIVILEGES tkp;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &amp;tkp.Privileges[0].Luid);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tkp.PrivilegeCount = 1;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, 0, NULL, 0);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CloseHandle(hToken);<br/>&#160;&#160;&#160;&#160;}<br/><br/>&#160;&#160;&#160;&#160;// 执行快速关机<br/>&#160;&#160;&#160;&#160;HMODULE hMod;<br/>&#160;&#160;&#160;&#160;hMod = LoadLibrary(&#34;ntdll.dll&#34;);<br/>&#160;&#160;&#160;&#160;if(hMod)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NtShutdownSystem = (DWORD(__stdcall *)(SHUTDOWN_ACTION))GetProcAddress(hMod, &#34;NtShutdownSystem&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NtShutdownSystem(ShutdownNoReboot);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;return;<br/>}</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=10</link>
			<title><![CDATA[推荐一款开源3D即时战略游戏(Glest)]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[代码]]></category>
			<pubDate>Mon,12 May 2008 17:24:16 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=10</guid>	
		<description><![CDATA[Glest 是一款开源3D即时战略游戏, 具有华丽的效果和高级的人工智能, 可运行在多种平台的操作系统上. 可以使用游戏配置工具或通过直接修改XML配置文件改变游戏的性能参数等. 游戏中主要有两大完全不同的种族, 人类和魔法师. <br/><br/>主要技术及特点: 使用标准C++可以支持GCC和VS.NET编译. OpenGL跨平台渲染API, DX(部分实现中). DirectSound和OpenAL可以播放静态或流式声音, 支持OGG, WAV等. 除单机对战电脑外还可以使用局域网联机对战, 最多支持4玩家联机. 使用多种优化的人工智能技术.<br/><br/>两大种族都有强大的科技树, 这些设置都是在XML文件中定义, 你可以很容易的修改这些设定. 并附有模型查看工具, 地图编辑器, 和MAX导出插件.<br/><br/>以下主要介绍如何成功编译 Glest, 调试环境 Windows XP SP2 Build 2600 + Microsoft Visual C++ 2003 .<br/><br/>首先在本站<a target="_blank" href="http://www.csinx.org/ISourceCode/Glest3.12_src.exe">下载Glest3.12工程</a>, 工程中已包含需要链接的静态库和头文件, 先编译 shared_lib 中的 LibGlest 工程生成静态库 LibGlestD.lib 和 LibGlest.lib, 他们将分别在游戏主程序的调试版本和发布版本中使用. 再打开 Src 目录下的 Glest_2003.sln 工程, 编译即可. 要运行或调试程序还需要<a target="_blank" href="http://www.csinx.org/IGame/Glest3.12.exe">下载游戏程序</a>. 当然你也可以直接到官方网站下载相应版本及依赖文件~<br/><br/>以下为该游戏的一些相关截图:<br/><br/><img src="http://www.csinx.org/IGame/s01.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s02.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s03.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s04.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s05.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s06.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s07.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s08.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/s09.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/HumanTech.jpg" border="0" alt=""/><br/><br/><img src="http://www.csinx.org/IGame/MagicTech.jpg" border="0" alt=""/>]]></description>
		</item>
		
			<item>
			<link>http://www.csinx.org/IBlog/default.asp?id=9</link>
			<title><![CDATA[常用的电脑操作技巧]]></title>
			<author>china_fish@163.com(Chinafish)</author>
			<category><![CDATA[电脑]]></category>
			<pubDate>Thu,24 Apr 2008 12:17:22 +0800</pubDate>
			<guid>http://www.csinx.org/IBlog/default.asp?id=9</guid>	
		<description><![CDATA[一. 常用的快捷键<br/><br/>F1 ~~~~~~~~~~~~~~ 程序在最前时显示程序帮助,&nbsp;&nbsp;否则显示系统帮助.<br/>F2 ~~~~~~~~~~~~~~ 当前选中一个文件或文件夹时切换到重命名状态, 无选中时重命名有虚线的文件或文件夹.<br/>F3 ~~~~~~~~~~~~~~ 在程序中时查找下一个, 在桌面时打开搜索结果并定位到输入要查找的文件名框.<br/>F4 ~~~~~~~~~~~~~~ 在有地址栏的IE或资源管理器中下拉地址栏列表.<br/>F5 ~~~~~~~~~~~~~~ 刷新功能, 在IE中刷新网页. 在桌面或资源管理器中刷新文件显示.<br/>F6 ~~~~~~~~~~~~~~ 改变焦点位置, IE中会在地址栏和页面间切换焦点.<br/>F10或ALT ~~~~~~~~~ 激活程序的菜单栏.<br/>F11 ~~~~~~~~~~~~~ 在IE或资源管理器中可以在全屏和正常模式之间切换.<br/>CTRL+ALT+DEL ~~~~~&nbsp;&nbsp;在正常登录情况下打开安全对话框, 在XP友好登录状态下打开任务管理器.<br/>CTRL+SHIFT+ESC ~~~~ 打开任务管理器.<br/>DEL ~~~~~~~~~~~~~ 删除选中的项目或文字(可删除的情况下) , 删除的项目将放入回收站中.<br/>SHIFT+DEL ~~~~~~~~&nbsp;&nbsp;直接删除项目而不放入回收站中.<br/>CTRL+Z ~~~~~~~~~~&nbsp;&nbsp;撤消上一次操作, 可以是文件操作或是某些程序操作.<br/>CTRL+X ~~~~~~~~~~&nbsp;&nbsp;剪切操作用于粘贴, 可以是文件操作或是某些程序操作.<br/>CTRL+INS或CTRL+C ~~~ 复制操作用于粘贴, 可以是文件操作或是某些程序操作.<br/>SHIFT+INS或CTRL+V ~~&nbsp;&nbsp;将剪切或复制的信息粘贴到指定位置, 可以是文件操作或是某些程序操作.<br/>CTRL+B ~~~~~~~~~~&nbsp;&nbsp;在IE或资源管理器中打开收藏夹管理.<br/>CTRL+N ~~~~~~~~~~&nbsp;&nbsp;在IE中新建窗口, 其他程序中新建文档.<br/>WinKey或CTRL+ESC ~~~ 打开和关闭开始菜单.<br/>WinKey+D ~~~~~~~~~ 最小化所有窗口到任务栏, 再使用可恢复所有窗口.<br/>WinKey+E ~~~~~~~~~ 打开资源管理器.<br/>WinKey+F ~~~~~~~~~ 打开搜索结果窗口与F3不同的是没有定位到输入文件框.<br/>WinKey+CTRL+F ~~~~~ 打开搜索计算机窗口.<br/>WinKey+R ~~~~~~~~~ 打开运行对话框.<br/>WinKey+Pause Break ~~&nbsp;&nbsp;打开系统属性对话框.<br/>WinKey+L ~~~~~~~~~ 在WinXP中直接锁定计算机.工<br/>WinKey+M ~~~~~~~~&nbsp;&nbsp; 总是将所有窗口最小化到任务栏.<br/>WinKey+SHIFT+M ~~~~ 总是将所有最小化到任务栏的窗口恢复到正常位置.<br/>WinKey+TAB ~~~~~~~ 在任务栏上的程序间切换.<br/>WinKey+U ~~~~~~~~~ 打开Windows辅助工具管理器.<br/>SHIFT ~~~~~~~~~~~&nbsp;&nbsp;在放入光盘或移动设备时按住不放可以禁止自动运行, 与其他键组合可达到相反效果, 连续按五次可以打开 &#34;粘滞键&#34; 对话框.<br/>SHIFT+F10 ~~~~~~~~ 与鼠标右键功能一致, 可以用于弹出功能菜单.<br/>ALT ~~~~~~~~~~~~&nbsp;&nbsp;用于激活菜单, 在程序按ALT+菜单中有下划线的字母可以直接打开该菜单.<br/>ALT+F4 ~~~~~~~~~~ 用于关闭当前的程序, 桌面在最前时打开关闭系统对话框.<br/>ALT+SPACE ~~~~~~~&nbsp;&nbsp;打开程序左上角系统菜单, 通常在程序标题栏在屏幕外无法移动时, 按ALT+SPACE, 再按M, 就可以通过上下左右键将程序窗口移动到屏幕显示范围.<br/>ALT+TAB ~~~~~~~~~ 显示当前正在运行的程序窗口, 用于切换到当前窗口, 与SHIFT组合反向.<br/>ALT+ESC ~~~~~~~~~&nbsp;&nbsp;不显示当前正在运行的程序窗口, 直接切换到下一个窗口, 与SHIFT组合反向.<br/>PRINT SCREEN ~~~~~~ 将当前屏幕图片显示复制到剪切板, 可以在画图等程序中粘贴.<br/>ALT+PRINT SCREEN ~~~ 将当前活动的窗口图片复制到剪切板, 可以在画图等程序中粘贴.<br/>ALT+SHIFT+PRINT SCREEN 打开启用高对比对话框.<br/>鼠标左键 ~~~~~~~~~~ 拉动文件或文件夹, 一般为移动文件或文件夹到新位置.<br/>CTRL+鼠标左键 ~~~~~~ 拉动文件或文件夹, 将文件或文件夹复制到新的位置.<br/>CTRL+SHIFT+鼠标左键 ~~拉动文件或文件夹, 将文件或文件夹的快捷方式建立到新位置.<br/>BACKSPACE ~~~~~~~~ 在资源管理器中返回上一个文件夹, 在IE中返回上一个页面.<br/>HOME或CTRL+HOME ~~~在资源管理器中到第一个文件或文件夹, 在IE或其他程序中到页首.<br/>END或CTRL+END ~~~~~ 在资源管理器中到最后一个文件或文件夹, 在IE或其他程序中到页尾.<br/><br/>二. 常用技巧<br/><br/>1. 在Windows系统中经常使用批处理文件(.BAT)时遇到长文件名路径无法找到的问题, 只要将长文件名取前6位补上&#34;~!&#34;或是将长文件名加上双引号即可. 如: C:\Documents and Settings\0.exe 改成 &#34;C:\Docume~!\0.exe&#34; 即可以运行.<br/><br/>2. 要去掉系统默认共享的磁盘和禁止匿名访问只需要将下面的代码保存为.REG的注册表文件双击导入注册表重启即可:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Windows Registry Editor Version 5.00<br/><br/>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]<br/>&#34;AutoShareServer&#34;=dword:00000000<br/>&#34;AutoShareWks&#34;=dword:00000000<br/><br/>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]<br/>&#34;restrictanonymous&#34;=dword:00000001</div></div><br/><br/>3. 如果在任务管理器中发现可疑程序但是无法结束, 可以先显示PID, 再到命令行输入以下代码结束程序:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">ntsd -c q p pid</div></div><br/>其中&#34;pid&#34;要换成你要结束程序的PID, 请不要结束重要的系统进程, 那样很危险.<br/><br/>4. 自动清理系统垃圾文件<br/>将以下代码保存为批处理文件(.BAT), 然后双击运行就可以清理系统垃圾文件:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">@echo off<br/>echo 正在清除系统垃圾文件，请稍等......<br/>del /f /s /q %systemdrive%\*.tmp<br/>del /f /s /q %systemdrive%\*._mp<br/>del /f /s /q %systemdrive%\*.log<br/>del /f /s /q %systemdrive%\*.gid<br/>del /f /s /q %systemdrive%\*.chk<br/>del /f /s /q %systemdrive%\*.old<br/>del /f /s /q %systemdrive%\recycled\*.*<br/>del /f /s /q %windir%\*.bak<br/>del /f /s /q %windir%\prefetch\*.*<br/>rd /s /q %windir%\temp &amp; md %windir%\temp<br/>del /f /q %userprofile%\cookies\*.*<br/>del /f /q %userprofile%\recent\*.*<br/>del /f /s /q &#34;%userprofile%\Local Settings\Temporary Internet Files\*.*&#34;<br/>del /f /s /q &#34;%userprofile%\Local Settings\Temp\*.*&#34;<br/>del /f /s /q &#34;%userprofile%\recent\*.*&#34;<br/>echo 清除系统垃圾完成！<br/>echo. &amp; pause </div></div><br/><br/>5. 快速启动栏显示桌面图标丢失<br/>有多种方法解决, 可以从别的电脑复制过来, 或是在运行中输入以下代码, 并回车:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">regsvr32 /n /i:u shell32.dll</div></div><br/><br/>或者使用文本编辑器新建一个名为 显示桌面.scf 的文件输入以下内容保存即可:<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.csinx.org/IBlog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">[Shell]<br/>Command=2<br/>IconFile=explorer.exe,3<br/>[Taskbar]<br/>Command=ToggleDesktop</div></div>]]></description>
		</item>
		
</channel>
</rss>