Глобальный захват горячих клавиш в VB.net - PullRequest
2 голосов
/ 02 июня 2010

Я хочу, чтобы мое приложение было свернуто для захвата данных, выбранных в окне другого приложения при нажатии горячей клавиши. Мое приложение определенно не имеет фокуса. Кроме того, когда нажата горячая клавиша, я хочу отобразить всплывающее окно (стиль Outlook), чтобы мое приложение никогда не фокусировалось.

Как минимум, я хочу получить имя окна, идентификатор процесса и данные selected . Приложение, которое имеет фокус, не является моим приложением?

Я знаю, что один из вариантов - прослушать буфер обмена, но есть ли другие решения.

Это для проверки скорости ввода данных в другую систему, которую я не контролирую. Это клиентская программа для эмуляции мэйнфреймов (прикрепленный к сети, называемый Java-хостом telnet с поддержкой 3250).

План

  1. завершить ввод данных в приложении X.
  2. Выберите определенный раздел экрана в приложении X, который является доказательством ввода данных (идентификатор транзакции).
  3. Нажмите волшебную горячую клавишу, которая затем «отправляет» выбор в мое приложение.
  4. Из System.environment или system.Threading Я могу найти вход в Windows.
  5. Точно так же я могу запечатлеть время.
  6. Все данные будут записаны в SQL.
  7. После завершения отобразится всплывающее окно в стиле Outlook, сообщающее, что запись данных была зарегистрирована.

Любые мысли.

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Подключение клавиатуры / мыши и скребков экрана - в значительной степени предел того, что вы можете сделать с помощью апплета. Помните, что Java компилируется в байт-код и запускается в JVM. Из-за особенностей JVM, переносимости и проблем безопасности у вас на самом деле нет доступа ни к чему внутри апплета. Все, что вы, вероятно, увидите в .Net, это классическое окно SunAwtFrame без дочерних элементов.

Фокусировка выполнима, просто используйте API SendMessage (и другие), чтобы делать то, что вам нужно в фоновом режиме, и до тех пор, пока вы не измените фокус, он останется как есть (т. Е. Выполнение кода не требует фокуса) )

Что касается извлечения данных, все будет зависеть от того, сможете ли вы извлечь эту информацию с экрана, используя некоторую (потенциально жесткую) обработку изображений. Апплеты являются своего рода ничейной землей (изнутри .Net по крайней мере), там нет JavaWindow.Textbox.GetAStringForMePlease ().

Для записи, есть исключение, если вы физически управляете апплетом. В этом случае вы можете создать своего рода оболочку апплета, чтобы перехватывать ее содержимое.

0 голосов
/ 02 июня 2010

Похоже, вам нужно настроить глобальную клавиатуру для захвата горячей клавиши, в этой статье проекта кода показано, как это сделать (в C #, но она не сильно отличается): http://www.codeproject.com/KB/cs/globalhook.aspx

И затем вы можете использовать FindWindow API, чтобы найти окно других приложений, затем найти элемент управления, содержащий «идентификатор транзакции», и использовать сообщение WM_GETTEXT, чтобы скопировать текст из него.

...