Latest post of the previous page:
Приложена LuaMacro.dll, содержащая ProcessConsoleInputW. Вставьте в какой-либо макрофайл функцию export.ProcessConsoleInput() согласно документации LuaFAR и экспериментируйте.ProcessConsoleInput
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
ProcessConsoleInput
Спасибо!Shmuel wrote:Приложена LuaMacro.dll, содержащая ProcessConsoleInputW. Вставьте в какой-либо макрофайл функцию export.ProcessConsoleInput() согласно документации LuaFAR и экспериментируйте.
Выяснил что для модификаторов наоборот, нажатие передаётся, а отпускание съедается.
Что ещё интересно: клавиша передаётся в ProcessConsoleInput только в случае, если нажатие не привело к запуску макроса, т.е. после проверки всех условий.
А значит в плагине таки можно извратиться, и получить информацию о моменте нажатия.
Для этого плагину потребуется создать вспомогательный макрос с повышенным приоритетом, MCTL_ADDMACRO наверно подойдёт.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
ProcessConsoleInput
В структуре ProcessConsoleInputInfo есть параметр Flags.
Значение PCIF_FROMMAIN означает, что "Функция ProcessConsoleInputW вызвана из основного цикла сбора консольных событий."
Вопрос: как вообще можно использовать эту информацию?
P.S.
На практике, в большинстве случаев приходит 0, а в командной строке 1 (но только если на экране нет списка автодополнения).
Но как применить флаг мне непонятно.
Значение PCIF_FROMMAIN означает, что "Функция ProcessConsoleInputW вызвана из основного цикла сбора консольных событий."
Вопрос: как вообще можно использовать эту информацию?
P.S.
На практике, в большинстве случаев приходит 0, а в командной строке 1 (но только если на экране нет списка автодополнения).
Но как применить флаг мне непонятно.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
ProcessConsoleInput
И второй, связанный с этим момент: примерно раз в секунду приходит такое сообщение:
Приходит отовсюду, кроме командной строки. В покое, безотносительно каких-либо нажатий, хотя EventType = 1.
Не баг ли это?
Update: выяснилось, что это KEY_IDLE.
Code: Select all
Flags = 0
Rec = {
ControlKeyState = 0,
EventType = 1,
KeyDown = false,
RepeatCount = 0,
UnicodeChar = "", -- \000
VirtualKeyCode = 0,
VirtualScanCode = 0
}
Не баг ли это?
Update: выяснилось, что это KEY_IDLE.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
ProcessConsoleInput
Заметил что в этом случае при нажатии приходит "пустое"(?) событие с EventType = 0.
В документации такой тип не описан, что опять же наводит на мысли о баге.
Update: выяснилось, что это KEY_NONE.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
- zg
- zero-gravity
- Posts: 6015
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
ProcessConsoleInput
моё отношение к ProcessConsoleInput — строго отрицательное. потому что плюсов я не вижу не одного, а минуса целых два.
1. ProcessConsoleInput вводится, как расширение возможностей по обработке ввода. по факту это значит следующее: в keyboard.cpp у нас ад, что-то там начнёшь развивать — всё развалится, проще сделать хук, в нём — новые фишки, а keyboard.cpp не трогаем, авось пронесёт. да такой подход даёт некоторые бонусы в близкосрочной перспективе, но очевидно, что ничего хорошего в итоге не выйдет, когда-нибудь разбираться всё равно придётся (уже сейчас есть зависшие тикеты на мантисе), а поддержка ProcessConsoleInput количество костылей однозначно увеличит, что осложнит работы по разгребанию keyboard.cpp.
2. можно возразить, что ProcessConsoleInput — это не только макролиб, это возможность любому плагину перехватывать ввод не только в редакторе и диалогах. прекрасно, но текущий дизайн не предусматривает никаких попыток управления ситуацией, когда плагинов, экспортирующих ProcessConsoleInput больше одного. опыт ProcessEditorInput говорит, что это важно. здесь же перехват вообще глобальный и очевидно, что управление ещё более важно.
поэтому пока это всё лежало где-то в сторонке, мне было всё равно. когда вы достали это и начали тыкать мне в лицо, мне это стало не нравится. когда моё терпение иссякнет, я удалю поддержку ProcessConsoleInput.
надеюсь мой ответ на ваш вопрос был развёрнутым и аргументированным.
LuaFAR — библиотека для создания плагинов на языке Lua
Наверное, всё-таки сюда.
- Делаем такой простой скрипт:
- Выполняем
macro:load
. - Включаем обе панели (если были выключены).
Щёлкаем левой кнопкой мыши - получаем 1.
Щёлкаем правой кнопкой мыши - получаем 1. - Выключаем одну панель.
Щёлкаем левой кнопкой мыши в оставшейся панели - получаем 1.
Щёлкаем правой кнопкой мыши в оставшейся панели - получаем 1.
Проделываем то же самое на месте выключенной панели: результат идентичен. - Выключаем вторую панель панель.
Щёлкаем левой кнопкой мыши в оставшейся панели - получаем 1.
Щёлкаем правой кнопкой мыши в оставшейся панели - получаем 2. Как и должно быть с самого начала.
LuaFAR — библиотека для создания плагинов на языке Lua
Да, пардон. Забыл сразу проверить, прежде чем волну гнать. На голом профиле (из плагинов только LuaMacro, из скриптов только этот) всё работает правильно. Буду искать причину.
- John Doe
- Бюрократ
- Posts: 13801
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 72 times
- Been thanked: 425 times
- Contact:
LuaFAR — библиотека для создания плагинов на языке Lua
ProcessConsoleInput не получает сочетания, на которые назначены макросы
https://bugs.farmanager.com/view.php?id=2952
https://bugs.farmanager.com/view.php?id=2952