В 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); } }
Последний раз редактировалось Patron; 16.04.2012 в 20:56.
это реализовано в последнем архиве или только у тебя пока ?
Да но не сам антивирус, а встроенная система "SONAR", антивирус ругается даже на
ещё не запущенные программы и на архивы, поэтому (но тут ещё один момент, позже)
не совсем корректно говорить про антивирус в целом.
Произошло с эмуляторм ДВК вот что. Предыдущая версия вообще не волновала антивирус и "СОНАР". Но антивирус перестал обновляться. Я забрал бесплатный (тот же), но новый релиз 2012 года, а там и "СОНАР" обновился (скажем так), это также совпало с обновлением ДВК эмулятора до вот текущей версии.
В новом антивире я все настройки (по возможности) продублировал от старой версии и распаковал (ура!) новый архив от Patrona, ни на скаченный архив,
на распакованные файлы никакой реакции от "сканера-вирусов" естественно не было, а вот система "СОНАР" тупо глушила любую попытку запуска файла pdp.exe.
После короткого совещания с автором эмулятора, я почитал внимательней настройки, персонально списка приложений для "сонар" нет, он есть только для "файервола", поэтому я подобрал такой режим для "сонар" который перестал мне
мешать эмулятором пользоваться.
Да я понимаю, может я не ясно описал? Если не успеваешь быстро отпустить то символов печатается не один, а сразу небольшая строка типа """"""""""""""""""""
символ + на виндовой - клавише <;:Ж> у меня был с обоими шифтами!!!
И ещё момент неявности - некоторые кнопки имеют как-бы одно "абсолютное"
значение - хотя в реальности (кроме системных) таких кнопок нет !!!
Тоесть в любой комбинации с любыми шифтами эмулятор не различая выводит на экран один символ, где глюк? ))) Это всё про 6a и 5f версии, последнюю же только забрал, надо пробовать.
---------- Post added at 05:14 ---------- Previous post was at 04:12 ----------
Воспроизвести залипание очень трудно !!! Похоже оно как-то связано (могу ошибаться или быть в корне не правым) с мерцанием странного прямоугольничка в правом верхнем углу окна. Если в определённый момент будут что-то нажато оно липнет - но только в определённый момент.
Не пользуюсь поэтому не могу сказать, бегу Амигу ))) УКНЦ и ДВК !!! Ну и АЙБИЭМ ))) Зачем мне другие спектрумы и амиги, там своих "слонов" хватает ))) с хоботАми )))
Титус мне кажется не правильным привязывать опрос клавиатуры к мерцанию экрана, так же как в UKNCBTL вся работа эмулятора нормализуется "ВКЛ ЗВУКА" - никогда не понимал этих "тонкостей". Все окна в Windows получают системные сообщения - и про кнопочки в том числе - почему эмулятор не может последнее хранить, а вот когда его значение передавать внутрь твоих алгоритмов это уже дело твоих внутренних алгоритмов )))
Я вообще не программист ))) Поэтому пытаюсь вникать на сколько могу в тему.
Поставил последний архив !!! Спасибо что пересадил переключалку (ура три раза) !!! Остальное.. погоняю посмотрю.
Последний раз редактировалось hobot; 17.04.2012 в 04:15.
Любой символ может зависнуть или только определенные комбинации?
На сколько быстро набирается строка символов?
Не является ли эта скорость набора нормальным автоповтором под системой УКНЦ?
---------- Post added at 12:31 ---------- Previous post was at 12:30 ----------
Что за странный прямоугольник? Скриншот можно?
Если привязка автоповтора осуществляется к времени хост-машины, а не к времени эмулируемой машины, то в тех случаях, когда система хост-машины выполняет критические операции и забирает себе все кванты, полностью останавливая выполнение программы эмулятора на одну-две секунды - при следующем кванте эмулятора у него может создаться впечатление ( из-за глючности функции чтения матрицы состояний клавиатуры Windows ), что нажатая в конце предыдущего кванта клавиша - была нажата всё то время, которое система забрала себе. Поэтому эмулятор честно поделит прошедший интервал времени на скорость автоповтора и нарисует кучу повторяющихся символов.
Если же не матрицу клавиш считывать, а разбирать WM_KEYDOWN / WM_KEYUP - такая ситуация возникнуть не может.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)