gpt4 book ai didi

java - 从 Java 中的单独进程捕获击键

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:12 24 4
gpt4 key购买 nike

我希望这发生:

  1. 启动我的java程序
  2. 我的 java 程序启动 notepad.exe
  3. 如果我在记事本中键入一个字母,我的 java 程序应该使用react并打印出该字母

简而言之:是否可以为另一个进程创建一个关键事件监听器? java 程序将没有焦点。

如果不可能,我希望能够在我的 Java Swing 窗口和记事本进程之间切换焦点。例如:

A) 我的 java 程序有焦点(小 Swing 窗口),我输入字母“A”
B) 记事本快速获得焦点并在那里输入字母 A(例如使用 Robot 类)
C) 我的 java 程序再次获得焦点


引用Creating a keyboard hook for a Java program that sits in the System Tray中给出的答案

因此,创建键盘钩子(Hook)并不像看起来那么容易,出于安全目的,Java 不提供与系统事件交互的直接方式;因为它可能会导致有关 JVM、系统内存和 Java 框架的可移植性的严重问题。

你有 4 种方法来制作全局键盘钩子(Hook):

  1. 学习 JNI/JNA,我更喜欢 JNA,因为它比 JNI 容易得多,在这两种情况下您都将处理 .dll 文件。
  2. 使用 JIntellitype ,正如您所说,它会产生一些问题。
  3. Sergei Biletnikov 的优雅解决方案在这里 http://biletnikov-dev.blogspot.com/2009/09/global-hotkeys-for-java-applications_25.html
  4. 忽略 Java,并尝试使用 Autoit V3(我不是 100% 确定它,但我认为您可以将信号/事件从 Autoit 发送到您的 Java 应用程序,因此 Autoit 将充当捕获全局 key 的桥梁笔画)

继续第 3 个,这是一个很好的教程。如果链接有 404,则项目源可能仍在运行:gigapeta.com/dl/1917618aba749a

最佳答案

使用您提出的解决方案 #1:

Learn JNI / JNA, and I prefer JNA since its much easier than JNI , in both cases you shall deal with .dll files.

你应该看看这个 stackoverflow 线程:

JNA Keyboard Hook in Windows

有演示 JNA 键 Hook 的复制/粘贴代码。您需要从 http://jna.java.net/ 下载 JNA 依赖项为了这个例子工作。您甚至不需要摆弄愚蠢的 DLL。

此外,您可能想试试这个库。虽然我没有使用它的经验,但它突然出现在我的谷歌搜索“java keyboard hook”中。它似乎完成了拦截击键的目标:

http://code.google.com/p/jnativehook/

请注意,您需要一些额外的 native 代码才能查看当前的“Activity 窗口”是什么。如果 Activity 窗口匹配“Notepad.exe”,那么您应该记录一个 native 键事件。

祝你好运!

关于java - 从 Java 中的单独进程捕获击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com