0
키보드의 일부 키를 비활성화해야하는 프로젝트 작업 중입니다. 이 코드는 완벽하게 비활성화되어 있습니다.JNA 및 Java를 사용하는 Renable Keyboard Hook
내 문제는 다음과 같습니다. JNA 및 java를 사용하여 비활성화 한 후 후크를 다시 활성화하는 방법 ???
public class BlockKeys extends Thread{
private User32 lib;
private LowLevelKeyboardProc keyboardHook;
private static HHOOK hhk;
public void run() {
lib = User32.INSTANCE;
HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
keyboardHook = new LowLevelKeyboardProc() {
@Override
public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT info) {
if (nCode >= 0) {
//To unhook press 'esc' key
if(info.vkCode == 0x1B) {
User32.INSTANCE.UnhookWindowsHookEx(hhk);
}
switch (info.vkCode){
case 0x5B:System.err.println("l win"); return new LRESULT(1);
case 0x5C:System.err.println("r win"); return new LRESULT(1);
case 0xA2:System.err.println("l ctrl"); return new LRESULT(1);
case 0xA3:System.err.println("r ctrl"); return new LRESULT(1);
case 0xA4:System.err.println("l alt"); return new LRESULT(1);
case 0xA5:System.err.println("r alt"); return new LRESULT(1);
default: System.out.println("Key Pressed : "+info.vkCode);//do nothing
}
} return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
}
};
hhk = lib.SetWindowsHookEx(13, keyboardHook, hMod, 0);
// This bit never returns from GetMessage
int result;
MSG msg = new MSG();
while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
if (result == -1) {
break;
} else {
lib.TranslateMessage(msg);
lib.DispatchMessage(msg);
}
}
lib.UnhookWindowsHookEx(hhk);
}
public static void main(String[] args) {
Thread t = new Thread(new BlockKeys());
t.start();
}
}
당신이 * * 후크를 제거 할 의미합니까? 귀하의 질문을 명확히하십시오. – technomage
나는 걸이를 제거하고 싶지 않다. 그러나 후크를 제거한 후에 프로그램을 종료하지 않고 후크를 다시 활성화하려면 어떻게해야합니까? – namas
비활성화 된 * 키 *를 다시 활성화 하시겠습니까? 이 경우 코드의 다른 부분에서 설정할 수있는 '휘발성'필드를 사용자가 읽을 수있게 만드는 것만으로 충분합니다. – technomage