﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-yesry</title><link>http://www.cnblogs.com/yesry/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 04 Jul 2009 18:49:05 GMT</lastBuildDate><pubDate>Sat, 04 Jul 2009 18:49:05 GMT</pubDate><ttl>60</ttl><item><title>VC的强大 + ExtJS的漂亮 + (MySQL+SQlite)数据库 + JavaScript的动态语言的灵活</title><link>http://www.cnblogs.com/yesry/archive/2009/05/12/1454557.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Mon, 11 May 2009 17:12:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2009/05/12/1454557.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1454557.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2009/05/12/1454557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1454557.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1454557.html</trackback:ping><description><![CDATA[<p><img src="http://pic002.cnblogs.com/img/yesry/200905/2009051200492287.jpg" /></p>
<p>界面不用多说了吧。喜欢的举手！</p>
<p>这里贴一下数据库访问和ExtJs制作表格的方法</p>
<p>1 访问SQLite 3:</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;get_sqlite3_data()<br />{<br />&nbsp;&nbsp;d</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Array();<br /><br />&nbsp;&nbsp;q</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SELECT&nbsp;*&nbsp;FROM&nbsp;test_table;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;db.query(q);<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(db.fetch())<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;idx</span><span style="color: #000000;">=</span><span style="color: #000000;">db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">idx</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000;">=</span><span style="color: #000000;">db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;email</span><span style="color: #000000;">=</span><span style="color: #000000;">db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">email</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Array(idx,name,email);<br />&nbsp;&nbsp;&nbsp;&nbsp;d.push(a);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;d;<br />}<br /></span></div>
<p>
2 访问MySQL</p>
<p>&nbsp;</p>
<p>2.1 JavaScript部分</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;get_myssql_data(host,user,pwd)<br />{<br />&nbsp;&nbsp;create_mysql_data(host,user,pwd);<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">php=dvm.GetSharedObject("php");alert(php.get_output_string());</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;d</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Array();<br /><br />&nbsp;&nbsp;q</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">SELECT&nbsp;*&nbsp;FROM&nbsp;MyMatters;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;mysql_db.query(q);<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(mysql_db.fetch())<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;Name</span><span style="color: #000000;">=</span><span style="color: #000000;">mysql_db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">Name</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;Amount</span><span style="color: #000000;">=</span><span style="color: #000000;">mysql_db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">Amount</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;Describe</span><span style="color: #000000;">=</span><span style="color: #000000;">mysql_db.get_array_data(</span><span style="color: #000000;">"</span><span style="color: #000000;">Description</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Array(Name,Amount,Describe);<br />&nbsp;&nbsp;&nbsp;&nbsp;d.push(a);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;d;<br />}<br /></span></div>
<p>
2.2 PHP部分</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">class</span><span style="color: #000000;">&nbsp;MySQLAccess<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$db</span><span style="color: #000000;">;<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$query_result</span><span style="color: #000000;">;<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$row_array</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;open(</span><span style="color: #800080;">$host</span><span style="color: #000000;">,</span><span style="color: #800080;">$user</span><span style="color: #000000;">,</span><span style="color: #800080;">$pwd</span><span style="color: #000000;">){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">db</span><span style="color: #000000;">=</span><span style="color: #008080;">mysql_connect</span><span style="color: #000000;">(</span><span style="color: #800080;">$host</span><span style="color: #000000;">,</span><span style="color: #800080;">$user</span><span style="color: #000000;">,</span><span style="color: #800080;">$pwd</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">die($this-&gt;db);</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">mysql_select_db</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">test</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">$this-&gt;query("CREATE&nbsp;TABLE&nbsp;MyMatters(Name&nbsp;varchar(30),Amount&nbsp;int,Kind&nbsp;varchar(16),BuySelf&nbsp;int,Description&nbsp;varchar(255))");<br />&nbsp;&nbsp;&nbsp;&nbsp;//die(mysql_errno($this-&gt;db)&nbsp;.&nbsp;":&nbsp;"&nbsp;.&nbsp;mysql_error($this-&gt;db));</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;close(){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080;">mysql_close</span><span style="color: #000000;">(</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">db);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;query(</span><span style="color: #800080;">$sql</span><span style="color: #000000;">){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">query_result</span><span style="color: #000000;">=</span><span style="color: #008080;">mysql_query</span><span style="color: #000000;">(</span><span style="color: #800080;">$sql</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">echo($this-&gt;query_result);</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;fetch(){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">row_array</span><span style="color: #000000;">=</span><span style="color: #008080;">mysql_fetch_assoc</span><span style="color: #000000;">(</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">query_result);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">row_array)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">false</span><span style="color: #000000;">;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;get_array_data(</span><span style="color: #800080;">$field_name</span><span style="color: #000000;">){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">row_array[</span><span style="color: #800080;">$field_name</span><span style="color: #000000;">];<br />&nbsp;&nbsp;}<br />}<br /></span></div>
<p>&nbsp;</p>
<p>3 用ExtJs产生表格显示数据</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;show_mysql_data(mysql_data_panel,my_data,host,user,pwd)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;xg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Ext.grid;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;shared&nbsp;reader</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Ext.data.ArrayReader({},&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Idx</span><span style="color: #000000;">'</span><span style="color: #000000;">},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Name</span><span style="color: #000000;">'</span><span style="color: #000000;">},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Email</span><span style="color: #000000;">'</span><span style="color: #000000;">}<br />&nbsp;&nbsp;&nbsp;&nbsp;]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">//////////////////////////////////////////////////////////////////////////////////////</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;Grid&nbsp;1</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">//////////////////////////////////////////////////////////////////////////////////////</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;grid1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;xg.GridPanel({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store:&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Ext.data.Store({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader:&nbsp;reader,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;my_data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm:&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;xg.ColumnModel([<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id:</span><span style="color: #000000;">'</span><span style="color: #000000;">Idx</span><span style="color: #000000;">'</span><span style="color: #000000;">,header:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">名称</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;width:&nbsp;</span><span style="color: #000000;">3</span><span style="color: #000000;">,&nbsp;sortable:&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">,&nbsp;dataIndex:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Idx</span><span style="color: #000000;">'</span><span style="color: #000000;">},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{header:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">数量</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;width:&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;sortable:&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">,&nbsp;dataIndex:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Name</span><span style="color: #000000;">'</span><span style="color: #000000;">},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{header:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">描述</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;width:&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;sortable:&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">,&nbsp;dataIndex:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Email</span><span style="color: #000000;">'</span><span style="color: #000000;">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;viewConfig:&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;forceFit:</span><span style="color: #0000FF;">true</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;</span><span style="color: #000000;">600</span><span style="color: #000000;">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;</span><span style="color: #000000;">300</span><span style="color: #000000;">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collapsible:&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animCollapse:&nbsp;</span><span style="color: #0000FF;">false</span><span style="color: #000000;">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">MySQL&nbsp;数据&nbsp;:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">+</span><span style="color: #000000;">host</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">user</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;-&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">pwd,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iconCls:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">icon-grid</span><span style="color: #000000;">'</span><span style="color: #000000;">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;renderTo:&nbsp;mysql_data_panel<br />&nbsp;&nbsp;&nbsp;&nbsp;});<br />}<br /><br /></span></div>
<p>&nbsp;</p>
<p><a href="http://files.cnblogs.com/yesry/ExtJs.zip">下载</a></p><img src ="http://www.cnblogs.com/yesry/aggbug/1454557.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>通过桥接器，Java调用任何DLL</title><link>http://www.cnblogs.com/yesry/archive/2009/03/15/1412654.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Sun, 15 Mar 2009 13:41:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2009/03/15/1412654.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1412654.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2009/03/15/1412654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1412654.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1412654.html</trackback:ping><description><![CDATA[<p>大家知道，Java调用DLL有个特别的地方，就是DLL的输出函数需要特别的名字：<br />JNIEXPORT void JNICALL <span style="color: #ff0000;">Java_</span>类名_函数名<br />&nbsp; (JNIEnv *, jclass, 其他参数)</p>
<p>{</p>
<p>}</p>
<p>总是要求DLL函数有 <span style="color: #ff0000;">Java_ <span style="color: #000000;">开头，</span></span>调用USER32.DLL中的 GetWindowText 那要怎么做呢？直接调用是不可能的了，下面介绍通过桥接器，实现Java调用任何API，或者类似API的任何DLL的方法。</p>
<p>先看运行效果：<br /><img src="http://pic002.cnblogs.com/img/yesry/200903/2009031521203318.jpg" /></p>
<p>这是把 JFrame 通过 API 中的 <span style="color: #000000;">SetWindowRgn 函数改变成圆角窗口。<br /></span></p>
<p>这个桥接器的准备工作可以参考VC写的<a href="http://duceland.com/Widgets/DucelandWidgetsEngine_src.zip">源代码</a>。这里主要介绍的是Java部分的代码：</p>
<p>1 API 部分</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">class</span><span style="color: #000000;">&nbsp;MyAPI{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&nbsp;dobject4j&nbsp;os_api</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject4j(</span><span style="color: #000000;">"</span><span style="color: #000000;">OSAPI</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">static</span><span style="color: #000000;">&nbsp;dValue&nbsp;GetWindowText(dValue&nbsp;hWnd){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dobject4j&nbsp;param</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject4j(</span><span style="color: #000000;">"</span><span style="color: #000000;">ApiParams</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param.invoke(</span><span style="color: #000000;">"</span><span style="color: #000000;">AppendHandlePointer</span><span style="color: #000000;">"</span><span style="color: #000000;">,hWnd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param.invoke(</span><span style="color: #000000;">"</span><span style="color: #000000;">AllocAsciiStringBuffer</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">260</span><span style="color: #000000;">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param.invoke(</span><span style="color: #000000;">"</span><span style="color: #000000;">AppendUnsignedLong</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">260</span><span style="color: #000000;">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os_api.invoke(</span><span style="color: #000000;">"</span><span style="color: #000000;">CallOSAPI</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">USER32.DLL</span><span style="color: #000000;">"</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">GetWindowTextA</span><span style="color: #000000;">"</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(param));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;param.invoke(</span><span style="color: #000000;">"</span><span style="color: #000000;">ReadAsciiString</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">4</span><span style="color: #000000;">));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #000000;"></span><span style="color: #0000FF;">static</span><span style="color: #000000;"> </span><span style="color: #000000;">dValue SetWindowRgn(dValue hWnd,dValue hRgn,dValue bRedraw){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;dobject4j param=</span><span style="color: #000000;"></span><span style="color: #0000FF;">new</span><span style="color: #000000;"> </span><span style="color: #000000;">dobject4j("ApiParams");<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;param.invoke("AppendHandlePointer",hWnd);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;param.invoke("AppendHandlePointer",hRgn);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;param.invoke("AppendUnsignedLong",bRedraw);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;dValue ret=os_api.invoke("CallOSAPI",</span><span style="color: #000000;"></span><span style="color: #0000FF;">new</span><span style="color: #000000;"> </span><span style="color: #000000;">dValue("USER32.DLL"),</span><span style="color: #000000;"></span><span style="color: #0000FF;">new</span><span style="color: #000000;"> </span><span style="color: #000000;">dValue("SetWindowRgn"),</span><span style="color: #000000;"></span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;"> dValue(param));<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;param=null;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><span style="color: #000000;"></span><span style="color: #0000FF;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">ret;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF;"></span><span style="color: #000000;">//其他API的代码可以<a href="http://duceland.com/Widgets/detail.asp?id=31">下载</a>后看看。下载的.dwidget文件是zip格式的，改名.zip解压后即可。<br />}<br /></span></div>
<p>&nbsp;</p>
<p>2 应用实现部分</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;StartupMe(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;JFrame(</span><span style="color: #000000;">"</span><span style="color: #000000;">Swing&nbsp;Application</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ................<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createComponents(frame);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setLocation(</span><span style="color: #000000;">300</span><span style="color: #000000;">,</span><span style="color: #000000;">220</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setSize(</span><span style="color: #000000;">300</span><span style="color: #000000;">,</span><span style="color: #000000;">130</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;title</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">round&nbsp;JFrame</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setTitle(title);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setVisible(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ................<br />
<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dValue&nbsp;desktop</span><span style="color: #000000;">=</span><span style="color: #000000;">MyAPI.GetDesktopWindow();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dValue&nbsp;h</span><span style="color: #000000;">=</span><span style="color: #000000;">MyAPI.FindWindowEx(desktop,</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">javax.swing.JFrame</span><span style="color: #000000;">"</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(title));<br /></span><span style="color: #008000;"></span><span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dValue&nbsp;hParentRgn</span><span style="color: #000000;">=</span><span style="color: #000000;">MyAPI.CreateRoundRectRgn(</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">13</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">3</span><span style="color: #000000;">),<br /></span><span style="color: #0000FF;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">290</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">120</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">15</span><span style="color: #000000;">),</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #000000;">15</span><span style="color: #000000;">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyAPI.SetWindowRgn(h,hParentRgn,</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dValue(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyAPI.DeleteObject(hParentRgn);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div>
<p>&nbsp;</p>
<p>桥接器的2个重要的类分别是<span style="color: #000000;"></span><span style="color: #000000;"> OSAPI</span><span style="color: #000000;"></span> 和 <span style="color: #000000;"></span><span style="color: #000000;">ApiParams</span><span style="color: #000000;">。</span><span style="color: #000000;">OSAPI</span><span style="color: #000000;"></span> 负责API的调用实现，<span style="color: #000000;"></span><span style="color: #000000;">ApiParams</span><span style="color: #000000;"> 负责参数组织。</span><span style="color: #000000;"></span><span style="color: #000000;"></span><span style="color: #000000;">OSAPI</span><span style="color: #000000;"></span> <span style="color: #000000;">的 CallOSAPI</span><span style="color: #000000;"> 方法 第一个参数是DLL文件名，像上述的USER32.DLL，第二个参数是方法的名字，要注意的是，Windows API 很多是区分 ANSI 和 Unicode ，就像我们熟悉的GetWindowText() 就分别有</span><span style="color: #000000;">GetWindowTextA</span><span style="color: #000000;">() </span><span style="color: #000000;">和</span><span style="color: #000000;">GetWindowTextW</span><span style="color: #000000;">() </span><span style="color: #000000;">两个对应于 ANSI 和 Unicode ，第三个参数是API的参数。</span><span style="color: #000000;"></span><span style="color: #000000;">ApiParams</span><span style="color: #000000;"> 的方法有很多，都是支持各种类型参数用的，例如 AppendUnsignedLong</span><span style="color: #000000;">() </span><span style="color: #000000;"> </span><span style="color: #000000;">方法支持 DWORD 类型，AppendHandlePointer</span><span style="color: #000000;">() </span><span style="color: #000000;"> 支持各种句柄。</span><span style="color: #000000;"></span><span style="color: #000000;"></span><span style="color: #000000;">ApiParams</span><span style="color: #000000;">还可以嵌套，用 AppendStructurePointer</span><span style="color: #000000;">() </span><span style="color: #000000;"> 方法支持嵌套结构体指针，用 AppendStructure</span><span style="color: #000000;">()&nbsp;</span><span style="color: #000000;"> </span><span style="color: #000000;">方法</span><span style="color: #000000;"></span>支持嵌套结构体，等等。</p>
<p>点击<a href="http://duceland.com/Widgets/detail.asp?id=31">这里</a>仅下载本例代码，下载后的.dwidget改名.zip文件解压即可</p>
<p>点击<a href="http://duceland.com/Widgets/DucelandWidgetsEngine.zip">这里</a>下载整个运行程序</p>
<p>点击<a href="http://duceland.com/Widgets/DucelandWidgetsEngine_src.zip">这里</a>下载这个IE内核浏览器源代码（不含msscript.ocx调用机制部分源代码，这部分是DLL形式提供的）</p><img src ="http://www.cnblogs.com/yesry/aggbug/1412654.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>学生的福音：做错之题管理</title><link>http://www.cnblogs.com/yesry/archive/2009/02/19/1393721.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Thu, 19 Feb 2009 02:43:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2009/02/19/1393721.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1393721.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2009/02/19/1393721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1393721.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1393721.html</trackback:ping><description><![CDATA[<p>本程序管理学生在测验考试中做错的题目。通常建议做错的题目在7天内重新做对它，然后过14天左右再看一遍，则下次再错的几率小于10%，这是上个世纪测算所得出的人类遗忘曲线时间表，本世纪也许有些变快，每个人也会有些差异。 
</p>
<p>&nbsp;</p>
<p>管理这些题目有以下好处：<br />1 修补学习中的漏洞<br />2 为战胜困难提供方法<br />3 增强战胜困难的信心<br />4 提高成绩<br />5 
减少无用的重复学习</p>
<p>&nbsp;</p>
<p>对于大多数测验考试成绩在60~90分上下的同学来说非常有用。因为很多同学对于已经学会的东西经常由于老师的安排重复练习， 
而不会做的部分没有得到加强复习，总体效果欠佳。低于60分的同学需要的是特补，本程序没什么帮助。高于90分的同学已经有自己的一套好方法，不需要这个方法。</p>
<p>&nbsp;</p>
<p>以下是界面</p>
<p><img src="http://pic002.cnblogs.com/img/yesry/200902/2009021910425295.jpg" /></p>
<p>点击<a href="http://files.cnblogs.com/yesry/WrongSubject.zip">这里</a>下载整个运行程序</p><img src ="http://www.cnblogs.com/yesry/aggbug/1393721.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Google 和 baidu 搜索结果二次加工</title><link>http://www.cnblogs.com/yesry/archive/2009/02/18/1390908.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Wed, 18 Feb 2009 06:06:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2009/02/18/1390908.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1390908.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2009/02/18/1390908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1390908.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1390908.html</trackback:ping><description><![CDATA[摘要: IE内核的浏览器中，js嵌入比较方便，只要通过函数execScript就可以在网页中插入JS代码，然后进一步进行操作。本例通过提取搜索结果中的URL，发现 Google 和 baidu 指向同一个地址，则提取出来。对有效的搜索结果还可以加以记录，以便以后再有同样的搜索就能先找到之前搜集的有效结果，大大提高搜索效率。下图一目了然地展示了其中的功能不过，这些方便简单的功能要编写代码也着实花去不少功夫。&nbsp;&nbsp;<a href='http://www.cnblogs.com/yesry/archive/2009/02/18/1390908.html'>阅读全文</a><img src ="http://www.cnblogs.com/yesry/aggbug/1390908.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>键鼠模拟的妙用</title><link>http://www.cnblogs.com/yesry/archive/2009/01/16/1375792.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Fri, 16 Jan 2009 02:51:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2009/01/16/1375792.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1375792.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2009/01/16/1375792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1375792.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1375792.html</trackback:ping><description><![CDATA[<p><span style="color: #ff0000;"><b>妙用一：外挂或远程控制</b></span></p>
<p>可以预想，外挂和远程控制会用到键鼠模拟功能。尤其是外挂，很多键鼠模拟精灵软件都支持脚本。</p>
<p><span style="color: #ff0000;"><b>妙用二：黑盒测试工具</b></span></p>
<p>用录制或者用户编写的脚本，执行的时候会用到键鼠模拟功能。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><b>妙用三：登录web邮箱发信</b></span></p>
<p><span style="font-size: small;">
<p>上述用处已经是众所周知的了，本功能这才是本文的重点。</p>
<p>下面的代码先打开mail.163.com，然后用脚本模拟鼠标和键盘行为，做这样的步骤：</p>
<p>1移动鼠标到用户名的地方按下，模拟键盘打入用户名</p>
<p>2移动鼠标到密码的地方按下，模拟键盘打入密码</p>
<p>3移动鼠标到登录按钮的地方按下，然后等待8秒</p>
<p>4移动鼠标到写信按钮的地方按下，等待1秒钟，让浏览器处理一下</p>
<p>5然后依次类推打入收件人，主体，信件内容等等。</p>
<p>6最后鼠标移动到发送按钮的地方按下，完成全部过程。</p>
<p>&nbsp;</p>
</span></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_171405" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_171405').style.display='none'; document.getElementById('Code_Open_Image_171405').style.display='inline'; document.getElementById('Code_Open_Text_171405').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top" width="11" height="16" /><img id="Code_Open_Image_171405" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_171405').style.display='none'; getElementById('Code_Closed_Image_171405').style.display='inline'; getElementById('Code_Closed_Text_171405').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" width="11" height="16" /><span id="Code_Closed_Text_171405" class="cnblogs_code_Collapse">脚本代码在这里</span><span id="Code_Open_Text_171405" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">WindowsAPI.js</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />System.ExecuteScriptFile(System.GetAppPath()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">SystemDB.php</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">PHP</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /><br /></span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;Browser_OnClose()<br />{<br />&nbsp;System.Exit();<br />}<br /><br /></span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;browser;<br /></span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;receiver_name;<br /></span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;receiver_mail;<br /></span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;account_name;<br /></span><span style="color: #0000FF;">var</span><span style="color: #000000;">&nbsp;account_pwd;<br /><br />logined</span><span style="color: #000000;">=</span><span style="color: #0000FF;">false</span><span style="color: #000000;">;<br /><br /></span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;Browser_OnNavigateComplete2(url)<br />{<br />&nbsp;Output.println(url);<br />&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(logined)<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">;<br /><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">鼠标跳到email位置</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">580</span><span style="color: #000000;">,</span><span style="color: #000000;">185</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;System.SendInputText(account_name);<br />&nbsp;System.ProcessMessages();<br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">鼠标跳到密码</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">580</span><span style="color: #000000;">,</span><span style="color: #000000;">230</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;System.SendInputText(account_pwd);<br />&nbsp;Sleep(</span><span style="color: #000000;">1220</span><span style="color: #000000;">);<br />&nbsp;System.ProcessMessages();<br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">按登录按钮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">585</span><span style="color: #000000;">,</span><span style="color: #000000;">360</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;<br />&nbsp;logined</span><span style="color: #000000;">=</span><span style="color: #0000FF;">true</span><span style="color: #000000;">;<br />&nbsp;<br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">若干秒后点击写信</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;setTimeout(</span><span style="color: #000000;">"</span><span style="color: #000000;">点击写信();</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">10000</span><span style="color: #000000;">);<br />}<br /><br /></span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;点击写信()<br />{<br />&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">130</span><span style="color: #000000;">,</span><span style="color: #000000;">105</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;<br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">若干秒后写信内容</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;setTimeout(</span><span style="color: #000000;">"</span><span style="color: #000000;">写信内容();</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">1000</span><span style="color: #000000;">);<br />}<br /></span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;写信内容()<br />{<br />&nbsp;System.SendInputControlKeyDown(</span><span style="color: #000000;">0x1B</span><span style="color: #000000;">,</span><span style="color: #000000;">0x01</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">VK_ESCAPE&nbsp;key&nbsp;down</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.SendInputControlKeyUp(</span><span style="color: #000000;">0x1B</span><span style="color: #000000;">,</span><span style="color: #000000;">0x01</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">VK_ESCAPE&nbsp;key&nbsp;up</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">跳到收件人</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">330</span><span style="color: #000000;">,</span><span style="color: #000000;">175</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;receiver</span><span style="color: #000000;">=</span><span style="color: #000000;">receiver_name</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">receiver_mail</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />&nbsp;System.SendInputText(receiver);<br /><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">跳到主题</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">330</span><span style="color: #000000;">,</span><span style="color: #000000;">205</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;s</span><span style="color: #000000;">=</span><span style="color: #000000;">subject.replace(</span><span style="color: #000000;">"</span><span style="color: #000000;">[receiver_name]</span><span style="color: #000000;">"</span><span style="color: #000000;">,receiver_name);<br />&nbsp;System.SendInputText(s);<br /><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">跳到信件内容</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">270</span><span style="color: #000000;">,</span><span style="color: #000000;">295</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br />&nbsp;c</span><span style="color: #000000;">=</span><span style="color: #000000;">content.replace(</span><span style="color: #000000;">"</span><span style="color: #000000;">[receiver_name]</span><span style="color: #000000;">"</span><span style="color: #000000;">,receiver_name);<br />&nbsp;System.SendInputText(c);<br /><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">点击发送按钮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;System.GotoPos(browser.GetHandle(),</span><span style="color: #000000;">280</span><span style="color: #000000;">,</span><span style="color: #000000;">816</span><span style="color: #000000;">);<br />&nbsp;System.DoMouseDown();<br />&nbsp;System.DoMouseUp();<br /><br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">循环下一封，若干秒后点击写信</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">setTimeout("点击写信();",8000);</span><span style="color: #008000;"><br /></span><span style="color: #000000;">}<br /><br />Screen</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TScreen</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /><br />browser</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">MiniBrowser</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />browser.SetNoMenu();<br />browser.OnClose</span><span style="color: #000000;">=</span><span style="color: #000000;">Browser_OnClose;<br />browser.SetPosition(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">940</span><span style="color: #000000;">,</span><span style="color: #000000;">870</span><span style="color: #000000;">);<br />browser.Show();<br />browser.OnNavigateComplete2</span><span style="color: #000000;">=</span><span style="color: #000000;">Browser_OnNavigateComplete2;<br /><br />Output</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">Output</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />Output.SetPosition(</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">870</span><span style="color: #000000;">,Screen.WorkAreaWidth,</span><span style="color: #000000;">80</span><span style="color: #000000;">);<br />Output.Show();<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">从文件获得标题</span><span style="color: #008000;"><br /></span><span style="color: #000000;">fs</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;ActiveXObject(</span><span style="color: #000000;">"</span><span style="color: #000000;">Scripting.FileSystemobject</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />fn</span><span style="color: #000000;">=</span><span style="color: #000000;">System.GetWidgetPath()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">subject.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">if</span><span style="color: #000000;">(fs.FileExists(fn))<br />{<br />&nbsp;ts</span><span style="color: #000000;">=</span><span style="color: #000000;">fs.OpenTextFile(fn);<br />&nbsp;subject</span><span style="color: #000000;">=</span><span style="color: #000000;">ts.ReadLine();<br />&nbsp;ts.Close();<br />&nbsp;ts</span><span style="color: #000000;">=</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br />}<br />fn</span><span style="color: #000000;">=</span><span style="color: #000000;">System.GetWidgetPath()</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">content.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">if</span><span style="color: #000000;">(fs.FileExists(fn))<br />{<br />&nbsp;ts</span><span style="color: #000000;">=</span><span style="color: #000000;">fs.OpenTextFile(fn);<br />&nbsp;content</span><span style="color: #000000;">=</span><span style="color: #000000;">ts.ReadAll();<br />&nbsp;ts.Close();<br />&nbsp;ts</span><span style="color: #000000;">=</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br />}<br />fs</span><span style="color: #000000;">=</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br /><br /></span><span style="color: #0000FF;">function</span><span style="color: #000000;">&nbsp;ShowModal_InputAccount()<br />{<br />&nbsp;form</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TForm</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000FF;">null</span><span style="color: #000000;">);<br />&nbsp;form.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">163&nbsp;Web&nbsp;邮箱鼠键模拟发邮件</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;form.Width</span><span style="color: #000000;">=</span><span style="color: #000000;">350</span><span style="color: #000000;">;<br />&nbsp;form.Height</span><span style="color: #000000;">=</span><span style="color: #000000;">230</span><span style="color: #000000;">;<br />&nbsp;form.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">(Screen.WorkAreaWidth</span><span style="color: #000000;">-</span><span style="color: #000000;">form.Width)</span><span style="color: #000000;">/</span><span style="color: #000000;">2;</span><span style="color: #000000;"><br /></span><span style="color: #000000;">&nbsp;form.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">(Screen.WorkAreaHeight</span><span style="color: #000000;">-</span><span style="color: #000000;">form.Height)</span><span style="color: #000000;">/</span><span style="color: #000000;">2;</span><span style="color: #000000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;<br />&nbsp;label_account</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TLabel</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;label_account.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;label_account.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">11</span><span style="color: #000000;">;<br />&nbsp;label_account.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br />&nbsp;label_account.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">163邮箱帐号</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;<br />&nbsp;edit_account</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TEdit</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;edit_account.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;edit_account.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">85</span><span style="color: #000000;">;<br />&nbsp;edit_account.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br />&nbsp;&nbsp;<br />&nbsp;label_pwd</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TLabel</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;label_pwd.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;label_pwd.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">11</span><span style="color: #000000;">;<br />&nbsp;label_pwd.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">40</span><span style="color: #000000;">;<br />&nbsp;label_pwd.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">密码：</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;<br />&nbsp;edit_pwd</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TEdit</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;edit_pwd.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;edit_pwd.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">85</span><span style="color: #000000;">;<br />&nbsp;edit_pwd.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">40</span><span style="color: #000000;">;<br /><br />&nbsp;label_receiver</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TLabel</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;label_receiver.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;label_receiver.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">11</span><span style="color: #000000;">;<br />&nbsp;label_receiver.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">70</span><span style="color: #000000;">;<br />&nbsp;label_receiver.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">接收者姓名</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;<br />&nbsp;edit_receiver</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TEdit</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;edit_receiver.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;edit_receiver.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">85</span><span style="color: #000000;">;<br />&nbsp;edit_receiver.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">70</span><span style="color: #000000;">;<br />&nbsp;&nbsp;<br />&nbsp;label_email</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TLabel</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;label_email.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;label_email.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">11</span><span style="color: #000000;">;<br />&nbsp;label_email.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">110</span><span style="color: #000000;">;<br />&nbsp;label_email.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">接收者email</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />&nbsp;<br />&nbsp;edit_email</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TEdit</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;edit_email.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;edit_email.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">85</span><span style="color: #000000;">;<br />&nbsp;edit_email.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">110</span><span style="color: #000000;">;<br /><br />&nbsp;btn</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #000000;">"</span><span style="color: #000000;">TSpeedButton</span><span style="color: #000000;">"</span><span style="color: #000000;">,form);<br />&nbsp;btn.OnClick</span><span style="color: #000000;">=</span><span style="color: #0000FF;">function</span><span style="color: #000000;">(Sender){form.ModalResult</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;};<br />&nbsp;btn.Parent</span><span style="color: #000000;">=</span><span style="color: #000000;">form;<br />&nbsp;btn.Top</span><span style="color: #000000;">=</span><span style="color: #000000;">140</span><span style="color: #000000;">;<br />&nbsp;btn.Width</span><span style="color: #000000;">=</span><span style="color: #000000;">65</span><span style="color: #000000;">;<br />&nbsp;btn.Height</span><span style="color: #000000;">=</span><span style="color: #000000;">26</span><span style="color: #000000;">;<br />&nbsp;btn.Left</span><span style="color: #000000;">=</span><span style="color: #000000;">22</span><span style="color: #000000;">;<br />&nbsp;btn.Caption</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">开始</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br /><br />&nbsp;mr</span><span style="color: #000000;">=</span><span style="color: #000000;">form.ShowModal();<br />&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(mr</span><span style="color: #000000;">==</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;receiver_name</span><span style="color: #000000;">=</span><span style="color: #000000;">edit_receiver.Text;<br />&nbsp;&nbsp;&nbsp;receiver_mail</span><span style="color: #000000;">=</span><span style="color: #000000;">edit_email.Text;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;account_name</span><span style="color: #000000;">=</span><span style="color: #000000;">edit_account.Text;<br />&nbsp;&nbsp;&nbsp;account_pwd</span><span style="color: #000000;">=</span><span style="color: #000000;">edit_pwd.Text;<br /><br />&nbsp;&nbsp;&nbsp;browser.SetTopmost();<br />&nbsp;&nbsp;&nbsp;browser.Navigate2(</span><span style="color: #000000;">"</span><span style="color: #000000;">http://mail.163.com</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;Output.SetTopmost();<br />&nbsp;}</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;System.Exit();<br />&nbsp;}<br />}<br /><br />ShowModal_InputAccount();<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">以上代码需要在&nbsp;Duceland&nbsp;Widgets&nbsp;Engine&nbsp;中运行</span></span></div>
<p>
当然，邮件内容从文件读进来的，用的是Scripting.FileSystemobject类。Scripting.FileSystemobject类开发ASP和VBS的人经常用，开发js的朋友可能没有碰过，因为js原本由不得浏览器使用这个类，但是本例用了一个支持js的客户端，所以支持js调用Scripting.FileSystemobject。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><b>妙用四：股票自动盯盘</b></span></p>
<p>
<span style="font-size: small;">
<p>这个功能也是很有意思的</p>
<p><img src="http://pic002.cnblogs.com/img/yesry/200901/2009011521204316.jpg" /></p>
<p>我们知道，要在比现价高卖出，可以提前委托，对于上班族来说，可以在半夜12点刚过就可以进行委托了，但是如果希望在低于某个百分比（例如1.2%）止损卖出的话，提前委托是不可能的。</p>
<p>如果要自动盯着盘子，发现高于预定于既定价格就进行模拟键鼠的方式卖掉，也可以低于某个价位进行止损。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_212621" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_212621').style.display='none'; document.getElementById('Code_Open_Image_212621').style.display='inline'; document.getElementById('Code_Open_Text_212621').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top" width="11" height="16" /><img id="Code_Open_Image_212621" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_212621').style.display='none'; getElementById('Code_Closed_Image_212621').style.display='inline'; getElementById('Code_Closed_Text_212621').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" width="11" height="16" /><span id="Code_Closed_Text_212621" class="cnblogs_code_Collapse">点开代码</span><span id="Code_Open_Text_212621" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">fn</span><span style="color: #000000;">=</span><span style="color: #800000;">"</span><span style="color: #800000;">uAutoScan.dfm</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />AutoScan</span><span style="color: #000000;">=</span><span style="color: #000000;">vcl.LoadFormFromDfmFile(fn,scope,share_all);<br />AutoScan.OnClose</span><span style="color: #000000;">=</span><span style="color: #000000;">Form_OnClose;<br />AutoScan.Left</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />AutoScan.Top</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />AutoScan.Width</span><span style="color: #000000;">=</span><span style="color: #000000;">Screen.WorkAreaWidth;<br />AutoScan.Show();<br /><br />function&nbsp;FindZXJT()<br />{<br />&nbsp;&nbsp;desktop</span><span style="color: #000000;">=</span><span style="color: #000000;">GetDesktopWindow();<br />&nbsp;&nbsp;child</span><span style="color: #000000;">=</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(child</span><span style="color: #000000;">=</span><span style="color: #000000;">FindWindowEx(desktop,child,</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #0000FF;">null</span><span style="color: #000000;">))<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000;">=</span><span style="color: #000000;">GetWindowText(child);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(t.indexOf(</span><span style="color: #800000;">"</span><span style="color: #800000;">中信建投</span><span style="color: #800000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #800080;">0</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;child;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br />}<br /><br />zxjt_wnd</span><span style="color: #000000;">=</span><span style="color: #000000;">FindZXJT();<br />SetWindowPos(zxjt_wnd,HWND_TOPMOST,</span><span style="color: #800080;">0</span><span style="color: #000000;">,</span><span style="color: #800080;">0</span><span style="color: #000000;">,</span><span style="color: #800080;">0</span><span style="color: #000000;">,</span><span style="color: #800080;">0</span><span style="color: #000000;">,SWP_NOSIZE</span><span style="color: #000000;">|</span><span style="color: #000000;">SWP_NOREDRAW</span><span style="color: #000000;">|</span><span style="color: #000000;">SWP_NOMOVE);<br />MoveWindow(zxjt_wnd,</span><span style="color: #800080;">1</span><span style="color: #000000;">,AutoScan.Height,AutoScan.Width,Screen.WorkAreaHeight</span><span style="color: #000000;">-</span><span style="color: #000000;">AutoScan.Height,</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />MoveWindow(zxjt_wnd,</span><span style="color: #800080;">0</span><span style="color: #000000;">,AutoScan.Height,AutoScan.Width,Screen.WorkAreaHeight</span><span style="color: #000000;">-</span><span style="color: #000000;">AutoScan.Height,</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br /><br />function&nbsp;拷贝当前价()<br />{<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">点中有当前价的位置</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.GotoPos(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #800080;">550</span><span style="color: #000000;">,</span><span style="color: #800080;">257</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown();<br />&nbsp;&nbsp;System.DoMouseUp();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">100</span><span style="color: #000000;">);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">拷贝-右键弹出式</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.DoMouseDown(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseUp(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">拷贝-C</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyDown(</span><span style="color: #800080;">0x0043</span><span style="color: #000000;">,</span><span style="color: #800080;">0x2e0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">'C'&nbsp;key&nbsp;down</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyUp(</span><span style="color: #800080;">0x0043</span><span style="color: #000000;">,</span><span style="color: #800080;">0xc02e0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">'C'&nbsp;key&nbsp;up</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;editBuyPrice</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.editBuyPrice</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.GotoPos(editBuyPrice.Handle,</span><span style="color: #800080;">10</span><span style="color: #000000;">,</span><span style="color: #800080;">6</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseUp(</span><span style="color: #0000FF;">true</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.SendInputControlKeyDown(</span><span style="color: #800080;">0x0050</span><span style="color: #000000;">,</span><span style="color: #800080;">0x190001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">'P'&nbsp;key&nbsp;down</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyUp(</span><span style="color: #800080;">0x0050</span><span style="color: #000000;">,</span><span style="color: #800080;">0xc0190001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">'P'&nbsp;key&nbsp;up</span><span style="color: #008000;"><br /></span><span style="color: #000000;">}<br /><br />function&nbsp;TickTask()<br />{<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">获得当前价</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.GotoPos(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #800080;">67</span><span style="color: #000000;">,</span><span style="color: #800080;">328</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown();<br />&nbsp;&nbsp;System.DoMouseUp();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;System.setTimeout(</span><span style="color: #800000;">"</span><span style="color: #800000;">拷贝当前价();</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">2000</span><span style="color: #000000;">);<br />}<br /><br />function&nbsp;OnTimer()<br />{<br />&nbsp;&nbsp;TickTask();<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">System.setTimeout("OnTimer();",5000);</span><span style="color: #008000;">//</span><span style="color: #008000;">做完所有事情，又开始新一轮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">}<br /><br />function&nbsp;CheckMouseTimer()<br />{<br />&nbsp;&nbsp;edit</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.editMousePos</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;mouse</span><span style="color: #000000;">=</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Object();<br />&nbsp;&nbsp;GetCursorPos(mouse);<br />&nbsp;&nbsp;edit.Text</span><span style="color: #000000;">=</span><span style="color: #800000;">""</span><span style="color: #000000;">+</span><span style="color: #000000;">mouse.x</span><span style="color: #000000;">+</span><span style="color: #800000;">"</span><span style="color: #800000;">,</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">mouse.y;<br />&nbsp;&nbsp;mouse</span><span style="color: #000000;">=</span><span style="color: #0000FF;">null</span><span style="color: #000000;">;<br />&nbsp;&nbsp;System.setTimeout(</span><span style="color: #800000;">"</span><span style="color: #800000;">CheckMouseTimer();</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">3000</span><span style="color: #000000;">);<br />}<br /><br />function&nbsp;AutoScan_btnStart_OnClick(Sender)<br />{<br />&nbsp;System.setTimeout(</span><span style="color: #800000;">"</span><span style="color: #800000;">OnTimer();</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">5000</span><span style="color: #000000;">);<br />}<br />AutoScan_btnStart</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.btnStart</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />AutoScan_btnStart.OnClick</span><span style="color: #000000;">=</span><span style="color: #000000;">AutoScan_btnStart_OnClick;<br /><br />function&nbsp;AutoScan_btnSale_OnClick(Sender)<br />{<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">卖出按钮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.GotoPos(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #800080;">247</span><span style="color: #000000;">,</span><span style="color: #800080;">187</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown();<br />&nbsp;&nbsp;System.DoMouseUp();<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">股票代码</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;editStockID</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.editStockID</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.SendInputText(editStockID.Text);<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">卖出价格</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;editSalePrice</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.editSalePrice</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.SendInputText(editSalePrice.Text);<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">点击全部按钮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.GotoPos(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #800080;">365</span><span style="color: #000000;">,</span><span style="color: #800080;">315</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown();<br />&nbsp;&nbsp;System.DoMouseUp();<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">点击下单按钮</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.GotoPos(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">,</span><span style="color: #800080;">357</span><span style="color: #000000;">,</span><span style="color: #800080;">370</span><span style="color: #000000;">);<br />&nbsp;&nbsp;System.DoMouseDown();<br />&nbsp;&nbsp;System.DoMouseUp();<br />&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br /><br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">回车确定</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyDown(</span><span style="color: #800080;">0x000d</span><span style="color: #000000;">,</span><span style="color: #800080;">0x11c0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">RTURN&nbsp;key&nbsp;down</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyUp(</span><span style="color: #800080;">0x000d</span><span style="color: #000000;">,</span><span style="color: #800080;">0xc11c0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">RTURN&nbsp;key&nbsp;up</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br /><br />&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">回车关闭确认对话框</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyDown(</span><span style="color: #800080;">0x000d</span><span style="color: #000000;">,</span><span style="color: #800080;">0x11c0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">RTURN&nbsp;key&nbsp;down</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;System.SendInputControlKeyUp(</span><span style="color: #800080;">0x000d</span><span style="color: #000000;">,</span><span style="color: #800080;">0xc11c0001</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">RTURN&nbsp;key&nbsp;up</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;Sleep(</span><span style="color: #800080;">1200</span><span style="color: #000000;">);<br />}<br />AutoScan_btnSale</span><span style="color: #000000;">=</span><span style="color: #000000;">dvm.GetSharedObject(</span><span style="color: #800000;">"</span><span style="color: #800000;">zxjt.AutoScan.btnSale</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />AutoScan_btnSale.OnClick</span><span style="color: #000000;">=</span><span style="color: #000000;">AutoScan_btnSale_OnClick;<br /><br />System.setTimeout(</span><span style="color: #800000;">"</span><span style="color: #800000;">CheckMouseTimer();</span><span style="color: #800000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">3000</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">启动鼠标跟踪<br /></span><span style="color: #008000;">//</span><span style="color: #008000;">以上代码需要在&nbsp;Duceland&nbsp;Widgets&nbsp;Engine&nbsp;中运行</span><span style="color: #008000;"><br /></span></span></div>
</span></p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/yesry/aggbug/1375792.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>汉编卷土重来？</title><link>http://www.cnblogs.com/yesry/archive/2008/12/17/1355991.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Wed, 17 Dec 2008 01:57:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2008/12/17/1355991.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1355991.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2008/12/17/1355991.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1355991.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1355991.html</trackback:ping><description><![CDATA[<p>先看下面的程序：</p>
<p><img src="http://pic002.cnblogs.com/img/yesry/200812/2008121614435069.jpg" /></p>
<p>然后大家猜猜是什么语言编写的呢？</p>
<p>其实是把脚本代码中的label进行汉字替换即可。先定义label替换的对子</p>
<p><span style="color: #339966;">如果=if<br />函数=function<br />否则=else<br />返回=return<br />新增=new<br />空=null<br />尝试=try<br />捕错=catch<br />变量=var</span></p>
<p><span style="color: #339966;"></span></p>
<p><span style="color: #339966;">画图消息=WM_PAINT<br />获得设备上下文=GetDC<br />释放设备上下文=ReleaseDC<br />文本输出=TextOut<br />串长度=length<br />左鼠标按下消息=WM_LBUTTONDOWN<br />鼠标移动消息=WM_MOUSEMOVE<br />窗口销毁消息=WM_DESTROY<br />退出=Exit<br />产生实心刷子=CreateSolidBrush<br />产生GDI长方形=BuildGDIRect<br />填充长方形=FillRect<br />销毁GDI对象=DeleteObject<br />设置背景模式=SetBkMode<br />透明=TRANSPARENT<br />转换成整数=parseInt<br />消息窗=MessageBox<br />注册窗口类=RegisterClassEx<br /></span></p>
<p style="text-align: center;"><a href="http://duceland.com/cn/im.htm"><img src="http://images.cnblogs.com/cnblogs_com/yesry/googleAD.jpg" width="728" height="90" /></a></p>
<p>下面函数是提取脚本中的label：</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_150905" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_150905').style.display='none'; document.getElementById('Code_Open_Image_150905').style.display='inline'; document.getElementById('Code_Open_Text_150905').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align="top" width="11" height="16" /><span id="Code_Open_Text_150905"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;Analyzelabel(</span><span style="color: #0000FF;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">code,</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;len,KeywordManager&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">m,LabelNumberList&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">list)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;tagLabelNumber&nbsp;label;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000FF;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">s</span><span style="color: #000000;">=</span><span style="color: #000000;">(unsigned&nbsp;</span><span style="color: #0000FF;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)code;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">len;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0x6F</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(s[i]</span><span style="color: #000000;">&gt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">a</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">z</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(s[i]</span><span style="color: #000000;">&gt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">A</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">Z</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">_</span><span style="color: #800000;">'</span><span style="color: #000000;">)</span><span style="color: #008000;">//</span><span style="color: #008000;">charater</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.begin_pos</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0x7F</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0x7F</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(s[i]</span><span style="color: #000000;">&gt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">a</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">z</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(s[i]</span><span style="color: #000000;">&gt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">A</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">Z</span><span style="color: #800000;">'</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">_</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;(s[i]</span><span style="color: #000000;">&gt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">0</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #800000;">'</span><span style="color: #800000;">9</span><span style="color: #800000;">'</span><span style="color: #000000;">))<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;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0x7F</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800080;">0</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">break</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.end_pos</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.len</span><span style="color: #000000;">=</span><span style="color: #000000;">i</span><span style="color: #000000;">-</span><span style="color: #000000;">label.begin_pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(label.label,code</span><span style="color: #000000;">+</span><span style="color: #000000;">label.begin_pos,label.len);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.label[label.len]</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.type</span><span style="color: #000000;">=</span><span style="color: #000000;">eltLabel;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(m</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">IsKeyword(label.label))<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;label.type</span><span style="color: #000000;">=</span><span style="color: #000000;">eltKeyword;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(m</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">IsConstant(label.label))<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;label.type</span><span style="color: #000000;">=</span><span style="color: #000000;">eltConstant;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.push_back(label);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\"</span><span style="color: #800000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\</span><span style="color: #800000;">''</span><span style="color: #800000;">)</span><span style="color: #800000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.begin_pos</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;count1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;count2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\"</span><span style="color: #800000;">'</span><span style="color: #000000;">)<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;count1</span><span style="color: #000000;">=</span><span style="color: #800080;">1</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count2</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><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;count1</span><span style="color: #000000;">=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count2</span><span style="color: #000000;">=</span><span style="color: #800080;">1</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">(count1</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;count2</span><span style="color: #000000;">&gt;</span><span style="color: #800080;">0</span><span style="color: #000000;">)<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;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\"</span><span style="color: #800000;">'</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count1</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\</span><span style="color: #800000;">''</span><span style="color: #800000;">)</span><span style="color: #800000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count2</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(s[i]</span><span style="color: #000000;">==</span><span style="color: #800000;">'</span><span style="color: #800000;">\\</span><span style="color: #800000;">'</span><span style="color: #000000;">)<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.end_pos</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.len</span><span style="color: #000000;">=</span><span style="color: #000000;">i</span><span style="color: #000000;">-</span><span style="color: #000000;">label.begin_pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label.type</span><span style="color: #000000;">=</span><span style="color: #000000;">eltString;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.push_back(label);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></span></div>
<p>&nbsp;</p>
<p>然后逐个替换即可。是不是很容易？</p>
<p>&nbsp;</p>
<p>这个看上去像IDE的程序 Duceland Widgets Engine 是含源的，从<a href="http://duceland.com/Widgets/">这里</a>下载。</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/yesry/aggbug/1355991.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>用贾樟柯访谈评《疯狂的程序员》</title><link>http://www.cnblogs.com/yesry/archive/2008/11/26/1341488.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Wed, 26 Nov 2008 07:51:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2008/11/26/1341488.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1341488.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2008/11/26/1341488.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1341488.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1341488.html</trackback:ping><description><![CDATA[<p>先声明，《疯狂的程序员》我只看了1，2，3，26-33回和最后一回。没有全看。</p>
<p>今天看到《贾樟柯访谈：中国电影毛病在哪里》，恍惚回到了学生年代，那个时候我念中文专业，知道什么叫做文学。电影，小说，叙事或灌水的BLOG，视频短片，如此等等都可以认为是文学。如果是专业的文学工作者（作家、记者、演员等等），有个基本的要求，就是表达和挖掘。而非装也的文学工作者是没有挖掘的要求的，只要表达即可。</p>
<p>从这个（文学）角度看，太多的票房冠军电影都不是来自于专业文学工作者！《疯狂的程序员》也是。在《疯狂的程序员》中，很少挖掘，或者根本看不到挖掘的痕迹，里面充斥着表达，算不上专业。先前看到某明星的小学作文，连个顿号都不会用，我真替汉字的发扬光大感到心慌。</p>
<p>经过漫长的封闭的封建社会后，中国人都没有表达的机会；现在有了互联网，有了这么一个机会，就不知所以然的表达、表达、表达，直至灌水了之。然之，就看不到挖掘了。安静点，表达之前想想自己为什么这么表达，这样，你就会发现更多，而这些发现就是挖掘。挖掘自己，挖掘周围的人，挖掘社会，这才是练就文学&ldquo;高手&rdquo;的正途。贾樟柯看到了农村赌博的一些&ldquo;根源&rdquo;，而我看来这些根源跟现在的网瘾有很大相似性。这种&ldquo;看到&rdquo;是一种挖掘，如果贾樟柯有后人，应该更深层次的观察和挖掘到更为坚实的真正的根源乃至本质。我热切的希望看到（消费）这种发现挖掘，为了看到这种思考我愿意付费。电影《卧虎藏龙》是我唯一看了VCD还要去看电影院看的戏。戏中有个逻辑，绝顶武功练就了，也就不怕顶级装备了，但是为了抵消顶级装备而练就绝顶武功，最后牺牲了个人的幸福（李慕白）。这是一个什么样的写照？它给了我一种震撼，现实中，为了抵住富豪或者权力的讽嘲（贫穷的人容易仇富），人们努力赚钱；有些人赚到了，而幸福呢？随着钱的到来而远去。我看到过太多这样的老板了。我觉得电影就应该告诉读者除了华丽以外的东西。这些东西正是我愿意付费的。又看《贾樟柯访谈：中国电影毛病在哪里》中还说一句：所有人都不是底层，因为他总能找到&ldquo;比我更惨的人&rdquo;。这是一种社会思考，贾樟柯付出了自己的劳动，而且是有价值的劳动。</p>
<p>我想写个《yesry访谈：中国BLOG毛病在哪里》，来评《疯狂的程序员》缺少我要的东西。我想在《疯狂的程序员》中要什么？我想要&ldquo;主人翁为何要疯狂，何以能疯狂&rdquo;的交代或启发。</p>
<p>阅读文学，阅读自己，阅读社会。</p><img src ="http://www.cnblogs.com/yesry/aggbug/1341488.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Widgets 引擎的设计和实现</title><link>http://www.cnblogs.com/yesry/archive/2008/11/05/1326770.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Wed, 05 Nov 2008 01:00:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2008/11/05/1326770.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1326770.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2008/11/05/1326770.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1326770.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1326770.html</trackback:ping><description><![CDATA[<center>
<h2>Widgets 引擎设计与实现</h2>
<h2></h2>
<table width="75%">
     <tr>
         <td valign="top" width="8%"><img src="http://images.cnblogs.com/cnblogs_com/yesry/reqirement2.jpg" alt="" /></td>
         <td width="92%">
         <h2><font color="#0000ff">一、背景和需求</font></h2>
         <div class="menu-box">
         <p>Widget 土名叫做小器件，在外国已经流行了很久了，Vista自带有之，Yahoo Widgets Engine 也存在和发展了很长时间了。那么这个玩意儿在国内却一直没起色。究其原因，Widget
         一般在看到桌面的时候才能看到，而大部分时间都在干活的国人，自然没有兴趣使用 Widget 了。而且以其装点桌面还不如玩玩游戏呢。所以
         Widget 到了中国必须换个脸面出现才有前途。</p>
         <p>Widget 如果和工作有关，有助于完成工作内的事情，那么它就有用户安装和使用了。Widget 有助于完成什么工作呢？这需要很多接触实际客户的人才知道。所以先写个引擎，让这个引擎尽可能强大，最好无所不能。</p>
         <p>再者，金融危机靠近，总会逐渐影响到软件界，会有很多软件从业者下岗，这些人做什么呢？最好就是边找工作边充电，还有就是创作。而软件从业者的的充电和创作结果就是软件，从而也有运作这些充电和创作的成果或半成品寻找机会的冲动。</p>
         <p>需求：</p>
         <p>1 程序称之为引擎，这个程序必须有二次开发接口<br />
         2 二次开发接口尽可能使用脚本语言，尤其是支持Javascript这样的&#8220;网络编程语言&#8221;，Yahoo Widgets 引擎就支持这个。这样语言的资料网上遍地都是。<br />
         3 二次开发的语言需要：<br />
         &nbsp;&nbsp;&nbsp;&nbsp;3.1)能建立、操控主程序等的窗口等的能力<br />
         &nbsp;&nbsp;&nbsp;&nbsp;3.2)能有很多类库可用。众所周知，Javascript等脚本语言本身易学，但是类库不丰富，用于
         Web 编程也是很累的。如果有很多类库可用，则能解决好生产力的问题，毕竟是给充电或者找工作期间的人用的，不能让这些用户用太长时间后作品还没写成，工作已经找到了。<br />
         &nbsp;&nbsp;&nbsp;&nbsp;3.3)有数据库支持<br />
         &nbsp;&nbsp;&nbsp;&nbsp;3.4)有email收发支持<br />
         4 主程序为二次开发语言提供接口要方便<br />
         5 引擎有个竖向的工具条列出可用的 Widget 列表<br />
         6 每个 Widget 可以用带文件名的命令行启动引擎；每个 Widget 在单独的进程中执行<br />
         7 引擎支持页面开发。<br />
         8 引擎支持显示 BLOG，并可以把二次开发语言嵌入到 BLOG 中。这样作为下岗工人这样无需网络主机这样要钱的条件下也能方便发布自己的习作或创作作品。</p>
         <p><br />
         </p>
         </div>
         </td>
     </tr>
     <tr>
     </tr>
</table>
<table width="75%">
     <tr>
         <td valign="top" width="8%"><img src="http://images.cnblogs.com/cnblogs_com/yesry/cls_diagram.jpg" alt="" width="48" height="48" /></td>
         <td width="92%">
         <h2><font color="#0000ff">二、设计——类图</font></h2>
         <div class="menu-box">
         <p>主要类图如下： ( <a href="http://www.duceland.com/Widgets/DucelandWidgetsEngineClasses.zip">下载UML图</a> )<br />
         <a href="http://images.cnblogs.com/cnblogs_com/yesry/dwe_cls_diagram.jpg"><img src="http://images.cnblogs.com/cnblogs_com/yesry/dwe_cls_diagram.jpg" alt="" width="930" height="361" /></a></p>
         </div>
         </td>
     </tr>
     <tr>
     </tr>
</table>
<table width="75%">
     <tr>
         <td valign="top" width="8%"><img src="http://images.cnblogs.com/cnblogs_com/yesry/sequence_diagram.jpg" alt="" width="48" height="48" /></td>
         <td width="92%">
         <h2><font color="#0000ff">三、设计——顺序图</font></h2>
         <div class="menu-box">
         <p>Javascript 调用过程顺序图：( <a href="http://www.duceland.com/Widgets/DucelandWidgetsEngineClasses.zip">下载UML图</a>
         )<br />
         <a href="http://images.cnblogs.com/cnblogs_com/yesry/js_sequence.jpg"><img src="http://images.cnblogs.com/cnblogs_com/yesry/js_sequence.jpg" alt="" width="930" height="361" /></a></p>
         </div>
         </td>
     </tr>
     <tr>
     </tr>
</table>
<table width="75%">
     <tr>
         <td valign="top" width="8%"><img src="http://images.cnblogs.com/cnblogs_com/yesry/impl.jpg" alt="" width="48" height="48" /></td>
         <td width="92%">
         <h2><font color="#0000ff">四、代码实现</font></h2>
         <div class="menu-box">
         <p>1 MFC 的 C++ 部分<br />
         &nbsp;&nbsp;微软的MVC架构不用多说了，主要贴出脚本调用部分：
         </p>
         <p>&nbsp;
         <table style="font-size: 12px;">
             <tr>
                 <td width="20"><br />
                 </td>
                 <td valign="top"><span style="color: #008000;">//这个函数提取页面中的js代码后在msscript.ocx中执行<br />
                 </span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;BrowserView::FindAndExecuteJavaScript()<br />
                 {<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//get&nbsp;javascrip&nbsp;client&nbsp;code<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;codes[</span><span style="color: #800080;">20</span><span style="color: #000000;">];<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;code_item_count=</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;CComPtr&lt;IHTMLElementCollection&gt;&nbsp;spColl;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;m_spDoc-&gt;get_all(&amp;spColl);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;GetScriptCode(spColl,</span><span style="color: #800000;">"JavaScript-BHO"</span><span style="color: #000000;">,codes,code_item_count);<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(JavaScriptHelper==NULL&nbsp;&amp;&amp;&nbsp;g_RuntimeVars.env)<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;{<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//get&nbsp;'JavaScriptHelper'&nbsp;object&nbsp;from&nbsp;dsRE&nbsp;to&nbsp;execute&nbsp;PHP&nbsp;script<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper=g_RuntimeVars.env-&gt;GetSharedObject(L</span><span style="color: #800000;">"JavaScriptHelper"</span><span style="color: #000000;">);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(JavaScriptHelper)<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;{<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i=</span><span style="color: #800080;">0</span><span style="color: #000000;">;i&lt;code_item_count;i++)<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;codes[i].Trim();<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(codes[i].GetLength()&gt;</span><span style="color: #800080;">0</span><span style="color: #000000;">)<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;CString&nbsp;code=codes[i];<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;*buf=(LPSTR)(LPCSTR)code;<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dValue&nbsp;ret;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper-&gt;Invoke((dobject)NULL,L</span><span style="color: #800000;">"Execute"</span><span style="color: #000000;">,buf,code.GetLength(),&amp;ret);</span><span style="color: #008000;">//execute&nbsp;JavaScript<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 }</span></td>
             </tr>
         </table>
         <table style="font-size: 12px;">
             <tr>
                 <td width="20"><br />
                 </td>
                 <td valign="top">
                 <p><span style="color: #008000;">//这个函数在页面得到正确请求后发生，主要是向msscript.ocx中的js增加全局变量document和用于js调用C++函数的<font color="#0000ff" size="5">System</font>对象<br />
                 </span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;BrowserView::OnNavigateComplete2(LPCTSTR&nbsp;strURL)<br />
                 {<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(m_pDisp==NULL&nbsp;||&nbsp;m_spDoc==NULL)<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;{<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDisp=CHtmlView::GetHtmlDocument();<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pDisp-&gt;QueryInterface(IID_IHTMLDocument2,(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">**)&amp;m_spDoc);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(m_pDisp&nbsp;&amp;&amp;&nbsp;&nbsp;m_spDoc)<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;{<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//set&nbsp;Document&nbsp;to&nbsp;msscript.ocx<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dobject&nbsp;dobj_document=g_RuntimeVars.env-&gt;WrapExistsInstance(L</span><span style="color: #800000;">"dobj_wrap_dispatch"</span><span style="color: #000000;">,m_pDisp);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(dobj_document)<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_RuntimeVars.factory-&gt;Share((dobject)g_RuntimeVars.factory,dobj_document,L</span><span style="color: #800000;">"document"</span><span style="color: #000000;">);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//set&nbsp;global&nbsp;var&nbsp;"System"&nbsp;and&nbsp;"document"&nbsp;to&nbsp;Javascript&nbsp;system<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(JavaScriptHelper==NULL&nbsp;&amp;&amp;&nbsp;g_RuntimeVars.env)<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//get&nbsp;'JavaScriptHelper'&nbsp;object&nbsp;from&nbsp;dsRE&nbsp;to&nbsp;execute&nbsp;PHP&nbsp;script<br />
                 </span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper=g_RuntimeVars.env-&gt;GetSharedObject(L</span><span style="color: #800000;">"JavaScriptHelper"</span><span style="color: #000000;">);<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(JavaScriptHelper)<br />
                 &nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dValue&nbsp;ret;<br />
                 <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><span style="color: #008000;">//这一步让msscript.ocx中的js可以访问网页document</span><span style="color: #000000;"><font color="#ff0000"><strong>【特注1】</strong></font><br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;*document_code=</span><span style="color: #800000;">"document=dvm.GetSharedObject(\"</span><span style="color: #000000;">document\</span><span style="color: #800000;">");"</span><span style="color: #000000;">;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper-&gt;Invoke((dobject)NULL,L</span><span style="color: #800000;">"Execute"</span><span style="color: #000000;">,document_code,strlen(document_code),&amp;ret);</span><span style="color: #008000;">//execute&nbsp;JavaScript<br />
                 </span><span style="color: #000000;"> <br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 </span><span style="color: #008000;">//这一步让msscript.ocx中的js可以调用MFC
                 C++中的函数</span><span style="color: #000000;"><strong><font color="#ff0000">【特注2】</font></strong><br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;*System_code=</span><span style="color: #800000;">"sys=dvm.GetSharedObject(\"</span><span style="color: #000000;"><font color="#0000ff" size="5"><strong>System</strong></font>\</span><span style="color: #800000;">");"</span><span style="color: #000000;">;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper-&gt;Invoke((dobject)NULL,L</span><span style="color: #800000;">"Execute"</span><span style="color: #000000;">,System_code,strlen(System_code),&amp;ret);</span><span style="color: #008000;">//execute&nbsp;JavaScript<br />
                 </span><span style="color: #000000;"><br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;*alert_code=</span><span style="color: #800000;">"function&nbsp;alert(msg,title,type){sys.alert(msg,title,type);}"</span><span style="color: #000000;">;<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper-&gt;Invoke((dobject)NULL,L</span><span style="color: #800000;">"Execute"</span><span style="color: #000000;">,alert_code,strlen(alert_code),&amp;ret);</span><span style="color: #008000;">//execute&nbsp;JavaScript<br />
                 </span><span style="color: #000000;"><br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*char&nbsp;*test="alert('ddddddd');";<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScriptHelper-&gt;Invoke((dobject)NULL,L"Execute",test,strlen(test),&amp;ret);//execute&nbsp;JavaScript*/</span><span style="color: #000000;"><br />
                 &nbsp;&nbsp;&nbsp;&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;}<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;}<br />
                 }</span></p>
                 <p><span style="color: #000000;"><font color="#ff0000"><strong>【特注1】</strong></font></span><span style="color: #000000;">通过Composite
                 Bridges的共享对象，使当前MFC的基于CHtmlView的IDispatch对象&#8220;进入&#8221;js脚本中，方便js操纵。如果在设计中不使用Composite
                 Bridges，则可以编写一个基于IDispatch的COM对象，通过 new ActiveXObject(...)语句创建这个COM对象，然后通过这个对象的某个函数调用的返回值使得CHtmlView对象进入msscript.ocx中的js。</span></p>
                 <p><span style="color: #000000;"><font color="#ff0000"><strong>【特注2】</strong></font></span>System对象用于js操纵C++的函数的。如果不使用哦<span style="color: #000000;">Composite
                 Bridges</span>技术，就像【特注1】中一样写个COM进入js就是可以了。</p>
                 <p><span style="color: #000000;">Composite Bridges</span> 由于支持脚本调用
                 Windows API，是理想的脚本扩展类库。同时，<span style="color: #000000;">Composite
                 Bridges</span> 还支持 VCL 调用，可以作为界面的补充。虽然 <span style="color: #000000;">Composite
                 Bridges</span> 还能支持.NET调用。不过，无论PHP还是js，都可以通过COM间接调用.NET的，所以不用多此一举。</p>
                 </td>
             </tr>
         </table>
         </p>
         <p>&nbsp;</p>
         <hr size="1" />
         <p>2 js脚本部分<br />
         &nbsp;&nbsp;这里只列举 CreateWindow 这个API，其他的API可以举一反三：
         <table style="font-size: 12px;">
             <tr>
                 <td width="20"><br />
                 </td>
                 <td><span style="color: #000000;">function&nbsp;CreateWindow(lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam)<br />
                 {<br />
                 &nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
                 &nbsp;&nbsp;HWND<br />
                 &nbsp;&nbsp;WINAPI<br />
                 &nbsp;&nbsp;CreateWindowExA(<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwExStyle,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;lpClassName,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;LPCSTR&nbsp;lpWindowName,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwStyle,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;X,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Y,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nWidth,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nHeight,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;hWndParent,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;HMENU&nbsp;hMenu,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;HINSTANCE&nbsp;hInstance,<br />
                 &nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;lpParam);<br />
                 &nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
                 &nbsp;param</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;dobject(</span><span style="color: #800000;">"</span><span style="color: #800000;">ApiParams</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />
                 &nbsp;param.AppendSignedLong(</span><span style="color: #800080;">0</span><span style="color: #000000;">);<br />
                 &nbsp;param.AppendAsciiString(lpClassName);<br />
                 &nbsp;param.AppendAsciiString(lpWindowName);<br />
                 &nbsp;param.AppendSignedLong(dwStyle);<br />
                 &nbsp;param.AppendSignedLong(x);<br />
                 &nbsp;param.AppendSignedLong(y);<br />
                 &nbsp;param.AppendSignedLong(nWidth);<br />
                 &nbsp;param.AppendSignedLong(nHeight);<br />
                 &nbsp;param.AppendHandlePointer(hWndParent);<br />
                 &nbsp;param.AppendHandlePointer(hMenu);<br />
                 &nbsp;param.AppendHandlePointer(hInstance);<br />
                 &nbsp;param.AppendHandlePointer(lpParam);<br />
                 <br />
                 &nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;os_api.CallOSAPI(</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,</span><span style="color: #800000;">"</span><span style="color: #800000;">CreateWindowExA</span><span style="color: #800000;">"</span><span style="color: #000000;">,param);<br />
                 }</span><br />
                 </td>
             </tr>
         </table>
         </p>
         </div>
         </td>
     </tr>
     <tr>
     </tr>
</table>
<p>&nbsp;</p>
<table background="http://images.cnblogs.com/cnblogs_com/yesry/round_bar.png" width="980" height="26">
     <tr>
         <td width="144" height="26">
         <div align="right">Available</div>
         </td>
         <td width="14" height="26"><br />
         </td>
         <td width="438" height="26">Version 1.0 Build 10</td>
         <td style="font-size: 12px;" width="364" height="26">
         <div><a href="http://www.duceland.com/Widgets/">获得源代码</a> &nbsp;
         <a href="http://www.duceland.com/Widgets/DucelandWidgetsEngine.zip">下载Engine</a>&nbsp; <a href="http://www.duceland.com/Widgets/getmorewidgets.asp">下载更多Widget
         </a></div>
         </td>
     </tr>
</table>
<p>
<a href="http://www.duceland.com/cn/im.htm"><img src="http://images.cnblogs.com/cnblogs_com/yesry/googleAD.jpg" alt="" /></a>
</p>
</center>
<img src ="http://www.cnblogs.com/yesry/aggbug/1326770.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Duceland Widgets Engine 例子一</title><link>http://www.cnblogs.com/yesry/archive/2008/10/26/1319853.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Sun, 26 Oct 2008 08:11:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2008/10/26/1319853.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1319853.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2008/10/26/1319853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1319853.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1319853.html</trackback:ping><description><![CDATA[<p>本例子产生一个 VCL TForm 和一个用 WIN API 创建的 Window。敬请用右键查看页面代码，代码中含有语言为 JavaScript-BHO 和 PHP-BHO 的脚本。
</p>
<p><a href="http://duceland.com/Widgets/" target="_blank">点击了解设计以及源代码</a></p>
<p>&nbsp;</p>
<p>
<input id="theText" name="theText" maxlength="100" style="background:#FFFFFF" type="text" /></p>
<p>
<script language="PHP-BHO"><!--
function OnFormClick($sender) {
 $sender->Caption="Clicking a VCL TForm";
}
function OnButtonClick($sender) {
 $sender->Caption="Clicking a VCL TButton";
}
function OnFormClose($Sender,$Action) {
 $ds=$GLOBALS["ds"];
 $sys=$ds->GetSharedObject("System");
 $sys->Exit();
}

$ds=new dsRE();
$GLOBALS["ds"]=$ds;
//call VCL
$ds->UsingClass("TForm");
$form=new TForm(null);
$ds->RegistMethod("OnFormClose",$form,"OnClose");
$ds->RegistMethod("OnFormClick",$form,"OnClick");

$ds->UsingClass("TButton");
$button=new TButton($form);
$ds->RegistMethod("OnButtonClick",$button,"OnClick");
$button->Left=20;
$button->Top=30;
$button->Width=200;
$button->Parent=$form;
$button->Caption="Button1";

$form->Show();
$form->Caption="I am a VCL TForm";

$ds->Share($form,"Form1");
$ds->Share($button,"Button1");
// --></script>
<script language="JavaScript-BHO"><!--
os_api=dvm.GetSharedObject("OSAPI");
function GetWindowText(hWnd)
{
param=new dobject("ApiParams");
param.AppendHandlePointer(hWnd);
param.AllocAsciiStringBuffer(260);
param.AppendUnsignedLong(260);
os_api.CallOSAPI(null,"GetWindowTextA",param);
ret=param.ReadAsciiString(4);
param=null;
return ret;
}
function MessageBox(hWnd,lpText,lpCaption,uType)
{
param=new dobject("ApiParams");
param.AppendHandlePointer(hWnd);
param.AppendAsciiString(lpText);
param.AppendAsciiString(lpCaption);
param.AppendUnsignedLong(uType);
return os_api.CallOSAPI(null,"MessageBoxA",param);
param=null;
}
function MyWndProc(hWnd,message,wParam,lParam)
{
WM_CREATE=0x0001;
if(message==WM_CREATE)
{
MB_OK=0x00000000;
t=GetWindowText(hWnd);
MessageBox(hWnd,t,"Javasript message box!",MB_OK);
}
return 0;
}
function RegisterClassEx(lpwcx)
{
return os_api.CallOSAPI(null,"RegisterClassExA",lpwcx);
}
function MyRegisterClassEx()
{
callback_param=new dobject("ApiParams");
callback_param.AppendHandlePointer(0);
callback_param.AppendUnsignedLong(0);
callback_param.AppendUnsignedLong(0);
callback_param.AppendUnsignedLong(0);
stdcall_callback=os_api.ApplyCallbackFunction(MyWndProc,callback_param);
param=new dobject("ApiParams");
/*
typedef struct {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;
*/
param.AppendUnsignedInt(48);//sizeof(WNDCLASSEX)==48;
param.AppendUnsignedInt(3);//CS_HREDRAW | CS_VREDRAW;
param.AppendHandlePointer(stdcall_callback);
param.AppendSignedInt(0);
param.AppendSignedInt(0);
param.AppendHandlePointer(dvm.GetAppHInstance());
param.AppendHandlePointer(0);
param.AppendHandlePointer(0x00010011);
param.AppendUnsignedLong(0x00000006);//(COLOR_WINDOW+1);
param.AppendAsciiString("menu");
param.AppendAsciiString("JavaScriptCallApiWindowClass");
param.AppendHandlePointer(0);
lpwcx=new dobject("ApiParams");
lpwcx.AppendStructurePointer(param);
RegisterClassEx(lpwcx);
param=null;
lpwcx=null;
}
function CreateWindow(lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam)
{
/*
HWND
WINAPI
CreateWindowExA(
DWORD dwExStyle,
LPCSTR lpClassName,
LPCSTR lpWindowName,
DWORD dwStyle,
int X,
int Y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam);
*/
param=new dobject("ApiParams");
param.AppendSignedLong(0);
param.AppendAsciiString(lpClassName);
param.AppendAsciiString(lpWindowName);
param.AppendSignedLong(dwStyle);
param.AppendSignedLong(x);
param.AppendSignedLong(y);
param.AppendSignedLong(nWidth);
param.AppendSignedLong(nHeight);
param.AppendHandlePointer(hWndParent);
param.AppendHandlePointer(hMenu);
param.AppendHandlePointer(hInstance);
param.AppendHandlePointer(lpParam);
return os_api.CallOSAPI(null,"CreateWindowExA",param);
}
//function MyCreateWindow(){
MyRegisterClassEx();
hWnd = CreateWindow("JavaScriptCallApiWindowClass",
"Javascript call api window",
0x00cf0000, // WS_OVERLAPPEDWINDOW
250,
200,
250,
180,
null, null,
dvm.GetAppHInstance(),
null);
param=new dobject("ApiParams");
param.AppendHandlePointer(hWnd);
param.AppendUnsignedLong(0x00000001);//SW_SHOWNORMAL
os_api.CallOSAPI(null,"ShowWindow",param);
param=null;
//}

alert("cccccccc");
// --></script>
</p><img src ="http://www.cnblogs.com/yesry/aggbug/1319853.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>作为软件从业员面对番茄事件的尴尬立场</title><link>http://www.cnblogs.com/yesry/archive/2008/10/06/1304511.html</link><dc:creator>yesry</dc:creator><author>yesry</author><pubDate>Mon, 06 Oct 2008 02:41:00 GMT</pubDate><guid>http://www.cnblogs.com/yesry/archive/2008/10/06/1304511.html</guid><wfw:comment>http://www.cnblogs.com/yesry/comments/1304511.html</wfw:comment><comments>http://www.cnblogs.com/yesry/archive/2008/10/06/1304511.html#Feedback</comments><slash:comments>34</slash:comments><wfw:commentRss>http://www.cnblogs.com/yesry/comments/commentRss/1304511.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/yesry/services/trackbacks/1304511.html</trackback:ping><description><![CDATA[<p>从事软开n年了，番茄事件教我重新审视了这路上的往事。 如果要我投票，我该投哪边呢？想起来是很尴尬的。<br />
</p>
<p>一方面，学习软件的成本来说，我认为，金钱的成本非常低的。当时学校是盗版DOS，盗版WPS，盗版Basic，盗版Turbo C，盗版....。如果没有盗版，我就没有100块钱一学年的兴趣小组可以参加。相对那个时候的落后农村来说，如果全正版只有贵族可以学软件了。<br />
</p>
<p>另一方面，现在我炼成了&#8220;武林高手&#8221;（先别论是不是真的，是不是高手与观点无关），又想，如果现在大家都用正版，我可以买别墅了（现状：为房子的事情发愁）。</p>
<p>所以，回想过去，没有盗版就没有我这个&#8220;高手&#8221; ；现在，没有盗版我会成为富翁。假如当时没有盗版，那么UCDOS的图形化界面可以发展成为windows相竞争的产品，因为WPS的收入足以支撑其研发，想想，求伯君把DOS的80%系统中断服务都研究透了，离操作系统仅一步之遥。<br />
</p>
<p>于是，过去的我支持盗版，现在的我支持正版，未来呢？我想，中华民族不可能100年下来全是盗版当道！ 至少我本人不答应。正版化只是时间问题。<br />
</p>
<p>结论：时间成本无法估算，历史不容假设。<br />
</p>
<p>立场是尴尬的，但是，选择是明确的：我会抛离历史选择现在的立场，支持正版（其实心底是支持别人正版，自己嘛，别人正版的前提下我也正版）——我想有房子啊。<br />
</p>
<p>&nbsp;</p>
<p>我相信各位读者也有同感，尤其是一边工作，一边正在通过努力学习提高自己的人来说，尴尬恐怕比我还要矛盾：学习先进技术需要资源和工具，而这些资源和工具都是正版的话，成本如何？而工作来说，如果客户都用正版，又何愁公司没钱赚，薪水低？</p>
<p>老实说，番茄事件很多大众门户都进行了调查，唯独没有专业门户进行调查。专业门户都进行了&#8220;精辟&#8221;的，热烈的观点讨论，就是没有调查，搜集软件从业员总体观点。为什么？不正是尴尬立场作祟吗？<br />
</p><img src ="http://www.cnblogs.com/yesry/aggbug/1304511.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47956/" target="_blank">Xbox Live将投放Silverlight广告</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>