Как сконвертировать FarKey в его текстовое представление?

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Как сконвертировать FarKey в его текстовое представление?

Post by NightRoman »

Фар 3.

Я знаю, что есть FarInputRecordToName, но она работает с INPUT_RECORD. Соответсвенно сначала я привожу мой VirtualKeyCode и ControlKeyState к INPUT_RECORD. Примерно так:

Code: Select all

	INPUT_RECORD ir;
	memset(&ir, 0, sizeof(ir));
	
	ir.EventType = KEY_EVENT;
	ir.Event.KeyEvent.wVirtualKeyCode = (WORD)key.VirtualKeyCode;
	ir.Event.KeyEvent.dwControlKeyState = (DWORD)key.ControlKeyState;
	
	const size_t size = 100;
	wchar_t name[size] = {0};
	if (!Info.FSF->FarInputRecordToName(&ir, name, size))
		return nullptr;

	return gcnew String(name);
Но в итоге этот код, скажем для FarKey CtrlF5 рожицу возвращает. В INPUT_RECORD там еще какие-то скан коды, число нажатий, еще что-то. Что именно должно быть заполнено?

Но оригинальный вопрос все же "Как сконвертировать FarKey в его текстовое представление?" Если есть путь проще, то какой?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Как сконвертировать FarKey в его текстовое представление

Post by Maximus5 »

во враппере стоит такая проверка на вшивость
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Как сконвертировать FarKey в его текстовое представление

Post by NightRoman »

Спасибо, буду разбираться (пока не очень проянилось).

А попроще в Фар АПИ ничего не планируется? Ибо если планируется, то я лучше подожду. FarKey такой ключевой тип данных теперь, и простой метод конвертации в текст хотелось бы иметь.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Как сконвертировать FarKey в его текстовое представление

Post by Maximus5 »

В FarKey может влезть далеко не все, что можно запихнуть в INPUT_RECORD.
Для конвертации клавиш - необходимо dwControlKeyState/wVirtualKeyCode/UnicodeChar
остальные поля вроде не обязательные
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Как сконвертировать FarKey в его текстовое представление

Post by NightRoman »

А мне и не надо больше, чем FarKey, вопрос про FarKey.

Вот этот код уже сработал для CtrlF5:

Code: Select all

	INPUT_RECORD ir;
	memset(&ir, 0, sizeof(ir));
	
	ir.EventType = KEY_EVENT;
	ir.Event.KeyEvent.bKeyDown = 1;
	ir.Event.KeyEvent.wRepeatCount = 1;
	ir.Event.KeyEvent.wVirtualKeyCode = (WORD)key.VirtualKeyCode;
	ir.Event.KeyEvent.dwControlKeyState = (DWORD)key.ControlKeyState;
	
	const size_t size = 100;
	wchar_t name[size] = {0};
	if (!Info.FSF->FarInputRecordToName(&ir, name, size))
		return nullptr;

	return gcnew String(name);
То есть не хватало bKeyDown и wRepeatCount. А UnicodeChar я пока не заполнял, но CtrlF5 и не требует, наверное. Но буду еще дальше экспериментировать.

P.S. ИМХО, метод-таки нужен простой в Фар АПИ.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Как сконвертировать FarKey в его текстовое представление

Post by NightRoman »

P.S. ИМХО, метод-таки нужен простой в Фар АПИ.
А может, и не особо нужен, вообще-то. Надо еще подумать.
Post Reply

Return to “Разработка плагинов”