auf STRG reagieren befor Grafikkomponente

doerk

Mitglied
Hallo Leute,

weiß jemand, wie ich es abfangen kann ob der Benutzer beim Programmstart STRG drückt?

Das schwierige ist daran, dass ich es unmittelbar nach Programmstart machen will, das hat folgenden Grund: wenn der User nicht die STRG drückt, wird ein Standardbenutzer am Programm angemeldet, anderenfalls soll eine Anmeldemaske erscheinen, wo der User sich auch mit einem Benutzer anmelden kann, der mehr Berechtigungen hat.
Ich weiß, dass ist ein ungewöhnliches Vorgehen, aber so soll es sein, bitte keine Vorschläge, wie ich es ganz ganz anders lösen könnte.

Danke

Doerk
 

AlexSpritze

Bekanntes Mitglied
Definiere mal "Programmstart". Meinst du bevor deine
Code:
main(String[])
aufgerufen wird? Oder danach, bevor aber eine GUI gezeigt wird?
 

XHelp

Top Contributor
Lass lieber einen SlashScreen anzeigen, dadran kannst du einen Listener dranschrauben. So ist es auch für den Benutzer verständlicher, wann er CTRL zu drücken hat.
 

kay73

Bekanntes Mitglied
Wenn die Taste vor Programmstart gedrückt gehalten wird, muss man für Win(-32) auf die WinAPI zurückgreifen. Das gibt es aber fertig komfortabel gekapselt. Beachte:
Java:
import javax.swing.JOptionPane;
import com.sun.jna.platform.win32.User32;

public class KeyDetect {

	public static void main(String[] args) {        
        final short s = User32.INSTANCE.GetAsyncKeyState(0x11);		
		JOptionPane.showConfirmDialog(null, "Key "+(s < 0 ? "down" : "up"), "Key test", JOptionPane.OK_OPTION);
	}
}
Bei Linux/*NIX wird es komplizierter; da braucht es unter X11 (wahrscheinlich) JNI-Aufrufe zu XkbGetState. Damit kenn' ich mich aber nicht aus. Vielleicht hilft das.

Wenn nach der
Code:
main()
-Methode abgefragt werden soll, dann separaten Thread starten , darin die System event queue beschaffen per
Java:
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
events abfragen, auf
Code:
 instanceof KeyEvent
usw. testen und danach
Code:
queue.postEvent(ev);
nicht vergessen!
 
Zuletzt bearbeitet:

doerk

Mitglied
Danke kay73, genau das habe ich gesucht. Momentan ist es noch eine reine Windows-Anmeldung, aber vielleicht ist mir später der Hinweis für das gleiche unter Linux auch noch hilfreich.

Java:
public class AppMain
{
    public static void main(String args[]) throws Exception
    {
        final short s = User32.INSTANCE.GetAsyncKeyState(0x11);
        System.out.println("STRG " + (s < 0 ? "gedrückt" : "nicht gedrückt"));       

        if (s >= 0)
        {
            //einfache GUI laden
        }
        else
        {
            //erweiterte GUI laden
        }
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben