Here is my code, but it still has tendency to ignore keys or make them stuck.
Code:
import java.awt.*;
import java.awt.image.BufferedImage;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.LogManager;
public class test4 implements NativeKeyListener{
private static Robot robot;
private static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private static double width = 1920;
private static double height = 1080;
private static BufferedImage img =null;
private static int red = 0;
private static int green = 0;
private static int blue = 0;
private static int rgb = 0;
private static int modey = 53;
private static Boolean on=false;
private static Boolean hold = false;
private static Boolean appended=false;
private static int globalOffsetX,globalOffsetY;
private static final int SEARCH_WIDTH = 490;
private static final int SEARCH_HEIGHT = 390;
public static void main(String[] args) throws Exception {
LogManager.getLogManager().reset();
Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
logger.setLevel(Level.OFF);
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
System.exit(1);
}
robot = new Robot();
test4 listen = new test4();
while(true){
GlobalScreen.addNativeKeyListener(listen);
if(hold){
moveMouse(analysis(ss())[0],analysis(ss())[1]);
}
}
}
public void nativeKeyPressed(NativeKeyEvent e) {
if (e.getKeyCode() == NativeKeyEvent.VC_K)
hold = true;
}
public void nativeKeyReleased(NativeKeyEvent e) {
if (e.getKeyCode() == NativeKeyEvent.VC_K)
hold = false;
}
public void nativeKeyTyped(NativeKeyEvent e) {}
private static void moveMouse(double x, double y){
if(appended){
robot.mouseMove((int)((width/2)+x+60),(int) ((height/2)+y-20+modey));
}
}
private static BufferedImage ss(){
return robot.createScreenCapture(new Rectangle((int)(width/2)-245,(int)(height/2)-245, SEARCH_WIDTH,SEARCH_HEIGHT));
}
private static double[] analysis(BufferedImage iA) throws Exception{
appended = false;
for (int x = 0; x< iA.getWidth(); x ++) {
for(int y = 0; y < iA.getHeight(); y ++) {
rgb = iA.getRGB(x, y);
red = (rgb >> 16) & 0x000000FF;
green = (rgb >> 8 ) & 0x000000FF;
blue = (rgb) & 0x000000FF;
if(red>=251&&green<=3&&blue<=18){
if(!appended){
appended=true;
globalOffsetX = x-(SEARCH_WIDTH/2);
globalOffsetY = y-(SEARCH_HEIGHT/2);//145
}
}
if(appended)
break;
}
if(appended)
break;
}
return new double[]{globalOffsetX,globalOffsetY};
}
}