2016-07-22 40 views
0

目前,爲了模擬鼠標在我的應用程序中的點擊,我使用了Java的Robot類。它似乎使用桌面作爲邊界/網格來知道點在屏幕上的映射位置。如何在沒有重載實際鼠標的情況下在任何Java組件上點擊鼠標

例子:

Robot bot = new Robot(); 
bot.mouseMove(1099,22); //Manually collected point.. 
bot.delay(100); 
bot.mousePress(InputEvent.BUTTON1_MASK); 
bot.mouseRelease(InputEvent.BUTTON1_MASK); 

目標:

機器人部隊我的鼠標/光標被使用,我希望能夠做我的計算機上的其他事情,而這個代碼運行做只點擊我編程的Java應用程序。

有沒有辦法與JNA做到這一點?我不擔心支持除Windows之外的任何操作系統,但由於傳統技術仍然需要成爲Java應用程序。

回答

1

下面的代碼點擊在(X,Y)相對於所述target組件target

private static void click(Component target, int x, int y) 
{ 
    MouseEvent press, release, click; 
    Point point; 
    long time; 

    point = new Point(x, y); 

    SwingUtilities.convertPointToScreen(point, target); 

    time = System.currentTimeMillis(); 
    press = new MouseEvent(target, MouseEvent.MOUSE_PRESSED, time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1); 
    release = new MouseEvent(target, MouseEvent.MOUSE_RELEASED, time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1); 
    click = new MouseEvent(target, MouseEvent.MOUSE_CLICKED, time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1); 

    target.dispatchEvent(press); 
    target.dispatchEvent(release); 
    target.dispatchEvent(click); 
} 
+0

漂亮的代碼。這是否使用模擬鼠標而不是操作系統鼠標? –

+0

操作系統不涉及此代碼。此代碼模擬與用戶單擊它時實際物理鼠標執行的操作完全相同的事件。換句話說,Java程序不能輕易地區分上述代碼和實際物理鼠標之間的區別。 – Nathan

相關問題