Speccy - наш выбор!

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

Patron 18th October 2011 17:46

Quote:

Originally Posted by Alex_K (Post 425877)
пока пусть останется, как есть.

Если нужно отличать нажатие <Enter> и <NumPadEnter> - это можно сделать, анализируя скан-коды.

В Windows невозможно различить нажатие <Enter> и <NumPadEnter>, используя только GetKeyboardState().

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

Alex_K 18th October 2011 22:27

Сделал различие <Enter> и <NumpadEnter> через WM_KEYDOWN и WM_KEYUP. С хуками довольно много мороки, они должны быть в DLL. Вроде работает. Но Windows довольно странно это обрабатывает. Нажмем <Enter> и не отжимая ее жмем <NumpadEnter>. Держим обе клавиши. Эмулятор соответственно получает последовательно коды 0153 и 0166. Отжимаем <Enter>, получаем код 0213. Снова нажимаем <Enter>, соответственно получаем код 0153. А вот дальше самое интересное: отжимаем <Enter>, <NumpadEnter> у нас так и нажат, получаем последовательно коды 0213 и 0206, словно отжали обе клавиши, хотя <NumpadEnter> до сих пор нажат. Функция GetKeyboardState в позиции <Enter>-а говорит, что ни один <Enter> не нажат, хотя <NumpadEnter> так и остается в нажатом состоянии.

Коды клавиатуры можно посмотреть в программе SCAN.SAV на диске sysimage.dsk.

P.S. Интересно всё-таки, а чем руководствовалась Microsoft, когда через GetKeyboardState сделала различие Shift-ов, Ctrl-ей и Alt-ов, а вот Enter-ов не удосужилась.

БОЛЬШОЕ СПАСИБО всем за консультации и помощь !!!

hobot 18th October 2011 22:55

Quote:

Originally Posted by Alex_K (Post 425827)
Сама клавиша западёт в автоповтор в драйвере системного ПЗУ

Нет - только не это, снова :eek_std:
Quote:

Originally Posted by Alex_K (Post 425877)
Спасибо всем за советы! Но пока пусть останется, как есть.

Да, по крайней мере так можно спокойно и в системе работать и в игрушки играть!:redface:

Patron 18th October 2011 23:16

Quote:

Originally Posted by Alex_K (Post 425995)
С хуками довольно много мороки, они должны быть в DLL.

Относительно хуков есть два замечания:

1. Чаще всего хуки вообще не нужны - достаточно обрабатывать *KEYDOWN и *KEYUP.

2. Хуки не должны быть в DLL.

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

Строчка установки хука в программе выглядит так:
Code:

HHOOK g_hHookKbdLL = NULL; // hook handle

if( !g_hHookKbdLL )
{
    g_hHookKbdLL = SetWindowsHookEx(
                                      WH_KEYBOARD_LL,
                                      MyTaskKeyHookLL,
                                      ghInstance,
                                      0
                                    );
}


Alex_K 19th October 2011 02:35

1 Attachment(s)
Размапил все клавиши, собственно они все есть. Пока только две таблицы - РУС и ЛАТ. Задействовал основное поле, теперь оба Shift-а одинаковые, АЛФ - это контекстное меню, LeftCtrl -УПР, RightCtrl - ГРАФ, CapsLock - ФИКС. С буквами и цифрами вроде и так ясно. Теперь другие клавиши, если есть различие в таблицах, то сперва ЛАТ, затем РУС:
Code:

<`~> - <;+>
<-_> - <-=>
<=+> - <^~> <,<>
<\|> - <\|> <.>>
<;:> - <:*> <Жж>
<'"> - <@`> <Ээ>
<,<> - <,<> <Бб>
<.>> - <.>> <Юю>
</?> - </?>
<Home> - <_> <:*>
<Insert> - СБРОС
<PageUp> - СТОП
<Delete> - ПОМ
<End> - УСТ
<PageDown> - ИСП


Vamos 19th October 2011 04:25

Quote:

Originally Posted by Alex_K (Post 426075)
АЛФ - это контекстное меню

У меня при нажатии на эту клавишу даже щелчка нет.

Вообще интересный вариант. Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ?
А вот эти символы & ( ) надо было как на РС сделать.

Alex_K 19th October 2011 11:10

Quote:

Originally Posted by Vamos (Post 426086)
У меня при нажатии на эту клавишу даже щелчка нет.

Странно. У меня как на десктопе (XP), так и на нетбуке (семёрка), работает.
Quote:

Originally Posted by Vamos (Post 426086)
Вообще интересный вариант. Только для ноутбуков без расширенной клавиатуры клавиши СБРОС, СТОП, ПОМ, УСТ и ИСП - ?
А вот эти символы & ( ) надо было как на РС сделать.

У меня на нетбуке они (Home, End, ...) есть. Неудобно конечно, но есть идея запараллелить на F6-F12 (без F10). А по поводу & ( ) - написал же, что реализовано только две раскладки -РУС и ЛАТ, нет пока раскладок нижнего регистра. Кстати, а что же в таком случае подставлять на Shift+6? Символы ":" и "^" нельзя - они вводятся на верхнем регистре.

Titus 19th October 2011 13:05

Quote:

Originally Posted by Alex_K (Post 426075)
АЛФ - это контекстное меню

Может Alt?

Vamos 19th October 2011 13:40

Quote:

Originally Posted by Alex_K (Post 426106)
Странно. У меня как на десктопе (XP), так и на нетбуке (семёрка), работает.

У меня не работает даже на виртуальной эмулятора, кликаю кнопкой мыши и тишина.

Quote:

Originally Posted by Alex_K (Post 426106)
Неудобно конечно, но есть идея запараллелить на F6-F12 (без F10)

Может вот так:
ПОМ - F7
УСТ - F8
ИСП - F9
СБРОС - F11
СТОП -F12
К1...К5 - F1...F5

Quote:

Originally Posted by Alex_K (Post 426106)
А по поводу & ( ) - написал же, что реализовано только две раскладки -РУС и ЛАТ, нет пока раскладок нижнего регистра.

Алфавит в нижнем регистре работает, символы !#$% тоже на месте, нужно только сдвинуть на одну клавишу в право символы &*().
И сделать еще только одну инверсную таблицу для символов у которых регистр отличается от РС, вот сейчас ":" работает наоборот.

Quote:

Originally Posted by Alex_K (Post 426106)
Кстати, а что же в таком случае подставлять на Shift+6? Символы ":" и "^" нельзя - они вводятся на верхнем регистре.

Можно ничего не подставлять или символ надчеркивания который в РС отсутствует он как раз в нижнем регистре.

Quote:

Originally Posted by Titus (Post 426151)
Может Alt?

С этим все согласны кроме Alex_K.

Titus 19th October 2011 13:44

Quote:

Originally Posted by Vamos (Post 426155)
С этим все согласны кроме Alex_K.

Я имел ввиду, может вы ошиблись? Не Алф, a Alt имелось ввиду выше? Ведь на PC-клавиатуре такой клавиши нет.


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

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