Nano Hash - криптовалюты, майнинг, программирование

Слушайте нажатия клавиш, если окно не сверху

Итак, у меня есть JFrame, к которому я добавил KeyListener, и я устанавливаю фокус равным true. С KeyListener проблем нет, но он прослушивает клавиши только в том случае, если окно находится сверху. То, что я пытаюсь сделать, это слушать нажатия клавиш, если окно не сверху. По сути, я пытаюсь создать программу, которая выполняет код, когда пользователь нажимает F10, и прекращает выполнение кода, когда пользователь снова нажимает F10. Окно не должно быть сверху, чтобы эта программа работала, а это означает, что если я нажму F10, а JFrame не будет сверху, оно все равно будет выполняться. Любая помощь будет принята с благодарностью! Спасибо.


  • Вы пытались поставить один и тот же KeyListener на разные кадры? Возможно, вы захотите изучить KeyBindings вместо KeyListener. KeyListener, если низкоуровневый интерфейс, а KeyBindings — OO. 22.05.2012
  • Не могли бы вы прислать мне пример KeyBindings? Я уже немного изучил это, но я чувствую, что вы можете знать очень простой учебник по этому вопросу. Спасибо. 22.05.2012
  • Google — ваш друг: docs.oracle.com/javase/tutorial/uiswing /misc/keybinding.html Основная идея заключается в том, что вы отделяете действие (сделайте что-то) от того, что запускает действие (в данном случае KeyStroke). 22.05.2012
  • Джош, если ты найдешь ответ, пожалуйста, опубликуй его, я некоторое время думал, как это сделать... 22.05.2012
  • Я провел некоторое исследование и прочитал сценарии, когда я хотел бы использовать KeyBinding, и я не уверен, что это то, что я хочу? В основном я хочу, чтобы моя программа работала, когда пользователь нажимает клавиши на своей клавиатуре, независимо от того, находится ли JFrame сверху или нет. Работают ли KeyBindings в этом случае? 22.05.2012
  • @JoshM Вы говорите о других JFrame, которыми вы управляете, которые находятся сверху? или вы про другие программы, которые сверху? В первом случае это можно сделать, во втором нельзя в Java (или, по крайней мере, в JVM это не предусмотрено изначально) 22.05.2012
  • Похоже на кейлоггер. Какую функцию приложения это предоставляет пользователю? 22.05.2012

Ответы:


1

Нет, Key Bindings/KeyListeners/любое чистое Java-приложение не будет работать, так как приложение должно быть сверху, чтобы они работали.

Вы ищете клавиатурный хук, а Java сама по себе не может этого сделать. Вам придется использовать либо JNI, JNA, которые связаны с собственным приложением, таким как приложение C/C++, либо еще проще связать Java с утилитой сценариев, такой как AutoIt (если Windows, или аналогичную утилиту, если нет). Обратите внимание, что все эти решения должны зависеть от платформы.

21.05.2012
  • Не могли бы вы перенаправить меня на ссылку, которая поможет мне, пожалуйста? 22.05.2012
  • @Josh: Вы можете найти ссылки и информацию обо всех этих предложениях так же, как и я через Google. Я бы рекомендовал избегать JNI, если ваши навыки кодирования C/C++ не очень хороши. 22.05.2012
  • Итак, я могу использовать AutoIt, и он строго основан на Java, верно? (Вам нужно только знать Java, чтобы программировать на нем) 22.05.2012
  • @Josh: Нет, AutoIt строго основан на Windows. Это самостоятельный язык программирования, основанный на синтаксисе Basic, без многопоточности, ООП и других преимуществ, которые есть в Java. На самом деле я довольно часто использовал его в сочетании с моими Java-программами. У меня были Java и AutoIt, взаимодействующие через сокеты (потоки ввода и вывода). Однако в последнее время я отказываюсь от его использования и больше двигаюсь к Java-JNA, когда хочу делать вызовы, специфичные для ОС. 22.05.2012
  • Так должен ли я использовать JNA? 22.05.2012
  • Вы могли бы, но вам все равно нужно написать немного кода на C для хука. В качестве ключевого хука я бы использовал autoit (если Windows). Я использую JNA для активации и управления программами, отличными от Java. 22.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..