<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[绿色版可惜喂鸡]]></title> 
<description><![CDATA[当我看见左肩滑落的衣脚]]></description>
<link>http://www.kcvg.cn</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>

<item>
	<title>C# 抓取图片破解盗链</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=149</link>
	<description><![CDATA[<p><span class="name"><font size="3">首先放置一个关键字岡本 真夜 &quot;そのままの君でいて&quot;，</font></span></p>
<p><span class="name"><font size="3">其次开始帖代码<br />
&lt;%@ Page Language=&quot;C#&quot; %&gt;<br />
&lt;%@ Import Namespace=&quot;System.Net&quot; %&gt;<br />
&lt;%@ Import Namespace=&quot;System.IO&quot; %&gt;<br />
&lt;%<br />
&nbsp;&nbsp;&nbsp; Response.ContentType = &quot;image/png&quot;;<br />
&nbsp;&nbsp;&nbsp; string url = Request.QueryString[&quot;url&quot;]==null ? &quot;<a href="http://www.google.com/intl/zh-CN/images/logo_cn.gif">http://www.google.com/intl/zh-CN/images/logo_cn.gif</a>&quot; : Request.QueryString[&quot;url&quot;] ; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; Stream str = WebRequest.Create(url).GetResponse().GetResponseStream();<br />
&nbsp;&nbsp;&nbsp; MemoryStream ms = new MemoryStream();</font></span></p>
<p><span class="name"><font size="3">&nbsp;&nbsp;&nbsp; byte[] bf = new byte[512];<br />
&nbsp;&nbsp;&nbsp; int i = 0;<br />
&nbsp;&nbsp;&nbsp; while((i=str.Read(bf,0,bf.Length))&gt;0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ms.Write(bf,0,i);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; str.Close();<br />
&nbsp;&nbsp;&nbsp; ms.Close();<br />
&nbsp;&nbsp;&nbsp; Response.ClearContent();<br />
&nbsp;&nbsp;&nbsp; Response.BinaryWrite(ms.ToArray());<br />
&nbsp;&nbsp;&nbsp; <br />
%&gt;</font></span></p>]]></description>
	<pubDate>Wed, 14 Apr 2010 19:48:52 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=149</guid>

</item>
<item>
	<title>C#获取物理路径文件名</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=106</link>
	<description><![CDATA[<p>string str = @&quot;c:\temp\temp.tmp&quot;;<br />
string[] Mystr = fileN.Split('\\');//这里就是单引号。<br />
string a = Mystr[Mystr.Length - 1];<br />
MessageBox.Show(a);</p>]]></description>
	<pubDate>Thu, 21 May 2009 21:06:02 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=106</guid>

</item>
<item>
	<title>VS2008新功能—自定义脚本提示</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=103</link>
	<description><![CDATA[<p>这个在VS2008里面是个比较好的功能，只要在写页面的时候引用了相应的脚本，VS2008就会自动提示，这将多么方便！比如可以在VS2008中实现Jquery的智能提示！<br />
<img src="http://bbs.szblogs.com/attachment.aspx?attachmentid=4660" alt="" /><br />
以上是人家成功的、以下是配置成功的<br />
<img alt="" src="http://images.cnblogs.com/cnblogs_com/zlgcool/Datagrid/jquery02.jpg" /><br />
<br />
去这个原作者地址下载jQuery.IntelliSense.js，把它放到项目文件夹里面，然后在要提示的界面引用它。注意引用的时候一定要在页面的其他JS引用的前面，否则VS也认不出哪个是提示的，哪个不是。<br />
http://brennan.offwhite.net/blog/2008/02/01/intellisense-for-jquery-in-visual-studio-2008/<br />
上面的方法是一个国外草根的作品，但是貌似还有半官方的解决办法，毕竟微软有发出消息要把jQuery ship整合到Visual Studio中。在<a href="http://docs.jquery.com/Downloading_jQuery#Download_jQuery">http://docs.jquery.com/Downloading_jQuery#Download_jQuery</a>下将 jQuery的js文件和vsdoc.js文件添加到页面的script引用即可。有一点需要注意的是，因为vsdoc.js是一个可执行的脚本，但这个 vsdoc文件事不需要render的，所以需要用一个server side的if语句，这样可以禁止执行js文件，但同样将这些代码加载。 <br />
<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/jquery-1.2.6.js&quot;&gt;&lt;/script&gt;<br />
&lt;% if (false)<br />
&nbsp;  { %&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;scripts/jquery-1.2.6-vsdoc.js&quot;&gt;&lt;/script&gt;<br />
&lt;% } %&gt;<br />
<br />
加入Script 块，敲入jQuery代码时就可以利用itellisense功能了：</p>]]></description>
	<pubDate>Fri, 08 May 2009 21:46:50 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=103</guid>

</item>
<item>
	<title>C#生成背景透明的图片文件</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=86</link>
	<description><![CDATA[<p>最近更新：2010年7月2日0:12:28<br />
<span style="font-size: 9pt; color: #2b91af">Image</span><span style="font-size: 9pt"> image = System.Drawing.<span style="color: #2b91af">Image</span>.FromFile(<span style="color: #a31515">@&quot;C:\A.JPG&quot;</span>);</span></p>
<div align="left"><span style="font-size: 9pt; color: #2b91af">Bitmap</span><span style="font-size: 9pt"> pbitmap = <span style="color: blue">new</span> <span style="color: #2b91af">Bitmap</span>(image);</span></div>
<div align="left"><span style="font-size: 9pt">pbitmap.MakeTransparent(<span style="color: #2b91af">Color</span>.White);</span></div>
<p><span style="font-size: 9pt">pictureBox1.Image = pbitmap;</span><br />
我是不太明白微软是如何处理图片的。貌似可以&ldquo;点&rdquo;出很多东西出来，但是还是有很多人喜欢在编写C#的时候调用API去完成相对简单的事。以下代码一大堆，自己看。<br />
附带一个java生成透明的图片文件<a href="http://www.cnblogs.com/dotjava/archive/2008/09/04/1283963.html">http://www.cnblogs.com/dotjava/archive/2008/09/04/1283963.html</a><br />
public Bitmap MakeTransparentGif(Bitmap bitmap, Color color)&nbsp;&nbsp; <br />
{&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; byte R = color.R;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; byte G = color.G;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; byte B = color.B;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; MemoryStream fin = new MemoryStream();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; bitmap.Save(fin, System.Drawing.Imaging.ImageFormat.Gif);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; MemoryStream fout = new MemoryStream((int)fin.Length);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; int count = 0;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; byte[] buf = new byte[256];&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; byte transparentIdx = 0;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; fin.Seek(0, SeekOrigin.Begin);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; //header&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; count = fin.Read(buf, 0, 13);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if ((buf[0] != 71) || (buf[1] != 73) || (buf[2] != 70)) return null; //GIF&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 13);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; int i = 0;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if ((buf[10] &amp; 0x80) &gt; 0)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 1 &lt;&lt; ((buf[10] &amp; 7) + 1) == 256 ? 256 : 0;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; for (; i != 0; i--)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.Read(buf, 0, 3);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((buf[0] == R) &amp;&amp; (buf[1] == G) &amp;&amp; (buf[2] == B))&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transparentIdx = (byte)(256 - i);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 3);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; bool gcePresent = false;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; while (true)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.Read(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buf[0] != 0x21) break;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.Read(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gcePresent = (buf[0] == 0xf9);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (true)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fin.Read(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buf[0] == 0) break;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = buf[0];&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (fin.Read(buf, 0, count) != count) return null;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (gcePresent)&nbsp;&nbsp; <br />
&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; if (count == 4)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf[0] |= 0x01;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf[3] = transparentIdx;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, count);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; while (count &gt; 0)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = fin.Read(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buf, 0, 1);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; fin.Close();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; fout.Flush();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; return new Bitmap(fout);&nbsp;&nbsp; <br />
}</p>]]></description>
	<pubDate>Wed, 25 Feb 2009 19:32:21 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=86</guid>

