2012-05-23 2 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 가지가 전체 화면에서도 정상적으로 작동했지만 2에서는 작동하지 않지만 경고음 만 울립니다. 어떤 도움이 필요합니까?

답변

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

당신은 마우스 이벤트 (winuser.h에 정의)는 Win32 호출 mouse_event(...)

그래서 로봇 마우스 클릭 호출에 의해 제한됩니다 실현되는 것을 볼 수 있습니다 mouse_event(...)의 제한 사항.

다음은 약간의 인터넷 검색 결과 일부 게임에 매크로 보호 메커니즘이 있음을 알 수 있습니다. 그들은 mouse_event(...) 라우트 된 방법을 무시하고 직접 드라이버와 대화합니다. 예를 들어 Hackshield는 여러 게임에 이러한 보호 메커니즘을 제공합니다. 그래서 일부 게임이 로봇 마우스 클릭을받지 못하는 이유입니다.

+0

그래, 내 자바 프로그램과 comunicate 수있는 마우스 드라이버를 설치하는 것이 정말 고통 스러울 것 같아? – kajacx

+0

내가 아는 한, Hackshield는 자체 드라이버를 설치하고 사용합니다. –

+0

좋아, 시도해 보자. 가상 프로그램이 자바 프로그램에 의해 제어되도록하고 싶지만, 터치 패드 나 실제 마우스처럼 절대적으로 정상적인 마우스처럼 행동 할 것이다. "제어판 -> 장치 -> 마우스"를 클릭하면 여기에 다른 마우스 장치가 표시됩니다. 이것이 가능한가? – kajacx