Генерация ввода мыши и клавиатуры из одного приложения в другое - PullRequest
2 голосов
/ 16 декабря 2011

Я работал с Win32 API и DirectX API для интерпретации ввода от пользователя, но не нашел много способов генерировать ввод, который соответствует исходному вводу пользователя.

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

Я нашел несколько команд для проверкикакое окно имеет фокус, и некоторые примеры кода для проверки имени процесса или идентификатора указанного приложения, но не столько для генерации ввода через DirectX или что-либо еще, для имитации легитимного ввода.

Любые предложения будут высоко оцененыЯ хочу, чтобы он регистрировался как можно ближе к реальному вводу, чтобы облегчить автоматизированное тестирование.

Заранее извиняюсь, если этот вопрос слишком общий или "недостаточно изучен", я просто не совсем уверен, с чего начать!

Программа будет работать на C ++ или C # из-за моего знакомства с этими языками.

1 Ответ

0 голосов
/ 16 декабря 2011

Я сделал это:

Одно приложение, действующее как глобальный клавиатурный хоккей, а затем я отправил соответствующие шаблоны во второе приложение, прямо в память - я использовал примеры из Все водин кодовый фреймворк примеров, которые вы можете скачать, заблокировать для CSFileMappingServer и CSFileMappingClient (получить / установить) в память из двух отдельных процессов.И проект CSWindowsHook для отлова глобальных событий клавиатуры

Я был немного быстр, но для отправки виртуальной клавиатуры вы можете использовать:

BOOL
WINAPI
PostMessageA(
__in_opt HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam);

Но окно, которое вы отправляете, должно быть в фокусе,вы можете использовать:

BOOL
WINAPI
BringWindowToTop(
__in HWND hWnd);

А чтобы получить HWIND для работающего приложения, вы можете использовать:

HWND
WINAPI
FindWindowA(
__in_opt LPCSTR lpClassName,
__in_opt LPCSTR lpWindowName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...