|
171 / 5 / 2
Регистрация: 27.11.2024
Сообщений: 45
|
||||||
MASM32 Неправильно считываются символы из буфера с помощью ReadConsoleInput03.05.2025, 16:30. Показов 1491. Ответов 3
да, есть функции _khbit и _getch или GetAsyncKeyState, но хочется понять, почему представленный способ не работает
0
|
||||||
| 03.05.2025, 16:30 | |
|
Ответы с готовыми решениями:
3
Считывание клавиш (L/R-Alt, L/R-Control, Shift, CapsLock, NumLock, ScrollLock) функцией ReadConsoleInput Неправильно считываются большие числа Записать символ в буфер клавиатуры, проверить буфер на наличие в нём символов, и вывести данный символ |
|
Asm/C++/Delphi/Py/PHP/VBA
|
|||||||||||
| 03.05.2025, 17:04 | |||||||||||
Сообщение было отмечено Makiavelly Uber как решение
Решение
Структура KEY_EVENT_RECORD не выровнена. У неё 4-байтовое выравнивание.
Т.о. после EventType dw ? должно быть AlignmentPadding dw ?. Ну и в коде [esi+4].Добавлено через 2 минуты Зачем вообще так всё усложнять? Можно же написать проще:
3
|
|||||||||||
|
171 / 5 / 2
Регистрация: 27.11.2024
Сообщений: 45
|
|||||
| 03.05.2025, 17:47 [ТС] | |||||
|
Добавлено через 1 минуту Добавлено через 38 секунд Добавлено через 25 минут только я не понял. как выравнивание повлияло. мне известно, что от этого зависит обращение процессора к памяти в выравненном состоянии вместо двух раз процессор сможет обратиться только один раз, но как это влияет на валидность операций я не понял. буду думать и искать информацию. если не сложно, то пожалуйста объясните, почему так происходит. спасибо за решение! долго мучался, не мог понять, в чём проблема
0
|
|||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
| 04.05.2025, 21:09 | ||||||
|
На валидность операций это влияет так, что у вас KeyEvent начинается со смещения 4, а не со смещения 2.
Структуры WinAPI выравниваются по правилам Си. Каждый элемент выравнивается по адресу, кратному его размеру. Если элемент — тоже структура, то выравнивание всей структуры идёт по наибольшему размеру элемента (читаем здесь). Т.е. INPUT_RECORD содержит 2 элемента: EventType и Event. EventType имеет размер WORD, а Event — это union, который содержит в том числе и структуру KEY_EVENT_RECORD. Соответственно, Event будет выравнен по адресу, кратному максимальному выравниванию всех структур (KEY_EVENT_RECORD, MOUSE_EVENT_RECORD и пр). Выравнивание этих структур зависит от максимального размера элементов внутри них. Везде максимальный — это либо BOOL (4 байта, не 1, т.к. это фактически int), либо DWORD (тоже 4 байта). Соответственно, Event выравнивается тоже по 4 байтам. Итак, предположим, что inputRecord имеет адрес 402000, как и EventType внутри него. Далее идёт адрес адрес 402002, но Event (KeyEvent) должен быть выравнен по 4 байтам, соответственно, он начнётся с адреса 402004, а 2 байта — просто padding. В Си этот padding создастся автоматически, а в ассемблере его нужно делать ручную. Добавлено через 3 минуты В качестве примера:
2
|
||||||
| 04.05.2025, 21:09 | |
|
Помогаю со студенческими работами здесь
4
Резервировать буфер и занести в этот буфер числа Как достать из буфера клавиатуры последние 20 символов? Поместить символ в буфер клавиатуры BIOS int 16h: записать символ в буфер клавиатуры, проверить его наличие в буфере, вывести его Составить программу для ввода строки символов с клавиатуры в буфер и вывод этой строки на экран Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|