</item>
<item>
	<title>收集两个关于C#的文章</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=73</link>
	<description><![CDATA[<p>代码IIS Url Rewrite(Url重写) 虚拟主机的实现<br />
<a href="http://www.ok0543.cn/blog/post/13.html">http://www.ok0543.cn/blog/post/13.html</a><br />
我的观后感：现在号称都是全能主机，能不能给PHP程序伪静态？<br />
使用C#格式化字符串<br />
<a href="http://blog.csdn.net/ecjtuync/archive/2007/05/06/1597927.aspx">http://blog.csdn.net/ecjtuync/archive/2007/05/06/1597927.aspx</a></p>]]></description>
	<pubDate>Sat, 17 Jan 2009 12:40:05 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=73</guid>

</item>
<item>
	<title>C# 读取资源文件</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=68</link>
	<description><![CDATA[<p>我实在不理解网上说的VS读取创建C#EXE资源是什么意思。帖自己的代码，让人家去搜吧。<br />
using System.Reflection;<br />
using System.Resources;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void button1_Click(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResourceManager rm = new ResourceManager(&quot;ResxRead.Res&quot;, Assembly.GetExecutingAssembly());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image img = (Image)rm.GetObject(&quot;face1&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pictureBox1.Image = img;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
获取资源文件</p>
<p>资源文件打包好以后，下一步是把资源文件集成到项目里。方法有两个，一个是用控制台的方式编译项目，通过加载资源文件的方式把资源加载到exe里，另外一个简单很多，就是把直接把资源文件加载到工程里，vs会根据后缀名识别出来加载的文件属于资源文件，在进行编译的时候会自动把这个文件打包到资源文件里。如果编译后发现资源文件没有加到exe文件，可以设置资源文件的属性，把Build Action的属性设置为Embedded Resource。</p>
<p>在当前项目中读取资源:</p>
<p>this.Icon = Properties.Resources.exeIcon;</p>
<p>this.Text = Resource1.String1.ToString();//主要是字符串</p>
<p>&nbsp;资源文件成功加到exe文件后，下一步就是在程序里读取资源文件。</p>
<p>ResourceManager rm = new ResourceManager(&quot;Resunce.abc&quot;, this.GetType().Assembly);</p>
<p>byte[] bit = rm.GetObject(&quot;abc&quot;) as byte[];</p>
<p>通常是创建一个ResourceManager的对象，第一个参数是资源的名字，这里要注意的是&ldquo;Resunce&rdquo;是编译的时候，组件（命名空间）名字，&ldquo;abc&rdquo;是资源文件的名字。如果前面不是通过VS的工程文件进行编译，而是通过控制台方式直接编译，那么资源的名字不需要带组件的名字，只是&ldquo;abc&rdquo;就可以了。原因吗，我估计可能是vs在进行编译的时候，带了某些参数（确定了组件名），所以在项目读取资源文件的时候需要带组件名。<br />
&nbsp;</p>]]></description>
	<pubDate>Thu, 08 Jan 2009 21:25:01 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=68</guid>

</item>
<item>
	<title>C#读写快捷方式（.lnk文件）</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=62</link>
	<description><![CDATA[<p>引用COM组件Windows Script Host Object Model；<br />
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShellClass();<br />
IWshRuntimeLibrary.IWshShortcut shortcut =(IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(&quot;c:\\a.lnk&quot;);<br />
shortcut.TargetPath = &quot;指向地址.exe&quot;;<br />
shortcut.Arguments = &quot;参数&quot;;<br />
shortcut.Description = &quot;我是快捷方式名字哦！&quot;;<br />
shortcut.Hotkey = &quot;CTRL+SHIFT+N&quot;;<br />
shortcut.IconLocation = &quot;http://www.kcvg.cn/, 0&quot;;<br />
shortcut.Save();<br />
读取也一样的，上面的几个设置都是属性。</p>]]></description>
	<pubDate>Fri, 29 May 2009 08:02:57 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=62</guid>

</item>
<item>
	<title>C# PNG图片应用为图标</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=60</link>
	<description><![CDATA[<p>最近发现我自己越来越喜欢把复杂的事情做简单了，架构师就是好，PNG图片的好处不用多说了，为了达到用户要求我想在C#项目中使用PNG，把PNG应用到任务栏，窗口栏图标当中去，但是C#好像是不提供直接使用的。于是说出想法，让代码组的人伤透脑筋，他们翻资料找微软技术网站，搜索网站，最后向我得出结论，C#里面使用PNG必须API，太不划算，要我再跟客户沟通下，我晕死？有这么复杂吗？我一看，网友解决问题的办法多了去了，什么文件流，重绘，API调用。后来我想起BMP实际上是可以透明的。又研究了下美工组做的PNG图标，都遵循了绘图标准。突发奇想，微软的老牌支持者是BMP，干脆全部按BMP格式办。</p>
<blockquote>private void Form1_Load(object sender, EventArgs e)<br />
{<br />
System.Drawing.Bitmap bp=new Bitmap(@&quot;1.ico&quot;);<br />
Icon=Icon.FromHandle(bp.GetHicon()); <br />
}</blockquote>
<p>实践证明我想法特别正确，这里是用ICO文件做测试，设置窗体图标，还可以设置任务栏图标，加上反射的代码还能动态设置应用程序图标，把ICO文件格式换成其他图片格式也能正常显示、我测试的时候使用了PNG、TIF、等，貌似支持市面上所有的图片格式文件。只要图片制作遵循标准就能保证是彩色透明的。我给代码组的人一看，全体汗颜。<br />
多说句，后来闲的没事做，研究了卡巴斯基的图标，发现卡巴斯基任务栏图标就是PNG做的，而且图标的动画就是PNG图片的重叠显示和隐藏。我汗颜了&hellip;&hellip;还有比我更省事的。</p>]]></description>
	<pubDate>Sat, 06 Dec 2008 18:12:43 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=60</guid>

</item>
<item>
	<title>C#调用php WebService</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=56</link>
	<description><![CDATA[<p>从今天开始，我要摘抄+个人理解放出php调用C# WebService&nbsp; JAVA调用C#WebService&nbsp;&hellip;&hellip;反正就是几个语言的杂交。要调用Web Service需要nusoap支持<br />
5 }<br />
在某php文件中如下写法：<br />
&nbsp;&lt;?php<br />
&nbsp;require_once('nusoap.php');<br />
&nbsp;/*架构师阿K的事。。*/<br />
&nbsp;$client = new SoapClient('http://localhost/webservice1/service1.asmx?wsdl', true);<br />
&nbsp;$str = $client-&gt;call('HelloWorld');<br />
&nbsp;if(!$err = $client-&gt;getError())<br />
&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;echo &quot;return:&quot;, $str['HelloWorldResult'];<br />
}<br />
else<br />
{<br />
&nbsp;echo &quot;error:&quot;, $err;<br />
}<br />
?&gt;<br />
第一次搞这个php代码，只能意会了<br />
这种方式不太好用，当使用PHPEclipse进行编译时，报告错误：<br />
Debug Strict (PHP 5): /LocalizationTest/nusoap.php line 6496 - Assigning the return value of new by reference is deprecated<br />
Compile Error: /LocalizationTest/nusoap.php line 7240 - Cannot redeclare class soapclient<br />
自己发现可以通过改名字的方式修改nusoap.php剔除这个错误，这样总是不方便，后来发现php5本身就支持SOAP调用Web Service:<br />
&lt;?php<br />
&nbsp;&nbsp;&nbsp; //get localization strings from C# webservice<br />
&nbsp;&nbsp;&nbsp; $client = new SoapClient('http://localhost/webservice1/Localization.asmx?wsdl');</p>
<p>&nbsp;&nbsp;&nbsp; echo &quot;Call web service method from C# WebService:\n&quot;;<br />
&nbsp;&nbsp;&nbsp; $result = $client-&gt;GetLocalizationResource();</p>
<p>&nbsp;&nbsp;&nbsp; if(!is_soap_fault($result))<br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;return:\n&quot;, $result-&gt;GetLocalizationResourceResult;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo &quot;soap call fault&quot;;<br />
&nbsp;&nbsp;&nbsp; }<br />
?&gt;</p>
<p>php soap调用的详细信息请参照<a href="http://cn2.php.net/manual/en/ref.soap.php">这里</a></p>]]></description>
	<pubDate>Thu, 04 Dec 2008 21:30:07 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=56</guid>

</item>
<item>
	<title>C#判断当前系统服务存在否</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=55</link>
	<description><![CDATA[<p><span style="font-size: smaller; background-color: #ccffcc">写Java的人觉得自己老得快，学C#的人觉得自己跟不上时代，用Php的人总说自己长得帅！<br />
为什么这么说呢？记住地址，慢慢在后面的时间分析。</span><br />
废话多说了点，今天自己做一个C#的软件，主要就是保护服务器时间的。（360时间保护器对于我来说无用）我的想法是，让时间总是正确的就是同步计算机与网络时间，系统自带有这个服务的，默认也是开启的，但是经常被病毒、黑客破坏了，所以这个项目就涉及到一个服务的判断，还是老样子，用最少代码以最适合的方式解决当前的方案。网上一大批远程修改服务的C#代码，根本用不到。另外特别感谢QQ3460472这位朋友。<br />
<blockquote>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private bool ServiceIsExisted(string serviceName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServiceController[] services = ServiceController.GetServices();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (ServiceController s in services)<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; if (s.ServiceName == serviceName)<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; return true;<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; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </blockquote>
<p>其中ServiceIsExisted是BOOL型，IF判断把服务名填充进方法就可以了。</p>]]></description>
	<pubDate>Wed, 03 Dec 2008 21:47:35 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=55</guid>

</item>
<item>
	<title>C# tabControl事件使用的误区</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=50</link>
	<description><![CDATA[<p>今天还是说关于我的项目，在判断选项卡更改时候发现这样写是居然是个死循环。贴出来看一下，顺便提醒自己！目的是判断用户是否存在，如果不存在就放置到开始的标签，return方法也不行，其实是事件写错了，应该使用SelectedIndexChanged，就只运行二次判断。看看屏幕前的你有什么更好的解决办法？</p>
<blockquote>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void tabControlMain_Deselected(object sender, TabControlEventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (DBonline.Users.UserS_name.ToString() == &quot;&quot;)<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; MessageBox.Show(&quot;判断=空的运行了。&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tabControlMain.SelectedTab = tabpageStart;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
</blockquote>
<p>&nbsp;</p>]]></description>
	<pubDate>Wed, 12 Nov 2008 12:00:00 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=50</guid>

</item>
<item>
	<title>C# dataGridView详细讲解</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=49</link>
	<description><![CDATA[<p>项目中dataGridView的判断，重绘，属性，以及获取方面的代码再次拷贝上来的，但是我搜索下发现有人比我写得更好，于是变成我学习了。。关于基础，关于重绘dataGridView讲解，收藏！<br />
这个是关于基础的讲解：<a href="http://blog.csdn.net/tangcx/archive/2007/09/12/1782297.aspx">http://blog.csdn.net/tangcx/archive/2007/09/12/1782297.aspx</a><br />
重写dataGridView的代码：<a href="http://www.cnblogs.com/ghostljj/archive/2007/10/05/914423.html">http://www.cnblogs.com/ghostljj/archive/2007/10/05/914423.html</a></p>]]></description>
	<pubDate>Tue, 11 Nov 2008 16:36:13 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=49</guid>

</item>
<item>
	<title>C# 不采用正则式过滤文本框内容的实现办法</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=48</link>
	<description><![CDATA[<p>昨天一简单方法设置快捷键，没有涉及到API的调用，适合新手，今天整理了一篇，同样是实现一个目的，用最简单方法。<br />
在定制的TextBox控件中，如果只允许输入数字，需要考虑如下三种情况：</p>
<ol>
    <li>正常按键输入的字符，包括西文、中文字符等</li>
    <li>通过键盘快捷键方式贴入的文本，即Ctrl+V操作</li>
    <li>通过上下文关联菜单的Mouse操作贴入的文本，即&rdquo;粘贴&ldquo;操作</li>
</ol>
<p>在探讨的同类文章中，多数只考虑了第1种情况，忽略得了第2、3种常见的操作。本文探讨的处理方法核心思路是重写事件OnKeyPress()和两个方法 ProcessCmdKey()与WndProc()，并把Ctrl+V、关联菜单的Paste操作统一到键盘录入操作中，从而在 OnKeyPress()屏蔽掉非数字键。&nbsp;</p>
<h2>1、重写键盘事件OnKeyPress()</h2>
<p>&nbsp;</p>
<p>键盘输入的字符可以通过重写TextBox控件的OnKeyPress()事件处理，见如下代码：</p>
<pre>
protected override void OnKeyPress(KeyPressEventArgs e)  // 屏蔽非数字键<br />{<br />    base.OnKeyPress(e);<br /><br />    if (this.ReadOnly)  // 只读, 不处理<br />    {<br />        return;<br />    }<br />        <br />    if ((int)e.KeyChar &lt;= 32)  // 特殊键(含空格), 不处理<br />    {<br />        return;<br />    }<br />    <br />    if (!char.IsDigit(e.KeyChar))  // 非数字键, 放弃该输入<br />    {<br />        e.Handled = true;<br />        return;<br />    }<br />}<br /></pre>
<p>&nbsp;</p>
<h2>2、重写命令键处理方法ProcessCmdKey()</h2>
<p>&nbsp;</p>
<p>可以在ProcessCmdKey()中捕获快捷键Ctrl+V操作。首先要清除当前的选择文本，然后读取剪切板ClipBoard中的内容，最后通过模拟键盘输入的方式&rdquo;输入&ldquo;ClipBoard的内容。需要指出，在ProcessCmdKey()方法中不能使用静态方法 SendKeys.Send()，但可以通过控件的WndProc()方法发送字符消息以达到模拟键盘录入的目的。见如下代码：</p>
<pre>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)  // 捕获Ctrl+V<br />{<br />    if (keyData == (Keys)Shortcut.CtrlV)  // 快捷键 Ctrl+V 粘贴操作<br />    {<br />        this.ClearSelection();<br /><br />        string text = Clipboard.GetText();<br />        for (int k = 0; k &lt; text.Length; k++) // can not use SendKeys.Send<br />        {<br />            // 通过消息模拟键盘输入, SendKeys.Send()静态方法不行<br />            SendCharKey(text[k]);<br />        }<br />        return true;<br />    }<br />    return base.ProcessCmdKey(ref msg, keyData);<br /><br />}<br /></pre>
<pre>
private void SendCharKey(char c)  // 通过消息模拟键盘录入<br />{<br />    Message msg = new Message();<br /><br />    msg.HWnd = this.Handle;<br />    msg.Msg = WM_CHAR;  // 输入键盘字符消息 0x0102<br />    msg.WParam = (IntPtr)c;<br />    msg.LParam = IntPtr.Zero;<br /><br />    base.WndProc(ref msg);<br />}<br /></pre>
<p>&nbsp;</p>
<h2>3、重写消息处理方法WndProc()</h2>
<p>&nbsp;</p>
<p>可以在定制TextBox控件中创建无内容的上下文菜单对象，从而屏蔽该菜单，方法是在定制控件的构造函数中增加如下代码：</p>
<pre>
public class CustomTextBox: TextBox<br />{<br />    // 创建无内容菜单对象, 等价屏蔽该控件的上下文菜单<br />    this.ContextMenu = new ConTextMenu();  <br />}<br /></pre>
<p>由于上下文菜单的Paste操作对应Windows的WM_PASTE消息，于是可以在控件的WndProc()方法中捕获该消息，然后获得剪切板 ClipBoard中的内容，最后通过SendKeys.Send()方法模拟键盘录入操作。需要注意，这里不能调用前面ProcessCmdKey() 中模拟键盘输入函数SendCharKey()。见如下代码：</p>
<pre>
protected override void WndProc(ref Message m)  // 捕获Mouse的Paste消息<br />{<br />    if (m.Msg == WM_PASTE)  // 选择上下文菜单的&quot;粘贴&quot;操作<br />    {<br />        this.ClearSelection();<br />        SendKeys.Send(Clipboard.GetText());  // 模拟键盘输入<br />    }<br />    else<br />    {<br />        base.WndProc(ref m);<br />    }<br />}<br /></pre>
<p>&nbsp;</p>
<h2>4、消除选择ClearSelection()、删除字符DeleteText()</h2>
<p>&nbsp;</p>
<p>还必须分析前面代码中的两个函数：</p>
<ul>
    <li>ClearSelection()用以清除当前的选择文本，即清除this.SelectedText</li>
    <li>DeleteText()则删除当前字符</li>
</ul>
<p>需要指出其中的技巧，就是转换Delete键操作为BackSpace操作。此外，函数DeleteText()还需要确定当前的this.SelectionStart值。具体代码如下：</p>
<pre>
private void ClearSelection() // 清除当前TextBox的选择<br />{<br />    if (this.SelectionLength == 0)<br />    {<br />        return;<br />    }<br /><br />    int selLength = this.SelectedText.Length;<br />    this.SelectionStart += this.SelectedText.Length;  // 光标在选择之后<br />    this.SelectionLength = 0;<br /><br />    for (int k = 1; k &lt;= selLength; k++)<br />    {<br />        this.DeleteText(Keys.Back);<br />    }<br />}<br /></pre>
<pre>
private void DeleteText(Keys key) // 删除字符并计算SelectionStart值<br />{<br />    int selStart = this.SelectionStart;<br /><br />    if (key == Keys.Delete)  // 转换Delete操作为BackSpace操作<br />    {<br />        selStart += 1;<br />        if (selStart &gt; base.Text.Length)<br />        {<br />            return;<br />        }<br />    }<br /><br />    if (selStart == 0 || selStart &gt; base.Text.Length)  // 不需要删除<br />    {<br />        return;<br />    }<br /><br />    if (selStart == 1 &amp;&amp; base.Text.Length == 1)<br />    {<br />        base.Text = &quot;&quot;;<br />        base.SelectionStart = 0;<br />    }<br />    else  // selStart &gt; 0<br />    {<br />        base.Text = base.Text.Substring(0, selStart - 1) +<br />            base.Text.Substring(selStart, base.Text.Length - selStart);<br />        base.SelectionStart = selStart - 1;<br />    }<br />}<br /></pre>
<p>&nbsp;</p>
<h2>5、结语</h2>
<p>&nbsp;</p>
<p>本文探讨的是TextBox控件输入的事前处理模式，即在输入字符的同时屏蔽非数字键。在实际应用中一般采取事后处理模式，即在TextBox控件的Exit、Validate等事件中进行输入后处理&mdash;&mdash;离开该控时进行验证。但事后处理模式有如下不足：</p>
<ul>
    <li>与数据源绑定时输入非数字字符可能抛出异常，需要考虑异常捕获</li>
    <li>需要判断数据并给出错误提示等处理</li>
</ul>
<p>&nbsp;</p>
<p>这里探讨的是屏蔽非数字键输入，显然可以推广到屏蔽其它特殊键如Tab和指定字母等。</p>]]></description>
	<pubDate>Mon, 10 Nov 2008 12:10:59 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=48</guid>

</item>
<item>
	<title>C#无API调用设置窗体快捷键</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=47</link>
	<description><![CDATA[<p>今天做一个C# Winfrom窗口项目，对于客户来说已经算很完善了，但是我闲着把所有快捷键完全写了一遍，网上说要什么API才能完成快捷键，但是分析了需求以后只要不涉及系统键位的情况，C#的一个判断句就可以了，这里摘抄我程序里面一个快捷键响应的条件，并且翻译了条件。对于新手来说是非常有效的解决方案。
<blockquote>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void Index_KeyDown(object sender, KeyEventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (e.Control &amp;&amp; e.KeyCode == Keys.Enter &amp;&amp; linkLabelUserout.Visible == true || e.Alt &amp;&amp; e.KeyCode == Keys.L &amp;&amp; linkLabelUserout.Visible == true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //方法e按了ctrl并且方法e按了键盘的确认键并且这个控件的可见值是真 或者 方法e按了ALT键并且方法e按了键盘的 L并且这个控件的可见值是真&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//白话文就是： linkLabelUserout属性为可见的时候 使用者按了键盘的CTRL+ENTER或者按了ALT+L组合键；<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; Logoff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(&quot;注销成功&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Handled = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<p>&nbsp;</p>
</blockquote>
<p>&nbsp;</p>]]></description>
	<pubDate>Sun, 09 Nov 2008 18:36:58 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=47</guid>

</item>
<item>
	<title>C# tabControl灵活控制显示</title>
	<link>http://www.kcvg.cn/?action=showlog&amp;gid=42</link>
	<description><![CDATA[<p>很多人都希望用C# tabControl的显示与取消实现某种效果，但是微软的官方是不建议控制tabControl中的tabpage的也不建议重绘，这就造成做项目遇到困难。我们这里有几个高级程序员用C#写API也很不错，但是我还是保持我的风格，毕竟我是他们的老大，架构师嘛。O(&cap;_&cap;)O，我告诉他们寻找最简单方法，副作用不是没有，不过对于不是高深的应用副作用不是问题，毕竟不需要重绘。看代码。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void Index_Load(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //tabcontrol.TabPages.RemoveAt(tabPageSet);&nbsp;//把焦点放置在哪？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tabControlMain.TabPages.Remove(tabPageSet); //移除标签页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabControlMain.TabPages.Add(tabPageSet); //添加标签页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tabControlMain.SelectedTab == tabpageStart) //判断标签页的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
这四行代码如果使用，那么请不要再去判断标签页的索引了，因为索引会完全打乱，而且再次填充标签页的时候请做一个判断，因为同样标签页可以反复添加。<br />
就这样吧，简单的东西解决相对复杂的问题。我觉得有能力写重绘也不错。</p>]]></description>
	<pubDate>Thu, 23 Oct 2008 20:21:15 +0800</pubDate>
	<author>Kcvg</author>
	<guid>http://www.kcvg.cn/?action=showlog&amp;gid=42</guid>

</item></channel>
</rss>