2017-04-25 6 views
0

Java에서 마우스 끌기 이벤트를 시뮬레이트하는 방법이 있습니까? java.awt.Robot을 사용하여 마우스 클릭과 마우스 움직임을 시뮬레이션 할 수 있습니다. 그러나 마우스 끌기 동작을 시뮬레이션 할 수는 없습니다.마우스로 프로그래밍 방식으로 마우스로 드래그

robot.mouseRelase를 호출하기 전에 robot.mousePress()를 사용하여 로봇 버튼을 누른 상태에서 마우스를 움직이는 동안 여러 번 일시 중지하면서 마우스 위치를 이동 시키려고했습니다. 그러나이 모든 것은 마우스 커서 이동을 시뮬레이트하고 마우스 끌기 이벤트를 시뮬레이트하지 않습니다.

내가 사용중인 코드 스 니펫을 포함합니다. 그러나, 그것은 내가 위에서 언급 한 바로 그 것이며, 마우스를 클릭하고 마우스 커서를 움직입니다.

Windows 7에서이 응용 프로그램을 실행하고 있습니다.

감사합니다.

public void click() throws AWTException, InterruptedException { 
    int numberOfMoveIterations = 15; 

    Robot bot = new Robot(); 
    Thread.sleep(mouseDownDelayClickTime + this.delayTime); 
    bot.mouseMove((int) (mouseClickDownXLocation * this.widthEventOffset), (int) (mouseClickDownYLocation * this.heightEventOffset)); 
    bot.mousePress(InputEvent.BUTTON1_MASK); 
    if (mouseClickDownXLocation != mouseClickUpXLocation || mouseClickDownYLocation != mouseClickUpYLocation) { 
    int xAmountToMove = mouseClickUpXLocation - mouseClickDownXLocation; 
    int yAmountToMove = mouseClickUpYLocation - mouseClickDownYLocation; 
    int xAmountPerIteration = xAmountToMove/numberOfMoveIterations; 
    int yAmountPerIteration = yAmountToMove/numberOfMoveIterations; 

    int currentXLocation = mouseClickDownXLocation; 
    int currentYLocation = mouseClickDownYLocation; 

    while (currentXLocation < mouseClickUpXLocation + xAmountToMove 
      && currentYLocation < mouseClickUpYLocation + yAmountToMove) { 
     currentXLocation += xAmountPerIteration; 
     currentYLocation += yAmountPerIteration; 

     bot.mouseMove(currentXLocation, currentYLocation); 
     Thread.sleep(mouseUpDelayClickTime); 

    } 
    } 
    bot.mouseRelease(InputEvent.BUTTON1_MASK); 

}

답변

0

나는 이전과 비슷한 문제가 있었다. 다음은 내가 대답 한 다른 질문에 대한 링크입니다. https://stackoverflow.com/a/45063135/

Thread.sleep(); 드래그 동작을 만드는 데 적합한 솔루션입니다. 그러나 당신은 그것을 잘못된 장소에 추가합니다. 마우스를 누른 상태에서 커서가 움직이고 있는지 확인해야합니다. mousePressed 스레드를 일시 중단하려면 mousePressed와 mouseMoved 사이에 thread.sleep을 추가해야합니다.

은 아래의 코드를 참조하십시오 :

public void click() throws AWTException, InterruptedException { 
int numberOfMoveIterations = 15; 

Robot bot = new Robot(); 
thread.sleep(mouseDownDelayClickTime + this.delayTime); 
bot.mouseMove((int) (mouseClickDownXLocation * this.widthEventOffset), (int) (mouseClickDownYLocation * this.heightEventOffset)); 
bot.mousePress(InputEvent.BUTTON1_MASK); 

/* suspend the current thread here */ 
thread.sleep(mouse pressed thread suspended time); 

if (mouseClickDownXLocation != mouseClickUpXLocation || mouseClickDownYLocation != mouseClickUpYLocation) { 
    int xAmountToMove = mouseClickUpXLocation - mouseClickDownXLocation; 
    int yAmountToMove = mouseClickUpYLocation - mouseClickDownYLocation; 
    int xAmountPerIteration = xAmountToMove/numberOfMoveIterations; 
    int yAmountPerIteration = yAmountToMove/numberOfMoveIterations; 

    int currentXLocation = mouseClickDownXLocation; 
    int currentYLocation = mouseClickDownYLocation; 

    while (currentXLocation < mouseClickUpXLocation + xAmountToMove 
     && currentYLocation < mouseClickUpYLocation + yAmountToMove) { 
    currentXLocation += xAmountPerIteration; 
    currentYLocation += yAmountPerIteration; 

    bot.mouseMove(currentXLocation, currentYLocation); 

} 
} 
bot.mouseRelease(InputEvent.BUTTON1_MASK);