2014-03-03 35 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)一部分實際上是衝着遊戲畫布。