1

Тема: AHK: ControlSend с разными языками

Здравствуйте, форумчане.
На одном проекте MTA включили анти-чит, который блокирует использование AHK (я и многие другие игроки используют его для удобства, а не для читерства или другого преимущества над другими игроками).

Хотел воспользоваться AHK Hider, но видимо, для 10 винды не подходит.

Путём тестов выяснил, что ввод сообщения через ControlSend работает, но возникла проблема с языком ввода текста.

В самом начале я как бы меняю раскладку на английскую (это необходимо для того, чтобы открылась консоль):

SendMessage, 0x50,, 0x4090409,, A
*открытие консоли*

Затем, я ввожу текст, но перед этим меняю раскладку на русскую:

SendMessage, 0x50,, 0x4190419,, A
ControlSend,, me привет, MTA: San Andreas

но из "me привет" остаётся только "привет". Если не переключать раскладку с пом. SendMessage, то остаётся только "me".

Пробовал цикл, который посимвольно читает строку и в зависимости от символа меняет раскладку:

Loop, parse, wText
   {
      if A_LoopField contains %eng%
         SendMessage, 0x50,, 0x4090409,, A
      else
         SendMessage, 0x50,, 0x4190419,, A
      ControlSend,, %A_LoopField%, MTA: San Andreas
	}

и вместо "me привет" выводит "mу привет".

Также заметил проблемы с регистром - он просто игнорирует заглавные буквы, запятые меняет на точки.

Пробовал в начале кода ставить
StringCaseSense, Locale или StringCaseSense, On - не помогает.

Помогите, как его надрессировать, чтобы он слушался регистр и другие знаки?

2

Re: AHK: ControlSend с разными языками

Насколько я понимаю, ControlSend посылает как коды клавиш, так и символы. Последнее и даёт возможность посылать одновременно буквы разных языков. Но ваше окно, видимо, символы игнорирует, а получает их из кодов клавиш самостоятельно. Отсюда и зависимость от языка ввода. Отсюда же и проблема с регистром. Код клавиши ничего не говорит о регистре символа, о нём говорит предшествующий ему код Shift, например. Так что, думаю, для отображения заглавной "А" нужно посылать {Shift down}A{Shift up}. Не проверял, т.к. не на чем, нет такого окна под рукой.