2014-12-10 5 views
5

Robot 클래스와 KeyEvent 키 코드를 사용하여 다른 모든 키 이벤트를 생성했지만 제대로 작동하지만 한글 키 (한국어 키보드 토글)도 필요합니다. 분명히 KeyEvent에는이 키의 키 코드가 없으므로 붙어 있습니다 :(이 한글 키 이벤트를 생성하는 방법이 있습니까? Windows 키 코드 대신 VK_HANGUL (0x15)과 같은 키 코드를 사용하는 방법이 있습니까? KeyEvent 키 코드? 가능하면 모든 키 코드를 변경하면 문제가되지 않습니다 ... 아니면 어떻게 든 키 이벤트를 한 번 가져 와서 영구적으로 어딘가에 저장하고 영원히 사용하십시오 ... ???Java에서 키 코드가없는 키보드 이벤트는 어떻게 생성합니까?

아이콘을 클릭하면 해당 문자의 키 이벤트가 생성되어 문자가 입력됩니다. 한국어로 전환하는 것만 제외하면 모두 올바르게 작동합니다.

한글 키 이벤트를 생성 할 수 있다는 것은 좋지만, 가능하지 않다. 내가 어떻게이 일을 성취 할 수 있을지에 대한 제안이 있는가? 어쩌면 각 한국어 문자를 키보드의 해당 알파벳으로 묶을 수 있습니다 (예를 들어, Eng와 한국어를 모두 갖춘 기존 키보드의 경우 g는 ㅎ이지만 다른 응용 프로그램으로 보내려면 어떻게해야합니까?

죄송합니다.이 질문은 여기 저기에 있습니다. 나는 정말로 잃어 버렸다.

+0

이 정보는 도움이 될 수 있습니다. 중복으로 표시되지 않음 (실제 키 대 유니 코드 해석). http://stackoverflow.com/questions/397113/how-to-make-the-java-awt-robot-type-unicode-characters-is-it-possible 나는 로봇이나 한글에 100 % 익숙하지 않기 때문에 해석 된 유니 코드가 있는지 확실하지 않습니다. – Compass

+0

댓글 주셔서 감사합니다! 귀하의 링크와 같은 alt 코드를 사용하는 것은 실제로 좋은 생각입니다. 그러나 'Alt'키를 누른 상태에서 숫자 키패드로 이동하여 '+'와 다른 유니 코드 16 진수 숫자를 눌러야합니다. 로봇이 NUMPAD 키 '+'를 누르게하려면 어떻게해야합니까? 나는 SHIFT를 시도했지만 = 작동하지 않는다 ... – Jade

+0

http://stackoverflow.com/questions/15605109/java-keybinding-plus-key 나는 키 이벤트에별로 좋지 않다. – Compass

답변

0

문제점에 대한 해결책을 찾았습니다. 키보드 이벤트를 생성하기 위해 JNA를 사용했습니다.

사람들이 필요로 할 경우를 대비 한 몇 가지 코드가 있습니다. 로 User32.dll에서 JNA와 keybd_event 방법을 사용

기본 재료 :

import com.sun.jna.*;  
import com.sun.jna.Native;  
import com.sun.jna.platform.win32.User32; 
import com.sun.jna.win32.StdCallLibrary;  
public interface User32jna extends User32 { 
User32jna INSTANCE = (User32jna) Native.loadLibrary("user32.dll",User32jna.class); 
public void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 
} 
User32jna u32 = User32jna.INSTANCE; 

그리고 당신이 키 이벤트를 생성 할 필요가있는 곳을 삽입 :

u32.keybd_event((byte) 0x15,(byte)0xF2,0,0); 

0x15과은 0xF2는 가상 키입니다 한글/영어 토글 키에 대한 코드 및 키보드 스캔 코드를 찾고 싶었지만 필요한 키를 찾은 다음 해당 코드를 바꿔 키 이벤트를 생성 할 수 있습니다.

작동하려면 jna.jar 및 platform.jar가 필요합니다.

+1

이 유형의 작업에 JNA를 사용하면 미래의 어느 시점에서 기능이 중단 될 가능성이 큽니다.WINAPI는 요즘 빠르게 바뀌며 바이트 코드를 기계 코드로 하드 ​​링크하면 모든 대상 플랫폼에서 일정한 테스트가 필요합니다. 그리고 일정 시점에서 일정한 프리미티브 (예 : 사용중인 것과 같은)로 다시 작성하면 시간이 조금 더 걸릴 수 있습니다. Microsoft는 상수를 자주 변경하지 않습니다. 그러나 이러한 매크로가 원시 매크로를 도입 한 이유는 항상 올바른 기본 요소에 매핑됩니다. – specializt

+0

예. 제가 처음에 염려했던 것과 함께 라인을 따라 있습니다. 그래서 나는 '해결책'대신에 '하나의 해결책'을 썼습니다. 결국 저는 이것이 단지 한 학기의 긴 프로젝트이기 때문에 제 경우에는 중요하지 않다고 생각했습니다. 그러나 네이티브 매크로에 대해 더 자세히 알려주시겠습니까? 나는 그들이 존재한다는 것을 몰랐다. 키워드에 대한 정보를 얻으려면 어떤 키워드를 검색해야합니까? – Jade

+1

짧은 개요 : http://msdn.microsoft.com/en-us/library/b0084kay.aspx. 수만 개의 매크로는 대부분 함수에 따라 다르며 매크로를 사용하는 각 함수에서 항상 언급되고 설명됩니다. 일부 사람들은 매개 변수 상수로 사용할 수 있습니다. http://msdn.microsoft.com/ en-us/library/windows/desktop/ms646304 % 28v = vs.85 % 29.aspx 특히 http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85)) .aspx - 일반적으로 이러한 종류의 작업을위한 기본 응용 프로그램을 작성하는 것이 훨씬 더 낫습니다. 그렇게하는 동안 모든 Microsoft 표준을 준수해야합니다. – specializt