﻿<?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>博客园-叶子的家</title><link>http://www.cnblogs.com/wj/</link><description>~●~●~●~●~●~●○离成功还很远，距离长着叻，Fighting！</description><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 08:24:24 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 08:24:24 GMT</pubDate><ttl>60</ttl><item><title>SEO Elite ver 4.0 R93 Patcher</title><link>http://www.cnblogs.com/wj/archive/2009/02/12/1388751.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Thu, 12 Feb 2009 00:09:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2009/02/12/1388751.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1388751.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2009/02/12/1388751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1388751.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1388751.html</trackback:ping><description><![CDATA[<p>This is my&nbsp;yesterday's cracking work for the last version of SEO Elite(v4 r93). </p>
<p>
<hr />
</p>
<p>original download:</p>
<p><a href="http://www.seoelite.com/SEOE_setup4093.exe">http://www.seoelite.com/SEOE_setup4093.exe</a></p>
<p>patcher download:</p>
<p><a href="http://files.cnblogs.com/wj/seo.elite-patch.rar">http://files.cnblogs.com/wj/seo.elite-patch.rar</a></p>
<p>
<hr />
</p>
<p>Cracking only for fun and learning. If you don't want to see this artical, email me.</p>
<img src ="http://www.cnblogs.com/wj/aggbug/1388751.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</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>Remove 5 seconds constraint in Garena(GGC)</title><link>http://www.cnblogs.com/wj/archive/2008/09/09/Garena_GGC.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Tue, 09 Sep 2008 10:34:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2008/09/09/Garena_GGC.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1287862.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2008/09/09/Garena_GGC.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1287862.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1287862.html</trackback:ping><description><![CDATA[<p><font face="Verdana">Using UE to&nbsp;modify the red line command to "<span style="color: red">JMP</span>" is ok.</font></p>
<p>If you don't know how to modify, just leave me a message.</p>
<p>&nbsp;</p>
<p>A modified version download (<span style="color: #ff0000">decompress and copy it to your Garena folder</span>):</p>
<p>06.03.2009: <a href="http://www.savefile.com/files/2028529">http://www.savefile.com/files/2028529</a></p>
<p><strike>14.11.2008: </strike><a href="http://www.savefile.com/files/1886103"><strike>http://www.savefile.com/files/1886103</strike></a></p>
<p><strike>02.11.2008: </strike><a href="http://www.savefile.com/files/1868223"><strike>http://www.savefile.com/files/1868223</strike></a></p>
<p><strike>10.10.2008: </strike><a href="http://www.savefile.com/files/1831336"><strike>http://www.savefile.com/files/1831336</strike></a></p>
<p><strike>07.10.2008: </strike><a href="http://www.savefile.com/files/1825822"><strike>http://www.savefile.com/files/1825822</strike></a></p>
<p><strike>20.09.2008: </strike><a href="http://www.savefile.com/files/1796291"><strike>http://www.savefile.com/files/1796291</strike></a></p>
<p><strike>09.09.2008: <font face="Verdana"><a href="http://www.savefile.com/files/1777343">http://www.savefile.com/files/1777343</a></font></strike></p>
<p>&nbsp;</p>
<p><font face="Verdana">004C5440&nbsp;&nbsp; $&nbsp; 6A FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH -1<br />
004C5442&nbsp;&nbsp; .&nbsp; 68 73A05800&nbsp;&nbsp; PUSH Garena.0058A073<br />
004C5447&nbsp;&nbsp; .&nbsp; 64:A1 0000000&gt;MOV EAX,DWORD PTR FS:[0]<br />
004C544D&nbsp;&nbsp; .&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EAX<br />
004C544E&nbsp;&nbsp; .&nbsp; 81EC E0000000 SUB ESP,0E0<br />
004C5454&nbsp;&nbsp; .&nbsp; 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EBX<br />
004C5455&nbsp;&nbsp; .&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EBP<br />
004C5456&nbsp;&nbsp; .&nbsp; 56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH ESI<br />
004C5457&nbsp;&nbsp; .&nbsp; 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EDI<br />
004C5458&nbsp;&nbsp; .&nbsp; A1 E4F35F00&nbsp;&nbsp; MOV EAX,DWORD PTR DS:[5FF3E4]<br />
004C545D&nbsp;&nbsp; .&nbsp; 33C4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XOR EAX,ESP<br />
004C545F&nbsp;&nbsp; .&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EAX<br />
004C5460&nbsp;&nbsp; .&nbsp; 8D8424 F40000&gt;LEA EAX,DWORD PTR SS:[ESP+F4]<br />
004C5467&nbsp;&nbsp; .&nbsp; 64:A3 0000000&gt;MOV DWORD PTR FS:[0],EAX<br />
004C546D&nbsp;&nbsp; .&nbsp; 894C24 48&nbsp;&nbsp;&nbsp;&nbsp; MOV DWORD PTR SS:[ESP+48],ECX<br />
004C5471&nbsp;&nbsp; .&nbsp; 8B35 74935900 MOV ESI,DWORD PTR DS:[&lt;&amp;KERNEL32.GetTick&gt;;&nbsp; kernel32.GetTickCount<br />
004C5477&nbsp;&nbsp; .&nbsp; FFD6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL ESI&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; ; [GetTickCount<br />
004C5479&nbsp;&nbsp; .&nbsp; 2B05 FC206000 SUB EAX,DWORD PTR DS:[6020FC]<br />
004C547F&nbsp;&nbsp; .&nbsp; 3D 88130000&nbsp;&nbsp; CMP EAX,1388<br />
<span style="color: red">004C5484&nbsp;&nbsp; .&nbsp; 0F83 AF000000 JNB Garena.004C5539&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp; 修改5S跳转</span><br />
004C548A&nbsp;&nbsp; .&nbsp; 68 AE010000&nbsp;&nbsp; PUSH 1AE&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; ; /Arg2 = 000001AE<br />
004C548F&nbsp;&nbsp; .&nbsp; 8D4424 54&nbsp;&nbsp;&nbsp;&nbsp; LEA EAX,DWORD PTR SS:[ESP+54]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; |<br />
004C5493&nbsp;&nbsp; .&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EAX&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; ; |Arg1<br />
004C5494&nbsp;&nbsp; .&nbsp; B9 582C6000&nbsp;&nbsp; MOV ECX,Garena.00602C58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; |<br />
004C5499&nbsp;&nbsp; .&nbsp; E8 52E20300&nbsp;&nbsp; CALL Garena.005036F0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; \Garena.005036F0<br />
004C549E&nbsp;&nbsp; .&nbsp; 33FF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XOR EDI,EDI<br />
004C54A0&nbsp;&nbsp; .&nbsp; BD 08000000&nbsp;&nbsp; MOV EBP,8<br />
004C54A5&nbsp;&nbsp; .&nbsp; 3968 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMP DWORD PTR DS:[EAX+18],EBP<br />
004C54A8&nbsp;&nbsp; .&nbsp; 89BC24 FC0000&gt;MOV DWORD PTR SS:[ESP+FC],EDI<br />
004C54AF&nbsp;&nbsp; .&nbsp; 72 05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JB SHORT Garena.004C54B6<br />
004C54B1&nbsp;&nbsp; .&nbsp; 8B50 04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV EDX,DWORD PTR DS:[EAX+4]<br />
004C54B4&nbsp;&nbsp; .&nbsp; EB 03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMP SHORT Garena.004C54B9<br />
004C54B6&nbsp;&nbsp; &gt;&nbsp; 8D50 04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEA EDX,DWORD PTR DS:[EAX+4]<br />
004C54B9&nbsp;&nbsp; &gt;&nbsp; BB 07000000&nbsp;&nbsp; MOV EBX,7<br />
004C54BE&nbsp;&nbsp; .&nbsp; 8BC2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV EAX,EDX<br />
004C54C0&nbsp;&nbsp; .&nbsp; 895C24 44&nbsp;&nbsp;&nbsp;&nbsp; MOV DWORD PTR SS:[ESP+44],EBX<br />
004C54C4&nbsp;&nbsp; .&nbsp; 897C24 40&nbsp;&nbsp;&nbsp;&nbsp; MOV DWORD PTR SS:[ESP+40],EDI<br />
004C54C8&nbsp;&nbsp; .&nbsp; 66:897C24 30&nbsp; MOV WORD PTR SS:[ESP+30],DI<br />
004C54CD&nbsp;&nbsp; .&nbsp; 8D70 02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEA ESI,DWORD PTR DS:[EAX+2]<br />
004C54D0&nbsp;&nbsp; &gt;&nbsp; 66:8B08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV CX,WORD PTR DS:[EAX]<br />
004C54D3&nbsp;&nbsp; .&nbsp; 83C0 02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADD EAX,2<br />
004C54D6&nbsp;&nbsp; .&nbsp; 66:3BCF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMP CX,DI<br />
004C54D9&nbsp;&nbsp; .^ 75 F5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNZ SHORT Garena.004C54D0<br />
004C54DB&nbsp;&nbsp; .&nbsp; 2BC6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUB EAX,ESI<br />
004C54DD&nbsp;&nbsp; .&nbsp; D1F8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAR EAX,1<br />
004C54DF&nbsp;&nbsp; .&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EAX<br />
004C54E0&nbsp;&nbsp; .&nbsp; 52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH EDX<br />
004C54E1&nbsp;&nbsp; .&nbsp; 8D4C24 34&nbsp;&nbsp;&nbsp;&nbsp; LEA ECX,DWORD PTR SS:[ESP+34]<br />
004C54E5&nbsp;&nbsp; .&nbsp; E8 F60AF4FF&nbsp;&nbsp; CALL Garena.00405FE0</font></p>
<img src ="http://www.cnblogs.com/wj/aggbug/1287862.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</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>Robot development framework in Mush Client (Lua)</title><link>http://www.cnblogs.com/wj/archive/2008/07/12/1241569.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Sat, 12 Jul 2008 11:40:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2008/07/12/1241569.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1241569.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2008/07/12/1241569.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1241569.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1241569.html</trackback:ping><description><![CDATA[摘要: &nbsp;&nbsp;<a href='http://www.cnblogs.com/wj/archive/2008/07/12/1241569.html'>阅读全文</a><img src ="http://www.cnblogs.com/wj/aggbug/1241569.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</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>售卖大航海时代Online外挂资料</title><link>http://www.cnblogs.com/wj/archive/2008/03/18/DOL_WG_INFO.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Tue, 18 Mar 2008 04:13:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2008/03/18/DOL_WG_INFO.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1111268.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2008/03/18/DOL_WG_INFO.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1111268.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1111268.html</trackback:ping><description><![CDATA[<p>有了这些资料，你可以做到后台的任何形式的强大机器人外挂程序，如近港买卖，采集（丢弃后台）等。是你制作大航海时代Online外挂的必须资料，这里有你所需要的call地址和参数信息，和绝大部分内存地址结构数据分析资料。这些我是花费3个月的时间反汇编分析得来。<br />
有诚意<span style="color: red">购买</span>者可以给我发邮件索取价格(￥5000+以上)，另外也可寻求<span style="color: red">合作</span>。谢谢！<br />
<br />
一系列的游戏call：<br />
<img height="379" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_WG/1.jpg" width="172" border="0" /><br />
<br />
一系列的内存地址数据：<br />
<img height="487" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_WG/2.jpg" width="316" border="0" /><br />
</p>
 <img src ="http://www.cnblogs.com/wj/aggbug/1111268.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47999/" target="_blank">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><item><title>巧用Marshal.GetDelegateForFunctionPointer--C#如何调用按键精灵插件dll</title><link>http://www.cnblogs.com/wj/archive/2008/02/10/1066585.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Sun, 10 Feb 2008 07:20:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2008/02/10/1066585.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1066585.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2008/02/10/1066585.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1066585.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1066585.html</trackback:ping><description><![CDATA[<p>原来是为了在游戏外挂中发送键盘鼠标消息，自己写个sendmessage或者是postmessage又比较麻烦。于是google了一下，发现现在很多脚本工具都有这个功能，其中按键精灵的一个叫361度的插件已经有这个的实现，还验证过了。为什么不拿来己用呢？<br />
首先分析一下按键精灵插件的接口，发现：<br />
<img height="83" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/QMacro/interfaces.JPG" width="357" border="0" /><br />
插件的功能函数没有直接暴露出来，而是通过一个GetCommand的函数返回一个函数描述结构。<br />
接下来看看这个结构：<br />
<img height="115" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/QMacro/QMPLUGIN_CMD_INFO.JPG" width="243" border="0" /><br />
上面这个结构我已经是转换成C#的对应结构了，原结构可以查看按键精灵提供的插件C++接口源代码。<br />
这个结构里面的 handlerFunction 实际上是指向函数的入口点，也就是一个函数指针，每个函数都一样是2个参数：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">typedef&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">QMPLUGIN_HANDLER)(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">lpszParamList,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">lpszRetVal);</span></div>
<p>转换为C#中相应的委托为：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Invoker(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;parameters,&nbsp;StringBuilder&nbsp;returnValue);</span></div>
<br />
大家注意到，有两个参数，c++原型中都是char*类型，转换为C#的delegate后第一个为string，第二个为StringBuilder。这是因为parameters是in的，dll中不会对这个参数做修改，而returnValue是out的，dll返回时候要把返回值写入这个StringBuilder的缓冲区。<br />
<br />
原本的想法是用C++写一个桥来调用dll，不过在.net 2.0 中，框架直接提供了 <font face="Verdana">Marshal.GetDelegateForFunctionPointer</font> 来转换一个函数指针为一个委托，这就方便多拉。请看下面代码，注意看 <font face="Verdana">BGKM_ExecuteCommand</font> 这个函数里面的东西。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Runtime.InteropServices;<br />
<br />
</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;WJsHome.Game.Utility<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;QMacro<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">BGKM5.dll</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;EntryPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">GetCommand</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;IntPtr&nbsp;BGKM_GetCommand(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;commandNum);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[StructLayout(LayoutKind.Sequential)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;QMPLUGIN_CMD_INFO<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;commandName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;commandDescription;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IntPtr&nbsp;handlerFunction;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;paramNumber;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Invoker(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;parameters,&nbsp;StringBuilder&nbsp;returnValue);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;BuildParameters(</span><span style="color: #0000ff">params</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">[]&nbsp;parameters)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;parameters.Length;&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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(parameters[i].ToString());<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">&nbsp;(i&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;parameters.Length&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</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;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;sb.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BGKM_ExecuteCommand(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cmdNum,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;parameters,&nbsp;StringBuilder&nbsp;retVal)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;pCmdInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;BGKM_GetCommand(cmdNum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMPLUGIN_CMD_INFO&nbsp;cmdInfo&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;QMPLUGIN_CMD_INFO();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Marshal.PtrToStructure(pCmdInfo,&nbsp;cmdInfo);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoker&nbsp;invoker&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Marshal.GetDelegateForFunctionPointer(cmdInfo.handlerFunction,&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(Invoker))&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;Invoker;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoker(parameters,&nbsp;retVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BGKM_KeyClick(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;key)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BGKM_ExecuteCommand(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;BuildParameters(hWnd,&nbsp;key),&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BGKM_KeyDown(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;key)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BGKM_ExecuteCommand(</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;BuildParameters(hWnd,&nbsp;key),&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;BGKM_Mouse(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;code,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BGKM_ExecuteCommand(</span><span style="color: #800080">15</span><span style="color: #000000">,&nbsp;BuildParameters(hWnd,&nbsp;code,&nbsp;x,&nbsp;y),&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;WinApi.POINT&nbsp;BGKM_ScrToCli(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;retVal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BGKM_ExecuteCommand(</span><span style="color: #800080">16</span><span style="color: #000000">,&nbsp;BuildParameters(hWnd,&nbsp;x,&nbsp;y),&nbsp;retVal);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;retVal.ToString().Split(</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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WinApi.POINT(</span><span style="color: #0000ff">int</span><span style="color: #000000">.Parse(tmp[</span><span style="color: #800080">0</span><span style="color: #000000">]),&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">.Parse(tmp[</span><span style="color: #800080">1</span><span style="color: #000000">]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<hr />
<br />
好了，方便哇？这样一来，我们可以在.net上面实现动态加载和卸载Win32 dll. 具体思路就是：（还是代码来得方便）<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MsgBox(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;hwnd,</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;msg,</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;cpp,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ok);<br />
<br />
[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">Kernel32</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;GetProcAddress(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;handle,&nbsp;String&nbsp;funcname);<br />
[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">Kernel32</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;LoadLibrary(String&nbsp;funcname);<br />
[DllImport(</span><span style="color: #800000">"</span><span style="color: #800000">Kernel32</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;FreeLibrary(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;handle);<br />
<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Delegate&nbsp;GetAddress(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;dllModule,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;functionname,&nbsp;Type&nbsp;t)<br />
{<br />
　</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;addr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetProcAddress(dllModule,&nbsp;functionname);<br />
　</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(addr&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;<br />
　　</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;&nbsp;<br />
　</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;<br />
　　</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Marshal.GetDelegateForFunctionPointer(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IntPtr(addr),&nbsp;t);<br />
}<br />
<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;button1_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
{<br />
　</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;huser32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
　huser32&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;LoadLibrary(</span><span style="color: #800000">"</span><span style="color: #800000">user32.dll</span><span style="color: #800000">"</span><span style="color: #000000">);&nbsp;<br />
　MsgBox&nbsp;mymsg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(MsgBox)GetAddress(huser32,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">MessageBoxA</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(MsgBox));<br />
　mymsg(</span><span style="color: #0000ff">this</span><span style="color: #000000">.Handle.ToInt32(),&nbsp;txtmsg.Text,&nbsp;txttitle.Text&nbsp;,&nbsp;</span><span style="color: #800080">64</span><span style="color: #000000">);<br />
　FreeLibrary(huser32);<br />
}</span></div>
上面代码是从internet上copy下来的，anyway, enjoy<img src="http://www.cnblogs.com/Emoticons/qface/055243188.gif"  alt="" />~
 <img src ="http://www.cnblogs.com/wj/aggbug/1066585.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47998/" target="_blank">传诺基亚正在开发Android手机</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>Using .Net, Flex, and Red5 to create a flash web application</title><link>http://www.cnblogs.com/wj/archive/2008/01/18/1043750.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Thu, 17 Jan 2008 17:15:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2008/01/18/1043750.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/1043750.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2008/01/18/1043750.html#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/1043750.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/1043750.html</trackback:ping><description><![CDATA[This project i developed recently is a web <font face="Verdana">conference application.<br />
i used .net with C# to write the web service providing the data access layer(dal) to the flash application for authentication and account management. Red5 server is an open source "flash stream server", JAVA is applyed here to write some handlers to process the stream data including the video and audio. Went without saying, Flex is used to develop the interface of the webside. The Red5 server and flash client is two way interaction, which means the flash client is able to send a request to the red5 server, so does red5, which can invoke client functions as well.<br />
<br />
here i post the source code, you have to understand some concepts of red5 before reading:<br />
1. the scope in Red5<br />
a scope is used to group resouces, an Application has two kinds of scope. one is the app scope, the root scope in an application. second is the child scope. they are formed in a tree structure.<br />
2. scope in my application<br />
u'll see the source code in the application.java, there are a hall and many rooms. you will enter the hall after authentication, and can create or join a room in the hall. Notice that both hall and room are child scopes. hall scope is created only once by red5 automatically while the first user entering the hall. room scope is created when a user start a new room.<br />
3. message exchange<br />
the flash client can send public message or publish video/audio stream to the red5 server, and then these messages or stream data will be transmit to the users who are in the same room. itz real time and <font face="Verdana">asynchronous</font>.<br />
<br />
how to make it work:<br />
1. having MS Sql server.<br />
create a database named "xyz" and create a table named "users" with 5 columns: Id(PK), Password, Email, Sex, and Description. you can get it done by running the dbScript.txt in your ms-sql server after the creation of database.<br />
2. running web service<br />
you can run the webservice directly with vistual studio 2005, or put the web service in iis. if u run it in vs2005, u might have to change the port number in the flash client. make sure it works.<br />
3. running flash<br />
open the flash client code source with Flex builder 2.1 (can download from Adobo), <font face="Verdana">compile</font> it, you'd better put the bin code in IIS as well.<br />
4. running Red5 server<br />
i used <font face="Verdana">Eclipse</font> to developed the Red5 handler, there might be some problems of using <font face="Verdana">Eclipse to make red5 running at the beginning. search the solusion in Red5 webside <font face="Verdana"><a href="http://osflash.org/red5">http://osflash.org/red5</a>, and create a new application called "XyzTalk", u can directly import my code&nbsp;into your red5 project. and finally build it.<br />
</font></font>5. done<br />
once you get everything done correctly, u will see the beautiful interface (no? dam!) below:<br />
<br />
login:<br />
<img height="253" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/xyz/login.jpg" width="300" border="0" /><br />
<br />
register:<br />
<img height="439" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/xyz/register.jpg" width="430" border="0" /><br />
<br />
hall:<br />
<img height="562" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/xyz/hall.jpg" width="669" border="0" /><br />
<br />
room:<br />
<img height="624" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/xyz/room.jpg" width="822" border="0" /><br />
<br />
download URL:<br />
<a href="/Files/wj/xyz.rar">/Files/wj/xyz.rar</a><br />
<br />
btw, i didn't finish the shaing files part, yup. if any recommendations or bugs u firgure out, just leave msg or send me an email.<br />
enjoy~ bye~<br />
</font>
  <img src ="http://www.cnblogs.com/wj/aggbug/1043750.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47996/" target="_blank">7月编程语言排行榜</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>做了个C#的Hotkey简单封装，希望对大家有帮助</title><link>http://www.cnblogs.com/wj/archive/2007/10/18/929026.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Thu, 18 Oct 2007 06:27:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/10/18/929026.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/929026.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/10/18/929026.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/929026.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/929026.html</trackback:ping><description><![CDATA[本来听说winapi里面的<font face="Verdana">RegisterHotKey有时候不好使，于是打算用hook键盘消息来做hook key，结果发现hook那里处理消息那里还挺麻烦，也想会不会造成系统的额外开销比较大，所以最后用<font face="Verdana">RegisterHotKey</font>来封装了一下，测试没有问题，还是可以的。（winform）<br />
下面的代码包括一个Textbox的处理，和一个封装了api的类。Textbox那里就是处理用户定义的热键的界面表示，比如用户按键的时候会出现"Ctrl+Alt+A"之类的，Api封装那里做了处理，只管Register好了，不用管UnRegister，当注册一个一样的Id的hotkey，会自动先UnRegister原来的，然后最后关闭窗口的时候，调用一下HotkeyHelper.Dispose()就可以了。还希望多加建议。here we go..<br />
<hr />
Textbox部分：(Key hotkeyVk = null;)<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;txbHotKey_KeyDown(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;KeyEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txbHotKey.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Empty;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Control)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Ctrl+</span><span style="color: #000000">"</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;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Alt)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Alt+</span><span style="color: #000000">"</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;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.Shift)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Shift+</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;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.KeyCode&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;Keys.A&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;Keys.Z)<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">&nbsp;(e.Modifiers&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;Keys.None)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;e.KeyCode.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotkeyVk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.KeyCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.KeyCode&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;Keys.D0&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;Keys.D9)<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">&nbsp;(e.Modifiers&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;Keys.None)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;e.KeyCode.ToString().Remove(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</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;hotkeyVk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.KeyCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.KeyCode&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;Keys.NumPad0&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;Keys.NumPad9)<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">&nbsp;(e.Modifiers&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;Keys.None)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;e.KeyCode.ToString().Replace(</span><span style="color: #000000">"</span><span style="color: #000000">Pad</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</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;&nbsp;&nbsp;&nbsp;&nbsp;hotkeyVk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.KeyCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.KeyCode&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;Keys.F1&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;e.KeyCode&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;Keys.F12)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;e.KeyCode.ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotkeyVk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.KeyCode;<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;e.SuppressKeyPress&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Handled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;txbHotKey_KeyPress(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;KeyPressEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.Handled&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;txbHotKey_KeyUp(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;KeyEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckHotkey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;txbHotKey_LostFocus(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckHotkey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;CheckHotkey()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(txbHotKey.Text.EndsWith(</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;txbHotKey.Text&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Empty)<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;txbHotKey.Text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">无</span><span style="color: #000000">"</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;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;btnHotKey_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;hotkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;txbHotKey.Text.Replace(</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">""</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">&nbsp;(hotkey&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">无</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;hotkey&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">.Empty)<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">uint</span><span style="color: #000000">&nbsp;modifies&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</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">&nbsp;(hotkey.Contains(</span><span style="color: #000000">"</span><span style="color: #000000">Ctrl</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modifies&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;HotkeyHelper.MOD_CONTROL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hotkey.Replace(</span><span style="color: #000000">"</span><span style="color: #000000">Ctrl</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</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 />
&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">&nbsp;(hotkey.Contains(</span><span style="color: #000000">"</span><span style="color: #000000">Alt</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modifies&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;HotkeyHelper.MOD_ALT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hotkey.Replace(</span><span style="color: #000000">"</span><span style="color: #000000">Alt</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</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 />
&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">&nbsp;(hotkey.Contains(</span><span style="color: #000000">"</span><span style="color: #000000">Shift</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modifies&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;HotkeyHelper.MOD_SHIFT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hotkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hotkey.Replace(</span><span style="color: #000000">"</span><span style="color: #000000">Shift</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</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 />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GameProvider.HotkeyHelper.RegisterHotKey(</span><span style="color: #0000ff">this</span><span style="color: #000000">.Handle,&nbsp;hotkeyId,&nbsp;modifies,&nbsp;(</span><span style="color: #0000ff">uint</span><span style="color: #000000">)hotkeyVk);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
HotkeyHelper部分：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;GFSucker.Game.Utility;<br />
<br />
</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;GFSucker.Game.Provider<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HotkeyHelper&nbsp;:&nbsp;IDisposable<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MOD_ALT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MOD_CONTROL&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x2</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MOD_SHIFT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x4</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MOD_WIN&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x8</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;WM_HOTKEY&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x312</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">,&nbsp;Hotkey</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;dicHotkeys;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;HotkeyHelper()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dicHotkeys&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">,&nbsp;Hotkey</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;RegisterHotKey(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;fsModifiers,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;vk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(dicHotkeys.ContainsKey(id))<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">&nbsp;(dicHotkeys[id].IsRegistered)<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;UnregisterHotKey(dicHotkeys[id].HWnd,&nbsp;id);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;unregister&nbsp;firstly</span><span style="color: #008000"><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;dicHotkeys[id].IsRegistered&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</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;dicHotkeys[id].HWnd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hWnd;&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;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;set&nbsp;the&nbsp;new&nbsp;hwnd&nbsp;(normally&nbsp;should&nbsp;be&nbsp;the&nbsp;same)</span><span style="color: #008000"><br />
</span><span style="color: #000000">&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;</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;dicHotkeys.Add(id,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Hotkey(hWnd,&nbsp;</span><span style="color: #0000ff">false</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;dicHotkeys[id].IsRegistered&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;WinApi.RegisterHotKey(hWnd,&nbsp;id,&nbsp;fsModifiers,&nbsp;vk);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;dicHotkeys[id].IsRegistered;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UnregisterHotKey(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;WinApi.UnregisterHotKey(hWnd,&nbsp;id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;Hotkey&nbsp;Information</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Hotkey<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Hotkey(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isRegistered)<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;_HWnd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hWnd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_IsRegistered&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;isRegistered;<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;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;IntPtr&nbsp;_HWnd;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IntPtr&nbsp;HWnd<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">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_HWnd;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;{&nbsp;_HWnd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}<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;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;_IsRegistered;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;IsRegistered<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">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;_IsRegistered;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;{&nbsp;_IsRegistered&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#region</span><span style="color: #000000">&nbsp;IDisposable&nbsp;成员</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;Dispose()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;dicHotkeys.Keys)<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">&nbsp;(dicHotkeys[id].IsRegistered)<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;UnregisterHotKey(dicHotkeys[id].HWnd,&nbsp;id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">#endregion</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
Winapi声明：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="color: #0000ff">return</span><span style="color: #000000">:&nbsp;MarshalAs(UnmanagedType.Bool)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;RegisterHotKey(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;fsModifiers,&nbsp;</span><span style="color: #0000ff">uint</span><span style="color: #000000">&nbsp;vk);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[</span><span style="color: #0000ff">return</span><span style="color: #000000">:&nbsp;MarshalAs(UnmanagedType.Bool)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;UnregisterHotKey(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id);</span></div>
</font><br />
Override winform窗体的<font face="Verdana">WndProc</font>:(就是接受到hotkey信息的时候，做你想做的东西)<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">override</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;WndProc(</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;Message&nbsp;m)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">base</span><span style="color: #000000">.WndProc(</span><span style="color: #0000ff">ref</span><span style="color: #000000">&nbsp;m);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(m.Msg&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;HotkeyHelper.WM_HOTKEY)<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;MainForm&nbsp;mainform&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;MainForm;<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">&nbsp;(mainform&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</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;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(mainform.WindowState&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;FormWindowState.Minimized)<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;mainform.WindowState&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FormWindowState.Normal;<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;mainform.Activate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<hr />
<br />
因为直接从程序中copy出来的，代码没有很多注释，不过都是非常浅显易懂的东西，名字看上去还是一目了然的，另外说一句，我觉得如果重构得比较好的代码是不需要做过多的注释的，代码本身就是注释，注释用在解释一些比较混乱的行为意图。希望对大家有帮助咯。bye~
 <img src ="http://www.cnblogs.com/wj/aggbug/929026.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47995/" target="_blank">Google Voice 上手</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/wj/archive/2007/10/10/GongFuCheaterRelease.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Wed, 10 Oct 2007 05:55:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/10/10/GongFuCheaterRelease.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/919560.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/10/10/GongFuCheaterRelease.html#Feedback</comments><slash:comments>101</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/919560.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/919560.html</trackback:ping><description><![CDATA[<span style="color: red">2007-10-23: <span style="color: #000000">程序暂停更新，服务器关闭一段时间<br />
</span>2007-10-22: <span style="color: #000000">增加【定时技能】，有bug请提交<br />
</span>2007-10-22: <span style="color: #000000">改进程序结构<br />
</span>2007-10-14: <span style="color: #000000">增加【装备切换】功能<br />
</span>2007-10-12: <span style="color: #000000">增加程序热键呼叫功能<br />
</span>2007-10-11: <span style="color: #000000">增加窗口隐藏，大小调整等系列功能</span><br />
2007-10-11: <span style="color: #000000">增加【超级视角】功能<br />
</span>2007-10-10: <span style="color: #000000">增加【自动丢弃】物品功能<br />
</span>2007-10-10: <span style="color: #000000">合理布局程序界面<br />
</span>2007-10-09: <span style="color: #000000">同步更新支持游戏至"<font face="Verdana">1.0.20b R"</font>版本<br />
</span>2007-10-07:</span> 开启测试QQ群号：<span style="color: #0000ff">10925476</span> <br />
<br />
使用步骤：<br />
<font face="Verdana">1.安装.Net Framework 2<br />
2.在<span style="color: #0000ff">QQ的共享下载</span>外挂<br />
3.解压程序到任意目录<br />
4.用户名和密码任意<br />
*.服务器在国外,加载可能比较慢.*<br />
<br />
外挂特点：<br />
*.完全后台挂机化<br />
*.非常高效的寻怪算法，不依赖Tab键<br />
*.自动抛弃垃圾物品，并且可自定义，你的背包永远不会存在垃圾<br />
*.强大简便的装备自动切换功能，更胜一筹<br />
*.自动捡取（高效）<br />
*.定点挂机<br />
*.外挂配置实时话，可以即时改变挂机配置不用停止再重新启动外挂<br />
*.使用.Net Remoting技术使你永远使用最新版本外挂<br />
*.游戏资源提供当前场景所有可用信息，双击可跑到怪物面前，双击背包列表使用物品<br />
<br />
*.Net Framework 2 下载地址:<br />
<font face="Verdana"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=zh-cn">http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=zh-cn</a><br />
<br />
*.最新截图:<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_gf3.JPG" border="0" /><br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_gf2.JPG" border="0" /><br />
<img height="543" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_g1.JPG" width="831" border="0" /></font></font>&nbsp; 
  <img src ="http://www.cnblogs.com/wj/aggbug/919560.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47994/" 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>我的第一个全后台CALL外挂-功夫世界外挂</title><link>http://www.cnblogs.com/wj/archive/2007/09/21/Word_Of_GongFu_Cheater_by_WJsHome.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Fri, 21 Sep 2007 08:01:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/09/21/Word_Of_GongFu_Cheater_by_WJsHome.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/901488.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/09/21/Word_Of_GongFu_Cheater_by_WJsHome.html#Feedback</comments><slash:comments>129</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/901488.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/901488.html</trackback:ping><description><![CDATA[<p><span style="color: red">*&nbsp;外挂进入测试阶段，在此查看外挂下载信息：</span><br />
<a href="http://www.cnblogs.com/wj/archive/2007/10/10/GongFuCheaterRelease.html">http://www.cnblogs.com/wj/archive/2007/10/10/GongFuCheaterRelease.html</a>
<hr />
花了三个星期的空余时间写下此挂，目的是为了锻炼一下汇编方面的知识，怎么跟踪，反跟踪，调试等。整个挂用C#编写，全部实现的游戏功能都是通过直接Call游戏函数实现，所以可以说是完全后台的。其实我写代码的时间并不算很多，我把大部分时间放在代码的重构上面，就自己看起来的代码感觉挺满意，就此贴图以表纪念。<br />
<br />
<img style="width: 693px; height: 575px" height="575" alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_GFWord.JPG" width="693" border="0" /><br />
（原图：<a href="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_GFWord.JPG">http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_GFWord.JPG</a>)<br />
在外挂的主界面中，双击NPC名称即<span style="color: red">自动行走</span>到相应的NPC位置（位置是你当前按刷新时NPC的位置），双击背包可以直接<span style="color: red">使用物品</span>。挂机功能经我调试后已经非常之完善。还有就是<span style="color: red">自动捡东西</span>的功能，已经完全可以代替游戏中用元宝买的&#8220;捡垃圾猪&#8221;。在设计<span style="color: red">定点打怪挂机</span>机器人逻辑时候，很难避免多线程的问题，比如补血线程和寻怪线程之间的通讯，补血线程发现要打坐回复，就通知打怪线程停止打怪，然后打坐，血满了再通知继续打怪。后来经过一番改造，已经很完满的解决这个技术问题，我再对游戏中的各个模块进行了封装，如果要开发另外一个游戏的外挂，可重用性是非常之高的。如果做过外挂的人都知道，需要内存数据的基址，然而这些数据在游戏升级时会变动，所以以后对付游戏升级可以用特征码的方法寻找基址。在我的程序中，所有内存地址数据，包括他们之间的依赖关系都是可配置的，程序会根据配置的数据，自动计算表达式的值，并可以指定数据是否缓存等。所以在对付游戏升级造成的内存地址数据变化有一定的弹性，现在我在处理中的问题是如何更有效的对付Call地址的变化，现在这部分我是hard code程序里面的，将来我想把他都全部变成可配置话，这样灵活度就非常之高了。以后会发更多的自动化机器人，比如<span style="color: red">自动采集</span>等<br />
<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/106886/o_Design.JPG" border="0" /><br />
一个游戏的好坏，除开这个游戏本身的内涵之外，另外一个最大问题就是代理商。对于《大航海时代Online》的倒闭，我感到非常遗憾。
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/wj/aggbug/901488.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47989/" target="_blank">Twitter无处不在 魔兽世界Twitter发送器插件发布</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/wj/archive/2007/07/21/827000.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Sat, 21 Jul 2007 15:36:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/07/21/827000.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/827000.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/07/21/827000.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/827000.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/827000.html</trackback:ping><description><![CDATA[最近在入门操作系统，其中
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">;</span><span style="color: #000000">----------------------------------------------------------------------------</span><span style="color: #000000"><br />
;&nbsp;函数名:&nbsp;ReadSector<br />
;</span><span style="color: #000000">----------------------------------------------------------------------------</span><span style="color: #000000"><br />
;&nbsp;作用:<br />
;&nbsp;&nbsp;&nbsp;&nbsp;从第&nbsp;ax&nbsp;个&nbsp;Sector&nbsp;开始,&nbsp;将&nbsp;cl&nbsp;个&nbsp;Sector&nbsp;读入&nbsp;es:bx&nbsp;中<br />
ReadSector:<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #000000">-----------------------------------------------------------------------</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;怎样由扇区号求扇区在磁盘中的位置&nbsp;(扇区号&nbsp;</span><span style="color: #000000">-&gt;</span><span style="color: #000000">&nbsp;柱面号,&nbsp;起始扇区,&nbsp;磁头号)<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #000000">-----------------------------------------------------------------------</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;设扇区号为&nbsp;x<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┌&nbsp;柱面号&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;y&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┌&nbsp;商&nbsp;y&nbsp;┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span><span style="color: #000000">--------------</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=&gt;</span><span style="color: #000000">&nbsp;┤&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└&nbsp;磁头号&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;y&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;每磁道扇区数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└&nbsp;余&nbsp;z&nbsp;</span><span style="color: #000000">=&gt;</span><span style="color: #000000">&nbsp;起始扇区号&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;z&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;bp<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;bp,&nbsp;sp<br />
&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;esp,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;辟出两个字节的堆栈区域保存要读的扇区数:&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[bp</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[bp</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">],&nbsp;cl<br />
&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;保存&nbsp;bx<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;bl,&nbsp;[BPB_SecPerTrk]&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;bl:&nbsp;除数<br />
&nbsp;&nbsp;&nbsp;&nbsp;div&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;y&nbsp;在&nbsp;al&nbsp;中,&nbsp;z&nbsp;在&nbsp;ah&nbsp;中<br />
&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;ah&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;z&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;cl,&nbsp;ah&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;cl&nbsp;</span><span style="color: #000000">&lt;-</span><span style="color: #000000">&nbsp;起始扇区号<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;dh,&nbsp;al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;dh&nbsp;</span><span style="color: #000000">&lt;-</span><span style="color: #000000">&nbsp;y<br />
&nbsp;&nbsp;&nbsp;&nbsp;shr&nbsp;&nbsp;&nbsp;&nbsp;al,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;y&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;(其实是&nbsp;y</span><span style="color: #000000">/</span><span style="color: #000000">BPB_NumHeads,&nbsp;这里BPB_NumHeads</span><span style="color: #000000">=</span><span style="color: #000000">2</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ch,&nbsp;al&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;ch&nbsp;</span><span style="color: #000000">&lt;-</span><span style="color: #000000">&nbsp;柱面号<br />
&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;&nbsp;dh,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;dh&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;磁头号<br />
&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;恢复&nbsp;bx<br />
&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;至此,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">柱面号,&nbsp;起始扇区,&nbsp;磁头号</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;全部得到&nbsp;</span><span style="color: #000000">^^^^^^^^^^^^^^^^^^^^^^^^</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;dl,&nbsp;[BS_DrvNum]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;驱动器号&nbsp;(</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;表示&nbsp;A&nbsp;盘)<br />
.GoOnReading:<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;ah,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;读<br />
&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;al,&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[bp</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;读&nbsp;al&nbsp;个扇区<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;13h<br />
&nbsp;&nbsp;&nbsp;&nbsp;jc&nbsp;&nbsp;&nbsp;&nbsp;.GoOnReading&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;如果读取错误&nbsp;CF&nbsp;会被置为&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;这时就不停地读,&nbsp;直到正确为止<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;esp,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp;bp<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret</span></div>
遇到是读取内核文件到内存卡了我半天没有转回来。下面贴一下资料（不是我写的），希望对新人有些帮助。<br />
这里用到13h号中断来读取磁盘上的资料，下面是一个根据磁盘扇区号计算13h号中断所需要的参数。<br />
<br />
我开始不明白上面提到的公式计算参数，结果困惑半天，后来才找到答案，关键是因为自己对磁盘的基本知识了解不清，扇区号的分布方式不是我&#8220;原本以为&#8221;的那样，下面转贴一个关于软盘描述的详细资料。<br />
<hr />
<br />
<p>一、3.5寸1.44M软盘结构 </p>
<p>1、 结构：2面、80道/面、18扇区/道、512字节/扇区 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 扇区总数=2面 X&nbsp; 80道/面 X&nbsp; 18扇区/道&nbsp; =&nbsp; 2880扇区 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存储容量= 512字节/扇区X&nbsp; 2880扇区 =&nbsp; 1440 KB </p>
<p>2、物理扇区号： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; 面： 编号0----1； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80道： 编号0----79 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18扇区：编号1----18 </p>
<p>3、相对扇区号：共2880个扇区，相对扇区号范围为 0----2879 <br />
编号顺序： <br />
扇区物理号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相对扇区号 <br />
0面，0道，1扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 <br />
0面，0道，2扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 <br />
0面，0道，3扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 <br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. <br />
0面，0道，18扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17 <br />
1面，0道，1扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18 <br />
&#8230;&#8230;&#8230;&#8230;&#8230;.. <br />
1面，0道，18扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 35 <br />
0面，1道，1扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 36 <br />
0面，1道，18扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53 <br />
1面，1道，1扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 54 <br />
&#8230;&#8230;&#8230; <br />
1面，79道，18扇区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2879 </p>
<p>4、物理扇区号（A，B，C）与相对扇区号（S）相互转换公式： <br />
头/面(0--1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 道(0-79)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 扇区 (1--18) <br />
&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C <br />
例如：1面&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15道&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7扇区 <br />
（0道----14道）*2面*18+0面的第15道18个扇区+1面第15道7个扇区-1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15*2*18+18+7-1 <br />
当A=1时S=B*18*2+18+C-1 <br />
当A=0时S=B*18*2+C-1 <br />
一般情况：S=B*18*2+18*A+C-1 <br />
S=B*18*2+18*A+C-1 <br />
C=(S%18)+1 <br />
A= (INT（S/18）)%2 <br />
B= INT(S/36） <br />
簇(CLUSTER):磁盘分配给文件的最小单位，1簇=2n扇区,&nbsp; n=0,1,2,&#8230;&#8230;.. <br />
扇区：是磁盘读写的最小单位 <br />
字节：是内存读写的最小单位 <br />
位：是CPU处理的最小单位 </p>
<p>5、3.5寸1.44MB软盘存储结构 <br />
1、引导扇区BOOT <br />
（0扇区） <br />
作用： <br />
记录磁盘的基本信息。<br />
OEM ID:格式化本软盘的软件版本号 <br />
BYTES PER SECTOR：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每扇区字节数 （512） <br />
SECTOR PER CLUSTER：&nbsp;&nbsp;&nbsp; 每簇扇区数 （1） <br />
FAT COPIES：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件分配表的个数&nbsp;&nbsp; （2） <br />
ROOT DIRECTORY ENTRIES：根目录区可容纳的文件数（224） <br />
TOTAL SECTORS ON DISK： 磁盘总扇区数 （2880） <br />
MEDIA DESCRIPTOR BYTE：本磁盘类型的特征字节 （F0） <br />
SECTORS PER FAT：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个FAT占用的扇区数&nbsp; （9） <br />
SECTORS PER TRACK：&nbsp;&nbsp;&nbsp;&nbsp; 每磁道的扇区数&nbsp;&nbsp;&nbsp;&nbsp; （18） <br />
SIDES：&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; （2） <br />
VOLUME SERIAL NUMBER：卷标号 （18F53A49） <br />
FILE SYSTEM ID：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件系统标识 （FAT12） <br />
2、文件分配表FAT1 <br />
（1--9扇区） <br />
作用： <br />
记录磁盘空间每个簇的使用情况以及相互之间的关系。 共有9X512=4608个字节，用12个二进制位(1.5个字节)<br />
表示一个簇的状态,最多可管理3072个簇，实际管理2847个簇，有334.5个字节空余。 <br />
FAT每个单元的值以及含义: <br />
000H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 空簇 <br />
002H----FEFH&nbsp; 该簇已被使用,其值为下一个簇的簇号 <br />
FF7H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 坏簇 <br />
FF8H----FFFH&nbsp; 该簇已被使用,并且是最后一个簇 <br />
FF0H----FF6H&nbsp; 保留簇 <br />
3、文件分配表FAT2 <br />
（10--18扇区） <br />
作用： <br />
作为FAT1的备份。 同上 <br />
4、根目录区ROOT <br />
（19--32扇区） ROOT根目录&nbsp; 14个扇区&nbsp;&nbsp; 14*512B <br />
&nbsp; 文件目录表中每个文件登记项占用 32个字节，一共可以存储224个文件。（14*512/32） <br />
32个字节：1- 8 文件的主名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 8B） <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9-11 文件的扩展名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 3B） <br />
12 文件的属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 1B） <br />
b7&nbsp; b6&nbsp;&nbsp; b5&nbsp;&nbsp;&nbsp; b4&nbsp;&nbsp;&nbsp;&nbsp; b3&nbsp;&nbsp;&nbsp;&nbsp; b2&nbsp;&nbsp; b1&nbsp;&nbsp;&nbsp; b0 <br />
存档、子目录、卷标、系统、隐含、只读 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13-22 保留字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （10B） <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 23-24 文件的最后更新的日期 （ 2B）&nbsp;&nbsp; <br />
[月 4位、日 5位、年 7位&nbsp; (+1980)] <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25-26 文件的最后更新的时间 （ 2B）&nbsp;&nbsp; <br />
[时 5位、分 6位、秒 5位 （*2）] <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27-28 文件的起始簇号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 2B） <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 29-32 文件的大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 4B） </p>
<p>文件名第一个字节的含义： <br />
00：该目录项未用，下面无目录项 <br />
E5：已经删除文件的目录项 <br />
2E：子目录项 <br />
其他：文件名首字符 <br />
5、数据区DATA <br />
（33—2879扇区,共2847个扇区，1簇=2n个扇区,&nbsp; n取0,共2847个簇，编号为 2--2848）&nbsp; <br />
FAT1和FAT2： <br />
FAT 特征&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp; <br />
F0F FFF 2848 0 0 0 0 0 <br />
8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp; <br />
0 0 0 0 0 0 0 0 </p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; </p>
<p>2841&nbsp;&nbsp; 2842&nbsp;&nbsp; 2843&nbsp;&nbsp; 2844&nbsp;&nbsp; 2845&nbsp; 2846&nbsp;&nbsp; 2847&nbsp;&nbsp; 2848 <br />
0 000 0 0 0 0 0 FFF <br />
注：F0为3.5寸软盘的特征(在BOOT区中) </p>
<p>簇号和相对扇区号的关系： <br />
磁盘可用的扇区的范围(用相对扇区号表示):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 33--2879 <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2—2848 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 簇号=相对扇区号-31 <br />
********************** <br />
FAT12最多能管理 4K个簇， 如120G硬盘采用FAT12则每簇约 30M <br />
FAT16最多能管理64K个簇， 如120G硬盘采用FAT16则每簇约1.9M <br />
FAT32最多能管理 4G个簇， 如120G硬盘采用FAT32则每簇约 30B <br />
*************************** <br />
FAT1: 9个扇区,&nbsp; 9*512字节 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用12个二进制位表示一个簇的状态,(1.5B) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9*512*8/12=3072(个簇) <br />
offset:偏移量,距离本扇区第一个字节的位置. </p>
<p>&nbsp;&nbsp; FAT12: 12b = 4096(个簇) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.44M&nbsp; 1个簇=1扇区 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 如果 4G硬盘，则&nbsp; 4*1024*1024*2扇区/4096簇 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个簇=2048扇区 <br />
*********************************** <br />
问题： <br />
1、FAT12 用12个二进制表示一个簇的状态, 为什么1.44MB软盘FAT需要9个扇区? <br />
(2847+2)*1.5=2849*1.5=4273.5字节,&nbsp;&nbsp; <br />
换算为扇区4273.5/512=8.34&nbsp; 取整数9 <br />
&nbsp;&nbsp; FAT12: 12b = 4096(个簇) <br />
&nbsp;&nbsp; 4GB&nbsp;&nbsp;&nbsp; 4*1024*1024*2扇区&nbsp;&nbsp; /&nbsp;&nbsp; 4096簇 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个簇=2048扇区 <br />
2、如果4GB硬盘用FAT12管理，每簇多少扇区？ <br />
3、对于FAT系统的磁盘，删除一个文件对磁盘的各个区域（BOOT、FAT1、FAT2、ROOT、DATA）做哪些操作？ <br />
在ROOT 中把文件名的第一个字节改为E5H <br />
在FAT中把文件占用的簇的状态改为0 </p>
<p>FAT12 用12个二进制表示一个簇的状态, <br />
需要(2847+2)*1.5=4274字节,&nbsp; 换算为扇区4274/512=9 <br />
F0为3.5寸软盘的特征(在BOOT区中) <br />
2847+2=2849&nbsp;&nbsp;&nbsp; 2849*12/8=4274字节&nbsp; 占8.34扇区即9扇区 <br />
************************************ <br />
硬盘结构： <br />
柱面（0-----1023），头（0-15），扇区（1---63） <br />
1024 X 16 X 63 X 512 = 540MB <br />
1024 X 256 X 63 X 512 = 8 GB </p>
<p>0头0道1扇区：MBS（主引导扇区） <br />
MBS（主引导扇区）：1、主引导程序：MBR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （446B） 0--1BDH <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命令FDISK&nbsp; /MBR ：重新构造主引导程序 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、分区表：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （16X4=64B）&nbsp; 1BEH—1FDH <br />
把硬盘分为4个区域，每个区域可以安装一类操作系统。 </p>
<p>每16B字节 描述硬盘一个区的基本信息： <br />
引导标志，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1B <br />
开始的物理位置&nbsp;&nbsp;&nbsp; 3B <br />
操作系统标识，&nbsp;&nbsp;&nbsp; 1B <br />
结束的物理位置，&nbsp; 3B <br />
开始的相对扇区号，4B <br />
可用扇区总数。&nbsp;&nbsp;&nbsp; 4B <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、主引导扇区标志：55AAH （2B）&nbsp; 1FEH—1FFH <br />
硬盘的0头0道1扇区（512B），主引导扇区 <br />
0-445：&nbsp; （000-1BDH） 446B&nbsp;&nbsp; 主引导记录&nbsp;&nbsp;&nbsp; 主引导程序 <br />
446-461：（1BEH-1CDH） 16B&nbsp;&nbsp; 第一个分区信息 <br />
462-477：（1CEH-1DDH） 16B&nbsp;&nbsp; 第二个分区信息 <br />
478-493：（1DEH-1EDH） 16B&nbsp;&nbsp; 第三个分区信息 <br />
494-509：（1EEH-1FDH） 16B&nbsp;&nbsp; 第四个分区信息 <br />
510-511：（1FEH-1FFH）&nbsp; 2B&nbsp;&nbsp; 主引导记录标志，内容为 55AAH <br />
*********** <br />
每个分区信息（16B） <br />
0：分区的激活标志，00H/80H （不可引导/可引导），四个分区中只能有一个80H <br />
1-3：本分区开始的头、道、扇区 <br />
4：&nbsp; 本分区安装的操作系统标志 <br />
5-7：本分区结束的头、道、扇区 <br />
8-11：本分区开始的相对扇区号 <br />
12-15：本分区可用的扇区总数 </p>
<p><br />
3.5寸软盘存储结构 <br />
BOOT（0扇区） FAT1文件分配表1（1--9扇区） FAT2文件分配表2（10--18扇区） <br />
ROOT根目录区（19--32扇区） <br />
DATA数据区（2847扇区、2847个簇，编号为 2-----2848） </p>
<p>2847+2=2849&nbsp;&nbsp;&nbsp; 2849*12/8=4274字节&nbsp; 占8.34扇区即9扇区 </p>
<p>簇(CLUSTER):磁盘分配给文件的最小单位 <br />
文件分配表(FAT):记录磁盘空间每个簇的使用情况,以及相互关系. <br />
磁盘可用的扇区的范围(用相对扇区号表示): <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 33--2879&nbsp;&nbsp; <br />
对应的簇号:2--2848 <br />
FAT1: 9个扇区,&nbsp; 9*512字节 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用12个二进制位表示一个簇的状态,(1.5B) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9*512*8/12=3072(个簇) <br />
offset:偏移量,距离本扇区第一个字节的位置. </p>
<p>F0 FF FF&nbsp; 00 40 00 05 60 00 <br />
FAT特征 <br />
&nbsp;&nbsp; FAT12: 12b = 4096(个簇)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.44M&nbsp; 1个簇=1扇区 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4GB&nbsp;&nbsp;&nbsp; 4*1024*1024*2扇区/4096簇 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个簇=2048扇区&nbsp; <br />
</p>
<img src ="http://www.cnblogs.com/wj/aggbug/827000.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47988/" target="_blank">Firefox 3.5匆忙推出漏洞多 Mozilla本月将更新</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/wj/archive/2007/07/18/822611.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Wed, 18 Jul 2007 07:18:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/07/18/822611.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/822611.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/07/18/822611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/822611.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/822611.html</trackback:ping><description><![CDATA[<p>作者：foxabu<br>原文：<a href="http://bbs.pediy.com/showthread.php?t=47860">http://bbs.pediy.com/showthread.php?t=47860</a><br><br><img height=3182 alt="" src="http://bbs.pediy.com/attachment.php?attachmentid=6679&amp;d=1184158304" width=765 border=0><a href="http://www.cnblogs.com/wj/admin/EditPosts.aspx?opt=1"></a></p>
 <img src ="http://www.cnblogs.com/wj/aggbug/822611.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47987/" target="_blank">预测：Twitter最可能收购的十家公司</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>通过修改Mutex来达到大航海OL多开</title><link>http://www.cnblogs.com/wj/archive/2007/03/28/690659.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Tue, 27 Mar 2007 23:48:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/03/28/690659.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/690659.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/03/28/690659.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/690659.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/690659.html</trackback:ping><description><![CDATA[这里再发一个多开大航海OL的启动方法。大航海OL通过创建Mutex来防止多开，直接修改GVOnline.bin文件即可：<br><br><img height=143 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_M.JPG" width=530 border=0><br><br>把地址<span style="COLOR: red">0x00077457</span>中的74修改成EB即可，大家可以用UltraEdit修改，这里post一个已经修改过的GVOnline.bin文件。<br><br><img height=66 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_M2.JPG" width=629 border=0><br><br>直接把他解压到游戏目录，将他改名成随便一个exe名字，双击就可以启动，再也不用去新建用户了，而且连更新也跳过了。爽哉？<br><br>适用 2007-3-26 更新文件：<a href="http://www.cnblogs.com/Files/wj/GVOnline.bin.rar">http://www.cnblogs.com/Files/wj/GVOnline.bin.rar</a><br><br>相关连接：<a href="http://www.cnblogs.com/wj/archive/2007/03/27/689482.html">http://www.cnblogs.com/wj/archive/2007/03/27/689482.html</a> 
<img src ="http://www.cnblogs.com/wj/aggbug/690659.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47986/" 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>如何利用WPE对大航海Online进行港内瞬移，瞬时生产和快速进港</title><link>http://www.cnblogs.com/wj/archive/2007/03/27/689482.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Tue, 27 Mar 2007 01:38:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2007/03/27/689482.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/689482.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2007/03/27/689482.html#Feedback</comments><slash:comments>40</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/689482.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/689482.html</trackback:ping><description><![CDATA[<p>玩国服大航海已经有一段时间，因为是个大航海迷，从3区4服开服到现在，就一直玩到现在。不过只能很遗憾的说一句，当初5，6个军朋友建立起来的工会，当一路走来，就剩下我一个人了。会内更新了好几批人，里面西班牙和葡萄居多，还有几个英国的，但是气氛确实很融洽，仍然保持活力，这也是我离开最前感到欣慰的。网游经验这么多年，不过这次确确实实给我感叹的就是：怎么会有这么一个垃圾代理？一个说话不算话的代理，一次又一次的对玩家欺骗，要不是大航海口碑好，我想他也早就倒闭了吧，就是这样一个代理，让大量玩家流失的，大家心里清楚我也不多说了。<br><br>转入正题，其实用WPE截取数据包也不是很新鲜的事情，这里的思路是：<span style="COLOR: red">截取游戏发送给服务器的封包，再次对游戏发送。</span>这样就达到目的了。据我所知，大航海Online这个游戏数据包的形式虽然是和时间有关，但是一个截取的封包在登陆后，只要不断线仍然可以发送有效。我标题所说的<br>&#8220;港内瞬移&#8221; ：在港口内，可以随意移动到任何一个场景。比如移动到码头，海事工会，酒吧等等，而不是人物位置随意变动。<br>&#8220;瞬时生产&#8221;：利用截取到生产物品的封包，在短时间内发送N次就达到瞬时生产的目的(当然身上必须有材料)，如果没有行动力仍然是可以生产。<br>&#8220;快速进港&#8221;：在还用鼠标点不到港口的时候，就可以进入港口，但是只是在海上快要到港口附近的才是有效的。<br><br><span style="COLOR: red">注意：各位玩家自重，当你考虑用我下面的方法时，你的号可能被封，不过可以告诉大家现在游戏的版本对WPE是无法检测出来，除非给GM当场抓到。大家可以不用WPE，去用一款和WPE同等功能的软件即可，可以不必担心游戏检测的问题。</span><br><br>具体方法：<br>1) 下载WPE，自己下载，这里不提供下载地址，大家去Google，一大堆。<span style="COLOR: red">其实不只是WPE，任何一款数据包截获软件都行</span>，WPE只是比较通用而已，比WPE强大的功能多的数据嗅味软件多得是嘞。<br><br>2) 先开启进入游戏，打开WPE，选择游戏程序。<br><img height=724 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/48866/1.JPG" width=956 border=0><br><br>3) 选择WPE的过滤模式：菜单－》查看－》选项，只把发送勾上，接收去掉。<br><img height=358 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_2.JPG" width=344 border=0><br><br>4) 点击开始记录封包：（一下主要用生产功能给大家讲解）<br><img height=28 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_3.JPG" width=79 border=0>&nbsp;&nbsp;&nbsp;&nbsp; ------&gt;&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_4.JPG" border=0><br><br>5) 在游戏中做出一个动作，比如要做料理，你点了一下做生产的按钮，游戏必然会发送一个做料理的数据包，你的目的就是要把这个数据包截取下来。当你点了开始记录封包的按钮后，快速切换到游戏，点一下生产（你先把生产窗口打开），然后快速切换回WPE，点停止截取。运气好的话，你就只会截取到一个数据包，而这个数据包就是生产料理的数据包。如果截取到数据包有多个，这是你有2个方法，第一个方法是重新截取一次数据包。第二个方法是对截取到的数据一个一个发送检测，看看哪个数据包是你想要的。其实分辨数据包很简单，当你截取多了，你就会知道可以根据数据包的大小来分辨了。比如一个游戏心跳指令，我记得好像是24Byte，又比如在海上转向的封包是16byte，而你生产的数据包要肯定是比这个24大很多的。在截取数据包的时候建议选择人少的地方，这不是怕给看到，是其他玩家的指令可能会造成你多余的数据包不好分辨。<br><br>6)当你截取到你想要的数据包后，就可以对数据包进行再次发送，对要发送的数据包点击右键选择发送。<br><img height=721 alt="" src="http://www.cnblogs.com/images/cnblogs_com/wj/DOL_5.JPG" width=958 border=0><br><br>7) 你可以更改定时那里，把他改成100毫秒，然后把次数改大，点击播放按钮，就可以做到瞬时生产哦！迫不及待了吧，我这次说到这里，玩家们要搞其他试验，就自己去试了。<br><br>PS：我自己开发了一个软件，实现了近港买卖，造船，练习会计，在考虑要不要发布。哪天打包好软件再发出来吧。 Enjoy~&nbsp; 我在游戏的名字这里我就不说了，知道我是谁的人也不要说，不过说了也无所谓了，已经考虑是不是要再给这个游戏代理商继续欺骗下去。<img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><img height=20 src="http://www.cnblogs.com/Emoticons/QQ/27.gif" width=20 border=0><br>最后BS下代理商～<br></p>
<img src ="http://www.cnblogs.com/wj/aggbug/689482.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47985/" target="_blank">杰克逊悼念仪式或成史上最大规模Web活动</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>MonoRail PetShop Source Code Released</title><link>http://www.cnblogs.com/wj/archive/2006/08/16/478777.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Wed, 16 Aug 2006 13:41:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2006/08/16/478777.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/478777.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2006/08/16/478777.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/478777.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/478777.html</trackback:ping><description><![CDATA[dowload the source code here:<br><a href="http://shop.comicn.cn/MRPetShop_SourceCode_16082006.rar">http://shop.comicn.cn/MRPetShop_SourceCode_16082006.rar</a><br>the demo website:<br><a href="http://shop.comicn.cn/">http://shop.comicn.cn/</a><br><br>i didn't do any changes on the database structure and the face of every page, just try to simulate the same functions as MS PetShop3 using monorail framework. However, there are some functions i didn't code including the WebService and Search.<br><br>there are some problems&nbsp;I found during the refashionment:<br><br>1.&nbsp;I failed to configure the ActiveRecode for 2 database. Originally there are 2 databases&nbsp;of MS PetShop3 in the purpose of demo distrubuted feature. Eventually, i put the 2 dbs together.<br><br>2. It's the usage of Components. Suppose to use a componet view more than twice in a page, the elements of the compoent render thwice or more with the same ID. so how to distinguish them?<br><br>3. i forgot something due to long time not touch it, anyway, Monorail&nbsp;is a very good framework i wanna lastly say.<br><br>if something, tell me here. thanks.
<img src ="http://www.cnblogs.com/wj/aggbug/478777.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47984/" target="_blank">《商业周刊》:Mozilla的志愿者开发模式被复制</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>MS PetShop3 -&gt; MonoRail PetShop 完成移植</title><link>http://www.cnblogs.com/wj/archive/2006/06/01/415253.html</link><dc:creator>绿叶</dc:creator><author>绿叶</author><pubDate>Thu, 01 Jun 2006 13:09:00 GMT</pubDate><guid>http://www.cnblogs.com/wj/archive/2006/06/01/415253.html</guid><wfw:comment>http://www.cnblogs.com/wj/comments/415253.html</wfw:comment><comments>http://www.cnblogs.com/wj/archive/2006/06/01/415253.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/wj/comments/commentRss/415253.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/wj/services/trackbacks/415253.html</trackback:ping><description><![CDATA[演示地址：<br><br><a href="http://shop.comicn.cn/">http://shop.comicn.cn/</a>&nbsp;(感谢 颓废边缘(TT) 提供空间测试)<br><br>目前实现了大部分的功能，没有优化任何东西，因为时间挺忙。<br>待修正一些bug和优化后，我将发布源码，其中Model和Dal层的源码我已经发布了。<br><br>框架使用 Castle MonoRail ，应用了ActiveRecord(NHibernate), IOC 和 AJAX(目前只是Cart实现了AJAX) 支持。<br><br>请提bug，谢谢。 <br><br>
<hr>
<br><span style="COLOR: red"><br>Demo下载：<br><a href="http://shop.comicn.cn/MRPetShop_Demo.rar">http://shop.comicn.cn/MRPetShop_Demo.rar</a></span>
<img src ="http://www.cnblogs.com/wj/aggbug/415253.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</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>