Получение ввода в процесс - PullRequest
0 голосов
/ 07 февраля 2011

Во время разговора с другом через Yahoo Messenger я сказал ему, что было бы очень здорово сделать бота, который отвечал бы общими сообщениями, когда кто-то начинает разговор. Подумав о том, что я ему сказал, я понял, что было бы довольно интересно сделать что-то подобное. Проблема в том, что я не знаю много о win32.

Итак, мой вопрос заключается в следующем: как «связать» процесс как с другим, так и со средой Windows? Цель состоит в том, чтобы приложение, работающее в фоновом режиме, выполняло своего рода запрос, чтобы увидеть, какие окна открыты, и когда появляется новое окно диалога Yahoo Messenger, оно должно отправить список событий нажатия клавиш этому окну.

Я мог бы использовать либо C #, либо VC ++ для программной части, и я могу использовать любую помощь: либо конкретные ответы, либо советы, которые могут мне помочь - например, для чего искать в Google. Пока что мои исследования в Google придумали только некоторые приложения / dlls / code, которые делают это для вас, и некоторые сценарии, и я не совсем это ищу. Я хочу сделать всю работу сам, чтобы я мог учиться у нее.

Ответы [ 5 ]

1 голос
/ 07 февраля 2011

Если вы действительно хотите изучить все с нуля, то вам следует использовать C ++ и встроенные функции WIN32 API .

Если вы хотите немного поиграть с C #, то вам следует поискать сайт pinvoke.net и Управляемый Windows API проект.

Вам наверняка понадобится Spy ++ tool .

1 голос
/ 07 февраля 2011

Похоже, что вы в основном хотите управлять другими приложениями.

Есть примерно 2 способа сделать это в Windows

1 - использовать низкоуровневый API Windows для слепого запуска клавиатуры и мышисобытия в вашем целевом приложении.Основной способ, которым это работает, заключается в использовании Win32 SendInput метода , но есть масса другой работы, которую вы должны сделать, чтобы найти дескрипторы окон и т. Д., И т. Д.

2 - Используйте более высокийAPI уровня пользовательского интерфейса для взаимодействия с приложением более структурированным образом.Лучший (ну, в любом случае, новейший) способ сделать это - использовать API автоматизации пользовательского интерфейса Microsoft, который поставляется в Windows Vista и 7 (он также доступен в XP). Вот начальная страница MSDN.

Мы используем API автоматизации Microsoft UI на своей работе для автоматического тестирования наших приложений, и это не так уж плохо.Однако, будьте осторожны, независимо от того, как вы решили решить эту проблему, это чревато опасностями, и то, будет ли оно работать вообще, зависит от целевого приложения.

Удачи

1 голос
/ 07 февраля 2011

Не совсем тот же домен, что и вы, но эта серия постов в блоге расскажет вам, что вам нужно знать (и некоторые другие интересные вещи).

http://www.codingthewheel.com/archives/how-i-built-a-working-poker-bot

0 голосов
/ 07 февраля 2011

http://pinvoke.net/ - это веб-сайт, который вы ищете. На сайте объясняется, как использовать функции Windows API на языках более высокого уровня. Найдите в pinvoke любую из перечисленных ниже функций, и она даст вам код, необходимый для использования этих функций в вашем приложении.

Вероятно, вы захотите использовать функцию FindWindow , чтобы найти окно, в котором вы заинтересованы.
Вам потребуется идентификатор процесса, поэтому используйте GetWindowThreadProcessId , чтобы получить его.
Далее вам необходимо использовать OpenProcess , позволяющий считывать память процесса.
После этого вы захотите использовать ReadProcessMemory для чтения в память процесса, чтобы увидеть, что с ним происходит.
Наконец, вы захотите использовать функцию PostMessage для отправки нажатий клавиш на дескриптор окна.

Добро пожаловать в удивительный мир программирования Windows API.

0 голосов
/ 07 февраля 2011

Проверьте Autohotkey.Это самый быстрый способ сделать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...