2016-12-22 2 views
0

Это просто для целей тестирования.altgr не работает с jnativehook?

Я попытался изменить некоторые части кода и прочитать также api-docs. В начале я добавил «typedC + = e.getKeyChar();» и похоже, что он записывает альт-ключи, но позже больше нет.

Как изменить его, чтобы позволить работать с altgr-ключами?

Благодаря

import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.util.logging.Level; 
    import java.util.logging.LogManager; 
    import java.util.logging.Logger; 
    import javax.swing.JFileChooser; 
    import org.jnativehook.GlobalScreen; 
    import org.jnativehook.NativeHookException; 
    import org.jnativehook.keyboard.NativeKeyEvent; 
    import org.jnativehook.keyboard.NativeKeyListener; 

    public class JkL implements NativeKeyListener { 
    private String typedC = ""; 
    private String typedC1 = ""; 
    private final JFileChooser fc = new JFileChooser(); 
    private File direc; 

    private void openFchooser1() throws FileNotFoundException, 
    InterruptedException, IOException, Exception { 
    Thread.sleep(2000); 
    int returnVal = fc.showDialog(null, "Choose a Logfile"); 
    if(returnVal == JFileChooser.APPROVE_OPTION) { 
     direc = fc.getSelectedFile(); 
    } 
/* Construct the example object and initialze native hook. */ 
    GlobalScreen.addNativeKeyListener(new Kl()); 
    try { 
     /* Register jNativeHook */ 
     GlobalScreen.registerNativeHook(); 
    } catch (NativeHookException ex) { 
     /* Its error */ 
     System.err.println("There was a problem registering the native 
     hook."); 
     System.err.println(ex.getMessage()); 
     System.exit(1); 
    } 

    // Clear previous logging configurations. 
     LogManager.getLogManager().reset(); 

    // Get the logger for "org.jnativehook" and set the level to off. 
     Logger logger = 
     Logger.getLogger(GlobalScreen.class.getPackage().getName()); 
     logger.setLevel(Level.OFF); 
} 

@Override 
public void nativeKeyPressed(NativeKeyEvent nke) { 
    throw new UnsupportedOperationException("Not supported yet."); //To 
    change body of generated methods, choose Tools | Templates. 
} 

@Override 
public void nativeKeyReleased(NativeKeyEvent nke) { 
    throw new UnsupportedOperationException("Not supported yet."); //To 
     change body of generated methods, choose Tools | Templates. 
} 

@Override 
public void nativeKeyTyped(NativeKeyEvent nke) { 
    throw new UnsupportedOperationException("Not supported yet."); //To 
     change body of generated methods, choose Tools | Templates. 
} 
class Kl extends JkL {  
    /* Key Pressed */ 
    @Override 
    public void nativeKeyPressed(NativeKeyEvent e) { 
    //typedC += NativeKeyEvent.getKeyText(e.getKeyCode()); 
    typedC += e.getRawCode(); 
    typedC += e.getKeyChar(); 
    typedC += e.getKeyCode(); 
    try { 
     writeToFile(typedC); 
    } catch (IOException ex) { 
     Logger.getLogger(JkL.class.getName()).log(Level.SEVERE, null, 
      ex); 
    } 
    /* Terminate program when one press ESCAPE */ 
    if (e.getKeyCode() == NativeKeyEvent.VC_F12) { 
     try { 
      GlobalScreen.unregisterNativeHook(); 
     } catch (NativeHookException ex) { 
      Logger.getLogger(JkL.class.getName()).log(Level.SEVERE, 
      null, ex); 
      } 
     } 
     } 

    @Override 
    public void nativeKeyReleased(NativeKeyEvent e) { 
    //System.out.println("Key Released: " + 
     //NativeKeyEvent.getKeyText(e.getKeyCode())); 
    } 

/* I can't find any output from this call */ 
@Override 
public void nativeKeyTyped(NativeKeyEvent e) { 
    //typedC1 += NativeKeyEvent.getKeyText(e.getKeyCode()); 
    typedC1 += e.getRawCode(); 
    typedC1 += e.getKeyChar(); 
    typedC1 += e.getKeyCode(); 
    try { 
     writeToFile(typedC1); 
    } catch (IOException ex) { 
     Logger.getLogger(JkL.class.getName()).log(Level.SEVERE, null, 
      ex); 
     } 
     } 
    } 
    private void writeToFile(String ln) throws IOException { 
    //System.out.println(direc); 
    FileWriter fw = new FileWriter(direc); 
    try (BufferedWriter bw = new BufferedWriter(fw)) { 
    bw.write(ln); 
    bw.newLine(); 
    bw.flush(); 
    } 
    } 
     public static void main(String[] args) throws 
      IOException,InterruptedException, Exception { 
     new JkL().openFchooser1(); 
    } 
    } 

ответ

0

Какая операционная система? Есть некоторые известные проблемы с 2.0 на Linux, но они будут исправлены в 2.1. Если есть другие проблемы, вам, вероятно, придется сообщить об ошибке. Пожалуйста, укажите точную раскладку клавиатуры, модель и язык. Также представлена ​​подробная информация о том, какой ключ нажат, наблюдаемое поведение и ожидаемое поведение. Я знаю только, как использовать американскую клавиатуру, поэтому я не уверен, как все ключи, маски и блокировки Alt-Gr могут работать.

+0

В Windows 7 Professional раскладка клавиатуры и язык швейцарские. Я пытался использовать только getKeyChar(), он записывает все ключи, кроме ключей, с помощью altgr. Когда я использую getRawCode() или getKeyCode(), он регистрирует числа или пару? или неизвестный код. –

+0

Единственные ключи, которые будут выполняться alt-gr, вероятно, будут ключевыми типизированными символами. Необработанный код - это собственный код ключа, который, вероятно, будет таким же и между alt-gr. –

+0

Есть ли в любом случае вы можете написать мне фотографию своей клавиатуры? Пожалуйста, укажите ключ alt-gr. –

Смежные вопросы