<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>RookIE技术端口</title>
  <link>http://rookiesoft.yourblog.org</link>
  <description><![CDATA[]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/images/head.gif</url>
									<title>RookIE技术端口</title>
									<link>http://rookiesoft.yourblog.org</link>
								</image>  <item>
   <title>共享软件试用机制探讨</title>
   <description><![CDATA[一、通过改变文件时间来限制软件的试用次数 <br />
在MS-DOS中，文件的时间是 通过一个16位的值来保存的，位 15~11用来保存小时数，位10~5用 来保存分钟数，位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如，在下面的示例 程序中，笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序，我们可以看到，只是文件时间的分 钟数加了1，一般人很难察觉，这种方 法有比较好的隐蔽性。 <br />
二、示例程序中所涉及的中断 <br />
1．中断21H的功能3DH <br />
用途：打开文件用于读。写或补 充。 <br />
调用寄存器:AH=3DH，AL=00H，DS:DX=文件名； <br />
返回寄存器:CF 复位--成功，AX=文件把柄。 <br />
CF 置位--出错，AX=错误代码。 <br />
2．中断21H的功能3EH <br />
用途：强迫清除所有缓冲区，更新目录，使文件把 柄无效。 <br />
调用寄存器：AH＝3EH，BX＝文件把柄； <br />
返回寄存器：CF 复位--成功，AX被破坏, <br />
CF 置位--出错，AX=错误代码。 <br />
3．中断21H的功能57H、子功能00H <br />
用途：读出文件被最后修改的日期和时间。 <br />
调用寄存器：AX＝5700H，BX=文件把柄； <br />
返回寄存器：CF 复位--成功，CX=文件时间， DX=文件日期， <br />
CF 置位--出错，AX=错误代码。 <br />
4。中断21H的功能57H、子功能01H <br />
用途：将文件最后被修改过的日期和时间信息变 成指定值。 <br />
调用寄存器：AX=5701H，BX=文件把柄，CX= 新时间，DX=新日期； <br />
返回寄存器：CF 复位--成功， <br />
CF 置位--出错，AX=错误代码。 <br />
三、示例程序 <br />
#include &lt;sidio.h&gt; <br />
#include &lt;dos.h&gt; <br />
#include &lt;conio.h&gt; <br />
int count( ) <br />
{ <br />
union REGS inregs,outregs; <br />
strut SREGS segs; <br />
unsigned handle; <br />
unsigned times; <br />
/ * 打开文件 * / <br />
inregs.h.ah =0x3d; <br />
inregs.h.al =0; <br />
scgread(& segs); <br />
inregs.x.dx ="test.exe"; <br />
intdosx(& inregs, & outregs, & segs); <br />
if(outregs.x.cflag) return(0); <br />
else <br />
{ <br />
/ * 读取文件日期时间 * / <br />
handle = Outregs.x.ax; <br />
inregs.x.ax = 0x5700; <br />
inregs.x.bx = handle; <br />
intdosx(& inregs, & outregs, &segs); <br />
times = (outregs.x.cx &0x7e0)&gt; &gt; 5; <br />
if(times &lt;40)/ * 试用次数可以通过改变此处的’40’来实现 * / <br />
{ <br />
inregs.x.ax = 0x5701; <br />
inregs.x.bx = handle; <br />
inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / <br />
inregs.x.dx = outregs.x.dx; <br />
intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / <br />
return(2); <br />
} <br />
else return(1); <br />
/ * 关闭文件 * / <br />
inregs.h.ah = 0x3e; <br />
inregs.x.bx = handle; <br />
intdosx(& inregs, & outregs, & segs); <br />
} <br />
} <br />
main() <br />
{ <br />
int flag; <br />
flag = count(); <br />
if(flag==0) printf("此软件为试用版，请勿任意修改!\ n"); <br />
if(flag==1) printf("此软件为试用版，您的试用次数已满!\n"); <br />
if(flag==2) printf("此软件为试用版，欢迎试用!\n"); <br />
}<br />
<br />
<br />
<br />
<br />
目前，许多应用程序都有在一定限制条件内免费使用的功能，利用该功能可以有效限制非法用户的使用，同时，还可以使合法用户在充分了解软件优缺点的基础上，再决定是否购买。本文称实现这种功能的方法为保护方法。保护方法的利用在保护正版软件的基础上，既有效地扩大了软件的使用范围，又给用户提供了进行充分选择的机会。 <br />
保护方法 <br />
本文介绍4种利用C＋＋ Builder实现的保护方法： <br />
利用注册表限制程序使用的天数，比如限制使用30天； <br />
利用注册表限制程序使用的次数，比如限制使用45次； <br />
设定程序使用的截止日期，比如设截止日期为2001年8月31日； <br />
限制每次使用程序的时间，比如一次允许使用50分钟。 <br />
这些保护方式既可以单独使用，也可以几个同时使用实现综合保护。 <br />
编程思路 <br />
1.方法1和方法2 <br />
在程序主窗体的OnCreate事件过程中，定义注册表TRegistry类对象指针Reg: <br />
TRegistry ＊Reg = new TRegistry; <br />
通过其属性RootKey定位注册表根键，如： <br />
Reg－&gt;RootKey = HKEY_USERS; <br />
//可根据需要选择 <br />
利用OpenKey方法打开根键下的一个自定义主键，例如： <br />
Reg－&gt;OpenKey(“.DEFAULT\\Myprogram\\Records”, false) <br />
若该主键不存在（即首次运行本程序时），需要利用CreateKey()方法创建该主键，并将其打开，写入子键及键值如下(参见图1)： <br />
//“Count”键值记录本程序运行次数 <br />
Reg－&gt;WriteInteger(“Count”,1); <br />
//“Flag”键值记载本程序使用是否有过期的记录 <br />
Reg－&gt;WriteInteger(“Flag”,0); <br />
//“First”键值记录首次运行本程序的日期 <br />
Reg－&gt;WriteDate(“First”,Date()); <br />
//“Last”键值记录上一次运行本程序的日期 <br />
Reg－&gt;WriteDate(“Last”,Date()); <br />
<br />
<br />
<br />
图 1 <br />
<br />
<br />
通过对“First”键值的读取获得首次运行程序时的日期，再与系统当前的日期进行比较，判断是否超过指定的天数而决定是否终止程序的运行，从而实现使用天数的限制。通过对“Count”键值的读取获得程序使用的次数，判断是否超过指定的次数而决定是否终止程序的运行，以实现使用次数的限制。 <br />
此外，通过读取“Flag”键值可以了解程序是否有过期记<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/340778.html">取CPU序列号</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/340769.html">取CPU频率</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/264078.html">RGB转灰度经典公式</a> 2004-10-28</div><div><a href="http://rookiesoft.yourblog.org/logs/260717.html">《如何用正确的方法来写出质量好的软件的75条体会》</a> 2004-10-22</div><div><a href="http://rookiesoft.yourblog.org/logs/176269.html">HTML中小meta的大作用</a> 2004-05-19</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F347895.html&title=%E5%85%B1%E4%BA%AB%E8%BD%AF%E4%BB%B6%E8%AF%95%E7%94%A8%E6%9C%BA%E5%88%B6%E6%8E%A2%E8%AE%A8">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/347895.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Tue, 12 Apr 2005 10:59:54 +0800</pubDate>
  </item>
  <item>
   <title>Visual C++.NET中 字符串转换方法</title>
   <description><![CDATA[丁有和<br />
　　Visual C++.NET涉及到ATL/ATL Server、MFC和托管C++等多种编程方式，不仅功能强大而且应用广泛。在编程中，我们常常会遇到ANSI、Unicode以及BSTR不同编码类型的字符串转换操作。本文先介绍基本字符串类型，然后说明相关的类，如CComBSTR、_bstr_t、CStringT等，最后讨论它们的转换方法，其中还包括使用最新ATL7.0的转换类和宏，如CA2CT、CA2TEX等。<br />
<br />
　　一、BSTR、LPSTR和LPWSTR<br />
<br />
　　在Visual C++.NET的所有编程方式中，我们常常要用到这样的一些基本字符串类型，如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型，是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。<br />
<br />
　　那么什么是BSTR、LPSTR以及LPWSTR呢？<br />
<br />
　　BSTR(Basic STRing，Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码，因此BSTR实际上就是一个COM字符串，但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构，其中DWORD值是字符串中实际所占用的字节数，且它的值是字符串中Unicode字符的两倍。<br />
<br />
　　LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的8位ANSI字符数组指针，而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。在VC++中，还有类似的字符串类型，如LPTSTR、LPCTSTR等，它们的含义如图2所示。<br />
<br />
　　例如，LPCTSTR是指“long pointer to a constant generic string”，表示“一个指向一般字符串常量的长指针类型”，与C/C++的const char*相映射，而LPTSTR映射为 char*。<br />
<br />
　　一般地，还有下列类型定义：<br />
<br />
#ifdef UNICODE <br />
　typedef LPWSTR LPTSTR;<br />
　typedef LPCWSTR LPCTSTR; <br />
#else <br />
　typedef LPSTR LPTSTR; <br />
　typedef LPCSTR LPCTSTR; <br />
#endif  <br />
<br />
　　二、CString、CStringA 和 CStringW<br />
<br />
　　Visual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类，它有CString、CStringA和CStringW三种形式，分别操作不同字符类型的字符串。这些字符类型是TCHAR、char和wchar_t。TCHAR在Unicode平台中等同于WCHAR(16位Unicode字符)，在ANSI中等价于char。wchar_t通常定义为unsigned short。由于CString在MFC应用程序中经常用到，这里不再重复。<br />
<br />
　　三、VARIANT、COleVariant 和_variant_t<br />
<br />
　　在OLE、ActiveX和COM中，VARIANT数据类型提供了一种非常有效的机制，由于它既包含了数据本身，也包含了数据的类型，因而它可以实现各种不同的自动化数据的传输。下面让我们来看看OAIDL.H文件中VARIANT定义的一个简化版：<br />
<br />
struct tagVARIANT {<br />
　VARTYPE vt;<br />
　union {<br />
　　short iVal; // VT_I2.<br />
　　long lVal; // VT_I4.<br />
　　float fltVal; // VT_R4.<br />
　　double dblVal; // VT_R8.<br />
　　DATE date; // VT_DATE.<br />
　　BSTR bstrVal; // VT_BSTR.<br />
　　…<br />
　　short * piVal; // VT_BYREF|VT_I2.<br />
　　long * plVal; // VT_BYREF|VT_I4.<br />
　　float * pfltVal; // VT_BYREF|VT_R4.<br />
　　double * pdblVal; // VT_BYREF|VT_R8.<br />
　　DATE * pdate; // VT_BYREF|VT_DATE.<br />
　　BSTR * pbstrVal; // VT_BYREF|VT_BSTR.<br />
　};<br />
}; <br />
<br />
　　显然，VARIANT类型是一个C结构，它包含了一个类型成员vt、一些保留字节以及一个大的union类型。例如，如果vt为VT_I2，那么我们可以从iVal中读出VARIANT的值。同样，当给一个VARIANT变量赋值时，也要先指明其类型。例如：<br />
<br />
VARIANT va;<br />
:: VariantInit(&va); // 初始化<br />
int a = 2002;<br />
va.vt = VT_I4; // 指明long数据类型<br />
va.lVal = a; // 赋值 <br />
<br />
　　为了方便处理VARIANT类型的变量，Windows还提供了这样一些非常有用的函数：<br />
<br />
　　VariantInit —— 将变量初始化为VT_EMPTY；<br />
<br />
　　VariantClear —— 消除并初始化VARIANT；<br />
<br />
　　VariantChangeType —— 改变VARIANT的类型；<br />
<br />
　　VariantCopy —— 释放与目标VARIANT相连的内存并复制源VARIANT。<br />
<br />
　　COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大大的功能，当对象构造时首先调用VariantInit进行初始化，然后根据参数中的标准类型调用相应的构造函数，并使用VariantCopy进行转换赋值操作，当VARIANT对象不在有效范围时，它的析构函数就会被自动调用，由于析构函数调用了VariantClear，因而相应的内存就会被自动清除。除此之外，COleVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。例如下面的代码：<br />
<br />
COleVariant v1("This is a test"); // 直接构造<br />
COleVariant v2 = "This is a test"; <br />
// 结果是VT_BSTR类型，值为"This is a test"<br />
COleVariant v3((long)2002);<br />
COleVariant v4 = (long)2002;<br />
// 结果是VT_I4类型，值为2002 <br />
<br />
　　_variant_t是一个用于COM的VARIANT类，它的功能与COleVariant相似。不过在Visual C++.NET的MFC应用程序中使用时需要在代码文件前<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/340527.html">Codeguru 文章收藏</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/340778.html">取CPU序列号</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/340769.html">取CPU频率</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/289861.html">算法注册机编写扫盲---第三课</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/222941.html">在C#中实现软件自动升级</a> 2004-07-16</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F347893.html&title=Visual+C%2B%2B.NET%E4%B8%AD+%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E6%96%B9%E6%B3%95">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/347893.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Tue, 12 Apr 2005 10:54:52 +0800</pubDate>
  </item>
  <item>
   <title>老鸟指路:成为编程高手的八大奥秘</title>
   <description><![CDATA[出处：中国网侠联盟<br />
1、扎实的基础 <br />
<br />
　　数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握它们，很难写出高水平的程序。程序人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。 <br />
<br />
2、丰富的想像力 <br />
<br />
　　不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。开阔的思维对程序员来说很重要。 <br />
<br />
3、最简单的是最好的 <br />
<br />
　　这也许是所有科学都遵循的一条准则，复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式：E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。 <br />
<br />
4、不钻牛角尖 <br />
<br />
　　当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。 <br />
<br />
5、对答案的渴求 <br />
<br />
　　人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。 <br />
<br />
6、多与别人交流 <br />
<br />
　　三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一问题的看法，会给你很大的启发。 <br />
<br />
<br />
7、良好的编程风格 <br />
<br />
　　注意养成良好的习惯，代码的缩进编排，变量的命名规则要始终保持一致。大家都知道如何排除代码中错误，却往往忽视了对注释的排错。注释是程序的一个重要组成部分，它可以使你的代码更容易理解，而如果代码已经清楚地表达了你的思想，就不必再加注释了，如果注释和代码不一致，那就更加糟糕。 <br />
<br />
8、韧性和毅力 <br />
<br />
　　这也许是“高手”和一般程序员最大的区别。高手们并不是天才，他们是在无数个日日夜夜中磨炼出来的。成功能给我们带来无比的喜悦，但过程却是无比的枯燥乏味。你不妨做个测试，找个10000以内的素数表，把它们全都抄下来，然后再检查三遍，如果能够不间断地完成这一工作，你就可以满足这一条。<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/289865.html">算法注册机编写扫盲---第五课</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/289861.html">算法注册机编写扫盲---第三课</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/260717.html">《如何用正确的方法来写出质量好的软件的75条体会》</a> 2004-10-22</div><div><a href="http://rookiesoft.yourblog.org/logs/242516.html">ATL 的对象向导类型</a> 2004-09-09</div><div><a href="http://rookiesoft.yourblog.org/logs/221259.html">2.3 通常的软件隐喻</a> 2004-07-13</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F347861.html&title=%E8%80%81%E9%B8%9F%E6%8C%87%E8%B7%AF%3A%E6%88%90%E4%B8%BA%E7%BC%96%E7%A8%8B%E9%AB%98%E6%89%8B%E7%9A%84%E5%85%AB%E5%A4%A7%E5%A5%A5%E7%A7%98">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/347861.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Tue, 12 Apr 2005 09:23:43 +0800</pubDate>
  </item>
  <item>
   <title>Codeguru 文章收藏</title>
   <description><![CDATA[[face27] Three ways to get your MAC address<br />
[face27] Obtain all IP addresses of local machine<br />
[face27] Reading Hard Drive Manufacturing Information<br />
<br />
<br />
<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/347895.html">共享软件试用机制探讨</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/347893.html">Visual C++.NET中 字符串转换方法</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/289871.html">Win2000命令全集</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/289857.html">算法注册机编写扫盲---第一课</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/260717.html">《如何用正确的方法来写出质量好的软件的75条体会》</a> 2004-10-22</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F340527.html&title=Codeguru+%E6%96%87%E7%AB%A0%E6%94%B6%E8%97%8F">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/340527.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Mon, 28 Mar 2005 09:52:47 +0800</pubDate>
  </item>
  <item>
   <title>取CPU序列号</title>
   <description><![CDATA[#include &lt;windows.h&gt;<br />
#include &lt;stdio.h&gt;<br />
<br />
bool DetectSerialNumber() <br />
{ <br />
<br />
<br />
bool found_sn; <br />
_asm <br />
{ <br />
<br />
<br />
pushfd <br />
pop eax // get EFLAGS into eax <br />
mov ebx,eax // keep a copy <br />
xor eax,0x200000 // toggle CPUID bit <br />
push eax <br />
popfd // set new EFLAGS <br />
pushfd <br />
pop eax // EFLAGS back into eax <br />
<br />
<br />
// have we changed the ID bit? <br />
xor eax,ebx  <br />
<br />
je NO_SERIAL_NUM <br />
<br />
// we could toggle the bit so CPUID <br />
// is present <br />
mov eax,1 <br />
<br />
cpuid // get processor features <br />
<br />
// check the serial number bit <br />
test edx,1&lt;&lt;18 <br />
<br />
jz NO_SERIAL_NUM <br />
mov found_sn,1 <br />
jmp DONE <br />
NO_SERIAL_NUM: <br />
mov found_sn,0 <br />
DONE: <br />
<br />
<br />
<br />
} <br />
<br />
return found_sn; <br />
<br />
} <br />
void ReadSerialNumber(DWORD* serial) <br />
{ <br />
<br />
DWORD t,m,b; <br />
_asm <br />
{ <br />
<br />
<br />
mov eax,1 <br />
cpuid <br />
<br />
// top 32 bits are the processor <br />
// signature bits <br />
mov t,eax <br />
<br />
// A new CPUID code for the <br />
// Pentium III <br />
mov eax,3 <br />
<br />
<br />
cpuid <br />
mov m,edx <br />
mov b,ecx <br />
<br />
} <br />
<br />
// copy the locals into the pointer variables passed in <br />
serial[0] = b; <br />
serial[1] = m; <br />
serial[2] = t; <br />
<br />
} <br />
// Intel recommends displaying the serial number to the user as six groups of four hexidecimal digits, (i.e., xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.). <br />
<br />
void main()<br />
{<br />
	DWORD serial[3];<br />
	if(DetectSerialNumber())<br />
	{<br />
		ReadSerialNumber(serial);<br />
		printf ("PIII Serial Number = %04X-%04X-%04X-%04X-%04X-%04X\n",<br />
									serial [0]&0xFFFF, serial [0] &gt;&gt; 16,<br />
									serial [1]&0xFFFF, serial [1] &gt;&gt; 16,<br />
									serial [2]&0xFFFF, serial [2] &gt;&gt; 16);<br />
	}<br />
	else<br />
	{<br />
		printf("Not found serial Number\n");<br />
	}<br />
}<br />
<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/347893.html">Visual C++.NET中 字符串转换方法</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/340527.html">Codeguru 文章收藏</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/264078.html">RGB转灰度经典公式</a> 2004-10-28</div><div><a href="http://rookiesoft.yourblog.org/logs/260717.html">《如何用正确的方法来写出质量好的软件的75条体会》</a> 2004-10-22</div><div><a href="http://rookiesoft.yourblog.org/logs/222941.html">在C#中实现软件自动升级</a> 2004-07-16</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F340778.html&title=%E5%8F%96CPU%E5%BA%8F%E5%88%97%E5%8F%B7">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/340778.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Mon, 28 Mar 2005 04:24:20 +0800</pubDate>
  </item>
  <item>
   <title>取CPU频率</title>
   <description><![CDATA[#include &lt;windows.h&gt;<br />
#include &lt;stdio.h&gt;<br />
<br />
int GetWindowsCpuFrequency()<br />
{<br />
    DWORD eax1,edx1,eax2,edx2;<br />
    __asm<br />
    {<br />
        rdtsc<br />
        mov eax1,eax<br />
        mov edx1,edx<br />
    }<br />
    Sleep(1000);<br />
    __asm<br />
    {<br />
        rdtsc<br />
        mov eax2,eax<br />
        mov edx2,edx<br />
    }<br />
<br />
    eax2-=eax1;<br />
    edx2-=edx1;<br />
<br />
    edx2*=2147483647;<br />
    edx2+=eax2;<br />
    return (edx2 / 1024L / 1024L);<br />
}<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/347895.html">共享软件试用机制探讨</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/347893.html">Visual C++.NET中 字符串转换方法</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/340527.html">Codeguru 文章收藏</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/274973.html">Windows自启动程序十大藏身之所</a> 2004-11-15</div><div><a href="http://rookiesoft.yourblog.org/logs/242516.html">ATL 的对象向导类型</a> 2004-09-09</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F340769.html&title=%E5%8F%96CPU%E9%A2%91%E7%8E%87">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/340769.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Mon, 28 Mar 2005 04:18:42 +0800</pubDate>
  </item>
  <item>
   <title>Win2000命令全集</title>
   <description><![CDATA[[QUOTE]accwiz.exe &gt; Accessibility Wizard for walking you through setting up your machine for your mobility needs. 辅助工具向导 <br />
acsetups.exe &gt; ACS setup DCOM server executable <br />
actmovie.exe &gt; Direct Show setup tool 直接显示安装工具 <br />
append.exe &gt; Allows programs to open data in specified directories as if they were in the current directory. 允许程序打开制定目录中的数据 <br />
arp.exe &gt; NETWORK Display and modify IP - Hardware addresses 显示和更改计算机的IP与硬件物理地址的对应列表 <br />
at.exe &gt; AT is a scheduling utility also included with UNIX 计划运行任务 <br />
atmadm.exe &gt; Displays statistics for ATM call manager. ATM调用管理器统计 <br />
attrib.exe &gt; Display and modify attributes for files and folders 显示和更改文件和文件夹属性 <br />
autochk.exe &gt; Used to check and repair Windows File Systems 检测修复文件系统 <br />
autoconv.exe &gt; Automates the file system conversion during reboots 在启动过程中自动转化系统 <br />
autofmt.exe &gt; Automates the file format process during reboots 在启动过程中格式化进程 <br />
autolfn.exe &gt; Used for formatting long file names 使用长文件名格式 <br />
bootok.exe &gt; Boot acceptance application for registry <br />
bootvrfy.exe &gt; Bootvrfy.exe, a program included in Windows 2000 that notifies the system that startup was successful. Bootvrfy.exe can be run on a local or remote computer. 通报启动成功 <br />
cacls.exe &gt; Displays or modifies access control lists (ACLs) of files. 显示和编辑ACL <br />
calc.exe &gt; Windows Calculators 计算器 <br />
cdplayer.exe &gt; Windows CD Player CD播放器 <br />
change.exe &gt; Change { User | Port | Logon } 与终端服务器相关的查询 <br />
charmap.exe &gt; Character Map 字符映射表 <br />
chglogon.exe &gt; Same as using "Change Logon" 启动或停用会话记录 <br />
chgport.exe &gt; Same as using "Change Port" 改变端口（终端服务） <br />
chgusr.exe &gt; Same as using "Change User" 改变用户（终端服务） <br />
chkdsk.exe &gt; Check the hard disk for errors similar to Scandisk 3 Stages must specify a Drive Letter 磁盘检测程序 <br />
chkntfs.exe &gt; Same as using chkdsk but for NTFS NTFS磁盘检测程序 <br />
cidaemon.exe &gt; Component of Ci Filer Service 组成Ci文档服务 <br />
cipher.exe &gt; Displays or alters the encryption of directories [files] on NTFS partitions. 在NTFS上显示或改变加密的文件或目录 <br />
cisvc.exe &gt; Content Index -- Its the content indexing service for I 索引内容 <br />
ckcnv.exe &gt; Cookie Convertor 变换Cookie <br />
cleanmgr.exe &gt; Disk Cleanup, popular with Windows 98 磁盘清理 <br />
cliconfg.exe &gt; SQL Server Client Network Utility SQL客户网络工具 <br />
clipbrd.exe &gt; Clipboard viewer for Local will allow you to connect to other clipboards 剪贴簿查看器 <br />
clipsrv.exe &gt; Start the clipboard Server 运行Clipboard服务 <br />
clspack.exe &gt; CLSPACK used to create a file listing of system packages 建立系统文件列表清单 <br />
cluster.exe &gt; Display a cluster in a domain 显示域的集群 <br />
_cmd_.exe &gt; Famous command prompt 没什么好说的！ <br />
cmdl32.exe &gt; Connection Manager Auto-Download 自动下载连接管理 <br />
cmmgr32.exe &gt; Connection Manager 连接管理器 <br />
cmmon32.exe &gt; Connection Manager Monitor 连接管理器监视 <br />
cmstp.exe &gt; Connection Manager Profile Manager 连接管理器配置文件安装程序 <br />
comclust.exe &gt; about cluster server 集群 <br />
comp.exe &gt; ComClust Add, Remove, or Join a cluster. 比较两个文件和文件集的内容＊ <br />
compact.exe &gt; Displays or alters the compression of files on NTFS partitions. 显示或改变NTFS分区上文件的压缩状态 <br />
conime.exe &gt; Console IME IME控制台 <br />
control.exe &gt; Starts the control panel 控制面板 <br />
convert.exe &gt; Convert File System to NTFS 转换文件系统到NTFS <br />
convlog.exe &gt; Converts MS IIS log files 转换IIS日志文件格式到NCSA格式 <br />
cprofile.exe &gt; Copy profiles 转换显示模式 <br />
cscript.exe &gt; MS Windows Scripts Host Version 5.1 较本宿主版本 <br />
csrss.exe &gt; Client Server Runtime Process 客户服务器Runtime进程 <br />
csvde.exe &gt; Comma Separated Variable Import/Export Utility 日至格式转换程序 <br />
dbgtrace.exe &gt; 和Terminal Server相关 <br />
dcomcnfg.exe &gt; Display the current DCOM configuration. DCOM配置属性 <br />
dcphelp.exe &gt; ? <br />
dcpromo.exe &gt; Promote a domain controller to ADSI AD安装向导 <br />
ddeshare.exe &gt; Display DDE shares on local or remote computer DDE共享 <br />
ddmprxy.exe &gt; <br />
debug.exe &gt; Runs Debug, a program testing and editing tool. 就是DEBUG啦！ <br />
dfrgfat.exe &gt;<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/347895.html">共享软件试用机制探讨</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/347861.html">老鸟指路:成为编程高手的八大奥秘</a> 2005-04-12</div><div><a href="http://rookiesoft.yourblog.org/logs/340527.html">Codeguru 文章收藏</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/289863.html">算法注册机编写扫盲---第四课</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/264078.html">RGB转灰度经典公式</a> 2004-10-28</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F289871.html&title=Win2000%E5%91%BD%E4%BB%A4%E5%85%A8%E9%9B%86">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/289871.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Sun, 12 Dec 2004 10:18:45 +0800</pubDate>
  </item>
  <item>
   <title>C++直接调用IE对话框窗体显示页面</title>
   <description><![CDATA[#include &lt;windows.h&gt;<br />
#include &lt;urlmon.h&gt;<br />
#include &lt;mshtmhst.h&gt;<br />
<br />
<br />
/**************************************************************************<br />
<br />
   WinMain()<br />
<br />
**************************************************************************/<br />
<br />
int PASCAL WinMain(  HINSTANCE hInstance,<br />
                     HINSTANCE hPrevInstance,<br />
                     LPSTR lpCmdLine,<br />
                     int nCmdShow)<br />
{<br />
 HINSTANCE  hinstMSHTML = LoadLibrary(TEXT("MSHTML.DLL")); //装载动态连接库<br />
 WCHAR url[]=L"http://rookieport.yourblog.org";//此地址名称可直接用html文件名代替<br />
<br />
 if(hinstMSHTML)//装载动态连接库成功<br />
 {<br />
  SHOWHTMLDIALOGFN *pfnShowHTMLDialog;<br />
<br />
  pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(hinstMSHTML, TEXT("ShowHTMLDialog"));<br />
<br />
  if(pfnShowHTMLDialog)<br />
  {<br />
   IMoniker *moniker=NULL;<br />
<br />
   //<br />
   if( FAILED(CreateURLMoniker(NULL, (LPWSTR)url,&moniker ) ))<br />
   {<br />
    FreeLibrary(hinstMSHTML);<br />
    return 0;<br />
   }<br />
<br />
   VARIANT  varArgs;<br />
   VARIANT varOut;<br />
   VariantInit(&varOut);<br />
   varArgs.vt = VT_BSTR;<br />
   varArgs.bstrVal = SysAllocString(L"RookIE Browser");<br />
   TCHAR *tcFeatures = "dialogWidth:100px;dialogHeight:100px;dialogLeft:0px;dialogTop:0px;";<br />
<br />
   pfnShowHTMLDialog(NULL, moniker, &varArgs, tcFeatures, &varOut);<br />
<br />
   VariantClear(&varArgs);<br />
<br />
   if(moniker != NULL)<br />
    moniker-&gt;Release();<br />
<br />
   //显示成功，返回TRUE<br />
   return 0;<br />
<br />
  }<br />
  else //GetProcessAddress失败<br />
   return 0;<br />
<br />
  FreeLibrary(hinstMSHTML);<br />
 }<br />
 else //装载动态连接库失败<br />
  return 0;<br />
<br />
 return 0;<br />
<br />
}<br />
<br />
<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/259688.html">自定义水晶报表的外观</a> 2004-10-21</div><div><a href="http://rookiesoft.yourblog.org/logs/244271.html">IBM知识库收藏</a> 2004-09-14</div><div><a href="http://rookiesoft.yourblog.org/logs/238704.html">ASP.NET知识文章收藏</a> 2004-08-31</div><div><a href="http://rookiesoft.yourblog.org/logs/221554.html">3.3 需求分析先决条件</a> 2004-07-13</div><div><a href="http://rookiesoft.yourblog.org/logs/176247.html">Access字段类型对照</a> 2004-05-19</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F289869.html&title=C%2B%2B%E7%9B%B4%E6%8E%A5%E8%B0%83%E7%94%A8IE%E5%AF%B9%E8%AF%9D%E6%A1%86%E7%AA%97%E4%BD%93%E6%98%BE%E7%A4%BA%E9%A1%B5%E9%9D%A2">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/289869.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Sun, 12 Dec 2004 10:15:57 +0800</pubDate>
  </item>
  <item>
   <title>调整Windows窗体程序多个子控件大小和位置的API标准方法</title>
   <description><![CDATA[Win32API中有一组函数可以用来（同时）调整一个窗体内多个子控件的大小和位置。这里是我用这组API调整一个控件的例子，对于多个控件是同样可行的。<br />
  RECT rcl; // 取得整个窗体客户区矩形<br />
  HDWP hdwp; // 这里用来存储多个子窗体（控件）的位置信息<br />
<br />
  // Get the client area of the parent window.<br />
  GetClientRect(_hDlg, &rcl); // _hDlg是我的窗体句柄<br />
<br />
  // We will be deferring four windows.<br />
  hdwp = BeginDeferWindowPos(1); // 创建结构，参数1告诉它我将调整一个子窗体位置<br />
<br />
  // 调整我的控件位置和大小，事实上我是让这个控件填充整个窗体.SWP_NOMOVE表示位置不变<br />
  DeferWindowPos(hdwp, hBrowser, NULL, 0, 0,<br />
    rcl.right - rcl.left, rcl.bottom - rcl.top, SWP_NOZORDER | SWP_NOMOVE);<br />
  <br />
  // 对于其他需要调整位置的控件则该如下调用<br />
     /*DeferWindowPos(hdwp, g_Listing.hWndListView, NULL,<br />
         left, top, width, height,<br />
         SWP_NOZORDER );*/<br />
<br />
  EndDeferWindowPos(hdwp); // 最后结束，应用各个窗体的新位置和大小<br />
<br />
<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/242971.html">数据库访问与本地文件访问实测报告</a> 2004-09-10</div><div><a href="http://rookiesoft.yourblog.org/logs/176278.html">XML在Web中的简单应用</a> 2004-05-19</div><div><a href="http://rookiesoft.yourblog.org/logs/176273.html">MSDESP3详细安装手记</a> 2004-05-19</div><div><a href="http://rookiesoft.yourblog.org/logs/176265.html">C#之Office文档调用</a> 2004-05-19</div><div><a href="http://rookiesoft.yourblog.org/logs/176261.html">内存转换Image到Icon格式(C#)</a> 2004-05-19</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F289867.html&title=%E8%B0%83%E6%95%B4Windows%E7%AA%97%E4%BD%93%E7%A8%8B%E5%BA%8F%E5%A4%9A%E4%B8%AA%E5%AD%90%E6%8E%A7%E4%BB%B6%E5%A4%A7%E5%B0%8F%E5%92%8C%E4%BD%8D%E7%BD%AE%E7%9A%84API%E6%A0%87%E5%87%86%E6%96%B9%E6%B3%95">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/289867.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Sun, 12 Dec 2004 10:14:03 +0800</pubDate>
  </item>
  <item>
   <title>算法注册机编写扫盲---第五课</title>
   <description><![CDATA[[QUOTE]算法注册机编写扫盲---第五课 <br />
原创作者：我要[DFCG] <br />
================================================================================= <br />
<br />
注：接第四课，我又来了，这次想多余话都没有了。来！接着来吧。 ^_^ <br />
<br />
   这个课程一共写了五课，总算可以做一个总结或叫完结了！怎么，意尤未尽？没法，我要[DFCG]菜的不行的，只是将一些个人的所谓经验或心得拿来献丑而已，装酷了啊！砖头，烂柿子，臭鸡蛋一起掷过来了吧！先别啊，我还得说完再走的，你别赶我行不行了，我晕~~~~~~~~~ <br />
================================================================================= <br />
<br />
一、到这里，应该说些什么内容呢？真的有点晕，以中级的来看，该说的都好象说了吧！还有什么好说的，想想~~~ <br />
<br />
二、给些学习的方法吧！多试多练不就是了？还有说头的吗？有，还是坐下来看完这第五课吧！ <br />
<br />
三、学着自已编写一个属于你的程式，看下面源码： <br />
<br />
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long <br />
<br />
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) <br />
Label1.ForeColor = &HFF0000 <br />
Label1.FontSize = 9 <br />
Label2.ForeColor = &HFF0000 <br />
Label2.FontSize = 9 <br />
End Sub <br />
<br />
Private Sub label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) <br />
Label1.FontSize = 10 <br />
Label1.ForeColor = &HC0& <br />
End Sub <br />
<br />
Private Sub label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) <br />
Label2.FontSize = 10 <br />
Label2.ForeColor = &HC0& <br />
End Sub <br />
<br />
Private Sub label1_Click() <br />
ShellExecute 0, "open", "http://218.63.244.68:1010/ckkd/index.php", vbNullString, vbNullString, 0 <br />
End Sub <br />
<br />
Private Sub label2_Click() <br />
     ShellExecute 0, "open", "http://dfcg.con.cn/", vbNullString, vbNullString, 0 <br />
End Sub <br />
<br />
四、上面的词句，如果你对网页制作有那丁点认识也会看得明白的，看不懂？没事，复制到粘帖你总不至于也不会吧！好，因为网上有不小好的源码，所以这次我先上源码再接着说整个的框架。在源码里看，晕晕的不知所其言，关键你要看着源码要写出一个可执行的程式来，我作几个引点解释： <br />
<br />
Private Sub label1_Click() ← 这label1是？知道它就可应用源码自如了 <br />
ShellExecute 0, "open", "http://218.63.244.68:1010/ckkd/index.php", vbNullString, vbNullString, 0 <br />
End Sub <br />
<br />
Private Sub label2_Click() ← 工具箱（左边竖框）有个大写字母A，就是它 <br />
     ShellExecute 0, "open", "http://dfcg.con.cn/", vbNullString, vbNullString, 0 <br />
End Sub <br />
<br />
五、现在你打开VB6，新建一个执行文件模板，好，光标点一下上面说的大写A字母，然后回到模板上拉出一个框条来，呵，里面你看到的是什么，“label1”要的就是它，因为源码是这样写的啊！　^_^ <br />
<br />
六、重复第五步，你又拉出了一个“label2”来，够了，源码就这2个，以后你可以用这个源码去制作更多的链接。这例用2个就行多了就等于是违反源码原意，哈，你一定没好果子吃了。 <br />
<br />
七、现在到属性窗口，就是右边的中间框。滚动下拉找到“Caption”，往右看看，label1放在那里了，知道怎样去做了吧！对，改写它，让它显示你所要的信息，以这个源码为例，这里改写为“DFCG官方论坛”，回模板看看，已经改写好了，光标放label2，同样的操作，改写为“DFCG短域名”。嗯，差不多要成功了，你现在用你的审美眼光，去布置好你的模板，加图片啊，改模板外观啊什么的，别急，慢着来，你一定会设计出一个好看的外观来的。 <br />
<br />
八、最后用上面方法，再多拉出一个label3来，有用吗？有，这个你可以写上你想写的东西上去，比如，“我爱你，DFCG！”　^_^ <br />
<br />
九、好，现在你就要将源码用复制粘贴的方法，将原码导入模板，不会做这步？哦，读书不用功，回头由第一课开始再看吧！ <br />
<br />
十、嗯！都做好了，坐下来，抽杆烟。对，我每一步都做对的，那等什么，来啊，点工具栏，文件 → 下拉菜单点“生成工程1.exe”。当，出来了一个叫工程1的可执行文件，双击运行它看看，哈，你的设计完美吧？不管了，点一下上面的“DFCG官方论坛”，哦，打开的网页就是DFCG官方论坛，再点“DFCG短域名”，打开的也是DFCG官方论坛。成功了，这就是成功了啊，以后你只要将链接的地址改成你想去的就行。 &_^ <br />
<br />
十一、我说老大，我一个是网址一个是邮箱你这个就不行了吧？对哦，怎么改写源码达到目的呢？嘿嘿，我先喝杯茶。来了，看下面： <br />
<br />
Private Sub label1_Click() <br />
ShellExecute 0, "open", "http://218.63.244.68:1010/ckkd/index.php", vbNullString, vbNullString, 0 <br />
End Sub <br />
<br />
Private Sub label2_Cli<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://rookiesoft.yourblog.org/logs/340527.html">Codeguru 文章收藏</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/340778.html">取CPU序列号</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/340769.html">取CPU频率</a> 2005-03-28</div><div><a href="http://rookiesoft.yourblog.org/logs/289871.html">Win2000命令全集</a> 2004-12-12</div><div><a href="http://rookiesoft.yourblog.org/logs/289858.html">算法注册机编写扫盲---第二课</a> 2004-12-12</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://del.icio.us/post?v=4&noui&jump=close&url=http%3A%2F%2Frookiesoft.yourblog.org%2Flogs%2F289865.html&title=%E7%AE%97%E6%B3%95%E6%B3%A8%E5%86%8C%E6%9C%BA%E7%BC%96%E5%86%99%E6%89%AB%E7%9B%B2---%E7%AC%AC%E4%BA%94%E8%AF%BE">Del.icio.us</a></span></div><br><br><div class="sysmsg"><b><a href="http://www.gov.cn/zwgk/2008-05/18/content_981560.htm">深切哀悼四川汶川大地震遇难同胞</a></b><br><br></div>]]></description>
   <link>http://rookiesoft.yourblog.org/logs/289865.html</link>
   <author>Rookie.Zhang</author>
   <pubDate>Sun, 12 Dec 2004 10:10:33 +0800</pubDate>
  </item>
 </channel>
</rss>
