Еще раз повторюсь, что нажимать надо правый шифт, а не левый.
Левый остался, как и раньше.
А что касается залипания, ну никак не смог выявить.
Скажи конкретно, где, как и что надо нажать, чтобы залипло.
Вид для печати
Да как это возможно то? Под левый шифт всегда есть мизинец, а под правый ???
Понимаешь ли на буке он "маленький" и расположен так, что его как-бы и нет совсем И вообще не понимаю я зачем и почему ты их различаешь, То есть я реально не понимаю ))) Залипает - вот тут кстати ещё один момент !!!
Клавиатура вообще при старте эмулятора стала "тормозной" какой-то что ли, хотя
скорость самой эмуляции (скорость игр) вроде осталась прежней - то есть по прежнему надо скорость "занижать", а вот реакция на кнопки стала какая-то "резиновая", некоторое нажатия shift+" проходят не с первого раза!!!
Если быстро не отпустить и оставить шифт зажатым символ продолжает печататься.
Я использую левый шифт !!! У меня есть для него палец и он удобно расположен
и на буке и на десктопе с полноразмерной клавой.
Титус просто прикинь мои просьбы и доводы на самом деле "очень правильные".
Другое дело, будешь ли ты переделывать что-то, я пока сделал откат на 5f версию,
с ней покрайней мере небыло "резиновости" в работе с кнопками.
ДА!!! Вот (если я что то пропустил просьба ткнуть) ОЧЕНЬ БЫ пригодился режим паузы !!! Что то типа кнопочки "run" в UKNCBTL.
Если перелопачивать и переходить на линейку версий 0.06 так всё ближе и ближе к идеалу ! )))
---------- Post added at 12:36 ---------- Previous post was at 12:31 ----------
а что раньше??? что это значит ???
Немножко обновил версию.
Теперь оба шифта работают одинаково.
Яркость ТВ режима и Монохром немного понизил.
А так же перенес клавишу смены масштабирования видеорежима с NumLock на освободившуюся Delete.
Теперь Delete - циклическая смена масштаба по X в режиме УКНЦ,
a LCtr + Delete - переключение режима сканлайнов (обычные / приближенные к телевизионным).
---------- Post added at 12:55 ---------- Previous post was at 12:54 ----------
А на счет залипания клавиш - так и не смог добиться.
Для справки для Хобота - залипание - это когда при отпускании ВСЕХ клавиш на клавиатуре, продолжает печататься како-либо символ на экране. А вовсе не когда хочешь напечатать один, а печатается другой)
Нет, там алгоритм следующий.
Есть обычные клавиши, когда каждой PC-клавише ставится в соответствие УКНЦ-клавиша.
А есть режим 'эксклюзивных' клавиш. Т.е. если нажат Shift, и при этом какая-либо эксклюзивная клавиша, то отжимаются все нажатые клавиши, и нажимается заданная комбинация.
Допустим, если нажат Shift + '0', то отпускаются все клавиши, в том числе Shift + '0', потом нажимается Shift + '9', чтобы получилась скобка, как на PC-клавише. И удерживается нажатым, пока не отпустили либо '0', либо 'Shift'. Причем одновременное нажатие любых других клавиш в это время блокируется, чтобы не было неправильных комбинаций.
У меня залипание на ноуте было так: <Fn> + <*> отпускаю все клавиши но на экране продолжает печататься :::::::::::::, если нажать еще раз комбинацию (обнаружил случайно), то печать ":" останавливалась. Кстати на предпоследней версии один раз так произошло, на более ранних версиях залипание было постоянно, сейчас нет. Такое впечатление что это происходило когда были запущены еще какие то программы.
Поищу причину.
У меня не ноут, ничего не залипает. Хотя комп не очень шустрый.
Если еще чего найдется - пишите.
---------- Post added at 18:13 ---------- Previous post was at 18:13 ----------
И еще не забывайте присылать в тему скриншоты окна с эмулятором.
---------- Post added at 18:17 ---------- Previous post was at 18:13 ----------
Хм... это очень странно. Может глючит Direct-Input? Ведь на самом деле алгоритм простой. Каждый кадр считывается массив состояний всех PC-клавиш, и сравнивается, не была ли какая-то из них отпущена или нажата. Если да, то соответственно отправлялся код контроллеру клавиатуры УКНЦ. Даже не представляю, как можно при таком раскладе упустить клавишу. Так может глюкнуть контроллер клавиатуры УКНЦ, но никак не PC.
Разобрался с нижними 11 видео строками:
http://zx.pk.ru/showpost.php?p=472495&postcount=372
http://zx.pk.ru/showpost.php?p=472501&postcount=373
http://zx.pk.ru/showpost.php?p=472505&postcount=374
Мое мнение совпадает с мнением Alex_K.
Для компромиса может через батник или ИНИ файл сделать настройку экрана при запуске?
В lParam передаётся много полезной инфы:
Цитата:
lParam Bits Meaning
0-15 The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23 The scan code. The value depends on the OEM.
24 Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 The context code. The value is always 0 for a WM_KEYDOWN message.
30 The previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
31 The transition state. The value is always 0 for a WM_KEYDOWN message
Это все, конечно, интересно, но на вопрос, различает ли оно точно Enter основной и дополнительной клавиатуры, ты не ответил)
Ксати, интересует так же вопрос, как при активном окне отключить влияние системных клавиш (Alt, CapsLock, Num Lock, Scroll Lock, F10) на лампочки, режимы ввода и системные функции.
А так же, как самому загорать и потухать лампочки на клаве.
Скан-код - это индивидуальный номер каждой клавиши.
Можно сделать так:
И затем добавить вывод значения переменной uScan. Потом понажимать на клавиши и всё станет ясно.Код:case WM_SYSKEYDOWN:
case WM_KEYDOWN:
{
int uScan = HIWORD( lParam );
uScan &= 0x1FF;
Есть разница.
Для Alt и F10 достаточно не передавать управление из WM_SYSKEYDOWN в DefWindowProc.
Остальное нереально сложно. Нужно устанавливать глобальный хук клавиатуры, а это влечёт гору проблем. Кроме того, многие антивирусы распознают установку глобального хука клавиатуры, как вредоносную активность.
Нужно симулировать нажатие клавиш:
Код:void SetScrollLock( bool bState )
{
BYTE keyState[256];
GetKeyboardState((LPBYTE)&keyState);
if( (bState && !(keyState[VK_SCROLL] & 1)) ||
( !bState && (keyState[VK_SCROLL] & 1)) )
{
// Simulate a key press
keybd_event( VK_SCROLL,
0,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
// Simulate a key release
keybd_event( VK_SCROLL,
0,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}
это реализовано в последнем архиве или только у тебя пока ?
Да но не сам антивирус, а встроенная система "SONAR", антивирус ругается даже на
ещё не запущенные программы и на архивы, поэтому (но тут ещё один момент, позже)
не совсем корректно говорить про антивирус в целом.
Произошло с эмуляторм ДВК вот что. Предыдущая версия вообще не волновала антивирус и "СОНАР". Но антивирус перестал обновляться. Я забрал бесплатный (тот же), но новый релиз 2012 года, а там и "СОНАР" обновился (скажем так), это также совпало с обновлением ДВК эмулятора до вот текущей версии.
В новом антивире я все настройки (по возможности) продублировал от старой версии и распаковал (ура!) новый архив от Patrona, ни на скаченный архив,
на распакованные файлы никакой реакции от "сканера-вирусов" естественно не было, а вот система "СОНАР" тупо глушила любую попытку запуска файла pdp.exe.
После короткого совещания с автором эмулятора, я почитал внимательней настройки, персонально списка приложений для "сонар" нет, он есть только для "файервола", поэтому я подобрал такой режим для "сонар" который перестал мне
мешать эмулятором пользоваться.
Да я понимаю, может я не ясно описал? Если не успеваешь быстро отпустить то символов печатается не один, а сразу небольшая строка типа """"""""""""""""""""
символ + на виндовой - клавише <;:Ж> у меня был с обоими шифтами!!!
И ещё момент неявности - некоторые кнопки имеют как-бы одно "абсолютное"
значение - хотя в реальности (кроме системных) таких кнопок нет !!!
Тоесть в любой комбинации с любыми шифтами эмулятор не различая выводит на экран один символ, где глюк? ))) Это всё про 6a и 5f версии, последнюю же только забрал, надо пробовать.
---------- Post added at 05:14 ---------- Previous post was at 04:12 ----------
Воспроизвести залипание очень трудно !!! Похоже оно как-то связано (могу ошибаться или быть в корне не правым) с мерцанием странного прямоугольничка в правом верхнем углу окна. Если в определённый момент будут что-то нажато оно липнет - но только в определённый момент.
Не пользуюсь поэтому не могу сказать, бегу Амигу ))) УКНЦ и ДВК !!! Ну и АЙБИЭМ ))) Зачем мне другие спектрумы и амиги, там своих "слонов" хватает ))) с хоботАми )))
Титус мне кажется не правильным привязывать опрос клавиатуры к мерцанию экрана, так же как в UKNCBTL вся работа эмулятора нормализуется "ВКЛ ЗВУКА" - никогда не понимал этих "тонкостей". Все окна в Windows получают системные сообщения - и про кнопочки в том числе - почему эмулятор не может последнее хранить, а вот когда его значение передавать внутрь твоих алгоритмов это уже дело твоих внутренних алгоритмов )))
Я вообще не программист ))) Поэтому пытаюсь вникать на сколько могу в тему.
Поставил последний архив !!! Спасибо что пересадил переключалку (ура три раза) !!! Остальное.. погоняю посмотрю.
Любой символ может зависнуть или только определенные комбинации?
На сколько быстро набирается строка символов?
Не является ли эта скорость набора нормальным автоповтором под системой УКНЦ?
---------- Post added at 12:31 ---------- Previous post was at 12:30 ----------
Что за странный прямоугольник? Скриншот можно?
Если привязка автоповтора осуществляется к времени хост-машины, а не к времени эмулируемой машины, то в тех случаях, когда система хост-машины выполняет критические операции и забирает себе все кванты, полностью останавливая выполнение программы эмулятора на одну-две секунды - при следующем кванте эмулятора у него может создаться впечатление ( из-за глючности функции чтения матрицы состояний клавиатуры Windows ), что нажатая в конце предыдущего кванта клавиша - была нажата всё то время, которое система забрала себе. Поэтому эмулятор честно поделит прошедший интервал времени на скорость автоповтора и нарисует кучу повторяющихся символов.
Если же не матрицу клавиш считывать, а разбирать WM_KEYDOWN / WM_KEYUP - такая ситуация возникнуть не может.
Нет, автоповтор - это исключительно функция УКНЦ. У меня передается лишь момент отжатия и нажатия клавиши.
---------- Post added at 13:34 ---------- Previous post was at 13:21 ----------
А, если речь об этом, то тоже вряд ли. Т.к. при очень высоком приоритете эмулятора в системе (а он специально устанавливается таким, чтобы не было тормозов), практически не возможно добиться, чтобы он тормознул на время привышающее 100мс.
Если эти моменты определяются через время хост-машины - нормальная работа возможна только когда эмулятор получает свой квант регулярно ( в Windows это по умолчанию ~ 100 раз в секунду ). Чем нерегулярнее эмулятор получает кванты - тем больше проблем вызывает привязка событий к времени хост-машины.
Вот я, например, привязал прерывание 50 Гц к системному времени. В результате - часы RT-11 идут в "эмуляторе ДВК" строго синхронно с системными часами Windows. Но когда изредка происходят "системные затыки" и система забирает себе все кванты за, например, 100 мс - при получении эмулятором следующего кванта происходят сразу 5 прерываний по вектору 0100 подряд.
Если события эмуляции привязаны к времени хост-машины, то при длительных процессах в ядре Windows, когда эмулятор не получает кванты на протяжении сотен миллисекунд - такие события имеют тенденцию происходить затем "кучей".
Подъём приоритета эмулятора до уровня ниже приоритета ядра Windows здесь не поможет. "Затыки" в Windows происходят на самом высоком приоритете.
У hobotа в ноутбуке наверняка используется какой-то дополнительный сервис Windows ( типа сжатия файловой системы ) или какой-то сторонний драйвер, работающий на приоритете ядра и иногда отнимающий по 600-800 мс.
Странный мерцающий прямоугольничек ))) Был в эмуляторе всегда ))) Вот же он - рядом с системными кнопками окошка эмулятора.
Всегда пожалуйста )))
http://upyourpic.org/images/201204/n9w2exdl3y.png
Сегодня гонял версию из последнего архива ! Эмоции (пока) только
положительные, и пускай раскладка конечно не УКНЦшная, зато:
1 - залипаний не было ни одного ! (попробуй в отладке в режиме D,
понажимать левый "альт" + "F" ну и другие комбинации для пробы.
2 - двоеточие! Titus спасибо и за @ тоже )))
3 - ещё что то по мелочам порадовало уже не помню )))
Ты писал - про рус и лат буковки, гляди что получается
вот на скрине PIKNIK.SAV 50 блоков с дискеты тов.Vamos
Он сразу включает РУС режим при старте, а как известно РУС это
ЛАТ только с шифтом, вот и что бы почитать папирус надо нажимать не
R, а шифт+R - это же УКНЦ.
Кстати говоря кто читал пост в "ИГРАХ УКНЦ" про Ульяновский Сталкер,
я как-то не обращал внимания, что и в этом варианте игры, под рюкзаком
надпись "Ульяновск 1987Г.".
Вот интересно кто-нибудь знает реально авторство этой игры кому принадлежит?
И даже использование сообщений ( скорее всего ) тут не поможет.
В принципе, при привязке к времени хост-машины - правильная эмуляция автоповтора невозможна.
Вот, например, нажали мы клавишу, потом отпустили. Сообщение о нажатии встало в очередь на 10 мс раньше и пришло в один квант, а сообщение об отжатии встало в очередь на 10 мс позже и пришло в другой квант. А между этими квантами прошла секунда.
Спрашивается - какое время между нажатием и отжатием эмулятор сообщит эмулируемой машине ?
Vamos, у меня часть залипаний на буке изчезла после переустановки драйвера "точ-пада" - как бы странно это не звучало, но факт остаётся фактом, предлагаю просто проверить самому.
---------- Post added at 15:28 ---------- Previous post was at 15:27 ----------
Надо что бы последнее wm сообщалось эмулятору всегда! Разве нет?
---------- Post added at 15:29 ---------- Previous post was at 15:28 ----------
А так оно автоматом и произойдёт наверное )
---------- Post added at 15:31 ---------- Previous post was at 15:29 ----------
Если перед отправкой значения эм.машине проверить на = с последний wm как-то так например ) (я не программист!)
---------- Post added at 15:41 ---------- Previous post was at 15:31 ----------
да! сорри! не понял вопроса, вот )
Возможно, я не очень хорошо разбираюсь в системном программировании для Windows, но мне кажется, что сообщение об отжатии клавиши не содержит ни точного времени отжатия, ни информации о продолжительности нажатия. Проблемы из-за этого могут возникать только у тех программ, которые (например) пытаются симулировать автоповтор на основе промежутка времени между приёмом сообщений о нажатии и отжатии.
Как мы уже знаем, если установить в ноутбук "специальные драйверы hobotа" - промежуток времени между реальными нажатием и отжатием и промежуток времени между сообщением о нажатии и сообщением об отжатии могут отличаться между собой на сотни миллисекунд.
Да, если бы Windows добавляла к сообщению об отжатии - информацию об истинной продолжительности нажатия - тогда всё было бы просто.
Но увы - это не так.
не понимаю о чём речь )))
нашёл вот такой пост
"немного по теме клавишь вроде"
Как правило с НОУТБУКАМИ идут спец драйвера для клавиатуры и точпада,
но я ставил только для точпада - без него он криво работает, а клавиши
это http://upyourpic.org/images/201204/xalf3rbzh8.png
Чтобы "всё испортить" - драйвер Windows вовсе не обязан иметь отношение к клавиатуре.
Необходимо и достаточно, чтобы в результате работы этого драйвера ( или службы Windows ) - промежуток между выделяемыми эмулятору квантами хотя бы иногда превышал период симулируемого автоповтора. Тогда, в таких случаях даже самое мимолётное касание клавиши будет вызывать появление такого количества её дубликатов, какое равно отношению периода симулируемого автоповтора к продолжительности "украденного драйвером времени".
Еще раз повторюсь, что при моем построении эмулятора, такого эффекта быть не может, на сколько бы система не тормознула, хоть на секунду, хоть на минуту.
Кроме того, я не использую сообщения с кодами клавиш от Виндовс. Я сканирую через DirectInput состояние всех клавиш каждый кадр.
Алгоритм у меня таков.
1) Сканировать состояние всех PC-клавиш
2) Сравнить таблицу состояния клавиш с такой же от предыдущего кадра
3) Если какая-либо клавиша изменила состояние, то посылаем драйверу клавиатуры УКНЦ код отпущенной или нажатой соответствующей клавиши.
Все автоповторы делает уже драйвер УКНЦ. При любом торможении хост-машины, время идущее в УКНЦ наоборот замедляется, таким образом происходит эффект обратный описанному Патроном.
А что происходит, когда нажатие и отпускание клавиши в эмулируемом времени совпадают ?
В таких случаях эмулируемая машина вполне может терять отжатие, что и вызывает залипание.
...
Когда hobot упомянул про "странный прямоугольник" - сразу возникло подозрение, что виноват какой-то драйвер, отбирающий слишком много квантов.
Какой смысл утверждать, что это не может влиять - когда "эксперименты hobotа" прямо говорят об обратном:
Эти моменты не могут совпадать.
Т.к. сперва порту клавиатуры передастся код нажатой клавиши, потом отжатой. Даже если это будет прям-прям друг за другом.
---------- Post added at 23:40 ---------- Previous post was at 23:36 ----------
Странный прямоугольник - это слайдметер, измеряющий время, затрачиваемое эмулятором на эмуляцию УКНЦ (желтый цвет) и сколько время тратит Виндовс на отрисовку экрана в окне (оранжевый цвет).
Эмулятору уже лет 6, и за все это время я не помню, чтобы залипла какая-либо клавиша. На других машинах тоже пробовал запускать, глюков с клавиатурой не замечал. Значит есть какой-то особый класс машин, на которых проявляется какой-то эффект, который хорошо бы поймать и описать.
Если получится поймаем, опишем )))
Patron, это напомню было связано только с эмуляторами ДВК и UKNCBTL,
EmuStudio это не касалось и переустановка драйвера действительно решила
проблему с двумя упомянутыми эмуляторами, хотя и не объяснила, например, почему залипала комбинация именно определённых символов, хотя и попыток их
нажатия не было. С каждым из эмуляторов глюк проявлялся по разному,
если UKNCBTL - он просто убивал текущую сессию (можно было только перезапуском вылечить), то эмул.ДВК позволял продолжить работу просто приходилось каждый раз при активации окна удалять "левые" циферки из командной
строки RT11. Такие дела. Причём драйвер стоит сейчас и та же версия с теми же настройками, просто удалённый и переустановленный вот и всё.
вот можно подробней, что такое каждый кадр? Каждое мерцание экрана эмулятора
или дерганье оранжевой шкалы в странном прямоугольничке? Хочу вникнуть почему привязка к видеоизображению? (спрашивать у Alex_K про привязку к звуку я наверно не буду, вроде была там сверх причина для этого или просто проще и удобней оказалось написать именно так)
Ну что, уважаемые пользователи моего эмулятора, новая раскладка удобна? Хотя, чего я тут пишу, можно было в личку Хобота) Ведь он единственный, кто сделал скриншот, да и вообще пользуется эмулятором)
Да ладно. Следят - многие (наверняка), ну а hobot - просто активный.
Я о пользовании эмуляторами УКНЦ и ДВК больше могу судить по количеству посещений вот этой темы (из моей подписи)
---------- Post added at 22:24 ---------- Previous post was at 22:19 ----------
Вoт 1100 было, когда я ссылку на 6-ю бету делал, теперь просто представь, Titus,
какова реальная армия именно у EmuStudio, можно конечно сделать было опрос какой-нибудь, но возрастные люди как правило "ностальгирующие" дарами форумного движка пользуются очень несмело, кривовато и неправильно зачастую. Поэтому
лучше чем статистики посещений ничего наверное не придумать.
В этой теме 10000 просмотров, и 2 постоянных пользователя, и 10 мимолетных)
http://upyourpic.org/images/201204/v6dz7wfs18.png
Один в темноте ))) (С) by [hовот] => МОЯ ШУТКА
http://i.smiles2k.net/lol_smiles/139.gif
ИГРА - я помню, что в самом начале затевания всей этой бузни с архивом,
обещал всем дать пример новой такой игрушечкой (пускай может и простенькой)
для УКНЦ - пока просто один "уплывший в сеть" скриншот - не подделка - просто
разработка затягивается. Просьба ко всем набрать ещё терпения - до конца года
может даже )))
http://upyourpic.org/images/201204/391vs7y7q9.jpg