Тип клавиатуры (Стандартное расположение букв на клавиатуре или Dvorak) обнаружение

По построению, в так называемом стиле присвоения [используется в вашей модели]:

  • всегда есть хотя бы одно начальное состояние
  • все состояния имеют по крайней мере одно следующее состояние
  • недетерминированность очевидна

В качестве альтернативы можно использовать так называемый тип ограничения , который позволяет :

  • противоречивые ограничения INIT, которые не приводят к отсутствию начальных состояний
  • противоречивые ограничения TRANS, которые приводят к состояниям взаимоблокировки (то есть состояние без какого-либо исходящего перехода в какое-то следующее состояние)
  • недетерминизм скрыт

Для получения дополнительной информации см. вторую часть этого курса , которая применяется также к NuSMV по большей части.


Пример автомата, в котором у какого-либо состояния нет будущего состояния:

MODULE main
VAR b : boolean;
TRANS b -> FALSE;

Состояние, в котором b равен true, не имеет будущего состояния. И наоборот, состояние, в котором b является false, может само по себе зацикливаться или переходить в состояние, в котором b = true.

Вы можете использовать команду check_fsm для обнаружения тупиковых состояний.


Обратите внимание, что наличие взаимоблокировочных состояний может препятствовать правильности проверки модели в некоторых ситуациях. Например:

FAQ # 007: Спецификация CTL с квантификатором экзистенциального пути верхнего уровня ошибочно сообщается как нарушенная. Например, для модели, представленной ниже, обе спецификации указываются как ложные, хотя одна является просто отрицанием другой! Я знаю, что такие проблемы могут возникать с тупиковыми состояниями, но запуск его с -ctt говорит, что все в порядке.

MODULE main
VAR b : boolean;
TRANS next(b) = b;
CTLSPEC EF b
CTLSPEC !(EF b)
blockquote>

О других критических последствиях тупиковых состояний в переходном соотношении см. на этой странице .


Обычно, когда NuSMV говорит, что «условия падежа не являются исчерпывающими» , добавляется действие по умолчанию с условием TRUE в конце case конструкция, которая срабатывает, когда не применяется ни одно из предыдущих условий. Наиболее распространенным выбором для действия по умолчанию является автопетля , которая кодируется следующим образом:

MODULE main
VAR
  location: {l1,l2,l3};
ASSIGN
  init(location):= l1;
  next(location):=
    case
      (location = l1): l2;
      (location = l2): {l1, l3};
      TRUE           : location;
    esac;

ПРИМЕЧАНИЕ: пожалуйста обратите внимание, что если существует несколько условий с одинаковым защитным устройством , только первое из этих условий когда-либо используется. По этой причине, когда в вашей модели location = l2 следующее значение location может быть только l1 и никогда l3. Чтобы исправить это и иметь некоторый недетерминированный выбор среди l1 и l3, необходимо перечислить все возможные будущие значения при том же условии, что и набор значений (то есть {l1, l3}).

5
задан Community 23 May 2017 в 12:14
поделиться

4 ответа

Это можно сделать, вызвав метод Win32 API GetKeyboardLayoutName (). Клавиатуры Дворжака имеют определенные имена. Например, макет Дворжака в США имеет имя 00010409.

Фрагмент кода:

  public class Program
  {
    const int KL_NAMELENGTH = 9;

    [DllImport("user32.dll")]
    private static extern long GetKeyboardLayoutName(
          System.Text.StringBuilder pwszKLID); 

    static void Main(string[] args)
    {
      StringBuilder name = new StringBuilder(KL_NAMELENGTH);

      GetKeyboardLayoutName(name);

      Console.WriteLine(name);

    }
  }
3
ответ дан 13 December 2019 в 22:15
поделиться

, что, вероятно, зависит от ОС. Я уверен, что где-то есть настройка операционной системы, которая регистрирует национальность клавиатуры. (Дворак считается национальностью, потому что французские клавиатуры отличаются от клавиатур в США, от ...)

Кроме того, небольшое примечание: «A» был плохим примером, поскольку «A» - это та же самая клавиша в dvorak и qwerty ... B -)

3
ответ дан 13 December 2019 в 22:15
поделиться

Возможно, вы сможете сделать это через DirectInput или какой-либо другой эквивалент DirectX. Я печатаю на клавиатуре Дворжака, и около 50% игр, которые я покупаю, обнаруживают мою клавиатуру и перенастраивают раскладки клавиатуры по умолчанию, чтобы поддерживать ее (например, используя, aoe вместо wasd)

И да, как сказал Брайан: «A 'одинаково на обеих клавиатурах.

3
ответ дан 13 December 2019 в 22:15
поделиться

Какое это имеет значение? Зависимость от какой-то специальной реализации клавиатуры - это вообще не лучшая идея. Мы повсюду используем сканеры штрих-кода, которые имитируют ввод с клавиатуры. Что ваша программа будет делать с этими устройствами? :)

PS: упомянутая запись в реестре упорядочивает клавиши обычной клавиатуры по дворак.

1
ответ дан 13 December 2019 в 22:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: