#java
#java
Вопрос:
Я хочу написать программу, которая могла бы раскладывать пасьянсы в Windows. Пользователь запускал программу, открывал пасьянс и наблюдал, как перемещаются карты. Легко написать ИИ для программы, которая будет играть в пасьянс (у меня, очевидно, нет исходного кода для Windows solitaire). Один из способов, который я могу придумать, чтобы сделать это, — это если бы я взял изображение пасьянса и проанализировал его, чтобы определить текущее состояние карт, тогда я мог бы передать текущее состояние карт в свою программу, которая могла бы определить следующий ход. Но как бы я выполнил команду щелчка.
В более общем плане, я хочу написать программу, которая может взаимодействовать с другой программой, как пользователь. У меня есть опыт работы с C, C , Java, Ruby. Но я не знаю, как даже начать с этого, или можно ли это вообще сделать?
Комментарии:
1. Делать это на Java было бы утомительно.
2. «Легко написать ИИ для программы, которая будет играть в пасьянс» , не так ли? Пожалуйста, поделитесь с нами фрагментом. «Я обнаружил поистине замечательное доказательство, которое этот комментарий слишком мал, чтобы содержать».
Ответ №1:
Я не уверен насчет всех других сообщений здесь, но в Java есть класс Robot, который позволяет вам (легко) отправлять события клавиатуры и мыши в базовую ОС (в данном случае Windows), что позволит вам делать именно то, о чем вы говорите. Это небольшой класс, который я использовал множество раз для «автоматизации» задач в Windows.
(Я знаю, что это старая тема, но на случай, если кто-нибудь еще в мире наткнется на нее, как я, и захочет сделать то, что вы описали.)
Ответ №2:
Если вы хотите автоматизировать задачи Windows, используйте язык, специально написанный для этого. На ум приходят WinBatch, AutoIt и AutoHotkey.
Ответ №3:
Java — не тот язык, чтобы делать это. Чтобы упростить подобную функциональность, вам нужно в значительной степени полагаться на Windows API, особенно на те, которые позволяют вводить входные данные. В качестве отправной точки я могу предложить вам ознакомиться с тем, как приложение Windows фактически обрабатывает ввод. Это хорошая статья на эту тему.
Ответ №4:
В Windows есть метод SendInput, который можно использовать для программного управления мышью и клавиатурой. Если вы знаете, каким приложением хотите управлять, этого может быть достаточно. Однако вы, вероятно, также захотите изучить, что находится на экране. Для этого вам понадобится GetPixel.
Ответ №5:
Мне лично не очень нравятся технологии скребка экрана, поскольку на них часто влияют изменения в базовом приложении или даже изменения разрешения экрана.
Однако, похоже, это подход, который вы могли бы принять здесь.
Я согласен, что java здесь не лучший выбор.
Найдите «screen scraper API», и вы должны найти что-то, с чего можно начать.
Обновить:
Первое, что кажется многообещающим, это http://community.screen-scraper.com/API
которая, как представляется, интуитивно основана на Java.
Комментарии:
1. Предоставленная вами ссылка предназначена для очистки wb-сайтов — с экрана FAQ-scraper предназначен только для очистки данных с веб-сайтов. !
2. О, ну, как я и думал, java, вероятно, не лучший выбор технологии для этого требования. Но я уверен, что есть другие API очистки экрана, доступные для внешней автоматизации приложений Windows. Я видел нечто подобное, встроенное в набор для тестирования программного обеспечения.
Ответ №6:
В Windows есть так называемый API «Автоматизация пользовательского интерфейса», который действительно полезен для реализации того, что вы просите — некоторые ссылки с подробностями / исходными данными / примерами:
ЗАМЕЧАНИЕ:
Сделать это из Java может быть немного сложно, поскольку AFAIK для этого вам нужно будет использовать JNI.