Тема: AHK: Передача движения мыши неактивному окну
Как сделать, чтобы движения мыши передавались неактивному окну? Без активации окна.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сделать, чтобы движения мыши передавались неактивному окну? Без активации окна.
deepNoise, Ну как я знаю, нужно активировать окно, а потом уже передавать движение мыши.
http://script-coding.com/AutoHotkey/MouseMove.html
Запустить в виртуалке и передавать активному окну.
PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16), Control, WinTitleДля ознакомления:
http://forum.script-coding.com/viewtopic.php?id=7115
PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16), ahk_class, ShockwaveFlash Похоже это работает, только если открыта какая нибудь часть неактивного окна. Только при наведении на эту часть движение мыши считывается.
А как сделать, чтобы движение считывалось для неактивного окна полностью закрытого другим окном?
Что за название у контрола - ahk_class?
Проверяйте ErrorLevel.
А что такое этот контрол вообще? Сообщение об ошибке не выводилось.
Я делал на манер этого скрипта:
w::
ControlSend,, w, ahk_class ShockwaveFlash
ReturnЧто такое ErrorLevel и где его можно посмотреть?
В справке.
Прочитал здесь: http://ahk-wiki.ru/postmessage
Контрол - получается, это элемент управления.
WindowsSpy на окне выдаёт это:
Adobe Flash Player 11
ahk_class ShockwaveFlash
ahk_exe MultKritik1.exe
Похоже класс я указал правильно. Но мышь всё равно не работает на закрытой области.
Попробовал DetectHiddenWindows, on, не помогло.
Ещё там написано, что можно определить контрол через идентификатор окна. А как это делается?
Нужно указать имя окна ahk_id %ControlHwnd%, но окно ведь так не определится. И где брать этот идентификатор? В WindowsSpy его вроде нет.
Написано, что нужно определять командой ControlGet Hwnd, но описание этой команды или примеров её использования по поиску в справке я не нашёл.
ErrorLevel я так понял, это переменная, которая выдаёт 1, если случилась ошибка в выполнении скрипта. Только как и куда это значение выводить не понятно.
Да и зачем это нужно, если при активации скрипта при ошибке в коде выдаёт сообщение.
Я в autohotkey новичок, многого не знаю, можно поподробней объяснить?
Вот описание ControlGet. Ну и про другое там переведено (но не вся справка).
Это же описание команды ControlGet. Его я видел. Я думал ControlGet Hwnd это другая команда.
В ControlGet тоже надо указать контрол. А как его указывать мне так и не объяснили.
Попробовал вот так:
ControlGet, HWND,, ShockwaveFlash
PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16), ahk_id %HWND%Пишет, что переменная HWND пустая. Что я делаю не так?
А так?
PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16),, ahk_class ShockwaveFlash
msgbox % errorlevelА так?
Попробовал. Всё так же работает, только на открытой области неактивного окна. Ошибок никаких не выдаёт.
Мне же нужно, чтобы движения мыши передавались неактивному окну, даже если его полностью закрывает активное окно.
В какое приложение отправляете?
PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16),, ahk_class ShockwaveFlash
Чтобы послать движение мыши, нужно, во-первых, задать начальные значения координат (считаются от клиентской части окна), во-вторых, динамически менять их в цикле. В-третьих, не факт, что сработает в любом случае, поскольку неизвестно, как окно обрабатывает это сообщение.
У меня в флешплеере в игре бильярд кий меняет месторасположение без отправления wm_mousemove в цикле, достаточно указать начальные и конечные координаты.
В какое приложение отправляете?
Проектор Adobe Flash.
Чтобы послать движение мыши, нужно, во-первых, задать начальные значения координат (считаются от клиентской части окна), во-вторых, динамически менять их в цикле. В-третьих, не факт, что сработает в любом случае, поскольку неизвестно, как окно обрабатывает это сообщение.
Т.е. никак? Или есть способ?
У меня в флешплеере в игре бильярд кий меняет месторасположение без отправления wm_mousemove в цикле, достаточно указать начальные и конечные координаты.
Это в активном или неактивном окне? Неактивное окно закрыто другим окном? Можно поподробней и с примером, пожалуйста?
f11::
PostMessage, WM_MOUSEMOVE := 0x200,, 100|(100<<16),, ahk_class ShockwaveFlash
PostMessage, WM_MOUSEMOVE := 0x200,, 500|(500<<16),, ahk_class ShockwaveFlashУ меня работает в любом положении окна.
http://www8.agame.com/mirror/flash/b/billards.swf
Malcev Как то странно у меня работает этот скрипт: при нажатии F11 курсор встаёт в определённую точку перекрытого неактивного окна. И это точка не зависит от текущего положения курсора на экране, а курсор во флеше встаёт всегда в одном месте. Кажется это почти то, что нужно.
Наверно нужно сделать, чтобы положение курсора считывалось не при нажатии клавиши, а каждый тик или миллисекунду. И чтобы положение курсора во флешке соответствовала положению курсора на экране.
Подскажите, как это будет выглядеть в скрипте.
Читайте справку о том как определить текущее положение мыши и о том, что такое цикл.
Вот скриншот, чтобы было понятней:

