Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор терминала типа VT52 (http://zx-pk.ru/showthread.php?t=20092)

Titus 1st January 2013 21:24

Где достать таблицу для:

Code:

scanCode

    Type: DWORD

    A hardware scan code for the key.

хардварных сканкодов клавиш? Единая ли она для винды, или же для разных версий дров, клавиатур и т.д. может отличаться?

Patron 1st January 2013 22:15

Quote:

Originally Posted by Titus (Post 563678)
Где достать таблицу для хардварных сканкодов клавиш?

Scan Code values generated by the PC Keyboard

Quote:

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

Titus 2nd January 2013 00:48

Пока что разбираюсь, как эмулировать зажигание лампочек изнутри функции обработки хука.

Предложенный метод не подходит:
Code:

// Simulate a key press
    keybd_event( VK_CAPITAL,
                  0,
                  KEYEVENTF_EXTENDEDKEY | 0,
                  0 );

Т.к. он по идее сам и вызовет хук?

Попытка внутри хука менять на лету параметр vkCode, scanCode, да и вообще все - на зажигание лампочки НЕ влияет. Влияет если только прервать цепочку хуков по return (1). А мне нужно не прервать, а подменить один код на другой, чтобы заставить принудительно включить или выключить лампочку.

Patron 2nd January 2013 01:23

Quote:

Originally Posted by Titus (Post 563760)
Пока что разбираюсь, как эмулировать зажигание лампочек изнутри функции обработки хука

Хук нужен только для того, чтобы пропускать или не пропускать "лампочные" нажатия в Windows. Всё остальное должны делать обычные подпрограммы.

Представим предельно сложную ситуацию, когда клавиша CapsLock и лампочка CapsLock никак друг с другом не связаны - нажатия проходят "мимо лампочки", а лампочка напрямую управляется из программы.

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

Titus 2nd January 2013 01:27

Quote:

Originally Posted by Patron (Post 563787)
Чтобы хук мог отличить обычные нажатия ( которые он запишет в матрице, но не пропустит в Windows ) и фейк-нажатия (которые в нужный момент генерятся программой специально, чтобы переключить лампочку, и не должны влиять на матрицу нажатых клавиш) - то чтобы хук мог их отличать - нужен всего лишь ещё один флаг для хука, который будет устанавливаться подпрограммой управления лампочкой перед посылкой фейк-нажатия и сбрасываться сразу после этого.

Ну я так и думал.
Просто хорошо было бы, если б были более компактные решения)

Patron 2nd January 2013 01:44

Quote:

Originally Posted by Titus (Post 563788)
хорошо было бы, если б были более компактные решения)

Флаг можно посылать в скан-коде - это даже лучше, т.к. настоящее нажатие точно не сможет встрять. Перед отправкой кода в Windows хук должен этот бит чистить.

Titus 2nd January 2013 01:53

Quote:

Originally Posted by Patron (Post 563793)
Флаг можно посылать в скан-коде - это даже лучше, т.к. настоящее нажатие точно не сможет встрять. Перед отправкой кода в Windows хук должен этот бит чистить.

Как его засунуть в сканкод?

---------- Post added at 00:53 ---------- Previous post was at 00:48 ----------

Если передавать в поле bScan, то не стремно ли? Считается, что этот параметр не используется, может быть он и не дойдет в каких-то версиях.

Patron 2nd January 2013 02:03

Quote:

Originally Posted by Titus (Post 563795)
Как его засунуть в сканкод

В параметр dwFlags функции keybd_event - там полно места.

---------- Post added 02.01.2013 at 00:03 ---------- Previous post was 01.01.2013 at 23:59 ----------

А можно и прямо в bScan - он там как раз для того, чтобы "общаться" с хуком.

Titus 2nd January 2013 02:48

Я уже нашел штатный флаг, который устанавливается при симуляции нажатия - это:

Quote:

4 Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0.

Patron 2nd January 2013 02:57

Да, в прошлом году я этот флаг тоже нашёл, но за прошедший день упел про него забыть :)


All times are GMT +4. The time now is 02:41.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.