【发布时间】:2016-12-22 21:30:40
【问题描述】:
这只是为了测试目的。
我尝试更改代码的某些部分并阅读 api-docs。 开始时我添加了“typedC += e.getKeyChar();”它看起来像记录 altgr-keys,但后来不再。
如何更改它以让 altgr-keys 工作?
谢谢
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();
}
}
【问题讨论】: