zer*_*ord 2 java keyboard keyboard-hook
我正在编写一个屏幕捕获工具,我希望能够在拍摄屏幕截图时存储键盘和鼠标的当前状态.
为鼠标执行此操作非常简单,因为以相关问题中描述的方式使用PointerInfo类可以为您提供当前鼠标位置的屏幕坐标以及所需的点击信息.但是,我还没能找到键盘的这个类的模拟; 所有与键盘相关的类似乎都是焦点特定的.
那么,有没有办法在Java中获得当前的键盘状态?
PS请记住,我正在寻找一个函数来调用以检索关于哪些键被按下的信息,而不是这些抑郁事件的监听器.
您可以做的就是实现KeyListener界面并为您感兴趣的所有键提供状态.
如果你感兴趣的检查,如果方向键被按下时的截图,例如,你可以实现此KeyListener接口,并覆盖keyPressed()和keyReleased()方法,并设置状态对于那些你有兴趣到按键keyPressed或keyReleased.视情况而定.这样,当屏幕截图发生时,您可以只读取这些键的状态
如果您需要此解决方案是全局的,无论应用程序如何关注,您都可以在C中编写一个小钩子,您可以与Java Native Interface集成以侦听关键事件.如果没有将侦听器附加到组件和具有焦点的组件,Java不允许您监听键事件.看看JNativeHook.
如果您只是在应用程序具有焦点时需要它,但是在每个组件上,您可以将侦听器无关紧要地附加到所有组件,或者您可以编写自己的自定义KeyEventDispatcher并在KeyBoardFocusManager上注册它.这样,只要您的应用程序具有焦点,无论具有特定焦点的组件如何,您都可以捕获所有键盘事件.看到:
public class YourFrame extends JFrame {
public YourFrame() {
// Finish all your layout and add your components
//
// Get the KeyboardFocusManager and register your custom dispatcher
KeyboardFocusManager m = KeyboardFocusManager.getCurrentKeyboardFocusManager();
m.addKeyEventDispatcher(new YourDispatcher());
}
private class YourDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_TYPED) {
// Do something to change the state of the key
} else if (e.getID() == KeyEvent.KEY_PRESSED) {
// Do something else
}
return false;
}
}
public static void main(String[] args) {
YourFrame yF = new YourFrame();
yF.pack();
yF.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3536 次 |
| 最近记录: |