<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[聚缘/kl书生]]></title>
<description><![CDATA[嬡妳の啲貓 ——→  等待一只鱼]]></description>
<link>http://370907531.qzone.qq.com</link>
<lastBuildDate>Thu, 26 Nov 2009 15:58:09 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Thu, 26 Nov 2009 12:07:26 GMT</pubDate>

<item>
<title><![CDATA[QQ]]></title>
<link>http://370907531.qzone.qq.com/blog/1259237246</link>
<description><![CDATA[1=853276055<br>[email=1PW=GMIIGBHLKCLMGOIIL@NGLM@B]1PW=GMIIGBHLKCLMGOIIL@NGLM@B[/email] <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1259237246#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 26 Nov 2009 12:07:26 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1259237246</guid>
</item>

<item>
<title><![CDATA[天下贰新玩家超级体验礼包]]></title>
<link>http://370907531.qzone.qq.com/blog/1259232481</link>
<description><![CDATA[MMM9-A25N-36II-38K5<br>参与即可获得新玩家超级体验礼包（2级可领取小宠物“乖巧的小浣熊”；10级可领取珍兽“云马”、观光任务、互动任务；15级可领取时装“充衣”“刀客”、互动任务；20级可领取免培养的“蜃气元魂珠”、互动任务。） <br><a href="http://tx2.163.com/id/" target="_blank">http://tx2.163.com/id/</a><wbr /><br> <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1259232481#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 26 Nov 2009 10:48:01 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1259232481</guid>
</item>

<item>
<title><![CDATA[心胡言论语]]></title>
<link>http://370907531.qzone.qq.com/blog/1258905342</link>
<description><![CDATA[哈喽……你能看到说明你蛮幸运的……真的这是我第一次胡言乱语……<br>最近 心很累……很累……<br>每天除了上班就是 睡觉 吃饭  感觉好累  ……好想早点睡觉……<br>什么事也不想去想……发生了好多事……很不开心却没有什么的事……<br>也不知道为么事这样累……想杂货哦个人陪说话的都没有……和这个城市好陌生……仿佛自己已经不属于这个城市又不甘心放弃……<br>最求自己知道没有钱途的事业……<br>为自己喜欢的人吗？ 好像是个借口……我为什么呢……不知道，心里好矛盾……<br>我这究竟麽样了 麽样了……难倒我只在爱一个人吗？？？？？？？？<br>不知道……我什么都不想说了……今天就胡言乱语了说个痛快……好像自己醉一下啊，但是不会喝酒……好像去喝酒……喝个痛快……喝个连自己都不知道自己……夜好黑啊…… 心也没有光……什么都不知道……看哈镜子里的自己，发现自己还是蛮勺的……就是那种傻……傻呼呼的好好笑啊……哈哈……哈哈……哈哈……发现自己最大的缺点就是太尊重别人了，但是是很傻的那种尊重……才发现哈哈……罪人的基本原则<br>1.第一要忍耐，第二要和睦，三改脾气，四学好态度，五要爱人，六要在家孝父母，这个不可以糊涂……什么什么什么……的什么什么什么……你们听不懂吧……哈哈  我就是忽悠这位看客……你们慢慢看……我去宵夜去的……<br>本来想骂人的，哈哈……但是我给自己定了规矩的<br>不说别人的不是<br>不可以发脾气<br>不可以骂人<br>不可以心里恨人·怨人<br>要爱恨自己的人<br>要和所有对我好和骂我的人搞好关系<br>要和所有认识和不认识的人搞好关系<br>和自己家里人搞好关系<br>别人说的对的听着，说的不对的当成耳边风就可以<br>不可以和任何人发生嫉妒纷争<br>不可以贪恋别人的一切<br>不可偷盗别人的任何东西<br>不可以奸淫 更不可以杀人放火<br>不可以说些不真实的 无中生有的事，自己没有看到的事和做假证人<br>不可以崇拜任何人，不可以发誓<br> <br>，“孝敬父母”，究竟指么事呢？就是恭敬、尊重、服从（除了吩咐你做违背自己和法律的事以外）、效法他们的榜样，凡事让父母居首位。在自己的眼中，父母的地位应受尊崇；自己即使觉得父母难相处，也要孝敬他们。<br>“不作假证陷害人”是么意思呢，我要麽样做呢？<br>作假见证就是指在法庭上撒谎。要自己在自己心里建立公平无欺的制度，无论是处理个人事务，或公开发言，都应当诚实。无论在甚么场合，对一件事讲得不尽不实，半真半假，或歪曲事实、鹝造编假，都是“作假见证”。即使许多人把欺诈当作平常事，<span style="font-weight:bold"><wbr />但是自己也不能</span><wbr />随波逐流。<br>“贪恋”这个词，指不只是指贪心，还指──有时我也有点“贪恋”……<br>贪恋是指想得到别人的东西而言。不仅是羡慕别人的东西，或者心里想“巴不得我也拥有”，贪恋也包括对别人有而自己无的，生出嫉妒仇恨之心。只有自己能供给人一切的需要，所以也只能从自己那里得到真正的满足。自己要是有了贪心，就要想法找出在你心中，是否有些本来只是基本需要的东西，却发展成嫉妒的。例如，你可能从羡慕别人的成就，发展到嫉妒别人，进而想夺取别人的成就。当求别人除去自己心中的恨意，求他来满足你基本的需求。<br>咿呀……快一点钟鸟  快点咯气睡觉门早又怕不起来鸟……心好乱   你责吱嘎多注意哈吱嘎的身体，身体才是吱嘎最大的本钱……哈哈……认真做吱嘎……有句话叫么事“走吱嘎的路，让别个去说”人的一生好漫长好漫长……睡觉鸟……我这次真的睡觉鸟 拜拜……<br> <br> <br> <!--v:3.2--> ]]></description>
<category><![CDATA[心情日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1258905342#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 22 Nov 2009 15:55:42 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1258905342</guid>
</item>

<item>
<title><![CDATA[VB 发送字符到指定控件]]></title>
<link>http://370907531.qzone.qq.com/blog/1258883562</link>
<description><![CDATA[问题标题:<br>VB 发送字符到指定控件<br>问题描述:<br><br><br>我想请教下，<br><br>我想向指定的外部程序发送一条消息 ，<br>消息是中文的比如“张三”<br>发送到 窗口标题是“管理员管理”类名是“#32770”上面的TEXT控件里 控件类名“Edit”控件窗口ID“1057”的控件里<br>由于里面有很多TEXT我要准确的发送到我指定的那个控件里该怎么写啊 <br>求大家帮忙在百度搜索也没有一点头绪<br><br>还有：<br><br>一个窗口上有5个TEXT我要找到第三个有什么办法啊<br>满意答案:<br><br><br>先找到父窗口 管理员管理 这个窗体的句柄，然后再根据父窗口句柄找出它的子窗口<br><br>最后发送一条消息就可以了<br><br>可以用下面的API函数<br><br>查找窗口可用FindWindowEx<br><br>发送消息用SendMessage<br><br><br><br>方法不止这一种 ，窗口句柄还可以通枚举的方式也可以获取<br><br>给你两个API<br><br>EnumWindows<br><br>EnumChildWindows<br>追问:<br>具体增么实现 怎么找到字窗口<br>补充:<br><br><br>代码我写好了 你按我的说法测试一下 成功后就你可以仿照这个做了<br><br>模块代码<br><br>Option Explicit<br><br>Public Declare Function EnumChildWindows Lib &quot;user32&quot; (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long<br>Public Declare Function GetClassName Lib &quot;user32&quot; Alias &quot;GetClassNameA&quot; (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long<br>Public Declare Function SendMessage&amp; Lib &quot;user32&quot; Alias &quot;SendMessageA&quot; (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)<br>Public Declare Function FindWindow Lib &quot;user32&quot; Alias &quot;FindWindowA&quot; (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br>Public Declare Function FindWindowEx Lib &quot;user32&quot; Alias &quot;FindWindowExA&quot; (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long<br><br>Public Const WM_SETTEXT = &amp;HC<br><br><br>Public TextHwnd(5) As Long<br>Public EnumCount As Integer<br><br>Public Function WinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long<br>Dim tmpStr As String<br>Dim sLen As Integer<br>sLen = Len(&quot;ThunderRT6TextBox&quot;)<br>tmpStr = Space(sLen)<br>GetClassName hwnd, tmpStr, sLen + 1<br>If InStr(tmpStr, &quot;ThunderRT6TextBox&quot;) &gt; 0 Then<br>TextHwnd(EnumCount) = hwnd<br>End If<br>EnumCount = EnumCount + 1<br>WinProc = 1<br>End Function<br><br><br>窗体代码<br><br>Private Sub Command1_Click()<br>Dim t As Long<br>Dim c As Long<br>Dim tmp As String<br><br>t = FindWindow(vbNullString, &quot;我的测试窗口&quot;)<br><br>If t &lt;= 0 Then MsgBox &quot;false&quot;<br>EnumCount = 0<br>EnumChildWindows t, AddressOf WinProc, 0<br><br>tmp = “asdfqwerdfg”<br>SendMessage TextHwnd(0), WM_SETTEXT, 0, ByVal tmp<br>tmp = &quot;123456789&quot;<br>SendMessage TextHwnd(1), WM_SETTEXT, 0, ByVal tmp<br><br>End Sub<br><br><br><br>然后再新建一个工程，w做为测试窗体，窗体上放两个TEXT控件。窗体的名称Caption设置为&quot;我的测试窗口&quot;,然后将这个空程序生成EXE，生成完成后运行这个窗体名叫 我的测试窗口 的EXE<br><br><br><br>然后再运行上面的那个工作，点击按钮，程序会自动搜索 窗体名为 “我的测试窗口”的EXE文件的窗口，并且设置这个窗口里的文本框一和文本框二的内容<br>追问:<br><br><br>在此先谢谢你能够帮助我 <br><br>但是我把你的代码测试了一下可以 也有一些地方不懂<br><br>如果窗口上有三个TEXT就不能准确发送了<br><br>还有就是有三个按钮 三个TEXT这个就会无效了<br><br>在此请教<br>补充:<br><br><br>呵呵 刚才疏忽了<br><br>把这句代码写在IF判断里边<br><br>因为EnumCount是做数组下标用的<br><br>EnumCount = EnumCount + 1<br><br><br>原句<br><br>If InStr(tmpStr, &quot;ThunderRT6TextBox&quot;) &gt; 0 Then<br>TextHwnd(EnumCount) = hwnd<br>End If<br>EnumCount = EnumCount + 1<br><br><br><br>改成下面这样就OK了<br><br>If InStr(tmpStr, &quot;ThunderRT6TextBox&quot;) &gt; 0 Then<br>TextHwnd(EnumCount) = hwnd<br><br>EnumCount = EnumCount + 1<br>End If<br><br><br><br>只有找到一个TEXT文本框的时候 才让数组的下标加1，不然这个句柄就不会保存到数组下标为0 和 1 里面了<br><br><br><br>追问:<br>还是没有搞懂 你可以加我QQ吗？ 370907531 非常感激<br><br>转载来自于：<a href="http://wenwen.soso.com/z/q166145387.htm" target="_blank">VB 发送字符到指定控件 – 搜搜问问</a><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[日常问题]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1258883562#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 22 Nov 2009 09:52:42 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1258883562</guid>
</item>

<item>
<title><![CDATA[VB中进制转换]]></title>
<link>http://370907531.qzone.qq.com/blog/1258547174</link>
<description><![CDATA['-------------------------------------------------<br>' 用途：将十进制转化为二进制<br>' 输入：Dec(十进制数)<br>' 输入数据类型：Long<br>' 输出：DEC_to_BIN(二进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647,输出最大数为1111111111111111111111111111111(31个1)<br>Public Function DEC_to_BIN(Dec As Long) As String<br>    DEC_to_BIN = &quot;&quot;<br>    Do While Dec &gt; 0<br>        DEC_to_BIN = Dec Mod 2 &amp; DEC_to_BIN<br>        Dec = Dec \ 2<br>    Loop<br>End Function<br>' 用途：将二进制转化为十进制<br>' 输入：Bin(二进制数)<br>' 输入数据类型：String<br>' 输出：BIN_to_DEC(十进制数)<br>' 输出数据类型：Long<br>' 输入的最大数为1111111111111111111111111111111(31个1),输出最大数为2147483647<br>Public Function BIN_to_DEC(ByVal Bin As String) As Long<br>    Dim i As Long<br>    For i = 1 To Len(Bin)<br>        BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))<br>    Next i<br>End Function<br>' 用途：将十六进制转化为二进制<br>' 输入：Hex(十六进制数)<br>' 输入数据类型：String<br>' 输出：HEX_to_BIN(二进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function HEX_to_BIN(ByVal Hex As String) As String<br>    Dim i As Long<br>    Dim B As String<br>    Hex = UCase(Hex)<br>    For i = 1 To Len(Hex)<br>        Select Case Mid(Hex, i, 1)<br>            Case &quot;0&quot;: B = B &amp; &quot;0000&quot;<br>            Case &quot;1&quot;: B = B &amp; &quot;0001&quot;<br>            Case &quot;2&quot;: B = B &amp; &quot;0010&quot;<br>            Case &quot;3&quot;: B = B &amp; &quot;0011&quot;<br>            Case &quot;4&quot;: B = B &amp; &quot;0100&quot;<br>            Case &quot;5&quot;: B = B &amp; &quot;0101&quot;<br>            Case &quot;6&quot;: B = B &amp; &quot;0110&quot;<br>            Case &quot;7&quot;: B = B &amp; &quot;0111&quot;<br>            Case &quot;8&quot;: B = B &amp; &quot;1000&quot;<br>            Case &quot;9&quot;: B = B &amp; &quot;1001&quot;<br>            Case &quot;A&quot;: B = B &amp; &quot;1010&quot;<br>            Case &quot;B&quot;: B = B &amp; &quot;1011&quot;<br>            Case &quot;C&quot;: B = B &amp; &quot;1100&quot;<br>            Case &quot;D&quot;: B = B &amp; &quot;1101&quot;<br>            Case &quot;E&quot;: B = B &amp; &quot;1110&quot;<br>            Case &quot;F&quot;: B = B &amp; &quot;1111&quot;<br>        End Select<br>    Next i<br>    While Left(B, 1) = &quot;0&quot;<br>        B = Right(B, Len(B) - 1)<br>    Wend<br>    HEX_to_BIN = B<br>End Function<br>' 用途：将二进制转化为十六进制<br>' 输入：Bin(二进制数)<br>' 输入数据类型：String<br>' 输出：BIN_to_HEX(十六进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function BIN_to_HEX(ByVal Bin As String) As String<br>    Dim i As Long<br>    Dim H As String<br>    If Len(Bin) Mod 4 &lt;&gt; 0 Then<br>        Bin = String(4 - Len(Bin) Mod 4, &quot;0&quot;) &amp; Bin<br>    End If<br>    <br>    For i = 1 To Len(Bin) Step 4<br>        Select Case Mid(Bin, i, 4)<br>            Case &quot;0000&quot;: H = H &amp; &quot;0&quot;<br>            Case &quot;0001&quot;: H = H &amp; &quot;1&quot;<br>            Case &quot;0010&quot;: H = H &amp; &quot;2&quot;<br>            Case &quot;0011&quot;: H = H &amp; &quot;3&quot;<br>            Case &quot;0100&quot;: H = H &amp; &quot;4&quot;<br>            Case &quot;0101&quot;: H = H &amp; &quot;5&quot;<br>            Case &quot;0110&quot;: H = H &amp; &quot;6&quot;<br>            Case &quot;0111&quot;: H = H &amp; &quot;7&quot;<br>            Case &quot;1000&quot;: H = H &amp; &quot;8&quot;<br>            Case &quot;1001&quot;: H = H &amp; &quot;9&quot;<br>            Case &quot;1010&quot;: H = H &amp; &quot;A&quot;<br>            Case &quot;1011&quot;: H = H &amp; &quot;B&quot;<br>            Case &quot;1100&quot;: H = H &amp; &quot;C&quot;<br>            Case &quot;1101&quot;: H = H &amp; &quot;D&quot;<br>            Case &quot;1110&quot;: H = H &amp; &quot;E&quot;<br>            Case &quot;1111&quot;: H = H &amp; &quot;F&quot;<br>        End Select<br>    Next i<br>    While Left(H, 1) = &quot;0&quot;<br>        H = Right(H, Len(H) - 1)<br>    Wend<br>    BIN_to_HEX = H<br>End Function<br>' 用途：将十六进制转化为十进制<br>' 输入：Hex(十六进制数)<br>' 输入数据类型：String<br>' 输出：HEX_to_DEC(十进制数)<br>' 输出数据类型：Long<br>' 输入的最大数为7FFFFFFF,输出的最大数为2147483647<br>Public Function HEX_to_DEC(ByVal Hex As String) As Long<br>    Dim i As Long<br>    Dim B As Long<br>    <br>    Hex = UCase(Hex)<br>    For i = 1 To Len(Hex)<br>        Select Case Mid(Hex, Len(Hex) - i + 1, 1)<br>            Case &quot;0&quot;: B = B + 16 ^ (i - 1) * 0<br>            Case &quot;1&quot;: B = B + 16 ^ (i - 1) * 1<br>            Case &quot;2&quot;: B = B + 16 ^ (i - 1) * 2<br>            Case &quot;3&quot;: B = B + 16 ^ (i - 1) * 3<br>            Case &quot;4&quot;: B = B + 16 ^ (i - 1) * 4<br>            Case &quot;5&quot;: B = B + 16 ^ (i - 1) * 5<br>            Case &quot;6&quot;: B = B + 16 ^ (i - 1) * 6<br>            Case &quot;7&quot;: B = B + 16 ^ (i - 1) * 7<br>            Case &quot;8&quot;: B = B + 16 ^ (i - 1) * 8<br>            Case &quot;9&quot;: B = B + 16 ^ (i - 1) * 9<br>            Case &quot;A&quot;: B = B + 16 ^ (i - 1) * 10<br>            Case &quot;B&quot;: B = B + 16 ^ (i - 1) * 11<br>            Case &quot;C&quot;: B = B + 16 ^ (i - 1) * 12<br>            Case &quot;D&quot;: B = B + 16 ^ (i - 1) * 13<br>            Case &quot;E&quot;: B = B + 16 ^ (i - 1) * 14<br>            Case &quot;F&quot;: B = B + 16 ^ (i - 1) * 15<br>        End Select<br>    Next i<br>    HEX_to_DEC = B<br>End Function<br>' 用途：将十进制转化为十六进制<br>' 输入：Dec(十进制数)<br>' 输入数据类型：Long<br>' 输出：DEC_to_HEX(十六进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647,输出最大数为7FFFFFFF<br>Public Function DEC_to_HEX(Dec As Long) As String<br>    Dim a As String<br>    DEC_to_HEX = &quot;&quot;<br>    Do While Dec &gt; 0<br>        a = CStr(Dec Mod 16)<br>        Select Case a<br>            Case &quot;10&quot;: a = &quot;A&quot;<br>            Case &quot;11&quot;: a = &quot;B&quot;<br>            Case &quot;12&quot;: a = &quot;C&quot;<br>            Case &quot;13&quot;: a = &quot;D&quot;<br>            Case &quot;14&quot;: a = &quot;E&quot;<br>            Case &quot;15&quot;: a = &quot;F&quot;<br>        End Select<br>        DEC_to_HEX = a &amp; DEC_to_HEX<br>        Dec = Dec \ 16<br>    Loop<br>End Function<br>' 用途：将十进制转化为八进制<br>' 输入：Dec(十进制数)<br>' 输入数据类型：Long<br>' 输出：DEC_to_OCT(八进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647,输出最大数为17777777777<br>Public Function DEC_to_OCT(Dec As Long) As String<br>    DEC_to_OCT = &quot;&quot;<br>    Do While Dec &gt; 0<br>        DEC_to_OCT = Dec Mod 8 &amp; DEC_to_OCT<br>        Dec = Dec \ 8<br>    Loop<br>End Function<br>' 用途：将八进制转化为十进制<br>' 输入：Oct(八进制数)<br>' 输入数据类型：String<br>' 输出：OCT_to_DEC(十进制数)<br>' 输出数据类型：Long<br>' 输入的最大数为17777777777,输出的最大数为2147483647<br>Public Function OCT_to_DEC(ByVal Oct As String) As Long<br>    Dim i As Long<br>    Dim B As Long<br>    <br>    For i = 1 To Len(Oct)<br>        Select Case Mid(Oct, Len(Oct) - i + 1, 1)<br>            Case &quot;0&quot;: B = B + 8 ^ (i - 1) * 0<br>            Case &quot;1&quot;: B = B + 8 ^ (i - 1) * 1<br>            Case &quot;2&quot;: B = B + 8 ^ (i - 1) * 2<br>            Case &quot;3&quot;: B = B + 8 ^ (i - 1) * 3<br>            Case &quot;4&quot;: B = B + 8 ^ (i - 1) * 4<br>            Case &quot;5&quot;: B = B + 8 ^ (i - 1) * 5<br>            Case &quot;6&quot;: B = B + 8 ^ (i - 1) * 6<br>            Case &quot;7&quot;: B = B + 8 ^ (i - 1) * 7<br>        End Select<br>    Next i<br>    OCT_to_DEC = B<br>End Function<br>' 用途：将二进制转化为八进制<br>' 输入：Bin(二进制数)<br>' 输入数据类型：String<br>' 输出：BIN_to_OCT(八进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function BIN_to_OCT(ByVal Bin As String) As String<br>    Dim i As Long<br>    Dim H As String<br>    If Len(Bin) Mod 3 &lt;&gt; 0 Then<br>        Bin = String(3 - Len(Bin) Mod 3, &quot;0&quot;) &amp; Bin<br>    End If<br>    <br>    For i = 1 To Len(Bin) Step 3<br>        Select Case Mid(Bin, i, 3)<br>            Case &quot;000&quot;: H = H &amp; &quot;0&quot;<br>            Case &quot;001&quot;: H = H &amp; &quot;1&quot;<br>            Case &quot;010&quot;: H = H &amp; &quot;2&quot;<br>            Case &quot;011&quot;: H = H &amp; &quot;3&quot;<br>            Case &quot;100&quot;: H = H &amp; &quot;4&quot;<br>            Case &quot;101&quot;: H = H &amp; &quot;5&quot;<br>            Case &quot;110&quot;: H = H &amp; &quot;6&quot;<br>            Case &quot;111&quot;: H = H &amp; &quot;7&quot;<br>        End Select<br>    Next i<br>    While Left(H, 1) = &quot;0&quot;<br>        H = Right(H, Len(H) - 1)<br>    Wend<br>    BIN_to_OCT = H<br>End Function<br>' 用途：将八进制转化为二进制<br>' 输入：Oct(八进制数)<br>' 输入数据类型：String<br>' 输出：OCT_to_BIN(二进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function OCT_to_BIN(ByVal Oct As String) As String<br>    Dim i As Long<br>    Dim B As String<br>    <br>    For i = 1 To Len(Oct)<br>        Select Case Mid(Oct, i, 1)<br>            Case &quot;0&quot;: B = B &amp; &quot;000&quot;<br>            Case &quot;1&quot;: B = B &amp; &quot;001&quot;<br>            Case &quot;2&quot;: B = B &amp; &quot;010&quot;<br>            Case &quot;3&quot;: B = B &amp; &quot;011&quot;<br>            Case &quot;4&quot;: B = B &amp; &quot;100&quot;<br>            Case &quot;5&quot;: B = B &amp; &quot;101&quot;<br>            Case &quot;6&quot;: B = B &amp; &quot;110&quot;<br>            Case &quot;7&quot;: B = B &amp; &quot;111&quot;<br>        End Select<br>    Next i<br>    While Left(B, 1) = &quot;0&quot;<br>        B = Right(B, Len(B) - 1)<br>    Wend<br>    OCT_to_BIN = B<br>End Function<br>' 用途：将八进制转化为十六进制<br>' 输入：Oct(八进制数)<br>' 输入数据类型：String<br>' 输出：OCT_to_HEX(十六进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function OCT_to_HEX(ByVal Oct As String) As String<br>    Dim Bin As String<br>    Bin = OCT_to_BIN(Oct)<br>    OCT_to_HEX = BIN_to_HEX(Bin)<br>End Function<br>' 用途：将十六进制转化为八进制<br>' 输入：Hex(十六进制数)<br>' 输入数据类型：String<br>' 输出：HEX_to_OCT(八进制数)<br>' 输出数据类型：String<br>' 输入的最大数为2147483647个字符<br>Public Function HEX_to_OCT(ByVal Hex As String) As String<br>    Dim Bin As String<br>    Hex = UCase(Hex)<br>    Bin = HEX_to_BIN(Hex)<br>    HEX_to_OCT = BIN_to_OCT(Bin)<br>End Function<br><br>'VB自带函数:<br>'十进制转八进制: Oct (num)<br>'十六进制转八进制: Oct (&quot;&amp;H&quot; &amp; num)<br>'十进制转十六进制: Hex (num)<br>'八进制转十六进制: Hex (&quot;&amp;O&quot; &amp; num)<br>'十六进制转换为十进制<br>    Dim str As String<br>    str = Text2.Text<br>    Text10.Text = CLng(&quot;&amp;H&quot; &amp; str) <!--v:3.2--> ]]></description>
<category><![CDATA[个人日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1258547174#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 18 Nov 2009 12:26:14 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1258547174</guid>
</item>

<item>
<title><![CDATA[一个22岁小女生写的帖子《老娘老了》]]></title>
<link>http://370907531.qzone.qq.com/blog/1258537939</link>
<description><![CDATA[周末一乐：<br>老娘老了！<br>老娘老了！ <br>老娘昨晚失眠，想起破事一筐。 <br>想起黛玉那姑娘，想起~~~初恋时，第一次KISS，差点晕倒，接了半天也没接着嘴。 <br>那年，我十五岁，胸衣刚学会戴。 <br>多年之后想起此事，幸福又伤感，伤感又幸福。 <br>我KAO，老娘老矣，尚且装嫩，可耻啊，廉耻丧尽 <br>~~~ <br><br>老娘老了！ <br>想当年，唇红齿白，发黑眼亮，莺声燕语。 <br>想当年，爬东山涉西涧，活蹦乱跳，还可以吃上三大碗饭。 <br>现在去公园，溜达了一圈，居然肌肉酸疼，眼歪鼻斜。<br>爬三楼，气喘不止，脚肚子抽筋，眼泪花子打转。 <br>身体不行啦，命不久矣。 <br>我KAO，真是--天妒英才啊！ <br><br>老娘老了！ <br>想当年，和室友打扑克牌，六个人一圈儿，打24小时啊，赢了三十四块，高兴得三天没睡好觉。<br>打完了还去败草丛生的秘密花园谈恋爱。 <br>谈得那个轰轰烈烈啊，想起来都甜蜜。 <br>现在，手机掉了可以眼都不眨地马上换一台。 <br>奢侈啊奢侈，我TMD真不是人啊真不是人！<br><br>老娘老了！ <br>想当年，45KG，体态优美，身轻如燕，诱死路人，穿破裙子也那么潇洒。 <br>如今，我KAO，穿一千块的裙子，也遮不住茁壮成长的小肚腩。 <br>真是没法活啊~~~<br><br>老娘老了！ <br>听伤感情歌，悲怆，听了鼻涕直流。 <br>想当年~~~我KAO，哪有这么小资。 <br>想当年，《黑色星期天》啊，听说杀死了多少人的魔鬼音乐，老娘听了兴奋异常~~~~ <br>如今，老娘老了，眼角有纹，抬头有纹，笑也有纹，再过上20年，钱也买不了年青，痛苦~~~ <br>像老娘这样的人，也有死的一天。<br>我KAO，还有没有天理~~~~ <br><br>老娘老了~~~ <br>喜欢一个男人，发痴，妄图以感情俘虏之，百般武功皆无用，可耻可悲可叹可鄙啊！ <br>想当年，一声令下，呼风唤雨，男人们前仆后继，说个烂英文单词可以引发美少年的百般猜度，万种意思。 <br>像老娘这样的人也有这一天！ <br><br>老娘老了。 <br>失眠，想男人，而且小资，不是小资也是小资的家属。 <br>看生命不能承受之轻，听伤感音乐，听得鼻涕纵横。 <br>老娘老矣，现在已经开始唠叨啦。 <br>我KAO，不知所云，做事去~~~~~ <!--v:3.2--> ]]></description>
<category><![CDATA[心情日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1258537939#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 18 Nov 2009 09:52:19 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1258537939</guid>
</item>

<item>
<title><![CDATA[光棍节的祝福]]></title>
<link>http://370907531.qzone.qq.com/blog/1257842422</link>
<description><![CDATA[致群里所有未婚的同志：<br>　　光棍节将至，<br>　　我瑾代表群中央、群务院、群军委、群人大、群政协等<br>　　致所有未婚的群成员：<br>　　首先，光棍节快乐!<br>　　我们正处于结婚时代的初级阶段<br>　　经过二十几年的努力<br>　　虽然取得了结识众多异性的巨大成就<br>　　但是人口众多<br>　　人均资源相对短缺<br>　　局部个人发展很不平衡<br>　　现阶段的主要矛盾<br>　　是日益增长的爱我的人我不爱<br>　　我爱的人不爱我之间的矛盾<br>　　情敌竞争已经不是初级阶段的主要矛盾<br>　　但是它在一定范围内还将长期存在<br>　　并且在一定条件下还可能激化<br>　　我们要允许一部分人先结婚<br>　　先婚带后婚<br>　　最终实现共同发昏<br>　　自由恋爱制度已经在中国大地上扎根<br>　　并初步显示它的优越性<br>　　但其不成熟<br>　　不完善的环节<br>　　还必须通过深化思想改革来逐步解决<br>　　恋爱是结婚的初级阶段<br>　　而我们又正处于恋爱的初级阶段<br>　　就是不发达阶段<br>　　也是不可逾越的历史阶段<br>　　只希望这个阶段不要同社会主义初级阶段一样<br>　　要一万年不变!<br>　　全群要统一思想<br>　　统一认识<br>　　把下一步的工作重心转移到家庭建设上<br>　　要把&quot;快找，快结 ，快生&quot;作为我们落实&quot;三个代表&quot;的指导方针<br>　　下一个四年对我们来说是关键的四年男女已越来越少<br>　　若我们不抓住年轻的尾巴,错过末班车<br>　　以后的美生活将无从谈起<br>　　当然<br>　　已经胜利的同志们是光辉的榜样<br>　　全群同志必须要认真学习<br>　　再次预祝大家<br>　　光棍节快乐！！！！！！！！ <!--v:3.2--> ]]></description>
<category><![CDATA[心情日记]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1257842422#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Tue, 10 Nov 2009 08:40:22 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1257842422</guid>
</item>

<item>
<title><![CDATA[VB 类按键精灵源码]]></title>
<link>http://370907531.qzone.qq.com/blog/1257762903</link>
<description><![CDATA[窗体部分<br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command1_Click()<br>Script.AddItem (<span style="color:#808080;line-height:1.8em;">&quot;坐标：&quot;</span><wbr /> &amp; MouseX.Text &amp; <span style="color:#808080;line-height:1.8em;">&quot;-&quot;</span><wbr /> &amp; MouseY.Text)<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> <br><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command2_Click()<br>Script.AddItem (<span style="color:#808080;line-height:1.8em;">&quot;鼠标：左键&quot;</span><wbr />)<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command3_Click()<br>Script.AddItem (<span style="color:#808080;line-height:1.8em;">&quot;鼠标：右键&quot;</span><wbr />)<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command4_Click()<br><span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> KeyText.Text &lt;&gt; <span style="color:#808080;line-height:1.8em;">&quot;&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>    Script.AddItem (<span style="color:#808080;line-height:1.8em;">&quot;键盘：&quot;</span><wbr /> &amp; KeyText.Text)<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command5_Click()<br><span style="color:#008000;line-height:1.8em;">'==============================</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'功能：保存脚本</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'参数：script.txt -&gt; 脚本文件名</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'==============================</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> i <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Integer</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Open</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">App</span><wbr />.Path + <span style="color:#808080;line-height:1.8em;">&quot;\script.txt&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">For</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Output</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> #1<br>    <span style="color:#0000d0;line-height:1.8em;">For</span><wbr /> i = 1 <span style="color:#0000d0;line-height:1.8em;">To</span><wbr /> Script.ListCount<br>        <span style="color:#0000d0;line-height:1.8em;">Print</span><wbr /> #1, Script.List(i - 1)            <span style="color:#008000;line-height:1.8em;">'这里使用 i-1 是因为 ListBox 控件是从 0 开始</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Next</span><wbr /> i<br><span style="color:#0000d0;line-height:1.8em;">Close</span><wbr /> #1<br><span style="color:#ff0000;line-height:1.8em;">MsgBox</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;保存完毕！&quot;</span><wbr />, vbOKOnly, <span style="color:#808080;line-height:1.8em;">&quot;保存脚本&quot;</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command6_Click()<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Command7_Click()<br><span style="color:#0000d0;line-height:1.8em;">Call</span><wbr /> Start<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Form_Load()<br><span style="color:#008000;line-height:1.8em;">'==============================</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'功能：读取脚本</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'参数：script.txt -&gt; 脚本文件名</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'==============================</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> Scriptemp <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">String</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Dir</span><wbr />(<span style="color:#0000d0;line-height:1.8em;">App</span><wbr />.Path + <span style="color:#808080;line-height:1.8em;">&quot;\script.txt&quot;</span><wbr />) = <span style="color:#808080;line-height:1.8em;">&quot;&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Open</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">App</span><wbr />.Path + <span style="color:#808080;line-height:1.8em;">&quot;\script.txt&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">For</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Output</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> #1<br>    <span style="color:#0000d0;line-height:1.8em;">Close</span><wbr /> #1<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Open</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">App</span><wbr />.Path + <span style="color:#808080;line-height:1.8em;">&quot;\script.txt&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">For</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Input</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> #1<br>    <span style="color:#0000d0;line-height:1.8em;">While</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Not</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">EOF</span><wbr />(1)<br>        <span style="color:#0000d0;line-height:1.8em;">Line</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Input</span><wbr /> #1, Scriptemp<br>        Script.AddItem Scriptemp<br>    <span style="color:#0000d0;line-height:1.8em;">Wend</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Close</span><wbr /> #1<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> KeyText_KeyDown(KeyCode <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Integer</span><wbr />, Shift <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Integer</span><wbr />)<br><span style="color:#0000d0;line-height:1.8em;">Select</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> KeyCode<br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 112<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F1&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 113<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F2&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 114<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F3&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 115<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F4&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 116<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F5&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 117<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F6&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 118<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F7&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 119<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F8&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 120<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F9&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 121<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F10&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 122<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F11&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> 123<br>        KeyText.Text = <span style="color:#808080;line-height:1.8em;">&quot;F12&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Else</span><wbr /><br>        KeyText.Text = <span style="color:#ff0000;line-height:1.8em;">Chr</span><wbr />(KeyCode)<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Select</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'处理坐标是否超出一定长度</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> MouseX_Change()<br><span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Len</span><wbr />(MouseX.Text) &gt; 4 <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>    <span style="color:#ff0000;line-height:1.8em;">MsgBox</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;坐标错误，请重新输入&quot;</span><wbr /><br>    MouseX.Text = <span style="color:#808080;line-height:1.8em;">&quot;0&quot;</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Private</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> MouseY_Change()<br><span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Len</span><wbr />(MouseY.Text) &gt; 4 <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>    <span style="color:#ff0000;line-height:1.8em;">MsgBox</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;坐标错误，请重新输入&quot;</span><wbr /><br>    MouseY.Text = <span style="color:#808080;line-height:1.8em;">&quot;0&quot;</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br>模块部分:<br><span style="color:#0000d0;line-height:1.8em;">Option</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Explicit</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Const</span><wbr /> MOUSEEVENTF_LEFTDOWN = &amp;H2<br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Const</span><wbr /> MOUSEEVENTF_LEFTUP = &amp;H4<br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Const</span><wbr /> MOUSEEVENTF_RIGHTDOWN = &amp;H8<br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Const</span><wbr /> MOUSEEVENTF_RIGHTUP = &amp;H10<br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Declare</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Function</span><wbr /> <span style="color:#000080;line-height:1.8em;">GetCursorPos</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Lib</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;user32&quot;</span><wbr /> (lpPoint <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> POINTAPI) <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />                     <span style="color:#008000;line-height:1.8em;">'获得鼠标位置的 API</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Declare</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Function</span><wbr /> <span style="color:#000080;line-height:1.8em;">SetCursorPos</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Lib</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;user32&quot;</span><wbr /> (<span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> X <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />, <span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> Y <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />) <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />        <span style="color:#008000;line-height:1.8em;">'设置鼠标位置的 API</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Type</span><wbr /> POINTAPI<br>    X <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr /><br>    Y <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Type</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Declare</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> <span style="color:#000080;line-height:1.8em;">mouse_event</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Lib</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;user32&quot;</span><wbr /> (<span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> dwFlags <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />, <span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> dx <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />, <span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> dy <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />, <span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> cButtons <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />, <span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> dwExtraInfo <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />)                      <span style="color:#008000;line-height:1.8em;">'鼠标事件</span><wbr /><br><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Declare</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> <span style="color:#000080;line-height:1.8em;">Sleep</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Lib</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;kernel32&quot;</span><wbr /> (<span style="color:#0000d0;line-height:1.8em;">ByVal</span><wbr /> dwMilliseconds <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Long</span><wbr />)          <span style="color:#008000;line-height:1.8em;">'程序延迟</span><wbr /><br>模块2<br><span style="color:#0000d0;line-height:1.8em;">Option</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Explicit</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'=====================</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'功能：运行脚本</span><wbr /><br><span style="color:#008000;line-height:1.8em;">'=====================</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Public</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> Start()<br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> i <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Integer</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> Script1 <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">String</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> ScriptLen <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Integer</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> MousePos() <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">String</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Dim</span><wbr /> MouseCurPos <span style="color:#0000d0;line-height:1.8em;">As</span><wbr /> POINTAPI<br><span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> KeyVirtual.Script.ListCount = 0 <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>    <span style="color:#ff0000;line-height:1.8em;">MsgBox</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;请添加脚本&quot;</span><wbr />, vbOKOnly, <span style="color:#808080;line-height:1.8em;">&quot;错误&quot;</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Exit</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">Else</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">For</span><wbr /> i = 0 <span style="color:#0000d0;line-height:1.8em;">To</span><wbr /> KeyVirtual.Script.ListCount - 1                                                    <span style="color:#008000;line-height:1.8em;">'从 ListBox 的第一个开始</span><wbr /><br>        <span style="color:#000080;line-height:1.8em;">Sleep</span><wbr /> 1000                                                                                  <span style="color:#008000;line-height:1.8em;">'程序延迟 1 秒</span><wbr /><br>        Script1 = KeyVirtual.Script.List(i)                                                         <span style="color:#008000;line-height:1.8em;">'获得脚本</span><wbr /><br>        ScriptLen = <span style="color:#ff0000;line-height:1.8em;">Len</span><wbr />(Script1)                                                                    <span style="color:#008000;line-height:1.8em;">'获得脚本字符长度</span><wbr /><br>        <span style="color:#0000d0;line-height:1.8em;">Select</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Mid</span><wbr />(Script1, 1, 2)                                                              <span style="color:#008000;line-height:1.8em;">'选择脚本字符前两个字符</span><wbr /><br>            <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;坐标&quot;</span><wbr /><br>                Script1 = <span style="color:#ff0000;line-height:1.8em;">Mid</span><wbr />(Script1, 4, ScriptLen - 3)                                            <span style="color:#008000;line-height:1.8em;">'获得后面的字符</span><wbr /><br>                MousePos = <span style="color:#ff0000;line-height:1.8em;">Split</span><wbr />(Script1, <span style="color:#808080;line-height:1.8em;">&quot;-&quot;</span><wbr />)                                                      <span style="color:#008000;line-height:1.8em;">'通过 -  来分割获得坐标，并放到 MousePos（数组）里面</span><wbr /><br>                <span style="color:#000080;line-height:1.8em;">SetCursorPos</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">CLng</span><wbr />(MousePos(0)), <span style="color:#ff0000;line-height:1.8em;">CLng</span><wbr />(MousePos(1))                                   <span style="color:#008000;line-height:1.8em;">'设置鼠标位置</span><wbr /><br>            <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;鼠标&quot;</span><wbr /><br>                <span style="color:#000080;line-height:1.8em;">GetCursorPos</span><wbr /> MouseCurPos                                                            <span style="color:#008000;line-height:1.8em;">'获得鼠标坐标到 MousePos（数组）</span><wbr /><br>                <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Mid</span><wbr />(Script1, 4, 2) = <span style="color:#808080;line-height:1.8em;">&quot;左键&quot;</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Then</span><wbr /><br>                    <span style="color:#000080;line-height:1.8em;">mouse_event</span><wbr /> MOUSEEVENTF_LEFTDOWN, MouseCurPos.X, MouseCurPos.Y, 0, 0            <span style="color:#008000;line-height:1.8em;">'设置鼠标左键按下</span><wbr /><br>                    <span style="color:#000080;line-height:1.8em;">mouse_event</span><wbr /> MOUSEEVENTF_LEFTUP, MouseCurPos.X, MouseCurPos.Y, 0, 0              <span style="color:#008000;line-height:1.8em;">'设置鼠标左键弹出</span><wbr /><br>                <span style="color:#0000d0;line-height:1.8em;">Else</span><wbr /><br>                    <span style="color:#000080;line-height:1.8em;">mouse_event</span><wbr /> MOUSEEVENTF_RIGHTDOWN, MouseCurPos.X, MouseCurPos.Y, 0, 0           <span style="color:#008000;line-height:1.8em;">'设置鼠标右键按下</span><wbr /><br>                    <span style="color:#000080;line-height:1.8em;">mouse_event</span><wbr /> MOUSEEVENTF_RIGHTUP, MouseCurPos.X, MouseCurPos.Y, 0, 0             <span style="color:#008000;line-height:1.8em;">'设置鼠标右键弹出</span><wbr /><br>                <span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br>            <span style="color:#0000d0;line-height:1.8em;">Case</span><wbr /> <span style="color:#808080;line-height:1.8em;">&quot;键盘&quot;</span><wbr /><br>                <span style="color:#ff0000;line-height:1.8em;">SendKeys</span><wbr /> <span style="color:#ff0000;line-height:1.8em;">Mid</span><wbr />(Script1, 4, ScriptLen - 3)                                             <span style="color:#008000;line-height:1.8em;">'发送键盘字符</span><wbr /><br>        <span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Select</span><wbr /><br>    <span style="color:#0000d0;line-height:1.8em;">Next</span><wbr /> i<br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">If</span><wbr /><br><span style="color:#0000d0;line-height:1.8em;">End</span><wbr /> <span style="color:#0000d0;line-height:1.8em;">Sub</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[游戏外挂]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1257762903#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Mon, 09 Nov 2009 10:35:03 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1257762903</guid>
</item>

<item>
<title><![CDATA[vb制作得简单浏览器源代码]]></title>
<link>http://370907531.qzone.qq.com/blog/1257683493</link>
<description><![CDATA[内部嵌一个webbrowser控件就是了<br><br>Private Sub BackButton_Click()<br>'返回上一个页面<br>    WebBrowser1.GoBack<br>End Sub<br><br>Private Sub Form_Load()<br>'程序装入后进入IE设定的起始页<br>    WebBrowser1.GoHome<br>End Sub<br><br>Private Sub Form_Resize()<br>'改变窗口大小后同时改变控件的大小<br>    WebBrowser1.Width = Form1.ScaleWidth<br>    WebBrowser1.Height = Form1.ScaleHeight - 900<br>    <br>End Sub<br><br>Private Sub ForwardButton_Click()<br>'进入下一个页面<br>    WebBrowser1.GoForward<br>End Sub<br><br>Private Sub GoButton_Click()<br>'浏览输入的页面<br>    WebBrowser1.Navigate (Text1.Text)<br>End Sub<br><br>Private Sub StopButton_Click()<br>'停止浏览<br>    WebBrowser1.Stop<br>End Sub<br><br>Private Sub Text1_KeyPress(KeyAscii As Integer)<br>'浏览输入的页面<br>    If KeyAscii = 13 Then<br>        WebBrowser1.Navigate (Text1.Text)<br>    End If<br>End Sub<br><br>Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)<br>'将当前显示的页面的URL地址显示在Text1上<br>    Text1.Text = URL<br>End Sub<br><br>Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)<br>'窗口的标题栏中显示当前页面装入情况<br>    Me.Caption = Text: Text1 = Me.Caption<br>End Sub <br> <br> <br>---- WebBrowser 控 件 支 持 的 主 要 方 法 有:<br>GoBack — — — 回 退 到 上 一 屏。 <br>GoForward — — — 进 入 到 下 一 屏。 <br>GoHome — — — 回 家。 即 回 到 主 页。 <br>Stop — — — 停 止 导 航。 <br>Refresh — — — 刷 新。 <br>Navigate — — — 导 航。<br>---- WebBrowser 控 件 所 响 应 的 事 件:<br>---- BeforeNavigate 事 件 — — — 在 开 始 导 航 前 发 生。 一 般 在 此 获 取 完 整 的URL 字 符 串。<br>---- WebBrowser 控 件 最 主 要 的 参 数:<br>---- URL — — — 获 得 导 航 用 的 标 准URL 字 符 串。 例 如： 它 能 将”www.MicroSoft.Com” 自 动 翻 译 为”http://www.MicroSoft.Com”.URL 是Uniform Resource Locator 的 缩 写， 是 在Internet 的WWW 服 务 程 序 上 用 于 指 定 信 息 位 置 的 表 示 方 法。 <!--v:3.2--> ]]></description>
<category><![CDATA[游戏外挂]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1257683493#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 08 Nov 2009 12:31:33 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1257683493</guid>
</item>

<item>
<title><![CDATA[内存找怪详解]]></title>
<link>http://370907531.qzone.qq.com/blog/1257671601</link>
<description><![CDATA[网上看了N多的文章，对内存中找怪极少有详细介绍，大多数人搞定人物内存中的有关参数后，止步于内存中的找怪。人物只有一个，而怪有各种各样的，数量又同时出现多个,比在内存中找人物坐标难度要大得多。 <br>下面我将尽可能详细的讲讲内存中找怪之代码注入篇，抛砖引玉，望高人指点。这里的代码注入是直接把代码注入到游戏文件中，学个破解的人都知道，哪怕游戏原文件加了壳，在游戏原文件中加入自己的代码也是完全可以的。 <br>由于本人水平有限，有的地方可能表达不清，请耐心慢慢看。有的地方采取的方法也许对高手来说好低劣，见笑了。 <br>一、把周围的怪物名称起始地址集中写到内存中一固定区域。游戏中，玩家周围有许多怪物，所有怪物的名称、坐标、血量等参数不可能会固定在某一内存位置， 但对于每一个怪物而言，它的名称、坐标、血量等在内存中的地址之间有着相对固定的差值，只要知道怪物的名称地址就能知道这个怪物的坐标、血量等地址。因 此，只要把周围每个怪物的名称地址固定在内存中一定区域，就可知道这些怪物的其他参数。 <br>1、先把游戏中我们需要打的怪物名称（不是所有怪物，因为有的怪物不爆东西等不值得打）固定放到内存地址为004d2a60起的一块区域，制做一张需要打的怪物名称列表。每个怪名称占12字节，不够12字节的后面用00填充。 <br>内存地址：004d2a60是怎样来的呢？ <br>我们用PEditor打开游戏原文件，可以看到PE文件分了好多块，有的块是可以改写的（属性为E0000020或C0000040的可以改写），块里 并不全部写满了数据，还有大块连续为00的空闲区域。用UltraEdit等软件打开游戏文件，看到文件物理地址为000d2a60起有一大块为00的空 闲区域。映射到内存中就是地址为004d2a60起一块为00的空闲区域，我们先把怪物名称写到这块地方。 <br>具体操做是用UltraEdit打开游戏文件，修改文件物理地址为000d2a60起的数据。原文件中这里全部为00，我们把下面数据填进去（部分怪物名称列表）。 <br>000D2A60 B0 EB CA DE D5 BD CA BF 00 00 00 00 B0 EB CA DE 半兽战士....半兽 <br>000D2A70 D3 C2 CA BF 00 00 00 00 BB A2 C9 DF 00 00 00 00 勇士....虎蛇.... <br>000D2A80 00 00 00 00 B6 BE D6 A9 D6 EB 00 00 00 00 00 00 ....毒蜘蛛...... <br>000D2A90 C9 AD C1 D6 D1 A9 C8 CB 00 00 00 00 CD FE CB BC 森林雪人....威思 <br>000D2AA0 B6 F8 D0 A1 B3 E6 00 00 B6 E0 BD C7 B3 E6 00 00 而小虫..多角虫.. <br>000D2AB0 00 00 00 00 BF F8 BC D7 B3 E6 00 00 00 00 00 00 ....盔甲虫...... <br>000D2AC0 B8 AF CA B4 C8 CB B9 ED 00 00 00 00 C0 CB D7 D3 腐蚀人鬼....浪子 <br>000D2AD0 C8 CB B9 ED 00 00 00 00 C0 D7 B5 E7 BD A9 CA AC 人鬼....雷电僵尸 <br>000D2AE0 00 00 00 00 BD A9 CA AC 00 00 00 00 00 00 00 00 ....僵尸........ <br>000D2AF0 C9 AE C2 C2 BD A9 CA AC 00 00 00 00 B6 B4 C7 F9 僧侣僵尸....洞蛆 <br>000D2B00 00 00 00 00 00 00 00 00 F7 BC F7 C3 BE AB C1 E9 ........骷髅精灵 <br>000D2B10 00 00 00 00 CA AC CD F5 00 00 00 00 00 00 00 00 ....尸王........ <br>这样，当游戏运行时，从内存地址004d2a60起的一段区域有了我们需要打的怪物列表。 <br>2、再把玩家周围实际刷的怪物名称的起始地址（注意是名称的起始地址）固定在内存为004D3000起的长为100（16进制）的地方。 <br>内存地址：004D3000是游戏运行时我们查到的空闲内存地址，我们利用它们来放周围怪物名称的起始地址，每个怪物名称的起始地址占4个字节，长为100（16进制）可以放64个怪物，玩家周围不会超过64个怪物吧，长为100应足够了。 <br><br>3、怎么写入这些怪物名称的起始地址呢？ <br>首先应知道，游戏从哪里把怪物名称写入内存中。 <br>Cheat Engine会用吧？具体怎么找，简单的说一下： <br>先运行游戏再运行Cheat Engine，CE中选择游戏程序，查看内存，搜索内存玩家周围的一个怪物名称。找到后记下怪物名称的起始内存地址，手动添加地址，把找到的地址添加到列 表，类型为文本。从列表中选刚才添加的地址，右键选“寻找什么写入这个地址”。回到游戏中移动玩家，观察刚添加的内存地址的数值变化。变为00时为该怪物 从玩家视眼中消失。再移动玩家到看见这怪物，如果运气好，怪物名会再次写入这个内存地址。这样在“以下处理将改变运算码”的窗口中会有汇编代码出现。 <br>如我的游戏： <br>能看到00409872 mov byte ptr [edi+ecx], dl 这句。 <br>游戏是从这句把怪物名写入内存中的。 <br>用OllyICE打开游戏。跳到以下这段代码可以看到： <br>00409870 &gt;/8A11 mov dl, byte ptr [ecx] //从这里开始写怪物名称 <br>00409872 . |88140F mov byte ptr [edi+ecx], dl //名称从[edi+ecx]开始 <br>00409875 . |41 inc ecx <br>00409876 . |84D2 test dl, dl <br>00409878 .^\75 F6 jnz short 00409870 <br>0040987A . 50 push eax //写完了运行到这里。 <br>0040987B ? 68 4C774C00 push 004C774C <br>00409880 . 56 push esi <br>00409881 . E8 02F10A00 call 004B8988 <br>游戏每出现一个怪都会把怪物名称写入[edi+ecx]开始的内存中，显然内存地址[edi+ecx]不是一个固定的值。我们要把这个值复制一份固定到内存中地址为004D3000开始的一块区域。 <br>这样，周围的怪物名称的起始地址就固定在004D3000、004d3004、004D3008等等内存中.知道怪物名称的起始地址就能算出怪物的坐标、血量等地址。 <br>具体怎么做呢？ <br>我们看到游戏运行到0040987A . 50 push eax 这行时，怪物名称已经写到内存中，我们从这行开始写入我们的代码，原文件中紧接这行的下面肯定没有多余的空间来写我们的代码，这就要求改写这行代码，跳到 空闲的地方把我们的代码加进去，运行完我们的代码后再跳回来。 <br>因此把原文件改为如下（对照上面）： <br>00409870 &gt;/8A11 mov dl, byte ptr [ecx] <br>00409872 . |88140F mov byte ptr [edi+ecx], dl <br>00409875 . |41 inc ecx <br>00409876 . |84D2 test dl, dl <br>00409878 .^\75 F6 jnz short 00409870 <br>0040987A .- E9 FB690C00 jmp 004D027A //这里改为跳到004d027a <br>0040987F 90 nop <br>00409880 . 56 push esi <br>00409881 . E8 02F10A00 call 004B8988 <br>就是把这行0040987A . 50 push eax改为: <br>0040987A .- E9 FB690C00 jmp 004D027A <br>从004d027A开始写我们的代码，原文件中004D027A也是一块为00的空闲区域。 <br>下面是我们添加进去的代码，原文件中是为00的空闲区域。 <br>004D027A 50 push eax //先把一些用到的寄存器数据入栈，保护现场。 <br>004D027B 53 push ebx <br>004D027C 51 push ecx <br>004D027D 52 push edx <br>004D027E 31D2 xor edx, edx <br>004D0280 81C7 A4F61200 add edi, 12F6A4 //此处就是edi+ecx,ecx为常数12F6A4 <br>004D0286 833F 00 cmp dword ptr [edi], 0 //怪名是否为空 <br>004D0289 74 63 je short 004D02EE //为空不是怪名，直接跳回去不写入 <br>004D028B 33C9 xor ecx, ecx <br>004D028D 8B0439 mov eax, dword ptr [ecx+edi] //怪名前4个字节放入eax中 <br>004D0290 8B9C11 602A4D00 mov ebx, dword ptr [ecx+edx+4D2A60] //需要打的怪名前4个字节 <br>004D0297 83C1 04 add ecx, 4 <br>004D029A 3BC3 cmp eax, ebx //比较刷的怪名与需要打的怪名前4个字节 <br>004D029C 75 07 jnz short 004D02A5 //不相等，跳到与下一个需要打的怪名 <br>004D029E 83F9 0C cmp ecx, 0C //因为怪名长占12个字节，所以要比较三次 <br>004D02A1 ^ 7C EA jl short 004D028D //没比较完返回继续比较 <br>004D02A3 EB 0D jmp short 004D02B2 //刷的怪名从需要打的怪名列表中找到了,跳到开始写入. 004D02A5 83C2 0C add edx, 0C //下一个需要打的怪名 <br>004D02A8 81FA 08010000 cmp edx, 108 //是否到了需要打的怪名列表尽头 <br>004D02AE ^ 7C DB jl short 004D028B //没到继续比较 <br>004D02B0 EB 3C jmp short 004D02EE //到了尽头刷的这个怪不是需要打的，跳回不写入 <br>004D02B2 33C9 xor ecx, ecx //从这开始写入 <br>004D02B4 8B81 00304D00 mov eax, dword ptr [ecx+4D3000] //把想写入的内存地址放入eax <br>004D02BA 83C1 04 add ecx, 4 <br>004D02BD 81F9 00010000 cmp ecx, 100 //是否写满,能写64个怪，周围一般同时没有这么多 <br>004D02C3 7F 12 jg short 004D02D7 //写满了清空这块区域. <br>004D02C5 83F8 00 cmp eax, 0 //比较内存地址[ecx+4D3000]，是否写了其他怪 <br>004D02C8 ^ 75 EA jnz short 004D02B4 //写了，找下一个内存地址 <br>004D02CA 89B9 FC2F4D00 mov dword ptr [ecx+4D2FFC], edi //把怪名的起始内存地址写入 <br>004D02D0 E8 BB000000 call 004D0390 //写入一怪后，重新找最近怪,后面详细讲这个call <br>004D02D5 EB 17 jmp short 004D02EE //整理后返回 <br>004D02D7 33C9 xor ecx, ecx <br>004D02D9 33C0 xor eax, eax <br>004D02DB 8981 00304D00 mov dword ptr [ecx+4D3000], eax <br>004D02E1 83C1 04 add ecx, 4 <br>004D02E4 81F9 00010000 cmp ecx, 100 <br>004D02EA ^ 7C EF jl short 004D02DB <br>004D02EC ^ EB C4 jmp short 004D02B2 <br>004D02EE 5A pop edx //各寄存器出栈，恢复现场 <br>004D02EF 59 pop ecx <br>004D02F0 5B pop ebx <br>004D02F1 58 pop eax <br>004D02F2 50 push eax //把原文件的代码补上 <br>004D02F3 68 4C774C00 push 004C774C //这也是原文件的代码补上 <br>004D02F8 - E9 8395F3FF jmp 00409880 //跳回到原文件插入跳转指令的下一行 <br>通过以上代码，我们把玩家周围出现的怪，而且是我们需要打的怪名的起始内存地址放到了以内存地址004D3000开始的一段区域内。 <br>4、修改游戏原始文件，下次启动游戏时能运行我们的代码: <br>用UltraEdit打开原文件，把原文件地址为0000987A起数据： <br>50684C774C00 改为:E9FB690C0090 <br>把下面数据复制到000d027A起的文件里. <br>50 53 51 52 31 D2 81 C7 A4 F6 12 00 83 3F 00 74 <br>63 33 C9 8B 04 39 8B 9C 11 60 2A 4D 00 83 C1 04 <br>3B C3 75 07 83 F9 0C 7C EA EB 0D 83 C2 0C 81 FA <br>08 01 00 00 7C DB EB 3C 33 C9 8B 81 00 30 4D 00 <br>83 C1 04 81 F9 00 01 00 00 7F 12 83 F8 00 75 EA <br>89 B9 FC 2F 4D 00 E8 BB 00 00 00 EB 17 33 C9 33 <br>C0 89 81 00 30 4D 00 83 C1 04 81 F9 00 01 00 00 <br>7C EF EB C4 5A 59 5B 58 50 68 4C 77 4C 00 E9 83 <br>95 F3 FF <br>上面的这些16进制数据就是我们上面加入的代码，修改好后存盘。 <br>至此，游戏运行时，不需要其他工具，游戏本身就会把怪名的起始内存地址固定到了以内存地址004D3000开始的一段区域内。 <br>二、怪物消失时，怪名的起始内存地址从004D3000开始的一段区域内清除 <br>上面只是把怪名的起始地址写到以内存地址004D3000开始的一段区域内。当怪物从玩家视眼中消失时，我们必需把怪名的起始内存地址从004D3000开始的一段区域内清除掉。 <br>1、怎么把我们先前写入的怪名起始地址清除掉呢？ <br>先看看游戏本身当怪物消失时从哪里把怪物名称从内存中清除掉。 <br>同样使用Cheat Engine,当怪物消失时会有这么一句： <br>0040F5A8 mov ecx, 30 <br>游戏运行到这句时，怪名的内存地址清空为00，寄存器edi正好是怪名的起始内存地址。 <br>用OllyICE打开游戏。跳到以下这段代码可以看到： <br>0040F5A2 . 8DBD 48270600 lea edi, dword ptr [ebp+62748] //这里开始清空 <br>0040F5A8 B9 30000000 mov ecx, 30 <br>0040F5AD . F3:AB rep stos dword ptr es:[edi] <br>因此把原文件改为如下（对照上面）： <br>0040F5A2 . 8DBD 48270600 lea edi, dword ptr [ebp+62748] <br>0040F5A8 - E9 540D0C00 jmp 004D0301 //修改这里,跳到004d0301 <br>0040F5AD . F3:AB rep stos dword ptr es:[edi] <br>从004d0301开始写我们的代码，原文件中004d0301也是一块为00的空闲区域。 <br>004D0301 50 push eax //先把一些用到的寄存器数据入栈，保护现场。 <br>004D0302 53 push ebx <br>004D0303 51 push ecx <br>004D0304 52 push edx <br>004D0305 33C9 xor ecx, ecx <br>004D0307 8B07 mov eax, dword ptr [edi] //把[edi]内数据放入eax中 <br>004D0309 83F8 00 cmp eax, 0 //比较是否为怪名 <br>004D030C 74 22 je short 004D0330 //为零，不是怪名，不清除跳到返回 <br>004D030E 8B99 00304D00 mov ebx, dword ptr [ecx+4D3000] //把已写入的怪名起始地址放入ebx004D0314 83C1 04 add ecx, 4 <br>004D0317 81F9 00010000 cmp ecx, 100 //比较是否全部比较完 <br>004D031D 7F 11 jg short 004D0330 //没找到，说明以前没把这怪写入，也就不用清除 <br>004D031F 3BDF cmp ebx, edi //比较游戏刚消失的怪名地址，是否以前写入过这个地址 <br>004D0321 ^ 75 EB jnz short 004D030E //不是这个再比较下一个 <br>004D0323 33D2 xor edx, edx //刚消失的怪名地址在以前写入的区域内找到了，开始清除 <br>004D0325 8991 FC2F4D00 mov dword ptr [ecx+4D2FFC], edx //以前写入的起始怪名地址清零 <br>004D032B E8 60000000 call 004D0390 //清除掉一怪后，重新找最近怪,后面详细讲这个call <br>004D0330 5A pop edx //各寄存器出栈，恢复现场 <br>004D0331 59 pop ecx <br>004D0332 5B pop ebx <br>004D0333 58 pop eax <br>004D0334 B9 30000000 mov ecx, 30 //把原文件的代码补上 <br>004D0339 - E9 6FF2F3FF jmp 0040F5AD //跳回到原文件插入跳转指令的下一行 <br>通过以上代码，我们把玩家周围消失的怪，从内存地址004D3000开始的一段区域内清除掉。 <br>2、修改游戏原始文件，下次启动游戏时能运行我们的代码: <br>用UltraEdit打开原文件，把原文件地址为0000F5A8起数据： <br>B930000000 改为:E9540D0C00 <br>把下面数据复制到000d0301起的文件里. <br>50 53 51 52 33 C9 8B 07 83 F8 00 74 22 8B 99 00 <br>30 4D 00 83 C1 04 81 F9 00 01 00 00 7F 11 3B DF <br>75 EB 33 D2 89 91 FC 2F 4D 00 E8 60 00 00 00 5A <br>59 5B 58 B9 30 00 00 00 E9 6F F2 F3 FF 90 <br>数据怎么来的，上面已经说了。改后存盘。 <br>至此，把玩家周围消失的怪，从内存地址004D3000开始的一段区域内清除掉了。 <br>三、当怪物死亡时，怪名的起始内存地址从004D3000开始的一段区域内清除 <br>当怪物死亡时,游戏并不会立即把怪名内存地址清零，要等怪物尸体消失时才清零。我们必需立即把怪名的起始内存地址从004D3000开始的一段区域内清除掉。 <br>1、同样,我们用Cheat Engine找到怪物血量减少时的汇编代码: <br>00419BBA word ptr [esi+626F4], ax <br>ax中存的就是怪物的血量。 <br>用OllyICE打开游戏。跳到以下这段代码可以看到： <br>00419BBA . 66:8986 F4260&gt;mov word ptr [esi+626F4], ax //esi+626f4为血量地址 <br>00419BC1 . 66:8B4F 08 mov cx, word ptr [edi+8] <br>00419BC5 . 66:898E C2010&gt;mov word ptr [esi+1C2], cx <br>00419BCC . E8 CFF10900 call 004B8DA0 <br>因此把原文件改为如下（对照上面）： <br>00419BBA . 66:8986 F4260&gt;mov word ptr [esi+626F4], ax <br>00419BC1 - E9 CB680B00 jmp 004D0491 //修改这里,跳到004d0491 <br>00419BC6 90 nop <br>00419BC7 90 nop <br>00419BC8 90 nop <br>00419BC9 90 nop <br>00419BCA 90 nop <br>00419BCB 90 nop <br>00419BCC . E8 CFF10900 call 004B8DA0 <br>从004d0491开始写我们的代码，原文件中004d0491也是一块为00的空闲区域。 <br>下面是我们添加进去的代码，原文件中是为00的空闲区域。 <br>004D0491 50 push eax //先把一些用到的寄存器数据入栈，保护现场。 <br>004D0492 53 push ebx <br>004D0493 51 push ecx <br>004D0494 52 push edx <br>004D0495 56 push esi <br>004D0496 33C9 xor ecx, ecx <br>004D0498 90 nop <br>004D0499 90 nop <br>004D049A 66:83F8 00 cmp ax, 0 //比较血量是否为0 <br>004D049E 7F 28 jg short 004D04C8 //大于0，不用清除，直接到返回 <br>004D04A0 81C6 48270600 add esi, 62748 //esi+62748为怪名的起始内存地址 <br>004D04A6 8B99 00304D00 mov ebx, dword ptr [ecx+4D3000] //把以前写入的怪名起始地址放入ebx <br>004D04AC 83C1 04 add ecx, 4 <br>004D04AF 81F9 00010000 cmp ecx, 100 <br>004D04B5 7F 11 jg short 004D04C8 <br>004D04B7 3BDE cmp ebx, esi //比较游戏刚死亡的怪名地址，是否以前写入过这个地址 <br>004D04B9 ^ 75 EB jnz short 004D04A6 //不是这个再比较下一个 <br>004D04BB 33D2 xor edx, edx //刚死亡的怪名地址在以前写入的区域内找到了，开始清除 <br>004D04BD 8991 FC2F4D00 mov dword ptr [ecx+4D2FFC], edx //清零 <br>004D04C3 E8 C8FEFFFF call 004D0390 //清除掉一怪后，重新找最近怪,后面详细讲这个call <br>004D04C8 5E pop esi //各寄存器出栈，恢复现场 <br>004D04C9 5A pop edx <br>004D04CA 59 pop ecx <br>004D04CB 5B pop ebx <br>004D04CC 58 pop eax <br>004D04CD 66:8B4F 08 mov cx, word ptr [edi+8] //把原文件的代码补上 <br>004D04D1 66:898E C201000&gt;mov word ptr [esi+1C2], cx //这也是原文件的代码补上 <br>004D04D8 - E9 EF96F4FF jmp 00419BCC //跳回到原文件插入跳转指令的下一行 <br>通过以上代码,把玩家周围死亡的怪，立即从内存地址004D3000开始的一段区域内清除掉。 <br>2、修改游戏原始文件，下次启动游戏时能运行我们的代码: <br>用UltraEdit打开原文件，把原文件地址为00019BC1起数据： <br>668B4F0866898EC2010改为:E9CB680B00909090909090 <br>把下面数据复制到000d0491起的文件里. <br>50 53 51 52 56 33 C9 90 90 66 83 F8 00 7F 28 81 <br>C6 48 27 06 00 8B 99 00 30 4D 00 83 C1 04 81 F9 <br>00 01 00 00 7F 11 3B DE 75 EB 33 D2 89 91 FC 2F <br>4D 00 E8 C8 FE FF FF 5E 5A 59 5B 58 66 8B 4F 08 <br>66 89 8E C2 01 00 00 E9 EF 96 F4 FF <br>同样，数据由上面代码段而来，改好后存盘。 <br>至些，把玩家周围死亡的怪，立即从内存地址004D3000开始的一段区域内清除掉。 <br>四、把离玩家最近的怪物参数固定在内存中的某处 <br>通过以上三大步骤,我们已经实现了把玩家周围的，而且是需要打的活的怪物名称起始内存地址集中写入到了从004D3000到004D3100这小段区域 内,在这小段区域内每组不为零的四个字节就代表了一个怪物名的起始内存地址,没有其他不相关的数据在这一小段。如果用按键精灵，已经可以通过读这一小段内 存数据可以实现读内存打怪了。为了减少按键精灵读内存次数，和过多的转换运算，我们直接把最近怪的有关参数固定下来。 <br>这就到了前面多次提到的call 004D0390 这句。 <br>1、先分析游戏，用Cheat Engine容易找到: <br>内存中怪名起始内存地址与其他地址之间的关系: <br>以下为16进制数： <br>怪名起始内存地址－54＝怪血量地址（占两个字节） <br>怪名起始内存地址－62570＝怪X坐标地址（占四个字节） <br>怪名起始内存地址－625C0＝怪y坐标地址（占四个字节） <br>人物参数内存地址（此游戏竟然是固定的）： <br>人名称内存地址＝008AFAF8 <br>人血量内存地址＝008AFAA4 <br>人气量内存地址＝008AFBD8 <br>人X坐标内存地址＝008AFEAC <br>人y坐标内存地址＝008AFEB0 <br>2、人物坐标，怪物坐标与屏幕坐标的关系 <br>游戏中人物在屏幕正中心，离上下左右各8步,超过8步在屏幕外，鼠标不能点击。游戏坐标差不能超过8。 <br>窗口模式下鼠标能点到这个怪的极限区域（坐标为窗口坐标）。 <br>正上顶点：（393，0）与（408，21）组成的区域。 <br>正下顶点：（393，512）与（408，533）组成的区域。 <br>正左顶点：（10，256）与（24，276）组成的区域。 <br>正右顶点：（778，256）与（792，276）组成的区域。 <br>假设人物坐标（Rx,Ry），怪坐标（Gx,Gy）,鼠标点击坐标（X,Y） <br>其中人物坐标，怪坐标为游戏里的坐标，鼠标点击坐标为窗口坐标。 <br>通过以上分析则有鼠标点击能点到怪的窗口坐标X，Y为: <br>X=(Gx-(Rx-8))*48+17 （后面加值范围10～24，最好取中间值＋17） <br>y=(Gy-(Ry-8))*32+2 （后面加值范围0～21，因可能点到左下角头像选＋2） <br>3、有了以上理论就可以写call 004D0390的代码了 <br>同样从004D0390开始写我们的代码，原文件中004D0390也是一块为00的空闲区域。 <br>把最近怪物名的起始内存地址固定在[004D2FE0]中，X坐标固定在[004D2FF0]中，Y坐标固定在[004D2FF4]中,怪血量固定在[004D2FF8]中。 <br>004D0390 50 push eax //先把一些用到的寄存器数据入栈，保护现场。 <br>004D0391 53 push ebx <br>004D0392 51 push ecx <br>004D0393 52 push edx <br>004D0394 56 push esi <br>004D0395 57 push edi <br>004D0396 33C0 xor eax, eax <br>004D0398 A3 E02F4D00 mov dword ptr [4D2FE0], eax //初始化内存 <br>004D039D A3 F02F4D00 mov dword ptr [4D2FF0], eax <br>004D03A2 A3 F42F4D00 mov dword ptr [4D2FF4], eax <br>004D03A7 05 FFFF0000 add eax, 0FFFF <br>004D03AC A3 E42F4D00 mov dword ptr [4D2FE4], eax <br>004D03B1 33C9 xor ecx, ecx <br>004D03B3 8BB9 00304D00 mov edi, dword ptr [ecx+4D3000] //把怪物起始内存地址放入edi <br>004D03B9 83C1 04 add ecx, 4 <br>004D03BC 81F9 00010000 cmp ecx, 100 <br>004D03C2 0F8F AA000000 jg 004D0472 //全部比较完后返回 <br>004D03C8 83FF 00 cmp edi, 0 <br>004D03CB ^ 74 E6 je short 004D03B3 //为零找下一个 <br>004D03CD 8B87 90DAF9FF mov eax, dword ptr [edi+FFF9DA90] //怪Gx坐标放入eax <br>004D03D3 8B1D ACFE8A00 mov ebx, dword ptr [8AFEAC] //人Rx坐标放入ebx <br>004D03D9 3BC3 cmp eax, ebx <br>004D03DB 7F 01 jg short 004D03DE <br>004D03DD 93 xchg eax, ebx <br>004D03DE 2BC3 sub eax, ebx //Gx与Rx之差放入eax <br>004D03E0 83F8 08 cmp eax, 8 //两者差是否大于8 <br>004D03E3 ^ 7F CE jg short 004D03B3 //大于8在屏幕外，直接找下一个怪 <br>004D03E5 F7E0 mul eax //横坐标差平方运算 <br>004D03E7 8BF0 mov esi, eax //横坐标差的平方放入esi中 <br>004D03E9 8B87 40DAF9FF mov eax, dword ptr [edi+FFF9DA40] //怪Gy坐标放入eax <br>004D03EF 8B1D B0FE8A00 mov ebx, dword ptr [8AFEB0] //人Ry坐标放入ebx <br>004D03F5 3BC3 cmp eax, ebx <br>004D03F7 7F 01 jg short 004D03FA <br>004D03F9 93 xchg eax, ebx <br>004D03FA 2BC3 sub eax, ebx //Gy与Ry之差放入eax <br>004D03FC 83F8 08 cmp eax, 8 //两者差是否大于8 <br>004D03FF ^ 7F B2 jg short 004D03B3 //大于8在屏幕外，直接找下一个怪 <br>004D0401 F7E0 mul eax //枞坐标差平方运算 <br>004D0403 03F0 add esi, eax //横、枞坐标之差的平方的和放入esi中 <br>004D0405 3B35 E42F4D00 cmp esi, dword ptr [4D2FE4] //这个距离的平方与前次保存的距离的平方 <br>004D040B ^ 7D A6 jge short 004D03B3 //大于或等于说明这个怪离玩家距离更远,找下一个怪 <br>004D040D 893D E02F4D00 mov dword ptr [4D2FE0], edi //更近怪名的起始地址固定在[4D2FE0]中 <br>004D0413 8B47 AC mov eax, dword ptr [edi-54] <br>004D0416 66:A3 F82F4D00 mov word ptr [4D2FF8], ax //血量固定在[4D2FF8]中 <br>004D041C 8935 E42F4D00 mov dword ptr [4D2FE4], esi //距离平方放在[4D2FE4]中 <br>004D0422 8B87 90DAF9FF mov eax, dword ptr [edi+FFF9DA90] //更近怪Gx坐标放入eax <br>004D0428 8B1D ACFE8A00 mov ebx, dword ptr [8AFEAC] //人Rx坐标放入ebx <br>004D0431 2BC3 sub eax, ebx <br>004D0433 BB 30000000 mov ebx, 30 <br>004D0438 F7E3 mul ebx <br>004D043A 83C0 17 add eax, 17 <br>004D043D A3 F02F4D00 mov dword ptr [4D2FF0], eax //换算后，鼠标点击X坐标放入[4D2FF0]中 <br>004D0442 8B87 40DAF9FF mov eax, dword ptr [edi+FFF9DA40] <br>004D0448 8B1D B0FE8A00 mov ebx, dword ptr [8AFEB0] <br>004D044E 83C0 08 add eax, 8 <br>004D0451 2BC3 sub eax, ebx <br>004D0453 BB 20000000 mov ebx, 20 <br>004D0458 F7E3 mul ebx <br>004D045A 83C0 02 add eax, 2 <br>004D045D A3 F42F4D00 mov dword ptr [4D2FF4], eax //换算后，鼠标点击Y坐标放入[4D2FF4]中 <br>004D0462 83FE 02 cmp esi, 2 //距离平方是否小于或等于2 <br>004D0465 7E 0B jle short 004D0472 //怪已经紧挨着玩家了，不用再找下一个怪了 <br>004D0467 ^ E9 47FFFFFF jmp 004D03B3 //这个怪离玩家还有距离，可能还有更近的 <br>004D046C 90 nop <br>004D046D 90 nop <br>004D046E 90 nop <br>004D046F 90 nop <br>004D0470 90 nop <br>004D0471 90 nop <br>004D0472 5F pop edi //各寄存器出栈，恢复现场 <br>004D0473 5E pop esi <br>004D0474 5A pop edx <br>004D0475 59 pop ecx <br>004D0476 5B pop ebx <br>004D0477 58 pop eax <br>004D0478 C3 retn //返回调用call的下一行 <br>游戏运行过程中，只要运行以上这段代码，就会把最近怪的窗口X坐标固定在[004D2FF0]中，窗口Y坐标固定在[004D2FF4]中,血量固定在[004D2FF8]中。 <br>4、用UltraEdit打开原文件，把下面数据复制到000d0390起的文件里. <br>50 53 51 52 56 57 33 C0 A3 E0 2F 4D 00 A3 F0 2F <br>4D 00 A3 F4 2F 4D 00 05 FF FF 00 00 A3 E4 2F 4D <br>00 33 C9 8B B9 00 30 4D 00 83 C1 04 81 F9 00 01 <br>00 00 0F 8F AA 00 00 00 83 FF 00 74 E6 8B 87 90 <br>DA F9 FF 8B 1D AC FE 8A 00 3B C3 7F 01 93 2B C3 <br>83 F8 08 7F CE F7 E0 8B F0 8B 87 40 DA F9 FF 8B <br>1D B0 FE 8A 00 3B C3 7F 01 93 2B C3 83 F8 08 7F <br>B2 F7 E0 03 F0 3B 35 E4 2F 4D 00 7D A6 89 3D E0 <br>2F 4D 00 8B 47 AC 66 A3 F8 2F 4D 00 89 35 E4 2F <br>4D 00 8B 87 90 DA F9 FF 8B 1D AC FE 8A 00 83 C0 <br>08 2B C3 BB 30 00 00 00 F7 E3 83 C0 17 A3 F0 2F <br>4D 00 8B 87 40 DA F9 FF 8B 1D B0 FE 8A 00 83 C0 <br>08 2B C3 BB 20 00 00 00 F7 E3 83 C0 02 A3 F4 2F <br>4D 00 83 FE 02 7E 0B E9 47 FF FF FF 90 90 90 90 <br>90 90 5F 5E 5A 59 5B 58 C3 <br>改好后存盘，这样运行游戏时，游戏本身会把最近怪的窗口X坐标固定在[004D2FF0]中，窗口Y坐标固定在[004D2FF4]中,血量固定在[004D2FF8]中。 <br>五、人物移动时，及时更新最近怪物参数 <br>上面三个大步骤，刷出一个怪，消失一个怪，死亡一个怪时，都会运行call 004D0390,也就是都会马上更新一下内存地址004D2FE0、004D2FF0、04D2FF4、004D2FF8的数据。人物移动时也必需及时更新最近怪物参数。 <br>1、同样,我们用Cheat Engine找到人物移动时的汇编代码: <br>人物每移动一步都会经过以下代码: <br>00432A78 pop edi <br>用OllyICE打开游戏。跳到以下这段代码可以看到： <br>00432A78 |. 5F pop edi <br>00432A79 |. 5E pop esi <br>00432A7A |. 5B pop ebx <br>00432A7B |. 8BE5 mov esp, ebp <br>00432A7D |. 5D pop ebp <br>00432A7E |. C2 0400 retn 4 <br>因此把原文件改为如下（对照上面）： <br>00432A78 - E9 D4D80900 jmp 004D0351 //这里改为跳到004d0351 <br>00432A7D |. 5D pop ebp <br>00432A7E |. C2 0400 retn 4 <br>从004D0351开始写我们的代码，原文件中004D0351也是一块为00的空闲区域。 <br>下面是我们添加进去的代码，原文件中是为00的空闲区域。 <br>004D0351 E8 3A000000 call 004D0390 //就是为了补进这句 <br>004D0356 5F pop edi //把原文件的代码补上 <br>004D0357 5E pop esi <br>004D0358 5B pop ebx <br>004D0359 8BE5 mov esp, ebp <br>004D035B - E9 1D27F6FF jmp 00432A7D //跳回到原文件插入跳转指令的下一行 <br>2、修改游戏原始文件，下次启动游戏时能运行我们的代码: <br>用UltraEdit打开原文件，把原文件地址为00032a78起数据： <br>5F5E5B8BE5 改为:E9D4D80900 <br>把下面数据复制到000d0351起的文件里. <br>E8 3A 00 00 00 5F 5E 5B 8B E5 E9 1D 27 F6 FF <br>到此为止，我们终于把最近怪物的有用参数固定在004D2FE0、004D2FF0、04D2FF4、004D2FF8四个内存地址中，当然如果还想加 入最近怪物的其他参数，如怪物是否被其他玩家攻击，是否为小BOSS等等只要修改CALL 004D0390这段代码就行。 <br>把以上所有要 改的数据改好存盘后，游戏原文件大小没有改变，但已经成功的把我们的代码注入进去了，启动游戏。查看游戏内存数据，可以看到内存004D2FE0、 004D2FF0、04D2FF4、004D2FF8,正是我们需要的离玩家最近怪物的名称起址、窗口X坐标、窗口Y坐标、血量。随着游戏的进行，这几个 内存地址都会及时正确的更新着。 <br>六、写个简单的内存找怪打怪脚本 <br>前期工作做好后，编写内存找怪打怪按键精灵脚本就简单多了。 <br>下面是简单的脚本: <br>Dim handle,Rx,Ry,Gx,Gy,G1,G2,X,Y //其中G1，G2为怪名的起始内存地址 <br>Plugin handle=Window.MousePoint() <br>Rem 找怪 <br>Plugin G1=Memory.Read32Bit(handle,&amp;h004d2fe0) <br>Plugin X=Memory.Read32Bit(handle,&amp;h004d2ff0) <br>Plugin Y=Memory.Read32Bit(handle,&amp;h004d2ff4) <br>Plugin BGKM4.MMove(handle,X,Y) <br>Delay 100 <br>Plugin BGKM4.LClick(handle,X,Y) <br>Rem 判断 <br>Plugin G2=Memory.Read32Bit(handle,&amp;h004d2fe0) <br>If G2=G1 <br>Delay 100 <br>Goto 判断 <br>EndIf <br>Delay 100 <br>Goto 找怪 <br>连怪血量的内存地址都不需要用上,因为怪名的起始地址也是及时更新的。 <br>七、其他 <br>以上脚本只是简单的砍怪,没有加入使用技能，没有加入补血补气，也没有加入捡取物品。游戏中遇到特殊情况也没做相应处理。 <br>关于使用技能，如可以通过统计紧挨玩家怪物的数量使用群攻技能。 <br>知道人物的血、气内存地址，补血补气那是很容易实现的了。 <br>关于游戏地面物品内存中的查找，原理其实同找怪一样，也可预先做一个需要捡取的物品清单，然后，把地面出现的物品与清单相比较，如果是要捡的，可以临时把坐标放入一固定内存区域内，跟据判定物品离玩家距离的远近和周围怪物的多少，决定恰当的时候去捡起。 <br>游戏中还有些关键的元素，如打怪路线，捡到极品自动存仓库，自动买药买蓝都可以通过读内存实现。 <br>不说了，再说又是长篇大论。 <!--v:3.2--> ]]></description>
<category><![CDATA[游戏外挂]]></category>
<author><![CDATA[370907531@qq.com(聚缘/kl书生)]]></author>
<comments>http://370907531.qzone.qq.com/blog/1257671601#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Sun, 08 Nov 2009 09:13:21 GMT</pubDate>
<guid>http://370907531.qzone.qq.com/blog/1257671601</guid>
</item>

</channel>
</rss>

