Java 防止其他应用程序发送密钥。防止作弊

Java 防止其他应用程序发送密钥。防止作弊,java,sendkeys,Java,Sendkeys,我用一个小java游戏编程;挑战在于在文本框中键入孔abc,并给出所用时间 现在我已经内置了一些防止作弊的功能: 像复制粘贴孔abc 或者只有abc的中间部分像bcdefgh 如果你研究我的代码,你会发现我只检查第一个字母A,L和Z。 A以节省开始时间 L为防止作弊,只复制粘贴孔中间的abc Z检查我在文本字段中输入的孔字符串。停止计时 代码如下: package lvl1; import java.awt.Color; import java.awt.GridLayout; import j

我用一个小java游戏编程;挑战在于在文本框中键入孔abc,并给出所用时间

现在我已经内置了一些防止作弊的功能:

像复制粘贴孔abc 或者只有abc的中间部分像bcdefgh

如果你研究我的代码,你会发现我只检查第一个字母A,L和Z。 A以节省开始时间 L为防止作弊,只复制粘贴孔中间的abc Z检查我在文本字段中输入的孔字符串。停止计时

代码如下:

package lvl1;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class test implements KeyListener {
    private Date start_time;
    private JTextField jtf;
    private JLabel lblStatus;
    private boolean lpressed;

    public static void main(String[] args) {
        new test();
    }

    public test() {
        jtf = new JTextField();
        JFrame myframe = new JFrame();
        jtf.addKeyListener(this);
        lblStatus = new JLabel("Zeit:");

        myframe.setSize(700, 60);
        myframe.setTitle("ABC COOLGAME");
        myframe.setLocationRelativeTo(null);
        myframe.setDefaultCloseOperation(myframe.EXIT_ON_CLOSE);

        myframe.setLayout(new GridLayout(1, 2));
        myframe.add(jtf);
        myframe.add(lblStatus);
        myframe.setVisible(true);
    }

    @Override
    public void keyPressed(KeyEvent arg0) {
        if (65 == arg0.getKeyCode()) {
            start_time = new Date();
        }
        if (8 == arg0.getKeyCode()) {
            jtf.setText("");
            jtf.setBackground(Color.WHITE);
        }
        if (76 == arg0.getKeyCode()) {
            lpressed = true;
        }
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        Date date = new Date();

        if ((90 == arg0.getKeyCode()) & (jtf.getText().equals("abcdefghijklmnopqrstuvwxyz") & (lpressed == true))) {
            lblStatus.setText("Zeit: " + (date.getTime() - start_time.getTime())
                    + " Milliseconds");
            jtf.setBackground(Color.GREEN);
            lpressed = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {/* Nothing to do */} 
}
现在我将Jar文件发送给我的朋友,几分钟后我重新发送了一条记录为10毫秒的消息。他告诉我他和vba一起把abc发送过来

Sleep 5000  'Here he click the cursor in my textfield  
SendKeys "abcdefghijklmnopqrstuvwxyz"
此语句将自动分别发送所有键,与我在键盘上键入的类似

有人知道防止这种作弊技术的方法吗


游戏不应该对作弊引擎或其他东西安全,但要防止上述技术将是惊人的。

我认为你需要从文本字段(即接受键盘事件)改为用户按下a-z按钮。你能准确地说出你的想法吗?据我所知,无法将键盘事件与sendkeys应用程序或普通键盘输入区分开来。因此,你不用输入字母表,而是有一堆标记为a到Z的按钮。你现在可以通过按按钮来“输入”字母表。你的游戏应该有随机文本来玩,而不是硬编码的a到Z。