Да, открытие и переключение клавиатуры работает нормально.

сейчас я пытаюсь программно переключить цифровую раскладку для экранной клавиатуры Windows 8.1, также называемой «виртуальная клавиатура» или «мягкая панель ввода (SIP)».

Это не решение WPF, где я могу установить InputScope, но я использую приложение JavaFX на планшете с Windows 8.1. Я знаю, что есть встроенная экранная клавиатура для JavaFX, но SIP (tabtip.exe) в стиле metro необходим.

Мое текущее решение выглядит так; Я имитирую щелчок мыши в левом нижнем углу клавиатуры, где кнопка «& 123» с C #. Скомпилируйте этот фрагмент в .exe и вызовите его из JavaFX, например. когда TextField с числовым вводом получает фокус. Это имеет очевидные недостатки:

1) это взломано

2) Если клавиатура находится в плавающем состоянии и перемещена, или установлено другое разрешение экрана, координаты щелчка могут быть не в правильном месте.

3) приложению нужны повышенные привилегии для вызова событий мыши на SIP

Какой лучший способ сделать это?

Я попытался использовать Spy ++ для анализа и нашел «TipSkinEvent», когда я нажимаю кнопку «& 123».

На основеЯ придумал это:

void ToggleNum()
{
    HWND hwndInputPanel = ::FindWindow(_TEXT("IPTip_Main_Window"), NULL);

    DWORD WM_NUM_BUTTON_PRESSED = ::RegisterWindowMessage(_TEXT("TipSkinEvent"));
    PostMessage(hwndInputPanel, WM_NUM_BUTTON_PRESSED, 0, 0);
}

Это не работает, и, к сожалению, я не эксперт в программировании Windows, поэтому я понятия не имею, что здесь нужно сделать. Можете ли вы сказать мне, что не так во фрагменте кода или что такое правильный API для изменения макета, как показано на рисунке выше? (Установка числового флага в реестре Windows приводит к другому макету, а также требует прав администратора, чтобы убить и перезапустить tabtip.exe)

Чтобы переключить видимость клавиатуры, я использую аналогичный подход (вызов кода C #, скомпилированного в .exe). Это прекрасно работает (даже без повышенных привилегий!). На основе

Замечание: я также пытался использовать JNA, чтобы пропустить вызов .exe, но безуспешно.

Ответы на вопрос(0)

Ваш ответ на вопрос