Виктор Л.
Переможець- Проєкти 23
- Оцінка -
- Рейтинг 1 275
Бюджет: 350 UAH Термін: 2 дні
Вітаю вас Михайло.
Для спортивного інтересу хотілося б спробувати реалізувати проект. Якщо ви згодні, звертайтеся.
Ставки поки відсутні
-
Сергей Назаренко 17 жовтня 2019"Должно работать в программе при условии что она будет в свернутом режиме."
Имеется в виду, что программа, которая генерирует клики мышкой должна быть свернута? Или что BlueStacks или программа в нем должна быть свернута, но клики мышки должны до нее долетать? -
Alex Sol 17 жовтня 2019окно BlueStacks будет показано на рабочем столе. свернуть окно и отсылать нужные координаты - это не получится
-
Игорь Ляльченко 17 жовтня 2019Вы бы чуть добавили категорий. Конкретно тыкать мышью по эмулятору другой ОС из хвостовой я не пробовал, но мне что то подсказывает что даже общестстемный тык может не пройти. Я б поспрашивал там где пишут под андроид конкретно. Это все ж их поле.
-
Михаил Царев
17 жовтня 2019
Не думаю что в этом есть проблема, я проверял через spy, дочернее окно игры сообщений не ловит, только сам эмулятор, думаю это решаемо, я бы и сам попробовал, но совершить клик через сообщения у меня никогда и нигде не получалось, видать чего-то не понимаю в тонкостях и последовательности отправки сообщений((
-
Сергей Назаренко 18 жовтня 2019А тыкать нужно именно в игру? Или в БлуСтекс? Потому как, тыкнуть в другое окно винды - это одно. А тыкать в окно внутри эмулятора - это немножко другое.
-
Сергей Назаренко 18 жовтня 2019А не проще ли написать приложение под Андроид, которое будет запускаться на том же БлуСтексе и тыкать "мышкой" (точнее пальцем) в окно игры?
-
Михаил Царев
18 жовтня 2019
возможно проще, но я умею писать только на c++, а платить гору денег за такую программу ради игры желания особого нет.
-
Олександр Вишняк 18 жовтня 2019Ну тогда вы ничего не получите. Вам нужен бот-автокликер, что равносильно читу. Читы стоят не дешево.
-
Олександр Вишняк 18 жовтня 2019Не, если вам надо просто прокликивать одну и ту же кнопку по какому-то простецкому алгоритму, 350 грн - это разумная цена. Если вам нужен пример автокликера и вам впадлу копаться в вопросе, хотя вы "знаете с++" - что ж, можно и проконсультировать. Тогда так и пишите - нужна консультация с примером.
-
Михаил Царев
18 жовтня 2019
мне не нужна консультация, я пытался выполнить клик повторяя сообщения из SPY, но увы клик не работает, нигде не получилось кликнуть, не только в BlueStacks, наверно чего-то не понимаю в смысле последовательности оконных сообщений. Вот и сделал заказ на функцию.
-
Олександр Вишняк 18 жовтня 2019Вытаскивать хендлы и эмилировать проклик элементов - несложно. Только вот еще надо знать куда кликать.
-
Сергей Назаренко 18 жовтня 2019Проблема не в том, сколько это стоит, проблема в том, что Заказчик хочет получить приложение, которое отправляет сообщение с кликом мышки не просто в другое окно, а внутрь виртуальной машины (которая использует механизмы виртуализации и напрямую с железом работает), да еще и так, чтобы эта виртуальная машина поняла, что нужно это сообщение переадресовать конкретному запущенному в ней приложению. Я не думаю, что разработчики БлуСтекса вообще предусматривали API для подобных штук. А без него - вряд ли что то вообще получится.
Т.е. стоимость данной задачи соответствует стоимости разработки своего БлуСтекса, только с соответствующим АПИ. Либо стоимости разработки дополнения к БлуСтексу (если такие вообще возможны).
Хотя, я могу и ошибаться. -
Михаил Царев
18 жовтня 2019
где написано что мне нужно какое-то приложение? мне нужна 1 функция и только, если вы не понимаете принцип работы окон виндовса как и не можете читать ТЗ то зачем писать ерунду, сообщения от виндовса проходят через главное окно программы, а она уже сама отправляет их дальше дочерним окнам если что.
-
Сергей Назаренко 18 жовтня 2019"сообщения от виндовса проходят через главное окно программы, а она уже сама отправляет их дальше дочерним окнам"
Ну да. Все, как Вы описали. Только с условием, что дочерние окна - это окна Виндовса, а не внутренняя кухня эмулятора. В окне БлуСтекса может быть просто "клиентская область" в которой отрисовывается все происходящее. И с точки зрения внешней Винды у него вообще может не быть дочерних окон.Кинуть клик в координаты экрана БлуСтекса - не проблема. Но кинуть клик так, чтобы БлюСтекс понял, что этот клик нужно направить в какое-то запущенное под ним приложение (не факт, что находящееся на фореграунде) - это скорее всего утопия.
Хотя - да! Я могу и ошибаться.
Удачи Вам в решении этой задачи.
-
Виктор Л. 18 жовтня 2019Только что попробовал программно отсылать клик в свернутый Paint. Как и ожидал, точка рисуется относительно ClientRect. Возможно стиля окна играют роль, хотя обработка сигналов от этого вроде не зависит.
C BlueStacks так же должно работать, главное правильный хендл найти/иметь.
-
Anton Kravtsov 18 жовтня 2019у вас же ранее был выполнен аналогичный проект для Dota2... то решение не заработало для BlueStacks, что ли?
-
Anton Kravtsov 18 жовтня 2019bool BlueStacksWindowClick( HWND hWnd, EButton btn, LONG x, LONG y );
x и у - это что за координаты должны быть?
-
Сергей Назаренко 18 жовтня 2019Если у Вас получится прокинуть клик в окно Raid shadow legends, запущенной в БлуСтексе, то что конкретно за координаты, думаю разницы нет - их можно уже потом пересчитывать как угодно.
Проблема, насколько я понял, в том, чтобы вообще достучаться "мышкой" до указанной игры. -
Anton Kravtsov 18 жовтня 2019Если вариант с SendMessage/PostMessage не работает в ваших условиях, попробуйте SendInput API (пример). Окно BlueStacks должно быть активным (в фокусе и на переднем плане), чтоб это заработало.
-
Виктор Л. 21 жовтня 2019Все на самом деле банально... главное раньше времени не паниковать))
Хотелось бы пополнить свои скромные знания/набраться вдохновения:
BlueStacks приложение на Windows. Допустим оно использует напрямую железо. Откуда железо знает, где находится курсор мыши в координатах рабочего стола, когда сам BlueStacks в оконном режиме? Как только мы "заходим" мышкой в окно приложения, Windows теряет контроль над происходящим, а приложение наооборот, полностью его заполучает? Черная дыра в Windows? С точки зрения архитектуры Windows было бы очень интересно посмотреть/либо разработать такое приложение.
На уровне драйверов можно много чего сделать (особенно на уровне ядра), но как только речь заходит о взаимодействии с пользователем, тут все обращаются к винде. Зачем писать для Windows и при этом всеми способами пытаться избегать ее API? Это как тренировать баскетбольную команду и выпустить играть ее на футбольное поле...
-
Сергей Назаренко 21 жовтня 2019Все классно. Но у Вас клики отправляются в БлуСтекс, а не в приложение в нем.
Попробуйте в БлуСтексе переключиться в ГуглПлей (например), и запустите свое приложение. Оно будет продолжать рисовать точки? Или начнет кликакть в ГуглПлее?
-
Виктор Л. 21 жовтня 2019Естественно она будет тыкать в ГуглПлее. В принципе как и требовалось от заказчика. Иначе я просто напросто не понял ТЗ.
Для вами представленной ситуации не буду утверждать, что все также банально решимо, возможно и вовсе нет. Но если вдруг у кого-то появится такая необходимость, я посоветую открыть два Блустекса параллельно)) Про истинную пользу такого приложения не хочу рассуждать, мне просто интересно было )
-
Alex Sol 22 жовтня 2019Неплохое решения использовать ADB
https://androidp1.ru/ispolzovanie-komandy-adb-shell-input-tap-i-shell-input-swipe/
-
Сергей Назаренко 22 жовтня 2019Решение не плохое, но оно мало чем отличается от найденного Виктором Либрехтом. Оно позволяет тыкать в любую область Андроида, но не позволяет тыкать в заданное неактивное окно внутри него.
-
Anton Kravtsov 22 жовтня 2019... не позволяет тыкать в заданное неактивное окно внутри него
По-моему, вы излишне усложнили задачу :)
Заказчику вроде бы это и не требовалось.
Пожелание вида
Должно работать в программе при условии что она будет в свернутом режиме
скорее всего, относилось к окну BlueStacks.
В глубинах Android'а я не разбираюсь, но, по-моему, там вообще нереально кликать в "неактивное окно".
-
Сергей Назаренко 22 жовтня 2019Если я некорректно интерпретировал текст задачи, то Заказчик мог бы об этом сообщить. Но он молчит. :(
-
Alex Sol 22 жовтня 2019неактивное окно емулятора или окно в Андроиде?
в неактивная область(окно, кнопки) как бы и не может принимать клик, на то она и не активная
Adb решения позволяет работать с андроидом когда окном емулятора неактивное
-
Виктор Л. 22 жовтня 2019Сергей, я ошибаюсь или у вас на самом деле повышенный интерес написать именно такую функцию, которая в окно в бэкграунде кликала бы? ;)
Хотя Антон прав, такой постановки задачи не было, но и мне теперь интересно, возможно ли это. Я уверен в своём решении, можно просто выбирать окна и переключать их в свернутом БлуСтексе, тут все просто (конечно надо заранее знать, сколько программ будут открыты, как смещаются табы во время активации другого окна и т.д.) . Вопрос следующий: что делает программа, когда переходит на задний план? Или вернее правильно будет спросить, что андроид делает с обычной аппликацией (не сервисом), когда она в бэкграунде? Не зная андроида, могу предположить, что ни одна (нормальная) игра не продолжает выполнять все те действия, что и в форграунде. Иначе после трёх-четырёх запущеных игрушек смартфон можно вместо грелки использовать. Да и, будь я разработчиком ОС, не позволял бы использовать к примеру ресурсы видеокарты, точно зная, что они не нужны приложению. Эмулятор вроде БлуСтекса вполне может вести себя по-другому, не различая между активным/неактивным приложением, но это под большим сомнением.
Поэтому, мне кажется это не только не возможно, но и бессмысленно тыкать в область, которая скорее всего не выполняет цикл обработки пользовательских команд.
-
Сергей Назаренко 22 жовтня 2019Я предполагаю, что тыканье мышкой в неактивную программу внутри эмулятора (любого, а не только БлуСтекса) - задача нерешаемая в принципе (если не говорить о написании своего эмулятора).
Но формулировка данной задачи мне показалось, указывает именно на такую необходимость.
"Написать функцию на c++/winapi для эмуляции клика мышкой в программе BlueStacks, клик естественно должен заставлять игру/приложение - выполнять действие.
...
Клик должен работать только над программой. Мои манипуляции мышью вне программы не должны ей мешать.
Должно работать в программе при условии что она будет в свернутом режиме.
...
"
Я почему-то прочитал "в программе BlueStacks" так, как будто программа - это запущенная внутри БлуСтекс программа, а не БлуСтекс - это программа.
Жаль, что Заказчик не развеял моего заблуждения. А то я, возможно, тоже поборолся бы за результат :)
-
Сергей Назаренко 22 жовтня 2019А насчет "Поэтому, мне кажется это не только не возможно, но и бессмысленно тыкать в область, которая скорее всего не выполняет цикл обработки пользовательских команд.", то тут, как Вы правильно заметили, все зависит от реализации. Ведь Windows позволяет тыкать мышкой (и слать другие сообщения) в неактивне окна? Что мешает это делать другим операционкам?
