我需要全局热键支持我的Java应用程序。
我想出了一些代码(大部分是复制的),但它不起作用。
HotkeyManager.java:
import java.awt.event.KeyEvent;
public class HotkeyManager extends Thread {
public static void register() {
User32.RegisterHotKey(null, 1, 0x000, KeyEvent.VK_F);
new HotkeyManager().start();
}
public HotkeyManager() {
}
@Override
public void run() {
MSG msg = new MSG();
while (true) {
while (User32.PeekMessage(msg, null, 0, 0, User32.PM_REMOVE)) {
if (msg.message == User32.WM_HOTKEY) {
System.out.println("Hotkey pressed with id: " + msg.wParam);
}
}
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
用户32。爪哇:
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Pointer;
import com.sun.jna.win32.W32APIOptions;
public class User32 {
static {
Native.register(NativeLibrary.getInstance("user32", W32APIOptions.DEFAULT_OPTIONS));
}
public static final int MOD_ALT = 0x0001;
public static final int MOD_CONTROL = 0x0002;
public static final int MOD_SHIFT = 0x0004;
public static final int MOD_WIN = 0x0008;
public static final int WM_HOTKEY = 0x0312;
public static final int PM_REMOVE = 0x0001;
public static native boolean RegisterHotKey(Pointer hWnd, int id, int fsModifiers, int vk);
public static native boolean UnregisterHotKey(Pointer hWnd, int id);
public static native boolean PeekMessage(MSG lpMsg, Pointer hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);
}
msg. java:
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
public class MSG extends Structure {
public Pointer hWnd;
public int lParam;
public int message;
public int time;
public int wParam;
public int x;
public int y;
@Override
protected List getFieldOrder() {
return Arrays.asList(new String[]{"hWnd", "lParam", "message", "time", "wParam", "x", "y"});
}
}
它确实注册了热键(当程序运行时,按系统中的“F”键不会产生任何结果),但我从未得到任何到控制台的输出。发生了什么?我也知道jintellitype和jnativehook。我不能使用first,至于second,它总是监听所有硬件事件,包括鼠标移动和所有按键,我只会将其用作最后手段。
我猜到了。我必须在监听消息的同一个线程中注册热键。用户32。RegisterHotKey(null,1,0x000,KeyEvent.VK_F);进入run(),一切正常。
问题内容: Java6应用程序位于系统托盘中。需要使用热键(例如,Super-G或Ctrl-Shift-L等)将其激活,并执行某些操作(例如,显示输入框)。 我该怎么做: 问题答案: 我已经使用JNA在Java中为全局热键编译了一个库。目前,它支持Windows,Linux和Mac OSX。它还支持Windows和Linux上的媒体密钥。 如果有人感兴趣,请尝试https://github.com
问题内容: 就像Ctl,Alt +删除一样 我想编写一个程序,该程序在python中使用带有3个或更多参数的全局热键。仅当我按下键盘上的所有三个键时,分配的功能才应执行。例如alt,windows和F3。 这是我要运行的当前程序,但是其输出是: 该程序: 正在注册3个热键?可能? 说明如何使用一种方法,分配一个需要按下的键,然后分配是否需要按下两个键。但是我不会说该功能仅在同时按下所有功能时才执行
本文向大家介绍C#全局热键设置与窗体热键设置实例,包括了C#全局热键设置与窗体热键设置实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#全局热键设置与窗体热键设置,分享给大家供大家参考。具体实现方法如下: 1、窗体热键 首先要设置主窗体KeyPreview为true,可直接在属性中进行设置, 或者在窗体加载中设置: this.KeyPreview = true; 然后添加窗体KeyD
问题内容: 我不确定100%,但是我相信我是从家用计算机和办公室PC上的Windows安装程序安装了节点v5。 在我的家用PC上,全局安装发生在%APPDATA%下: 在我的办公室PC上,它们位于程序文件下: 我需要为PyCharm的文件监视程序提供许多这些全局工具的完整路径,并且由于我共享的项目文件很有意义,因此在用户文件夹下没有全局资源。 为什么全局安装最终会位于不同的文件夹中,我如何将它们强
问题内容: 我必须接一个热键(意思是,按,仅释放,然后再按一次)。这是我想做的事情: 我的想法是,一旦按下,就必须再次注册相同的热键并捕获它。我要安排一个计时器,因为第二次按下应该很快。但是我认为我走错了路,因为这会使事情变得非常复杂。 你的想法?PS那里没有窗口,它捕获了 全局 热键。我还尝试了Internet上的很多东西,但是它并没有按我想要的那样工作,因此在向我提供任何代码之前,请对其进行测
问题内容: 我根本找不到npm存储其全局设置的位置。 npm config获取userconfig npm config获取globalconfig 这些路径中都没有文件,但是 npm config get proxy->返回我的代理URL。我要删除。 npm config -g删除代理 问题答案: 似乎该文件用于编辑其配置文件不是在全新安装中创建的,因为每个文件都有一个默认选项。这就是为什么您仍