package application.settings; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import org.jnativehook.GlobalScreen; import org.jnativehook.NativeHookException; import org.jnativehook.NativeInputEvent; import org.jnativehook.dispatcher.SwingDispatchService; import org.jnativehook.keyboard.NativeKeyEvent; import org.jnativehook.keyboard.NativeKeyListener; import org.jnativehook.mouse.NativeMouseEvent; import org.jnativehook.mouse.NativeMouseListener; import com.jfoenix.controls.JFXCheckBox; import application.Main; import application.tools.ActionTool; import application.tools.InfoTool; import application.tools.NotificationType; import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.Accordion; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.layout.BorderPane; import javafx.util.Duration; import xplayer.presenter.XPlayerController; /** * @author GOXR3PLUS * */ public class KeyBindingsController extends BorderPane { @FXML private Accordion accordion; @FXML private JFXCheckBox keyBindingsActive; //-------------------------------------------------------- /** The logger. */ private Logger logger = Logger.getLogger(getClass().getName()); /** * Constructor. */ public KeyBindingsController() { // Get the logger for "org.jnativehook" and set the level to off. Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName()); logger.setLevel(Level.OFF); // Listen for all key events GlobalScreen.addNativeKeyListener(new NativeKeyListener() { public void nativeKeyPressed(NativeKeyEvent e) { System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); int keyCode = e.getKeyCode(); //-------------SNAPSHOT WINDOW if (keyCode == NativeKeyEvent.ALT_L_MASK || keyCode == NativeKeyEvent.ALT_R_MASK || keyCode == NativeKeyEvent.ALT_MASK || keyCode == NativeKeyEvent.VC_ALT) { // Main.snapShotWindow.prepareForCapture(); } } /** Key Released. */ public void nativeKeyReleased(NativeKeyEvent e) { System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode())); //Run in JavaFX Thread Platform.runLater(() -> { XPlayerController xPlayer = Main.xPlayersList.getXPlayerController(0); int keyCode = e.getKeyCode(); //WORK WORK WORK AAAA YEAH F F F FFUUUUUCK BITCH //-----------PLAYERS if (keyCode == NativeKeyEvent.VC_O && (e.getModifiers() == NativeKeyEvent.SHIFT_L_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_R_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_MASK || e.getModifiers() == NativeKeyEvent.VC_SHIFT)) { //Open File Chooser xPlayer.openFileChooser(); System.out.println("Opening File Chooser"); } else if (keyCode == NativeKeyEvent.VC_MEDIA_PLAY) { //PlayPause xPlayer.reversePlayAndPause(); } else if (keyCode == NativeKeyEvent.VC_R && (e.getModifiers() == NativeKeyEvent.SHIFT_L_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_R_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_MASK || e.getModifiers() == NativeKeyEvent.VC_SHIFT)) { //Replay xPlayer.replaySong(); } else if (keyCode == NativeKeyEvent.VC_LEFT) { //SEEK BACKWARD xPlayer.seek(-10); } else if (keyCode == NativeKeyEvent.VC_RIGHT) { //SEEK FORWARD xPlayer.seek(+10); } else if (keyCode == NativeKeyEvent.VC_S && (e.getModifiers() == NativeKeyEvent.SHIFT_L_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_R_MASK || e.getModifiers() == NativeKeyEvent.SHIFT_MASK || e.getModifiers() == NativeKeyEvent.VC_SHIFT)) { //Open Media in Explorer xPlayer.openAudioInExplorer(); } //-----------SNAPSHOT WINDOW else if (keyCode == NativeKeyEvent.ALT_L_MASK || keyCode == NativeKeyEvent.ALT_R_MASK || keyCode == NativeKeyEvent.ALT_MASK || keyCode == NativeKeyEvent.VC_ALT) { //Main.snapShotWindow.hideWindow(); } }); } public void nativeKeyTyped(NativeKeyEvent e) { System.out.println("Key Typed: " + NativeKeyEvent.getKeyText(e.getKeyCode())); } }); GlobalScreen.addNativeMouseListener(new NativeMouseListener() { @Override public void nativeMouseClicked(NativeMouseEvent e) { //info.setText(NativeKeyEvent.getKeyText(e.getKeyCode())); } @Override public void nativeMousePressed(NativeMouseEvent e) { System.out.println("Mouse Pressed: " + NativeInputEvent.getModifiersText(e.getButton())); //info.setText(NativeInputEvent.getModifiersText(e.getButton()));//getKeyText(e.getgetKeyCode())); } @Override public void nativeMouseReleased(NativeMouseEvent e) { //info.setText(NativeMouseEvent.getKeyText(e.getKeyCode())); } }); // ------------------------------------FXMLLOADER------------------------------------- FXMLLoader loader = new FXMLLoader(getClass().getResource(InfoTool.FXMLS + "KeyBindingsController.fxml")); loader.setController(this); loader.setRoot(this); try { loader.load(); } catch (IOException ex) { logger.log(Level.SEVERE, "", ex); } } /** * Called as soon as .fxml is initialized */ @FXML private void initialize() { //KeyBindingsActive keyBindingsActive.selectedProperty().addListener((observable, oldValue, newValue) -> { try { if (newValue) { Alert alert = new Alert(AlertType.WARNING); alert.initOwner(Main.window); alert.setHeaderText("Please read this :) "); alert.setContentText( "I have added this functionallity for testing purposes. \n\n Specifically a KeyLogger is used to catch every key you type so it may has conflicts with other applications in case they have the same shortcuts as XR3Player does . \n\n It is recommend to use it with care until i make it more mature\n\n Have a nice day! GOXR3PLUS STUDIO"); alert.showAndWait(); // Add Global Listener for the Operating System GlobalScreen.setEventDispatcher(new SwingDispatchService()); GlobalScreen.registerNativeHook(); keyBindingsActive.setText("Click here to De-activate KeyBindings"); } else { //Remove Global Listener from the Operating System GlobalScreen.unregisterNativeHook(); keyBindingsActive.setText("Click here to Activate KeyBindings"); } } catch (NativeHookException ex) { //Log it logger.log(Level.WARNING, "\"Trying to register native hook for the operating system an error occured!\"", ex); //Show a notification to the user ActionTool.showNotification("Error with JNativeHook", "Trying to register native hook for the operating \n system an error occured!", Duration.seconds(2), NotificationType.ERROR); } ActionTool.showNotification("Notification", "KeyBindings has been [ " + (newValue ? "activated" : "deactivated") + " ]", Duration.millis(800), NotificationType.INFORMATION); }); //accordion accordion.setExpandedPane(accordion.getPanes().get(0)); } }