2011-12-22 4 views
3

GetMessage()과 같은 표준 Windows API 함수를 사용하여 자바 캔버스에서 텍스트를 캡처하는 것은 불가능하므로이 자바 캔버스 안에 drawText() 메서드를 연결하고 이전에 텍스트를 캡처하는 방법이 있는지 궁금해했습니다. 그것은 실제로 캔버스에 그려져 있습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까? java로 작성된 솔루션도 허용됩니다. 어떤 제안이라도 좋을 것입니다. 고마워요.SunAwtCanvas의 일반 텍스트 얻기

편집 : 외국 캔버스 핸들을 훔쳐 내 캔버스로 설정할 수 있습니까? 그래서 외국 응용 프로그램은 더 이상 캔버스가 아니라 내 스푸핑 된 것입니다. 이렇게하면 내 응용 프로그램에서 쉽게 drawText() 메서드를 재정의 할 수 있습니다.

답변

1

Java Instrumentation을 사용하여 Javassist와 같이 drawString()에 코드를 삽입하십시오.

당신은 premain 방법의 변환을 활성화 insertBeforethere 사용하여 코드를 삽입하는 here에서 코드를 결합 할 수 있습니다.

+0

캔버스를 캡처하려는 응용 프로그램의 소스 코드가 없습니다. – arminb

+1

소스 코드가 필요하지 않습니다. 계측은 런타임에 바이트 코드를 변경하는 방법입니다. –

+0

예를 들어 이것이 어떻게 작동하는지 보여 줄 수 있습니까? –

0

자신의 하위 클래스 인 Graphics2D을 작성하고 드로잉을 수행하면됩니다. 귀하의 서브 클래스는 drawString()을 대체 할 수 있습니다. 아마 모든 메소드 호출을 생성자 인수로 지정된 다른 인스턴스로 전달한 래퍼로 구현을 작성하여 하위 클래스를 사용하여 직접 화면에 쓸 수 있습니다. 물론 create()을 구현하여 서브 클래스의 새 인스턴스를 반환해야합니다.

+0

감사합니다. 내 응용 프로그램이 아닌 외국 응용 프로그램에서 텍스트를 캡처하고 싶다고 생각 했습니까? 일부 링크 또는 샘플 코드는 매우 훌륭합니다. 고맙습니다. 편집 한 질문도보십시오. – arminb