Java语言的Hook实现

<div id="blog\_content" class="blog\_content"> <p>引言:最近在玩完美时空的诛仙Online(不知道这里有没人有共同爱好的),这个游戏每晚七点会出现一个任务“新科试炼”。这个任务简单地说就是做选择题,范围小到柴米油盐,大到世界大千,所以多玩的YY上出现一个频道叫“诛仙答题频道”,这个频道会即时为玩家提供正确答案,所以当大家都上YY的时候,最终出来的成绩的高低并不取决于你的知识面,而是取决你家的网速及你的反应速度(答题越早,所获得的成绩越高)。我家的网速很好,可惜我的反应速度一般,所以从来没上过一次前十,因为每次听说YY上的答案后还要移动鼠标去点击相应的答案,这个过程平均需要0.5秒,这无疑是我成绩不高的根本所在。所以我想到了通过按下键盘上的某些按键实现将鼠标移动到指定位置并模拟鼠标键按下事件(以下简称模拟)。也许你会问:这还不简单,直接加个KeyListener不就完了?但是你想过没有,在模拟的时候,窗口的焦点是在游戏窗口,而不是Java程序的窗口(甚至连窗口都没有),所以我们需要一个监听所有进程的接口,这就是我接下要说的“Hook(钩子)”(了解外挂制作的人应该知道是什么东西,没看过?百度之)。不废话,进入正题:</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.iteye.com/upload/picture/pic/43083/18e4fa0a-c4c5-3660-bc8b-b48303f04736-thumb.bmp?1251191137" style="float: left;" height="90" width="120" alt="">首先,编写之前,我们要使用到一个第三方类库,它实现的功能就是让你直接调用API,而将对Window的调用交给它处理,下载地址是:<a href="http://feeling.sourceforge.net/">http://feeling.sourceforge.net/</a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将包下载完后解压,并创建项目,结构如左图,lib下的三个dll文件要拷到window/system32下,下面就是编码了:首先我们定义一个抽象类来拦截键盘事件,如下:</p> <div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="https://my.oschina.net/javascripts/syntaxhighlighter/clipboard\_new.swf" width="14" height="15" flashvars="clipboard=import%20org.sf.feeling.swt.win32.extension.hook.data.HookData%3B%0Aimport%20org.sf.feeling.swt.win32.extension.hook.data.KeyboardHookData%3B%0Aimport%20org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener%3B%0A%0Apublic%20abstract%20class%20KeyboardHookEventListener%20implements%20HookEventListener%7B%0A%09%0A%09public%20void%20acceptHookData(HookData%20arg0)%20%7B%0A%09%09KeyboardHookData%20khd%20%3D%20((KeyboardHookData)%20arg0)%3B%0A%09%09%7B%0A%09%09%09if(khd.getTransitionState())%09%09%2F%2F%E5%A4%84%E7%90%86%E6%8C%89%E4%B8%8B%E4%BA%8B%E4%BB%B6%0A%09%09%09%7B%0A%09%09%09%09doPress(khd.getWParam())%3B%0A%09%09%09%7D%0A%09%09%09else%0A%09%09%09%7B%0A%09%09%09%09doReleased(khd.getWParam())%3B%09%2F%2F%E5%A4%84%E7%90%86%E9%87%8A%E6%94%BE%E4%BA%8B%E4%BB%B6%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09public%20abstract%20void%20doPress(int%20keyNum)%3B%0A%09public%20abstract%20void%20doReleased(int%20keyNum)%3B%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;<a href="javascript:void()" title="收藏这段代码" onclick="code\_favorites\_do\_favorite(this);return false;"><img class="star" src="https://my.oschina.net/images/icon\_star.png" alt="收藏代码"><img class="spinner" src="https://my.oschina.net/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.data.HookData;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.data.KeyboardHookData;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;KeyboardHookEventListener&nbsp;</span><span class="keyword">implements</span><span>&nbsp;HookEventListener{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;acceptHookData(HookData&nbsp;arg0)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyboardHookData&nbsp;khd&nbsp;=&nbsp;((KeyboardHookData)&nbsp;arg0);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(khd.getTransitionState())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//处理按下事件</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doPress(khd.getWParam());&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doReleased(khd.getWParam());&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//处理释放事件</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doPress(</span><span class="keyword">int</span><span>&nbsp;keyNum);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doReleased(</span><span class="keyword">int</span><span>&nbsp;keyNum);&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="java" codeable\_id="457374" codeable\_type="Blog" source\_url="http://micheal19840929.iteye.com/blog/457374" pre\_index="0" title="Java语言的Hook实现" style="display: none;">import org.sf.feeling.swt.win32.extension.hook.data.HookData; import org.sf.feeling.swt.win32.extension.hook.data.KeyboardHookData; import org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;

public abstract class KeyboardHookEventListener implements HookEventListener{

1public void acceptHookData(HookData arg0) { 2 KeyboardHookData khd = ((KeyboardHookData) arg0); 3 { 4 if(khd.getTransitionState()) //处理按下事件 5 { 6 doPress(khd.getWParam()); 7 } 8 else 9 { 10 doReleased(khd.getWParam()); //处理释放事件 11 } 12 } 13} 14public abstract void doPress(int keyNum); 15public abstract void doReleased(int keyNum);

}</pre>

<p>&nbsp;接着再定义一个抽象类到拦截鼠标事件,如下:</p> <div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="https://my.oschina.net/javascripts/syntaxhighlighter/clipboard\_new.swf" width="14" height="15" flashvars="clipboard=import%20org.sf.feeling.swt.win32.extension.hook.data.HookData%3B%0Aimport%20org.sf.feeling.swt.win32.extension.hook.data.MouseHookData%3B%0Aimport%20org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener%3B%0A%0Apublic%20abstract%20class%20MouseHookEventListener%20implements%20HookEventListener%7B%0A%09%0A%09public%20void%20acceptHookData(HookData%20hookData)%20%7B%0A%09%09int%20x%3D((MouseHookData)%20hookData).getPointX()%3B%0A%09%09int%20y%3D((MouseHookData)%20hookData).getPointY()%3B%0A%09%09switch(hookData.getWParam())%0A%09%09%7B%0A%09%09case%20513%3A%0A%09%09%09doLeftPressed(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09case%20514%3A%0A%09%09%09doLeftReleased(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09case%20516%3A%0A%09%09%09doRightPressed(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09case%20517%3A%0A%09%09%09doRightReleased(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09case%20519%3A%0A%09%09%09doMiddlePressed(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09case%20520%3A%0A%09%09%09doMiddleReleased(x%2Cy)%3B%0A%09%09%09break%3B%0A%09%09default%3A%0A%09%09%7D%0A%09%7D%0A%0A%09protected%20abstract%20void%20doLeftPressed(int%20x%2Cint%20y)%3B%0A%09protected%20abstract%20void%20doLeftReleased(int%20x%2Cint%20y)%3B%0A%09protected%20abstract%20void%20doRightPressed(int%20x%2Cint%20y)%3B%0A%09protected%20abstract%20void%20doRightReleased(int%20x%2Cint%20y)%3B%0A%09protected%20abstract%20void%20doMiddlePressed(int%20x%2Cint%20y)%3B%0A%09protected%20abstract%20void%20doMiddleReleased(int%20x%2Cint%20y)%3B%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;<a href="javascript:void()" title="收藏这段代码" onclick="code\_favorites\_do\_favorite(this);return false;"><img class="star" src="https://my.oschina.net/images/icon\_star.png" alt="收藏代码"><img class="spinner" src="https://my.oschina.net/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.data.HookData;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.data.MouseHookData;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MouseHookEventListener&nbsp;</span><span class="keyword">implements</span><span>&nbsp;HookEventListener{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;acceptHookData(HookData&nbsp;hookData)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;x=((MouseHookData)&nbsp;hookData).getPointX();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;y=((MouseHookData)&nbsp;hookData).getPointY();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">switch</span><span>(hookData.getWParam())&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">513</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doLeftPressed(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">514</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doLeftReleased(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">516</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doRightPressed(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">517</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doRightReleased(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">519</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doMiddlePressed(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">case</span><span>&nbsp;</span><span class="number">520</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doMiddleReleased(x,y);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">default</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doLeftPressed(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doLeftReleased(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doRightPressed(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doRightReleased(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doMiddlePressed(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doMiddleReleased(</span><span class="keyword">int</span><span>&nbsp;x,</span><span class="keyword">int</span><span>&nbsp;y);&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="java" codeable\_id="457374" codeable\_type="Blog" source\_url="http://micheal19840929.iteye.com/blog/457374" pre\_index="1" title="Java语言的Hook实现" style="display: none;">import org.sf.feeling.swt.win32.extension.hook.data.HookData; import org.sf.feeling.swt.win32.extension.hook.data.MouseHookData; import org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;

public abstract class MouseHookEventListener implements HookEventListener{

1public void acceptHookData(HookData hookData) { 2 int x=((MouseHookData) hookData).getPointX(); 3 int y=((MouseHookData) hookData).getPointY(); 4 switch(hookData.getWParam()) 5 { 6 case 513: 7 doLeftPressed(x,y); 8 break; 9 case 514: 10 doLeftReleased(x,y); 11 break; 12 case 516: 13 doRightPressed(x,y); 14 break; 15 case 517: 16 doRightReleased(x,y); 17 break; 18 case 519: 19 doMiddlePressed(x,y); 20 break; 21 case 520: 22 doMiddleReleased(x,y); 23 break; 24 default: 25 } 26} 27 28protected abstract void doLeftPressed(int x,int y); 29protected abstract void doLeftReleased(int x,int y); 30protected abstract void doRightPressed(int x,int y); 31protected abstract void doRightReleased(int x,int y); 32protected abstract void doMiddlePressed(int x,int y); 33protected abstract void doMiddleReleased(int x,int y);

}</pre>

<p>&nbsp;</p> <p>至此,我们的项目底层架构已经完成,下面就是业务流程的控制问题了,在贴上我的代码之前,我觉得有必要先做一下诛仙答题跟项目的介绍(又要废话了,顺便帮老池免费作下广告,遇上我是他的福分,^-^)。</p> <p>答题是这样的:首先,诛仙这个游戏是支持窗口化(且提供几个固定窗口大小供选择),而其中的答题窗口就是窗口中的窗口了(可拖动的)。7点,答题系统开启,每个玩家可选择进入答题窗口,等下一分钟才真正开始,这一分钟中,页面会显示出3个幸运星,但是没有题目........经过一番分析,可以确定用户要输入的有:当前使用的窗口大小及幸运星的位置(幸运星跟选项的位置不固定的,幸运星一确定,选项的位置也就知道了)。以下是关于这个业务的代码:</p> <p>定义一个特定的鼠标事件响应,如下:</p> <div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="https://my.oschina.net/javascripts/syntaxhighlighter/clipboard\_new.swf" width="14" height="15" flashvars="clipboard=import%20java.awt.Dimension%3B%0Aimport%20java.util.LinkedList%3B%0Aimport%20java.util.List%3B%0A%0Apublic%20class%20MyMouseHookEventListener%20extends%20MouseHookEventListener%20%7B%0A%09private%20Dimension%20zeroDimension%3B%0A%09private%20List%3CDimension%3E%20dimensions%3Dnew%20LinkedList%3CDimension%3E()%3B%0A%09private%20boolean%20needFetchZeroDimension%3Dfalse%3B%0A%09private%20String%20currentOffsetSeries%3D%22%22%3B%0A%09%0A%09public%20void%20resetZeroDimension()%0A%09%7B%0A%09%09this.needFetchZeroDimension%3Dtrue%3B%0A%09%7D%0A%09%0A%09public%20void%20resetDimensions(String%20dimensionSeries)%0A%09%7B%0A%09%09this.dimensions.clear()%3B%0A%09%09String%5B%5D%20dimStrs%3DdimensionSeries.split(%22%2C%22)%3B%0A%09%09for(int%20i%3D0%3BdimStrs!%3Dnull%26%26i%3CdimStrs.length%2F2%3Bi%2B%2B)%0A%09%09%7B%0A%09%09%09int%20width%3DInteger.parseInt(dimStrs%5Bi\*2%5D)%2B(int)zeroDimension.getWidth()%3B%0A%09%09%09int%20height%3DInteger.parseInt(dimStrs%5Bi\*2%2B1%5D)%2B(int)zeroDimension.getHeight()%3B%0A%09%09%09dimensions.add(new%20Dimension(width%2Cheight))%3B%0A%09%09%7D%0A%09%7D%0A%09%0A%09public%20String%20getDimensionSeries()%0A%09%7B%0A%09%09String%20dimSeries%3D%22%22%3B%0A%09%09for(Dimension%20dim%3Athis.dimensions)%0A%09%09%7B%0A%09%09%09dimSeries%3DdimSeries%2B%22%2C%22%2B(int)(dim.getWidth()-zeroDimension.getWidth())%2B%22%2C%22%2B(int)(dim.getHeight()-zeroDimension.getHeight())%3B%0A%09%09%7D%0A%09%09if(dimSeries.length()%3E0)%0A%09%09%7B%0A%09%09%09dimSeries%3DdimSeries.substring(1)%3B%0A%09%09%7D%0A%09%09return%20dimSeries%3B%0A%09%7D%0A%0A%09%40Override%0A%09protected%20void%20doLeftPressed(int%20x%2C%20int%20y)%20%7B%7D%0A%0A%09%40Override%0A%09protected%20void%20doLeftReleased(int%20x%2C%20int%20y)%20%7B%7D%0A%0A%09%40Override%0A%09protected%20void%20doMiddlePressed(int%20x%2C%20int%20y)%20%7B%7D%0A%0A%09%40Override%0A%09protected%20void%20doMiddleReleased(int%20x%2C%20int%20y)%20%7B%7D%0A%0A%09%40Override%0A%09protected%20void%20doRightPressed(int%20x%2C%20int%20y)%20%7B%0A%09%09if(this.needFetchZeroDimension)%0A%09%09%7B%0A%09%09%09this.zeroDimension%3Dnew%20Dimension(x%2Cy)%3B%0A%09%09%09resetDimensions(currentOffsetSeries)%3B%0A%09%09%09this.needFetchZeroDimension%3Dfalse%3B%0A%09%09%09System.out.println(%22%E5%B9%B8%E8%BF%90%E6%98%9F%E4%BD%8D%E7%BD%AE%E5%B7%B2%E8%8E%B7%E5%8F%96%EF%BC%8C%E5%85%B3%E9%97%AD%E9%87%8D%E7%BD%AE%E6%A8%A1%E5%BC%8F%EF%BC%8C%5Cr%5Cn%E7%8E%B0%E5%9C%A8%E4%BD%A0%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%B0%8F%E9%94%AE%E7%9B%98%E4%B8%8A%E7%9A%8412345%E6%9D%A5%E5%AE%9E%E7%8E%B0%E9%BC%A0%E6%A0%87%E4%BA%8B%E4%BB%B6%E6%A8%A1%E6%8B%9F%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%BD%A0%E9%9C%80%E8%A6%81%E9%87%8D%E6%96%B0%E9%80%89%E6%8B%A9%E8%AF%B7%E6%8C%89F11%22)%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%40Override%0A%09protected%20void%20doRightReleased(int%20x%2C%20int%20y)%20%7B%7D%0A%0A%09public%20void%20setCurrentOffsetSeries(String%20currentOffsetSeries)%20%7B%0A%09%09this.currentOffsetSeries%20%3D%20currentOffsetSeries%3B%0A%09%7D%0A%0A%09public%20List%3CDimension%3E%20getDimensions()%20%7B%0A%09%09return%20dimensions%3B%0A%09%7D%0A%09%0A%09%0A%0A%7D%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;<a href="javascript:void()" title="收藏这段代码" onclick="code\_favorites\_do\_favorite(this);return false;"><img class="star" src="https://my.oschina.net/images/icon\_star.png" alt="收藏代码"><img class="spinner" src="https://my.oschina.net/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">import</span><span>&nbsp;java.awt.Dimension;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.util.LinkedList;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.util.List;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MyMouseHookEventListener&nbsp;</span><span class="keyword">extends</span><span>&nbsp;MouseHookEventListener&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Dimension&nbsp;zeroDimension;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;List&lt;Dimension&gt;&nbsp;dimensions=</span><span class="keyword">new</span><span>&nbsp;LinkedList&lt;Dimension&gt;();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;needFetchZeroDimension=</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;String&nbsp;currentOffsetSeries=</span><span class="string">""</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;resetZeroDimension()&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.needFetchZeroDimension=</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;resetDimensions(String&nbsp;dimensionSeries)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.dimensions.clear();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String\[\]&nbsp;dimStrs=dimensionSeries.split(<span class="string">","</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;dimStrs!=</span><span class="keyword">null</span><span>&amp;&amp;i&lt;dimStrs.length/</span><span class="number">2</span><span>;i++)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;width=Integer.parseInt(dimStrs\[i\*</span><span class="number">2</span><span>\])+(</span><span class="keyword">int</span><span>)zeroDimension.getWidth();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;height=Integer.parseInt(dimStrs\[i\*</span><span class="number">2</span><span>+</span><span class="number">1</span><span>\])+(</span><span class="keyword">int</span><span>)zeroDimension.getHeight();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimensions.add(<span class="keyword">new</span><span>&nbsp;Dimension(width,height));&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;getDimensionSeries()&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dimSeries=<span class="string">""</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(Dimension&nbsp;dim:</span><span class="keyword">this</span><span>.dimensions)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimSeries=dimSeries+<span class="string">","</span><span>+(</span><span class="keyword">int</span><span>)(dim.getWidth()-zeroDimension.getWidth())+</span><span class="string">","</span><span>+(</span><span class="keyword">int</span><span>)(dim.getHeight()-zeroDimension.getHeight());&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(dimSeries.length()&gt;</span><span class="number">0</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dimSeries=dimSeries.substring(<span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;dimSeries;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doLeftPressed(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doLeftReleased(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doMiddlePressed(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doMiddleReleased(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doRightPressed(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.needFetchZeroDimension)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.zeroDimension=</span><span class="keyword">new</span><span>&nbsp;Dimension(x,y);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resetDimensions(currentOffsetSeries);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.needFetchZeroDimension=</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"幸运星位置已获取,关闭重置模式,\\r\\n现在你可以使用小键盘上的12345来实现鼠标事件模拟,如果你需要重新选择请按F11"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doRightReleased(</span><span class="keyword">int</span><span>&nbsp;x,&nbsp;</span><span class="keyword">int</span><span>&nbsp;y)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setCurrentOffsetSeries(String&nbsp;currentOffsetSeries)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.currentOffsetSeries&nbsp;=&nbsp;currentOffsetSeries;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;List&lt;Dimension&gt;&nbsp;getDimensions()&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;dimensions;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="java" codeable\_id="457374" codeable\_type="Blog" source\_url="http://micheal19840929.iteye.com/blog/457374" pre\_index="2" title="Java语言的Hook实现" style="display: none;">import java.awt.Dimension; import java.util.LinkedList; import java.util.List;

public class MyMouseHookEventListener extends MouseHookEventListener { private Dimension zeroDimension; private List<Dimension> dimensions=new LinkedList<Dimension>(); private boolean needFetchZeroDimension=false; private String currentOffsetSeries="";

1public void resetZeroDimension() 2{ 3 this.needFetchZeroDimension=true; 4} 5 6public void resetDimensions(String dimensionSeries) 7{ 8 this.dimensions.clear(); 9 String[] dimStrs=dimensionSeries.split(","); 10 for(int i=0;dimStrs!=null&amp;&amp;i&lt;dimStrs.length/2;i++) 11 { 12 int width=Integer.parseInt(dimStrs[i*2])+(int)zeroDimension.getWidth(); 13 int height=Integer.parseInt(dimStrs[i*2+1])+(int)zeroDimension.getHeight(); 14 dimensions.add(new Dimension(width,height)); 15 } 16} 17 18public String getDimensionSeries() 19{ 20 String dimSeries=""; 21 for(Dimension dim:this.dimensions) 22 { 23 dimSeries=dimSeries+","+(int)(dim.getWidth()-zeroDimension.getWidth())+","+(int)(dim.getHeight()-zeroDimension.getHeight()); 24 } 25 if(dimSeries.length()&gt;0) 26 { 27 dimSeries=dimSeries.substring(1); 28 } 29 return dimSeries; 30} 31 32@Override 33protected void doLeftPressed(int x, int y) {} 34 35@Override 36protected void doLeftReleased(int x, int y) {} 37 38@Override 39protected void doMiddlePressed(int x, int y) {} 40 41@Override 42protected void doMiddleReleased(int x, int y) {} 43 44@Override 45protected void doRightPressed(int x, int y) { 46 if(this.needFetchZeroDimension) 47 { 48 this.zeroDimension=new Dimension(x,y); 49 resetDimensions(currentOffsetSeries); 50 this.needFetchZeroDimension=false; 51 System.out.println("幸运星位置已获取,关闭重置模式,\r\n现在你可以使用小键盘上的12345来实现鼠标事件模拟,如果你需要重新选择请按F11"); 52 } 53} 54 55@Override 56protected void doRightReleased(int x, int y) {} 57 58public void setCurrentOffsetSeries(String currentOffsetSeries) { 59 this.currentOffsetSeries = currentOffsetSeries; 60} 61 62public List&lt;Dimension&gt; getDimensions() { 63 return dimensions; 64}

} </pre>

<p>&nbsp;</p> <p>再定义一个运行类:</p> <div class="dp-highlighter" id=""><div class="bar"><div class="tools">Java代码 <embed wmode="transparent" src="https://my.oschina.net/javascripts/syntaxhighlighter/clipboard\_new.swf" width="14" height="15" flashvars="clipboard=import%20java.awt.AWTException%3B%0Aimport%20java.awt.Robot%3B%0Aimport%20java.awt.Toolkit%3B%0Aimport%20java.awt.datatransfer.Clipboard%3B%0Aimport%20java.awt.datatransfer.StringSelection%3B%0Aimport%20java.awt.datatransfer.Transferable%3B%0Aimport%20java.awt.event.InputEvent%3B%0A%0Aimport%20org.sf.feeling.swt.win32.extension.hook.Hook%3B%0A%0Apublic%20class%20ZhuXianSwifter%20%7B%0A%09%0A%09public%20static%20final%20int%20NUM\_1%3D97%3B%0A%09public%20static%20final%20int%20NUM\_2%3D98%3B%0A%09public%20static%20final%20int%20NUM\_3%3D99%3B%0A%09public%20static%20final%20int%20NUM\_4%3D100%3B%0A%09public%20static%20final%20int%20NUM\_5%3D101%3B%0A%09public%20static%20final%20int%20F\_11%3D122%3B%0A%09public%20static%20final%20int%20F\_12%3D123%3B%0A%09%0A%09private%20static%20final%20String%20OFFSET\_SERIES\_640\_480%3D%22-125%2C84%2C-125%2C107%2C-125%2C130%2C-125%2C152%2C44%2C0%2C20%2C0%2C0%2C0%22%3B%0A%09private%20static%20final%20String%20OFFSET\_SERIES\_800\_600%3D%22-156%2C105%2C-156%2C134%2C-156%2C163%2C-156%2C190%2C55%2C0%2C25%2C0%2C0%2C0%22%3B%0A%09private%20static%20final%20String%20OFFSET\_SERIES\_1024\_768%3D%22-200%2C138%2C-200%2C172%2C-200%2C211%2C-200%2C248%2C70%2C0%2C32%2C0%2C0%2C0%22%3B%0A%0A%09%2F\*\*%0A%09%20\*%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E%EF%BC%9A%0A%09%20\*%201%E3%80%81%E5%90%AF%E5%8A%A8%E5%90%8E%E5%85%88%E9%80%89%E6%8B%A9%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E5%88%86%E8%BE%A8%E7%8E%87%EF%BC%8C%E7%9B%AE%E5%89%8D%E5%8F%AA%E6%94%AF%E6%8C%81640\*480%2C800\*600%2C1024\*768%EF%BC%9B%0A%09%20\*%202%E3%80%81%E7%84%B6%E5%90%8E%E4%BD%BF%E7%94%A8%E9%BC%A0%E6%A0%87%E5%8F%B3%E9%94%AE%E7%82%B9%E5%87%BB%E4%B8%80%E4%B8%8B%E8%AF%95%E7%82%BC%E7%AD%94%E9%A2%98%E7%AA%97%E5%8F%A3%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%B9%B8%E8%BF%90%E6%98%9F%E7%9A%84%E4%B8%AD%E5%BF%83%E7%82%B9%E5%8D%B3%E5%8F%AF%EF%BC%9B%0A%09%20\*%203%E3%80%81%E4%BD%BF%E7%94%A8%E5%B0%8F%E9%94%AE%E7%9B%98%E7%9A%841234%E9%80%89%E6%8B%A9%E7%AD%94%E6%A1%88%EF%BC%8C%E4%BD%BF%E7%94%A85%E7%82%B9%E6%98%9F%E6%98%9F(%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BD%BF%E7%94%A8%E5%AE%8C%E4%BC%9A%E8%87%AA%E5%8A%A8%E7%94%A8%E7%AC%AC%E4%BA%8C%E4%B8%AA)%2C%0A%09%20\*%204%E3%80%81%E5%8F%AA%E6%94%AF%E6%8C%81%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%A8%A1%E5%BC%8F%0A%09%20\*%205%E3%80%81F11%E4%B8%BA%E5%8F%96%E5%9D%90%E6%A0%87%E6%A8%A1%E5%BC%8F%EF%BC%8C%E6%8C%89F11%E5%BC%80%E5%A7%8B%EF%BC%8C%E5%86%8D%E6%AC%A1%E6%8C%89F11%E7%BB%93%E6%9D%9F%EF%BC%8C%E5%B9%B6%E5%B0%86%E9%9B%B6%E5%9D%90%E6%A0%87%E8%B7%9F%E4%B9%8B%E5%89%8D%E7%9A%84%E5%81%8F%E7%A7%BB%E5%9D%90%E6%A0%87%E5%A4%8D%E5%88%B6%E5%88%B0%E7%B3%BB%E7%BB%9F%E5%89%AA%E8%B4%B4%E6%9D%BF%0A%09%20\*%206%E3%80%81%E6%8C%89F12%E9%80%80%E5%87%BA%E7%A8%8B%E5%BA%8F%0A%09%20\*%20%40throws%20AWTException%20%0A%09%20\*%2F%0A%09public%20static%20void%20main(String%5B%5D%20args)%20throws%20AWTException%20%7B%0A%09%09%0A%09%09%2F\*%E6%B3%A8%E5%86%8C%E9%BC%A0%E6%A0%87Hook\*%2F%0A%09%09final%20MyMouseHookEventListener%20mouseListener%3Dnew%20MyMouseHookEventListener()%3B%0A%09%09Hook.MOUSE.addListener(mouseListener)%3B%0A%09%09Hook.MOUSE.install()%3B%0A%09%09%0A%09%09%2F\*%E7%B3%BB%E7%BB%9F%E5%89%AA%E8%B4%B4%E6%9D%BF\*%2F%0A%09%09final%20Clipboard%20systemClipboard%20%3D%20Toolkit.getDefaultToolkit().getSystemClipboard()%3B%20%0A%09%09%0A%09%09final%20Robot%20robot%3Dnew%20Robot()%3B%0A%09%09%0A%09%09%2F\*%E9%94%AE%E7%9B%98%E7%9B%91%E5%90%AC%E5%99%A8\*%2F%0A%09%09final%20KeyboardHookEventListener%20keyboardListener%3Dnew%20KeyboardHookEventListener()%7B%0A%09%09%09%0A%09%09%09private%20boolean%20haveChooseMode%3Dfalse%3B%0A%09%09%09private%20int%20count%3D0%3B%0A%0A%09%09%09%40Override%0A%09%09%09public%20void%20doPress(int%20keyNum)%20%7B%0A%09%09%09%09String%20mode%3D%22%22%3B%0A%09%09%09%09if(keyNum%3D%3DF\_12)%0A%09%09%09%09%7B%0A%09%09%09%09%09if(!mouseListener.getDimensionSeries().equals(%22%22))%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09System.out.println(%22%E5%86%85%E5%AE%B9%E5%B7%B2%E7%BB%8F%E5%A4%8D%E5%88%B6%E5%88%B0%E7%B3%BB%E7%BB%9F%E5%89%AA%E8%B4%B4%E6%9D%BF%22)%3B%0A%09%09%09%09%09%09Transferable%20text%20%3D%20new%20StringSelection(mouseListener.getDimensionSeries())%3B%0A%09%09%09%09%09%09systemClipboard.setContents(text%2Cnull)%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09System.out.println(%22------%E7%A8%8B%E5%BA%8F%E9%80%80%E5%87%BA------%22)%3B%0A%09%09%09%09%09System.exit(0)%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%20if(keyNum%3D%3DF\_11)%0A%09%09%09%09%7B%0A%09%09%09%09%09haveChooseMode%3Dfalse%3B%0A%09%09%09%09%09count%3D0%3B%0A%09%09%09%09%09System.out.println(%22%E5%90%AF%E5%8A%A8%E9%87%8D%E7%BD%AE%E6%A8%A1%E5%BC%8F%22)%3B%0A%09%09%09%09%09printChooseMode()%3B%0A%09%09%09%09%7D%0A%09%09%09%09else%0A%09%09%09%09%7B%0A%09%09%09%09%09if(haveChooseMode%3D%3Dfalse)%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09switch(keyNum)%0A%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09case%20NUM\_1%3A%0A%09%09%09%09%09%09%09mode%3D%22640\*480%22%3B%0A%09%09%09%09%09%09%09mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_640\_480)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_2%3A%0A%09%09%09%09%09%09%09mode%3D%22800\*600%22%3B%0A%09%09%09%09%09%09%09mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_800\_600)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_3%3A%0A%09%09%09%09%09%09%09mode%3D%221024\*768%22%3B%0A%09%09%09%09%09%09%09mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_1024\_768)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09default%3A%0A%09%09%09%09%09%09%09System.out.println(%22%E8%AF%B7%E9%87%8D%E6%96%B0%E9%80%89%E6%8B%A9%3A%22)%3B%0A%09%09%09%09%09%09%09printChooseMode()%3B%0A%09%09%09%09%09%09%09return%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09System.out.println(%22%E6%82%A8%E9%80%89%E6%8B%A9%E4%BA%86%22%2Bmode%2B%22%E5%88%86%E8%BE%A8%E7%8E%87%E6%A8%A1%E5%BC%8F%22)%3B%0A%09%09%09%09%09%09haveChooseMode%3Dtrue%3B%0A%09%09%09%09%09%09mouseListener.resetZeroDimension()%3B%0A%09%09%09%09%09%09printFetchZeroCoordinate()%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%09else%0A%09%09%09%09%09%7B%0A%09%09%09%09%09%09switch%20(keyNum)%20%7B%0A%09%09%09%09%09%09case%20NUM\_1%3A%0A%09%09%09%09%09%09%09robot.mouseMove((int)mouseListener.getDimensions().get(0).getWidth()%2C(int)mouseListener.getDimensions().get(0).getHeight())%3B%0A%09%09%09%09%09%09%09robot.mousePress(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09robot.mouseRelease(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_2%3A%0A%09%09%09%09%09%09%09robot.mouseMove((int)mouseListener.getDimensions().get(1).getWidth()%2C(int)mouseListener.getDimensions().get(1).getHeight())%3B%0A%09%09%09%09%09%09%09robot.mousePress(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09robot.mouseRelease(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_3%3A%0A%09%09%09%09%09%09%09robot.mouseMove((int)mouseListener.getDimensions().get(2).getWidth()%2C(int)mouseListener.getDimensions().get(2).getHeight())%3B%0A%09%09%09%09%09%09%09robot.mousePress(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09robot.mouseRelease(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_4%3A%0A%09%09%09%09%09%09%09robot.mouseMove((int)mouseListener.getDimensions().get(3).getWidth()%2C(int)mouseListener.getDimensions().get(3).getHeight())%3B%0A%09%09%09%09%09%09%09robot.mousePress(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09robot.mouseRelease(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09case%20NUM\_5%3A%0A%09%09%09%09%09%09%09robot.mouseMove((int)mouseListener.getDimensions().get(4%2Bcount).getWidth()%2C(int)mouseListener.getDimensions().get(4%2Bcount).getHeight())%3B%0A%09%09%09%09%09%09%09robot.mousePress(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09robot.mouseRelease(InputEvent.BUTTON1\_MASK)%3B%0A%09%09%09%09%09%09%09count%2B%2B%3B%0A%09%09%09%09%09%09%09if(count%3D%3D3)%0A%09%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09%09count%3D0%3B%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09default%3A%0A%09%09%09%09%09%09%09break%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%0A%09%09%09%40Override%0A%09%09%09public%20void%20doReleased(int%20keyNum)%20%7B%7D%0A%09%09%09%0A%09%09%7D%3B%0A%09%09%0A%09%09Hook.KEYBOARD.addListener(keyboardListener)%3B%0A%09%09Hook.KEYBOARD.install()%3B%20%2F%2F%20%E8%A8%BB%E5%86%8A%E4%BA%8B%E4%BB%B6%0A%09%09%0A%09%09printChooseMode()%3B%0A%0A%09%7D%0A%09%0A%09private%20static%20void%20printChooseMode()%0A%09%7B%0A%09%09System.out.println(%22%E8%AF%B7%E9%80%89%E6%8B%A9%E7%AA%97%E5%8F%A3%E5%A4%A7%E5%B0%8F%EF%BC%9A%22)%3B%0A%09%09System.out.println(%22NUM1%3A640\*480%22)%3B%0A%09%09System.out.println(%22NUM2%3A800\*600%22)%3B%0A%09%09System.out.println(%22NUM3%3A1024\*768%22)%3B%0A%09%7D%0A%09%0A%09private%20static%20void%20printFetchZeroCoordinate()%0A%09%7B%0A%09%09System.out.println(%22%E8%AF%B7%E5%9C%A8%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%B9%B8%E8%BF%90%E6%98%9F%E7%9A%84%E4%B8%AD%E5%BF%83%E4%B8%8A%E7%82%B9%E5%87%BB%E9%BC%A0%E6%A0%87%E5%8F%B3%E9%94%AE%22)%3B%0A%09%7D%0A%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">&nbsp;<a href="javascript:void()" title="收藏这段代码" onclick="code\_favorites\_do\_favorite(this);return false;"><img class="star" src="https://my.oschina.net/images/icon\_star.png" alt="收藏代码"><img class="spinner" src="https://my.oschina.net/images/spinner.gif" style="display:none"></a></div></div><ol start="1" class="dp-j"><li><span><span class="keyword">import</span><span>&nbsp;java.awt.AWTException;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.Robot;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.Toolkit;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.datatransfer.Clipboard;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.datatransfer.StringSelection;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.datatransfer.Transferable;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">import</span><span>&nbsp;java.awt.event.InputEvent;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">import</span><span>&nbsp;org.sf.feeling.swt.win32.extension.hook.Hook;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ZhuXianSwifter&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;NUM\_1=</span><span class="number">97</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;NUM\_2=</span><span class="number">98</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;NUM\_3=</span><span class="number">99</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;NUM\_4=</span><span class="number">100</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;NUM\_5=</span><span class="number">101</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;F\_11=</span><span class="number">122</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;F\_12=</span><span class="number">123</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;OFFSET\_SERIES\_640\_480=</span><span class="string">"-125,84,-125,107,-125,130,-125,152,44,0,20,0,0,0"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;OFFSET\_SERIES\_800\_600=</span><span class="string">"-156,105,-156,134,-156,163,-156,190,55,0,25,0,0,0"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;OFFSET\_SERIES\_1024\_768=</span><span class="string">"-200,138,-200,172,-200,211,-200,248,70,0,32,0,0,0"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/\*\*</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;使用说明:</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;1、启动后先选择所使用的分辨率,目前只支持640\*480,800\*600,1024\*768;</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;2、然后使用鼠标右键点击一下试炼答题窗口的第一个幸运星的中心点即可;</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;3、使用小键盘的1234选择答案,使用5点星星(第一个使用完会自动用第二个),</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;4、只支持命令行模式</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;5、F11为取坐标模式,按F11开始,再次按F11结束,并将零坐标跟之前的偏移坐标复制到系统剪贴板</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;6、按F12退出程序</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*&nbsp;@throws&nbsp;AWTException&nbsp;</span>&nbsp;</span></li><li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\*/</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String\[\]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;AWTException&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/\*注册鼠标Hook\*/</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;MyMouseHookEventListener&nbsp;mouseListener=</span><span class="keyword">new</span><span>&nbsp;MyMouseHookEventListener();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hook.MOUSE.addListener(mouseListener);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hook.MOUSE.install();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/\*系统剪贴板\*/</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;Clipboard&nbsp;systemClipboard&nbsp;=&nbsp;Toolkit.getDefaultToolkit().getSystemClipboard();&nbsp;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;Robot&nbsp;robot=</span><span class="keyword">new</span><span>&nbsp;Robot();&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/\*键盘监听器\*/</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">final</span><span>&nbsp;KeyboardHookEventListener&nbsp;keyboardListener=</span><span class="keyword">new</span><span>&nbsp;KeyboardHookEventListener(){&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;haveChooseMode=</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;count=</span><span class="number">0</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doPress(</span><span class="keyword">int</span><span>&nbsp;keyNum)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;mode=<span class="string">""</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(keyNum==F\_12)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(!mouseListener.getDimensionSeries().equals(</span><span class="string">""</span><span>))&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"内容已经复制到系统剪贴板"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transferable&nbsp;text&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;StringSelection(mouseListener.getDimensionSeries());&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;systemClipboard.setContents(text,<span class="keyword">null</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"------程序退出------"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(<span class="number">0</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>(keyNum==F\_11)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;haveChooseMode=<span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count=<span class="number">0</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"启动重置模式"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printChooseMode();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(haveChooseMode==</span><span class="keyword">false</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">switch</span><span>(keyNum)&nbsp;&nbsp;</span></span></li><li><span>&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></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_1:&nbsp;&nbsp;</span></span></li><li><span>&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;mode=<span class="string">"640\*480"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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;mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_640\_480);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_2:&nbsp;&nbsp;</span></span></li><li><span>&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;mode=<span class="string">"800\*600"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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;mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_800\_600);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_3:&nbsp;&nbsp;</span></span></li><li><span>&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;mode=<span class="string">"1024\*768"</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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;mouseListener.setCurrentOffsetSeries(OFFSET\_SERIES\_1024\_768);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">default</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&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;System.out.println(<span class="string">"请重新选择:"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&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;printChooseMode();&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">return</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"您选择了"</span><span>+mode+</span><span class="string">"分辨率模式"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;haveChooseMode=<span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mouseListener.resetZeroDimension();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printFetchZeroCoordinate();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">switch</span><span>&nbsp;(keyNum)&nbsp;{&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_1:&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mouseMove((<span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">0</span><span>).getWidth(),(</span><span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">0</span><span>).getHeight());&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mousePress(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;robot.mouseRelease(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_2:&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mouseMove((<span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">1</span><span>).getWidth(),(</span><span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">1</span><span>).getHeight());&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mousePress(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;robot.mouseRelease(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_3:&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mouseMove((<span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">2</span><span>).getWidth(),(</span><span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">2</span><span>).getHeight());&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mousePress(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;robot.mouseRelease(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_4:&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mouseMove((<span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">3</span><span>).getWidth(),(</span><span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">3</span><span>).getHeight());&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mousePress(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;robot.mouseRelease(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">case</span><span>&nbsp;NUM\_5:&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mouseMove((<span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">4</span><span>+count).getWidth(),(</span><span class="keyword">int</span><span>)mouseListener.getDimensions().get(</span><span class="number">4</span><span>+count).getHeight());&nbsp;&nbsp;</span></span></li><li><span>&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;robot.mousePress(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;robot.mouseRelease(InputEvent.BUTTON1\_MASK);&nbsp;&nbsp;</span></li><li><span>&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;count++;&nbsp;&nbsp;</span></li><li><span>&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 class="keyword">if</span><span>(count==</span><span class="number">3</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&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></li><li><span>&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;count=<span class="number">0</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">default</span><span>:&nbsp;&nbsp;</span></span></li><li><span>&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 class="keyword">break</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&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></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doReleased(</span><span class="keyword">int</span><span>&nbsp;keyNum)&nbsp;{}&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hook.KEYBOARD.addListener(keyboardListener);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hook.KEYBOARD.install();&nbsp;<span class="comment">//&nbsp;註冊事件</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printChooseMode();&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;printChooseMode()&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"请选择窗口大小:"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"NUM1:640\*480"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"NUM2:800\*600"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"NUM3:1024\*768"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;printFetchZeroCoordinate()&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"请在第一个幸运星的中心上点击鼠标右键"</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="java" codeable\_id="457374" codeable\_type="Blog" source\_url="http://micheal19840929.iteye.com/blog/457374" pre\_index="3" title="Java语言的Hook实现" style="display: none;">import java.awt.AWTException; import java.awt.Robot; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.InputEvent;

import org.sf.feeling.swt.win32.extension.hook.Hook;

public class ZhuXianSwifter {

1public static final int NUM_1=97; 2public static final int NUM_2=98; 3public static final int NUM_3=99; 4public static final int NUM_4=100; 5public static final int NUM_5=101; 6public static final int F_11=122; 7public static final int F_12=123; 8 9private static final String OFFSET_SERIES_640_480="-125,84,-125,107,-125,130,-125,152,44,0,20,0,0,0"; 10private static final String OFFSET_SERIES_800_600="-156,105,-156,134,-156,163,-156,190,55,0,25,0,0,0"; 11private static final String OFFSET_SERIES_1024_768="-200,138,-200,172,-200,211,-200,248,70,0,32,0,0,0"; 12 13/** 14 * 使用说明: 15 * 1、启动后先选择所使用的分辨率,目前只支持640*480,800*600,1024*768; 16 * 2、然后使用鼠标右键点击一下试炼答题窗口的第一个幸运星的中心点即可; 17 * 3、使用小键盘的1234选择答案,使用5点星星(第一个使用完会自动用第二个), 18 * 4、只支持命令行模式 19 * 5、F11为取坐标模式,按F11开始,再次按F11结束,并将零坐标跟之前的偏移坐标复制到系统剪贴板 20 * 6、按F12退出程序 21 * @throws AWTException 22 */ 23public static void main(String[] args) throws AWTException { 24 25 /*注册鼠标Hook*/ 26 final MyMouseHookEventListener mouseListener=new MyMouseHookEventListener(); 27 Hook.MOUSE.addListener(mouseListener); 28 Hook.MOUSE.install(); 29 30 /*系统剪贴板*/ 31 final Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 32 33 final Robot robot=new Robot(); 34 35 /*键盘监听器*/ 36 final KeyboardHookEventListener keyboardListener=new KeyboardHookEventListener(){ 37 38 private boolean haveChooseMode=false; 39 private int count=0; 40 41 @Override 42 public void doPress(int keyNum) { 43 String mode=""; 44 if(keyNum==F_12) 45 { 46 if(!mouseListener.getDimensionSeries().equals("")) 47 { 48 System.out.println("内容已经复制到系统剪贴板"); 49 Transferable text = new StringSelection(mouseListener.getDimensionSeries()); 50 systemClipboard.setContents(text,null); 51 } 52 System.out.println("------程序退出------"); 53 System.exit(0); 54 } 55 else if(keyNum==F_11) 56 { 57 haveChooseMode=false; 58 count=0; 59 System.out.println("启动重置模式"); 60 printChooseMode(); 61 } 62 else 63 { 64 if(haveChooseMode==false) 65 { 66 switch(keyNum) 67 { 68 case NUM_1: 69 mode="640*480"; 70 mouseListener.setCurrentOffsetSeries(OFFSET_SERIES_640_480); 71 break; 72 case NUM_2: 73 mode="800*600"; 74 mouseListener.setCurrentOffsetSeries(OFFSET_SERIES_800_600); 75 break; 76 case NUM_3: 77 mode="1024*768"; 78 mouseListener.setCurrentOffsetSeries(OFFSET_SERIES_1024_768); 79 break; 80 default: 81 System.out.println("请重新选择:"); 82 printChooseMode(); 83 return; 84 } 85 System.out.println("您选择了"+mode+"分辨率模式"); 86 haveChooseMode=true; 87 mouseListener.resetZeroDimension(); 88 printFetchZeroCoordinate(); 89 } 90 else 91 { 92 switch (keyNum) { 93 case NUM_1: 94 robot.mouseMove((int)mouseListener.getDimensions().get(0).getWidth(),(int)mouseListener.getDimensions().get(0).getHeight()); 95 robot.mousePress(InputEvent.BUTTON1_MASK); 96 robot.mouseRelease(InputEvent.BUTTON1_MASK); 97 break; 98 case NUM_2: 99 robot.mouseMove((int)mouseListener.getDimensions().get(1).getWidth(),(int)mouseListener.getDimensions().get(1).getHeight()); 100 robot.mousePress(InputEvent.BUTTON1_MASK); 101 robot.mouseRelease(InputEvent.BUTTON1_MASK); 102 break; 103 case NUM_3: 104 robot.mouseMove((int)mouseListener.getDimensions().get(2).getWidth(),(int)mouseListener.getDimensions().get(2).getHeight()); 105 robot.mousePress(InputEvent.BUTTON1_MASK); 106 robot.mouseRelease(InputEvent.BUTTON1_MASK); 107 break; 108 case NUM_4: 109 robot.mouseMove((int)mouseListener.getDimensions().get(3).getWidth(),(int)mouseListener.getDimensions().get(3).getHeight()); 110 robot.mousePress(InputEvent.BUTTON1_MASK); 111 robot.mouseRelease(InputEvent.BUTTON1_MASK); 112 break; 113 case NUM_5: 114 robot.mouseMove((int)mouseListener.getDimensions().get(4+count).getWidth(),(int)mouseListener.getDimensions().get(4+count).getHeight()); 115 robot.mousePress(InputEvent.BUTTON1_MASK); 116 robot.mouseRelease(InputEvent.BUTTON1_MASK); 117 count++; 118 if(count==3) 119 { 120 count=0; 121 } 122 break; 123 default: 124 break; 125 } 126 } 127 } 128 } 129 130 @Override 131 public void doReleased(int keyNum) {} 132 133 }; 134 135 Hook.KEYBOARD.addListener(keyboardListener); 136 Hook.KEYBOARD.install(); // 註冊事件 137 138 printChooseMode(); 139 140} 141 142private static void printChooseMode() 143{ 144 System.out.println("请选择窗口大小:"); 145 System.out.println("NUM1:640*480"); 146 System.out.println("NUM2:800*600"); 147 System.out.println("NUM3:1024*768"); 148} 149 150private static void printFetchZeroCoordinate() 151{ 152 System.out.println("请在第一个幸运星的中心上点击鼠标右键"); 153}

}</pre>

<p>&nbsp;</p> <p>以上就是本项目的所以代码,运行时要先按小键盘的1/2/3选择使用的窗口大小,然后在第一个幸运星的中心点击下右键鼠标就可以了,之后你就可以用小键盘的1/2/3/4/5(5是幸运星)来选择你的答案了。</p> </div>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

QQ玩一玩好友排行榜与世界排行榜

QQ玩一玩好友排行榜与世界排行榜1、开发环境CocosCreatorV2.0.5手Q版本V7.9.0.3820(目前市场中最新版本)qqPlayCore.jsbuildTime:'FriNov09201813:20:45GMT0800(GMT08:00)'上出现,

Skynet 通过组播(Multicast)实现一个简单的世界频道

什么是世界频道?  "世界频道"这个概念就是在一个游戏内经常见到。简单来说,世界频道就是在游戏内的一个大区中所有玩家可以接收、发布的消息的一个玩家间的统称。  玩家在游戏中进行体验的同时,通常需要发布一些特殊的消息,包含:"买卖装备、组队等";通常游戏中的各种频道的实现都依赖于消息队列的广播方式。Skynet的组播解决