Но не позволяет отличить Enter основной от того, что на дополнительной клавиатуре?
Вид для печати
В 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 - такая ситуация возникнуть не может.