C # Как перевести виртуальный код клавиши на символ?

Другой вариант для кэша java в памяти - cache2k . Производительность в памяти превосходит EHCache и google guava, см. Страницу cache2k benchmarks .

Схема использования похожа на другие кеши. Вот пример:

Cache cache = new Cache2kBuilder() {}
  .expireAfterWrite(5, TimeUnit.MINUTES)    // expire/refresh after 5 minutes
  .resilienceDuration(30, TimeUnit.SECONDS) // cope with at most 30 seconds
                                          // outage before propagating 
                                          // exceptions
  .refreshAhead(true)                       // keep fresh when expiring
  .loader(new CacheLoader() {
    @Override
    public String load(final String key) throws Exception {
      return ....;
    }
  })
  .build();
String val = cache.peek("something");
cache.put("something", "hello");
val = cache.get("something");

Если у вас есть google guava как зависимость, а затем попробовать кеш guava, может быть хорошей альтернативой.

23
задан JasonMArcher 4 August 2015 в 17:39
поделиться

3 ответа

Не то, что что Система. Windows. Форма. Класс KeysConverter для?

KeysConverter kc = new KeysConverter();
string keyChar = kc.ConvertToString(keyData);
41
ответ дан Powerlord 4 August 2015 в 17:39
поделиться

Да, я действительно использовал MapVirtualKey метод. Но я ожидал больше деталей о том, как использовать его: что DllImport директива для использования, что enum специфично для отображения на символы, и т.д.

, мне не нравятся эти ответы, где Вы гуглите в течение подобных 5 секунд и затем просто предлагаете решение: реальная проблема состоит в том, чтобы соединить все части и не иметь для траты времени с тоннами демонстрационных меньше страниц MSDN или других форумов кодирования для получения ответа. Никакой постамент преступления, но Ваш ответ (даже хороший) не был бесполезен, так как у меня был этот ответ даже прежде, чем отправить мой вопрос на форуме!

, Таким образом, там Вы идете, я собираюсь отправить то, что я искал - out-of-the-box C# решение:

1-Мест эта директива в Вашем классе:

[DllImport("user32.dll")]
static extern int MapVirtualKey(uint uCode, uint uMapType);

2-Получают Ваш символ как это:

  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)      
  {
     const int WM_KEYDOWN = 0x100;

     if (msg.Msg == WM_KEYDOWN)
     {            
        // 2 is used to translate into an unshifted character value 
        int nonVirtualKey = MapVirtualKey((uint)keyData, 2);

        char mappedChar = Convert.ToChar(nonVirtualKey);
     }

     return base.ProcessCmdKey(ref msg, keyData);
  }

спасибо за заботу... и обладают!

21
ответ дан Jerther 4 August 2015 в 17:39
поделиться

KeysConverter получает имя ключа, а не ключи "текст" например: «Num2» вместо «2» MapVirtualKey будет работать на английском языке, но для неанглийских символов в документации указано, что используется MapVirtualKeyEx, но для этого требуется идентификатор локали. этот идентификатор загружается LoadKeyBoardLayout, который требует константы идентификатора культуры но потом, когда я нашел правильные значения id, это не сработало, когда я попробовал, поэтому, наконец, я сбросил все это

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

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