Class WinConsoleNative

java.lang.Object
org.aesh.terminal.tty.impl.WinConsoleNative

public final class WinConsoleNative extends Object
JNI bridge to Windows console API (Kernel32). Replaces JNA for GraalVM native-image compatibility.

This class provides low-level access to Windows console functions via JNI. The native library (aesh-console.dll) is loaded from the system library path or extracted from the JAR at runtime.

  • Field Details

    • STD_INPUT_HANDLE

      public static final int STD_INPUT_HANDLE
      Standard input handle identifier.
      See Also:
    • STD_OUTPUT_HANDLE

      public static final int STD_OUTPUT_HANDLE
      Standard output handle identifier.
      See Also:
    • STD_ERROR_HANDLE

      public static final int STD_ERROR_HANDLE
      Standard error handle identifier.
      See Also:
    • INVALID_HANDLE

      public static final long INVALID_HANDLE
      Invalid handle sentinel value.
      See Also:
    • KEY_EVENT

      public static final int KEY_EVENT
      Event type constants matching Windows INPUT_RECORD.EventType.
      See Also:
    • MOUSE_EVENT

      public static final int MOUSE_EVENT
      Mouse event type.
      See Also:
    • WINDOW_BUFFER_SIZE_EVENT

      public static final int WINDOW_BUFFER_SIZE_EVENT
      Window buffer size event type.
      See Also:
    • ENABLE_VIRTUAL_TERMINAL_PROCESSING

      public static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING
      Console mode flag: enable virtual terminal processing on output handle.
      See Also:
    • ENABLE_VIRTUAL_TERMINAL_INPUT

      public static final int ENABLE_VIRTUAL_TERMINAL_INPUT
      Console mode flag: enable virtual terminal input on input handle.
      See Also:
    • WAIT_OBJECT_0

      public static final int WAIT_OBJECT_0
      WaitForSingleObject return: the object was signaled.
      See Also:
    • WAIT_TIMEOUT

      public static final int WAIT_TIMEOUT
      WaitForSingleObject return: the wait timed out.
      See Also:
    • WAIT_FAILED

      public static final int WAIT_FAILED
      WaitForSingleObject return: the function failed.
      See Also:
  • Method Details

    • getStdHandle

      public static long getStdHandle(int nStdHandle)
      Returns the handle for the specified standard device.
      Parameters:
      nStdHandle - the standard device identifier
      Returns:
      the device handle
    • getConsoleMode

      public static int getConsoleMode(long handle)
      Returns the current console mode for the given handle.
      Parameters:
      handle - the console handle
      Returns:
      the console mode flags
    • setConsoleMode

      public static boolean setConsoleMode(long handle, int mode)
      Sets the console mode for the given handle.
      Parameters:
      handle - the console handle
      mode - the console mode flags
      Returns:
      true if successful
    • getConsoleOutputCP

      public static int getConsoleOutputCP()
      Returns the console output code page.
      Returns:
      the output code page identifier
    • getConsoleSize

      public static int[] getConsoleSize(long handle)
      Returns the console size as {columns, rows}.
      Parameters:
      handle - the console handle
      Returns:
      array of {columns, rows}
    • readConsoleInputEvent

      public static int[] readConsoleInputEvent(long handle)
      Read a console input event (key or window resize). Returns int[] where first element is the event type: KEY_EVENT (1): {1, keyDown, repeatCount, vKeyCode, unicodeChar, controlKeyState} MOUSE_EVENT (2): {2, x, y, buttonState, controlKeyState, eventFlags} WINDOW_BUFFER_SIZE_EVENT (4): {4, width, height} Returns null for other event types or on error.
      Parameters:
      handle - the console input handle
      Returns:
      the event data array, or null
    • writeConsole

      public static boolean writeConsole(long handle, char[] buffer, int length)
      Writes characters to the console.
      Parameters:
      handle - the console output handle
      buffer - the characters to write
      length - the number of characters to write
      Returns:
      true if successful
    • waitForSingleObject

      public static int waitForSingleObject(long handle, int timeoutMs)
      Waits for the specified object to be signaled or the timeout to elapse.

      JNI fallback: always returns WAIT_OBJECT_0 (no timeout support). The FFM multi-release variant calls the real kernel32 function.

      Parameters:
      handle - the object handle
      timeoutMs - timeout in milliseconds
      Returns:
      WAIT_OBJECT_0, WAIT_TIMEOUT, or WAIT_FAILED
    • getNumberOfConsoleInputEvents

      public static int getNumberOfConsoleInputEvents(long handle)
      Returns the number of unread console input events.

      JNI fallback: always returns -1 (unsupported). The FFM multi-release variant calls the real kernel32 function.

      Parameters:
      handle - the console input handle
      Returns:
      the number of pending events, or -1 if unsupported
    • supportsNonBlockingWait

      public static boolean supportsNonBlockingWait()
      Whether this implementation supports non-blocking wait with timeout.

      JNI fallback: returns false. The FFM multi-release variant returns true.

      Returns:
      true if WaitForSingleObject is available