2014-03-03 54 views
0

我正在尝试制作一个程序,可以将鼠标输入发送到Runescape applet。在你问我想要什么之前,它不是一个机器人。我为Runescape制作了一个“Twitch Plays Pokemon”程序,该程序已被证实是允许的。Java - 将鼠标事件发送给Applet

无论如何,我已经创建了一个装载器,它将从网站中提取游戏jar并在JFrame中打开它,这意味着我有一个包含游戏的Applet实例。我需要以某种方式将鼠标事件分发给这个小程序。我到处寻找,但每当我搜索这个,我只是找到有关听鼠标点击,而不是派遣他们的网页...

我应该注意到,机器人类不是我正在寻找;鼠标操作必须是虚拟的并在应用程序内运行。我知道这是可能的,但我正在努力研究它是如何完成的。

我该如何做到这一点?我希望能够发送鼠标悬停事件以及右键/左键单击事件。

+0

@codeNinja如果您要花时间发布snarky评论,为什么不将链接发布到回答OP的问题的搜索结果?或者至少给OP一个提示什么关键字使用。 –

+0

@codeNinja如果我在Google搜索后发现了答案,你是否真的认为我会在这里发布求助和浪费人们的时间? – Jordan

+0

@Jordan我对我的评论表示歉意,我没有完全理解你想要完成什么,我相信这个问题不适合这个网站。我的意思是不敬。这就是说,我googled“Java小程序发送鼠标事件不点击”,并得到这个看起来像它符合你的需求(它说C++,但接受的答案是在Java中给出)的stackoverflow问题。 http://stackoverflow.com/questions/10260456/how-to-send-key-and-mouse-events-to-a-java-applet – BitNinja

回答

2

您可以使用java.awt.Robot类来做到这一点。我从来没有做过,但它似乎会工作。

+0

机器人类使用你的物理鼠标,它不会做我的东西试图去做。也许我应该已经更清楚了,但是我的程序必须做的是发送'沉默'的鼠标点击程序,而不用实际使用鼠标。 – Jordan

+0

您可能需要深入到Windows API,然后假设这将在Windows上运行。我之前用Bejeweled bot做了一次,但我没有再来源了。这很简单,但很难看。这个问题似乎有一些有用的东西:http:// stackoverflow。com/questions/606820/is-there-a-java-library-to-access-the-native-windows-api –

0

您可以使用JNI和Windows API(假设这些都在Windows上运行,其他平台可能有类似的推论)将模拟鼠标事件发送到该窗口。您可以使用Spy++来监控发送到该窗口的消息。您可以使用FindWindow获取窗口的hWnd,然后使用SendMessagePostMessage发送模拟的鼠标事件。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx

+0

这实际上听起来非常有用,因为应用程序的控制器部分将用C#写成 – Jordan

+0

似乎使用一把砸飞的锤子 - 它会起作用,但这会在这个过程中造成很大的混乱。有更简单的方法。 –

2

我发现我的答案,伙计们。这很简单。这是我做过什么来执行小程序用鼠标点击:

applet.getComponent(0).dispatchEvent(new MouseEvent(applet, 
       MouseEvent.MOUSE_PRESSED, 
       System.currentTimeMillis() + 10, 
       MouseEvent.BUTTON1, 
       x,y, 
       0, 
       false)); 

     applet.getComponent(0).dispatchEvent(new MouseEvent(applet, 
       MouseEvent.MOUSE_RELEASED, 
       System.currentTimeMillis() + 10, 
       MouseEvent.BUTTON1, 
       x,y, 
       0, 
       false)); 

这里要注意的一点是applet.getComponent(0)一部分实际上是冲着游戏画布。