Тема: 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
Чтобы отправить ответ, вы должны войти или зарегистрироваться