1 (изменено: ypppu, 2015-02-19 16:18:20)

Тема: AHK: ControlSend и ASCII-коды

Столкнулся с проблемой отправки спец. символов через команду ControlSend. Например, вместо двоеточия печатается цифра 6. Поискав информацию выяснил, что проблема из-за того, что на PC русская и английская раскладки. Почитав http://www.script-coding.com/AutoHotkey/AhkRussian.html сделал вывод, что для ControlSend можно применить только некие "независимые клавиши". Я так понял что речь идет об показанном выше примере с ASCII-кодами. Написал даже функцию для конвертации:

Text2Asc(String){
    loop
    {
        MyChar := substr(String, A_Index, 1)
        
        if(!MyChar) {
            break
        }
        
        Transform, CharASCII, Asc, %MyChar%
        
        ASCII .= "{ASC " CharASCII "}"
    }
    
    Return ASCII
}

, но скрипт вообще ничего не печатает, когда я пытаюсь отправлять подобные коды. Использование Send исключено, тк. требуется выполнение всех действий в скрытом режиме, чтоб можно было использовать PC во время работы скрипта.

Нужно прописать адрес сайта в адресной строке Firefox.

ControlSendRaw,,http://google.com, Mozilla Firefox ; напечатает http6//google,com

2

Re: AHK: ControlSend и ASCII-коды

Действительно, иногда получается

http;//google.com http:?/google.com http:??Google.com.

"ControlSend / ControlSendRaw" перевод YMP пишет:

Команда SetKeyDelay задаёт скорость посылки клавиш. Если окно ненадёжно получает посылаемые нажатия клавиш, попробуйте увеличить длительность нажатия через второй параметр SetKeyDelay

Так работает надёжно:

SetTitleMatchMode, 2
SetKeyDelay , 5, 5
F3:: ControlSendRaw, ,http://google.com, Mozilla Firefox

3

Re: AHK: ControlSend и ASCII-коды

ypppu, спасибо, работает. Выходит проблема не в раскладке в данном случае, а в том, что shift для получения спец. символа не нажимался просто.

Эх, все равно иногда проскакивают ошибки при вводе. Может есть более оптимальные параметры?

4

Re: AHK: ControlSend и ASCII-коды

vkvolk, я поправил заголовок темы. В следующий раз пишите префикс языка внимательнее.

5 (изменено: vkvolk, 2015-02-19 23:59:00)

Re: AHK: ControlSend и ASCII-коды

Сделал задержку гораздо больше - полностью перестали проскакивать не те символы. Но что-то не получается никак выполнить переход по напечатанному адресу. Если окно активно, то любой способ работает, но требуется работа в скрытом окне браузера.  Что интересно какое-то время все работало и в скрытом режиме, а щас что-то перестало.

Пробовал след. варианты:

ControlClick, X1314 Y57, Mozilla Firefox
SendMsg("1314", "57", "Mozilla Firefox")

SendMsg(x, y, win) {
      lParam := x & 0xFFFF | (y & 0xFFFF) << 16
      SendMessage, 0x201, , %lParam%,, %win% ;WM_LBUTTONDOWN
      SendMessage, 0x202, , %lParam%,, %win% ;WM_LBUTTONUP
}

, и через PostMessage. Но всегда просто наводится на стрелочку перехода по адресу, то-есть она становится зеленой, но нажатие не происходит.

Выполнение

ControlSend,,{Enter}, Mozilla Firefox

так же не дало результатов в скрытом окне.


Само собой в начале прописано:

DetectHiddenWindows, On

6 (изменено: stealzy, 2015-02-20 11:04:33)

Re: AHK: ControlSend и ASCII-коды

Каким образом скрыли окно браузера?
Hide, Transparent, Transcolor, унесли окно за пределы экрана или просто свернули?
Окно наверняка может игнорировать нажатие, если знает, что скрыто.
Попробуйте эти варианты.

7 (изменено: vkvolk, 2015-02-20 13:01:23)

Re: AHK: ControlSend и ASCII-коды

stealzy пишет:

Каким образом скрыли окно браузера?
Hide, Transparent, Transcolor, унесли окно за пределы экрана или просто свернули?
Окно наверняка может игнорировать нажатие, если знает, что скрыто.
Попробуйте эти варианты.

WinHide, Mozilla Firefox

и

WinMinimize, Mozilla Firefox

пробовал, нигде не работает. Нужна хотя бы минимизация.

8

Re: AHK: ControlSend и ASCII-коды

Чем не нравиться вынос за пределы экрана? Или Transcolor?
Окно будет думать, что оно не скрыто.
Может вашу задачу можно решить, не используя браузер?

9 (изменено: vkvolk, 2015-02-21 21:22:01)

Re: AHK: ControlSend и ASCII-коды

stealzy, меня устроит любой вариант, если он не будет мешать работать за PC во время выполнения скрипта. Вынос за пределы экрана возможно неплохой вариант - щас поизучаю.

Может быть возможно решить без использования браузера, но я не осилил. Требуется автоматизировать нажатие на определенную кнопку в flash-игре. Запросы идут по TCP протоколу в закодированном виде, то-есть непонятно как его эмулировать, код флешки обфусцирован.