User Tag List

Страница 22 из 101 ПерваяПервая ... 181920212223242526 ... ПоследняяПоследняя
Показано с 211 по 220 из 1003

Тема: Эмулятор терминала типа VT52

  1. #211

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Если DirectInput при получении окном фокуса устанавливает свой кривой глобальный хук ( не вызывающий после завершения обработки нажатия следующий глобальный хук в цепочке глобальных хуков ) - то, возможно, если каждый раз устанавливать свой глобальный хук после того, как это сделал DirectInput - то всё заработает.

    Проще говоря - при получении фокуса окном нужно проверить следующие варианты:

    1. Установить свой хук сразу ( и проверить успешность его установки ).

    2. Установить сначала вместо хука таймер на 50 мс и после получения сигнала таймера - установить хук. Пользователь вряд ли успеет нажать на клавишу быстрее чем через 50 мс после активации окна.
    Я пробовал устанавливать хук при получении фокуса окном - не помогает. Наличие активного окна с подключенным директинпутом этот хук игнорирует.

    С задержкой не пробовал, но это какие-то дикие костыли.

    Не должен директинпут быть кривым.

    Попробую инициализировать более новую версию. Ведь у меня используется интерфейс DirectInput, а не, скажем, DirectInput8, для совместимости даже с древними версиями виндовсов и дирекиксов. В принципе, функционал особо в них не менялся, но может древняя версия интерфейса как раз глючная.

  2. #211
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #212

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Наличие активного окна с подключенным директинпутом этот хук игнорирует.
    Такое впечатление, что DirectInput оправдывает своё название, отключая обычную обработку нажатий клавиш в Windows..

    Тот факт, что хук нормально работает при выходе из окна с DirectInput - позволяет предположить, что когда DirectInput активен - Windows обрабатывает нажатия клавиш совсем не так, как обычно и ( в частности ) глобальные хуки не вызываются вообще.

  4. #213

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Тот факт, что хук нормально работает при выходе из окна с DirectInput - позволяет предположить, что когда DirectInput активен - Windows обрабатывает нажатия клавиш совсем не так, как обычно и ( в частности ) глобальные хуки не вызываются вообще.
    Но ведь системные клавиши работают! Капслоки всякие тоже зажигают лампочки.

    Кстати, как управлять этими лампочками? Эмулятор Амиги умеет. Вариант - посылать коды нажатий нумлоков и капслоков через хук - не канает, т.к. это позволяет ИНВЕРТИРОВАТЬ лампочку, но не управлять ей напрямую.

  5. #214

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    это позволяет ИНВЕРТИРОВАТЬ лампочку, но не управлять ей напрямую.
    Сначала надо прочитать состояние лампочки (которое отслеживает Windows) и не инвертировать лампочку, если она уже в нужном состоянии:

    Код:
    void SetCapsLock( bool bState )
    {
      BYTE keyState[256];
    
      GetKeyboardState((LPBYTE)&keyState);
    
      if( (bState && !(keyState[VK_CAPITAL] & 1)) ||
          (!bState && (keyState[VK_CAPITAL] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_CAPITAL,
                      0,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );
    
      // Simulate a key release
         keybd_event( VK_CAPITAL,
                      0,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
    }


    ---------- Post added at 18:02 ---------- Previous post was at 17:58 ----------

    Цитата Сообщение от Titus Посмотреть сообщение
    Но ведь системные клавиши работают! Капслоки всякие тоже зажигают лампочки.
    DirectX - это подсистема Windows, написанная тем же автором.

  6. #215

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Сначала надо прочитать состояние лампочки (которое отслеживает Windows) и не инвертировать лампочку, если она уже в нужном состоянии
    Т.е. все-таки метода управления ими напрямую нету?
    Зато можно читать? Ну и то хорошо.

    Но тогда по-любому через хук.

    Странно, что он не дружит с директинпутом, тем более написанным авторами Windows.

    ---------- Post added at 19:26 ---------- Previous post was at 19:20 ----------

    Получается, что массив состояния клавиш хранит не состояние CapsLock - нажата / не нажата, а состояние, активирована / не активирована?

    ---------- Post added at 19:57 ---------- Previous post was at 19:26 ----------

    Хм, а вот это меня насторожило:

    While DirectInput forms a part of the DirectX library, it has not been significantly revised since DirectX 8 (2001–2002). Microsoft recommends that new applications make use of the Windows message loop for keyboard and mouse input instead of DirectInput (as indicated in the Meltdown 2005 slideshow[1]), and to use XInput instead of DirectInput for Xbox 360 controllers.


    ---------- Post added at 19:59 ---------- Previous post was at 19:57 ----------

    Т.е. микрософт не рекоммендует использовать директинпут для клавиатуры, а вместо него систему сообщений. Эту тормознутую бяку (как я ее считаю).

  7. #216

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. все-таки метода управления ими напрямую нету
    В смысле, так, чтобы обмануть Windows? Чтобы Windows думала, что лампочка ещё горит, а мы ( хе-хе! ) её уже потушили. А зачем такое может потребоваться..

    Выше я привёл код функции управления состоянием лампочки CapsLock. После вызова SetCapsLock(1) лампочка гарантированно будет гореть, а после SetCapsLock(0) - гарантированно гореть НЕ будет. Какие проблемы.. Что ещё надо?

    Получается, что массив состояния клавиш хранит не состояние CapsLock - нажата / не нажата, а состояние, активирована / не активирована?
    В бите 15 хранится [нажата / не нажата], а в бите 0 - [активирована / не активирована] ( позже выяснилось, что это ошибочное утверждение - т.к. в матрице хранятся байты ).

    ---------- Post added at 19:01 ---------- Previous post was at 18:59 ----------

    Цитата Сообщение от Titus Посмотреть сообщение
    систему сообщений. Эту тормознутую бяку (как я ее считаю).
    Ну, миллион сообщений в секунду Windows без проблем пропускает.
    Последний раз редактировалось Patron; 31.12.2012 в 20:44.

  8. #217

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Мне директинпут очень нравится. Он быстрый, дает состояние ВСЕХ клавиш быстренько в одном массиве. А так же различает Enter на основной и дополнительной клавиатурах.

  9. #218

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мне директинпут очень нравится. Он быстрый, дает состояние ВСЕХ клавиш быстренько в одном массиве. А так же различает Enter на основной и дополнительной клавиатурах.
    Код:
      BYTE keyState[256];
      GetKeyboardState((LPBYTE)&keyState);
    Даёт одним махом состояние всех клавиш и всех лампочек. Причём, Windows дополнительно поддерживает специальные виртуальные клавиши, отражающие "суммарное" состояние пар контролов, шифтов и альтов.

    Если какой-то информации не хватает - глобальный хук можно не отключать и он всегда будет в курсе всех нажатий, устанавливая для программы любые флаги, какие надо.

  10. #219

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,400
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,221
    Поблагодарили
    874 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    А эта функция относится к чему?
    Связана ли она с фокусом окна?
    Позволяет ли отличить Enter на основной и доп-клавиатуре?
    С какой версии виндовс она появилась?

    ---------- Post added at 20:23 ---------- Previous post was at 20:16 ----------

    Цитата Сообщение от Patron Посмотреть сообщение
    В бите 15 хранится [нажата / не нажата], а в бите 0 - [активирована / не активирована].
    Точно в 15? Массив-то байтовый.

  11. #220

    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,806
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    78 сообщений
    Mentioned
    16 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А эта функция относится к чему?
    GetKeyboardState function (Windows)

    Связана ли она с фокусом окна?
    Функция возвращает матрицу виртуальных клавиш текщего потока, которая по умолчанию совпадает с матрицей виртуальных кавиш Windows, но может локально изменяться вызовами SetKeyboardState.

    Позволяет ли отличить Enter на основной и доп-клавиатуре?
    Список виртуальных клавиш Windows выглядит так Virtual-Key Codes, есть ли там флаг, позволяющий отличить PadEnter - не знаю. Можно написать тест, который будет после каждого нажатия клавиши сравнивать матрицу с предыдущей и показывать отличия. Если у PadEnter нет своего флага - можно научить глобальный хук писать флаг состояния PadEnter в отдельную переменную или в ту же матрицу виртуальных клавиш ( там есть свободные ячейки ).

    С какой версии виндовс она появилась?
    Проклятый Microsift теперь упорно делает вид, будто первой Windows была Windows 2000, поэтому про более ранние версии ничего узнать нельзя.

Страница 22 из 101 ПерваяПервая ... 181920212223242526 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. [Аукционъ] Клавиатура от терминала ЕС-7927
    от BYTEMAN в разделе Барахолка (архив)
    Ответов: 18
    Последнее: 15.05.2012, 14:50
  2. Срочно ищу монитор от терминала 15ИЭ-00-013 (от ДВК-2)
    от dk_spb в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 10.02.2012, 10:19
  3. Куплю клавиатуру КМ-035 для терминала СМ 7238
    от Kronshou в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 13.09.2010, 23:33
  4. C64 или C128 в качестве терминала под Linux
    от Vinnny в разделе Commodore 16/64/128
    Ответов: 6
    Последнее: 14.12.2007, 16:39
  5. Подгрузка pc-файла типа "codes" в эмулятор
    от maximk в разделе Эмуляторы
    Ответов: 15
    Последнее: 13.11.2006, 15:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •