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

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: разное поведение в консоли и гуе

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

Post by serzh82saratov » 06 Mar 2019, 09:50

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

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

Post by lvm » 06 Mar 2019, 09:19

В таком виде оно игнорирует регистр: для '>' и '.' результат одинаков, но если выставлять в третьем аргументе ToUnicodeEx битики для шифтов, кажется, получается то, что надо. Спасибо.

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

Post by serzh82saratov » 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
}

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

Post by serzh82saratov » 06 Mar 2019, 06:13

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

Code: Select all

send {vkBE}

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

Post by lvm » 06 Mar 2019, 05:58

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

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

Post by serzh82saratov » 06 Mar 2019, 04:13

Так нет?

Code: Select all

send {z}

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

Post by lvm » 06 Mar 2019, 02:17

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

a::
send z
return

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

Top