разное поведение в консоли и гуе

Помощь в написании скриптов
lvm
Posts: 3
Joined: 05 Mar 2019, 06:16

разное поведение в консоли и гуе

06 Mar 2019, 02:17

Прошу прощения за, наверное, детский вопросы, но можно про тонкости работы с русским? Такой скрипт:

a::
send z
return

срабатывает независимо от раскладки клавиатуры - и на 'a', и на 'ф', но в консольных окнах ("новая" консоль win 10) выводит 'z' в английской раскладке и 'я' в русской, а в гуевых - всегда 'z' независимо от раскладки. sendraw и sendinput - то же самое, sendplay - вообще не работает. Можно ли сделать, чтобы и в гуе работало так же, как в консоли - с автоматической трансляцией в текущую раскладку? Или, хотя бы, чтобы работало одинаково и в консоли, и в гуе? Но тогда, получается, мэппинг рус-лат придется поддерживать ручками в скрипте и ностальгировать о koi-8r? 1.1.30.01
lvm
Posts: 3
Joined: 05 Mar 2019, 06:16

Re: разное поведение в консоли и гуе

06 Mar 2019, 05:58

Так стало лучше - буквы в гуе начали транслироваться в соответствии с раскладкой клавиатуры так же, как и в консоли, но только буквы (z-я), для знаков препинания (.-ю) все осталось по-старому: в гуе send {.} выводит точку независимо от раскладки, а в консоли - точку в английской раскладке и ю в русской.
serzh82saratov
Posts: 70
Joined: 01 Jul 2017, 03:04

Re: разное поведение в консоли и гуе

06 Mar 2019, 06:13

Ну это наверное только кодами победить.

Code: Select all

send {vkBE}
serzh82saratov
Posts: 70
Joined: 01 Jul 2017, 03:04

Re: разное поведение в консоли и гуе

06 Mar 2019, 06:40

Если нужен символ исходя например из раскладки активного окна.

Code: Select all

sym = .
chr := GetCharOfVK(getkeyvk(sym))
SendInput {%chr%} 

GetCharOfVK(vk) {
	InputLocaleID := (DllCall("GetKeyboardLayout", "Int"
		, DllCall("GetWindowThreadProcessId", "Ptr", WinExist("A"), "Int", "0")))
		
	VarSetCapacity(Buffer, 2)
	DllCall("ToUnicodeEx"
	                  , UInt, vk, UInt, 0
	                  , UInt, &DummyKeyState, Str, Buffer
	                  , Int, 2, UInt, 0, UInt, InputLocaleID)
	Return Buffer
}
lvm
Posts: 3
Joined: 05 Mar 2019, 06:16

Re: разное поведение в консоли и гуе

06 Mar 2019, 09:19

В таком виде оно игнорирует регистр: для '>' и '.' результат одинаков, но если выставлять в третьем аргументе ToUnicodeEx битики для шифтов, кажется, получается то, что надо. Спасибо.
serzh82saratov
Posts: 70
Joined: 01 Jul 2017, 03:04

Re: разное поведение в консоли и гуе

06 Mar 2019, 09:50

KeyState я специально удалил, ведь разговор про команду send.

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 2 guests