Установить цифровую раскладку для экранной клавиатуры Windows программно

Прямо сейчас я пытаюсь программно переключить цифровую раскладку для экранной клавиатуры 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".

На основе /questions/15604053/kak-programmno-upravlyat-panelyu-vvoda-teksta-tabtipexe-v-windows-vista7 Я придумал это:

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). Это прекрасно работает (даже без повышенных привилегий!). На основе /questions/41841006/pokazat-sensornuyu-klaviaturu-tabtipexe-v-windows-10-anniversary-edition

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

0 ответов

Другие вопросы по тегам