Как вы заметили в build 2027 появилось зачаточное состояние
mantis#1687.
Вкратце "для чего": что бы плагины могли получать необработанные события консоли и не лазили "на задний двор" ФАРа (в таблицы импорта - к чему это может привести - описано на мантисе).
Пол-дела сделано. Вторая итерация (уже не 2027, а чуть дальше
) выглядит так:
Code: Select all
typedef unsigned __int64 PROCESSCONSOLEINPUT_FLAGS;
static const PROCESSCONSOLEINPUT_FLAGS
PCIF_NONE =0,
PCIF_FROMMAIN =0x0000000000000001ULL;
// PCIF_PEEK
// PCIF_READ
struct ProcessConsoleInputInfo
{
size_t StructSize;
PROCESSCONSOLEINPUT_FLAGS Flags;
const INPUT_RECORD *Rec;
};
int WINAPI ProcessConsoleInputW(struct ProcessConsoleInputInfo *Info);
ПлагинМанагер будет бегать по всем плагинам, имеющим функцию, и вызывать. Цикл опроса прекращается, если плагин вернул 0 (
или 1? или... - нужно уточнять)
В первоначальном варианте планировалось, что плагин сможет "менять" данные (посредством передачи ФАРу RecOut), но пока решили отказаться, по причине непоняток, описанных ниже.
Т.к. "выставлена" INPUT_RECORD, то это подразумевает весь диапазон консольных событий.
Естественно это все еще будет уточняться...
Осталась самая "большучесть":
1. откуда вызывать ProcessConsoleInputW; есть пара идей - либо обернуть вокруг GetInputRecord (здесь тогда не будет peek), либо вогнать в console::PeekInput и console::ReadInput (здесь получается нагрузка)
2. что должна возвращать функция? Достаточно 0 и 1 или нужны какие-то дополнительные указания
3. из-за "непонятки" (1) пока не добавлены PCIF_PEEK и PCIF_READ
4. ...
Надо обсуждать
We are the Borg. You will be assimilated.
So Say We All!