كيفية التحقق من مفتاح محتجزين أسفل على بدء التشغيل في جافا

StackOverflow https://stackoverflow.com/questions/160315

سؤال

أنا أحاول أن أكتب قرار اختيار مربع الحوار الذي يظهر عند برنامج أول من يبدأ.لمنع مملة المستخدم ، أريد أن تنفيذ المعيار إلى حد ما ميزة أنه يمكنك إيقاف هذا الحوار مع الاختيار ، ولكن الحصول عليه مرة أخرى عن طريق الضغط باستمرار على مفتاح alt عند بدء التشغيل.

للأسف لا توجد طريقة واضحة أن نسأل ما إذا كان جافا مفتاح معين هو حاليا الضغط.يمكنك تسجيل فقط أن تكون على علم من جديد عن طريق الضغط على مفتاح a KeyListener, ولكن هذا لا يساعد إذا كان keypress يبدأ قبل إطلاق التطبيق.

هل كانت مفيدة؟

المحلول

public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        System.out.println("caps lock2 = "
                + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}

نصائح أخرى

import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        frame.addWindowListener(new WindowAdapter() {
            public void windowActivated(WindowEvent e) {
                System.out.println("caps lock1 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));

                try {
                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_CONTROL);
                    robot.keyRelease(KeyEvent.VK_CONTROL);
                } catch (Exception e2) {
                    System.out.println(e2);
                }

                System.out.println("caps lock2 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
            }
        });

        frame.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                System.out.println("caps lock3 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

كذلك هناك نوعين من الضغط على مفتاح الكشف عن:الحدث على أساس الاقتراع.إذا كنت استطلاع لوحة المفاتيح من أجل KEY_PRESSED على بدء التشغيل (خلال حلقة مع sleep.thread(timeInMs) التحقق باستمرار إذا كان المفتاح الخاص بك إلى أسفل) ، ثم يمكنك الكشف عن إذا كان بالفعل الضغط على بدء التشغيل.

السؤال الأصلي يبدو أن عدم الرد.الطريقة المقترحة يحدد قفل مفتاح الدولة مثل CapsLock, ScrollLock ، إلخ.لذلك لن تعمل Alt الضغط على الدولة.

النظر في التعليمات البرمجية التالية:

com.sun.jna.platform.KeyboardUtils.isPressed(java.awt.event.KeyEvent.VK_ALT);

المشكلة الوحيدة هي أن هذه الفئة هي داخلية الشمس JDK الدرجة و ليس من المرجح أن تكون متاحة في أي JVM.تعتمد على المشروع الخاص بك قد أو قد لا تكون مقبولة.

داخليا الأمر الذي يدعو إلى User32.DLL على ويندوز:

User32.INSTANCE.GetAsyncKeyState(...)

أنا لا أعرف الكثير عن جافا (معظمهم من التعليمات البرمجية في C#) ولكن ماذا عن وجود صغيرة محمل برنامج مكتوب في C أو شيء من هذا ثم تطلق جافا الخاص بك التطبيق مع بعض المعلمات (مثل ما إذا كان أو لا معين مفتاح لأسفل)?

لذلك يبدو أن يمكنك أن تفعل هذا ، ولكن فقط من أجل caps lock et al.ومن ثم ، لقد تحولت إلى استخدام قبعات قفل لهذا الغرض.ليست مثالية, ولكن لا بأس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top