Во флеше стрелка привязана к курсору. В неактивном окне в открытой области стрелка двигается нормально, но при попытке зайти на перекрытую активным окном область, стрелка как бы упирается в это окно и не заходит за его границы. Как сделать, чтобы мышь могла двигаться в перекрытой области?
Без конкретной флешки сложно что-то сказать.
Вот: https://yadi.sk/d/X2GtnK8A3XwJvd
Я незнакомые флеш-файлы или экзешники не скачиваю и не запускаю.
И другим не рекомендую.
А флеш-файлы чем опасны?
Ох какие все привередливые) Сами попросили файл, а теперь думаете кто то вам трояна посылает.
Файл то простейший, можно и самому создать. Просто создайте документ в Adobe Flash со скриптом AS 3.0.
Создай клип с названием cursor в одном слое, а во второй вставьте это:
stage.addChild(cursor);
cursor.mouseEnabled = false;
cursor.addEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor);
function fl_CustomMouseCursor(event:Event)
{
cursor.x = stage.mouseX;
cursor.y = stage.mouseY;
}
Mouse.hide();И получится этот файл, если мне не верите)
Могу исходник выложить, если экзе вас пугает.
Вот исходник: https://yadi.sk/d/kSpWKj5t3XwRXV
А флеш-файлы чем опасны?
Тем что адобе флеш дырявый и поэтому его постоянно используют вирусописатели.
deepNoise, у меня код из 18 поста работает с вашей флешкой в любом положении окна.
А как именно он работает? У меня он срабатывает только при нажатии F11, и стрелка встаёт в определённую точку окна флешки .
Да, он именно так и работает.
И мышка переходит в определенную точку независимо от того, перекрыта ли эта точка другим окном.
Malcev, а у Вас в браузере флеш-проигрыватель стало быть отсутствует?
Значит мне нужно просто усовершенствовать этот скрипт? Научиться зацикливать и определять положение мыши? А потом ещё как то передать это положение неактивному окну?
Как же всё сложно для такой простой задачки) Всего то нужно было, чтоб мышь двигалась в неактивном окне.
Malcev, а у Вас в браузере флеш-проигрыватель стало быть отсутствует?
Присутствует.
deepNoise, алгоритм примерно такой: следите за курсором мыши и если он находится не над окном флешплеера передаете его координаты (их нужно будет пересчитывать) флешплееру.
Если вам не хочется в этом копаться, то можно заказать скрипт на платной основе. Например, у teadrinker.
Malcev, если адобе флеш дырявый, почему он у Вас присутствует в браузере? Я что-то не понимаю.
У меня он отключен в броузере.
А включаю я его только для сайтов которым доверяю.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться