2012-05-23 46 views
4

我在Java中的Robot類中遇到問題:當我運行全屏遊戲時,它有時不起作用。這裏是我的代碼:Java:在運行全屏應用程序時使用機器人

Toolkit tlkt = Toolkit.getDefaultToolkit(); 
Robot bot = new Robot(); 
while(true) { 
    Thread.sleep(3000); 
    tlkt.beep(); //make sure that program still runs 
    bot.mousePress(MouseEvent.BUTTON1_DOWN_MASK); 
    bot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK); 
} 

我想每3秒鐘左鍵單擊一次併發出嗶聲。它工作正常,但是當我運行一些全屏應用程序時,它只是發出嘟嘟聲,而不是點擊。

我已經嘗試將機器人聲明移到循環中,所以每次都會創建新的機器人,但沒有成功。

我已經嘗試過5種不同的遊戲,其中3種甚至全屏都可以正常工作,但是它沒有工作,但只有蜂鳴。任何幫助?

回答

4

假設你在Windows機器上,呼叫java.awt.Robot調用被重定向到sun.awt.windows.WRobotPeer,而該調用又調用awt_Robot.cpp中的本機代碼。您可以檢查這裏的awt_Robot.cpp的源代碼:http://www.koders.com/cpp/fidFFE004659A9CAB3DA2B3302C457E624AF6F3EEDF.aspx?s=GetDIBits#L232

在這裏,您可以看到鼠標事件與Win32調用mouse_event(...)(WINUSER.H中定義)

所以你的機器人鼠標點擊通話不會受到限制實現mouse_event(...)的限制。

然後對此進行一些搜索,發現有些遊戲具有某種宏觀保護機制。他們忽略路由方法並直接與驅動程序交談。例如,Hackshield爲許多遊戲提供了這種保護機制。 所以這就是爲什麼有些遊戲沒有收到你的機器人鼠標點擊的原因。

+0

好的,我想安裝一個可以與我的java程序交流的鼠標驅動程序會非常痛苦嗎? – kajacx

+0

就我所知,Hackshield,例如,安裝和使用自己的驅動程序。 –

+0

好,讓我們試試這個:可以說我想要有一個由java程序控制的虛擬鼠標,但它的行爲將像絕對正常的鼠標,如觸摸板或實際的鼠標。如果我點擊「控制面板 - >設備 - >鼠標」,我會在其他鼠標設備中看到它。這可能嗎? – kajacx

相關問題