基本上,我想编写一个应用程序来在按下 Num Lock 键时进行捕获。这需要跨 windows、linux、mac 支持。
该应用程序可以以某种方式在浏览器中运行吗?使用 HTML5 等。
应用程序是否应该用 Qt C++ 编写,如果是,Qt 库是否有跨平台调用 interceptNumLock()?
它可能在Java上完成吗?
通过跨浏览器插件?
上述方法的优缺点是什么?如果是这样,我可以在考虑利弊后做出决定。
基本上,我想编写一个应用程序来在按下 Num Lock 键时进行捕获。这需要跨 windows、linux、mac 支持。
该应用程序可以以某种方式在浏览器中运行吗?使用 HTML5 等。
应用程序是否应该用 Qt C++ 编写,如果是,Qt 库是否有跨平台调用 interceptNumLock()?
它可能在Java上完成吗?
通过跨浏览器插件?
上述方法的优缺点是什么?如果是这样,我可以在考虑利弊后做出决定。
你可以用Java来做。Windows、Linux 和 MacOS 都支持 Java。这是一个单行:
boolean zCapsLockOn = java.awt.Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
用二进制代码做同样的事情需要你(A)假设它是一台 x86 机器,并且(B)检测操作系统,这会很复杂。但是,如果您这样做了,那么您可以进行特定于操作系统的调用,以根据它是哪个操作系统来获取大写锁定状态。
您可以使用如下代码对 Qt 进行此平台检查:
bool QMyClass::checkCapsLock()
{
// platform dependent method of determining if CAPS LOCK is on
#ifdef Q_OS_WIN32 // MS Windows version
return GetKeyState(VK_CAPITAL) == 1;
#else // X11 version (Linux/Unix/Mac OS X/etc...)
Display * d = XOpenDisplay((char*)0);
bool caps_state = false;
if (d)
{
unsigned n;
XkbGetIndicatorState(d, XkbUseCoreKbd, &n);
caps_state = (n & 0x01) == 1;
}
return caps_state;
#endif
}
请注意,您不能编写二进制代码来直接从 BIOS 获取 CAPSLOCK 状态而无需通过操作系统,这就是任何此类代码都依赖于操作系统的原因。
Qt 4.7.4:有没有办法找出 CAPS LOCK 的状态?
这是在 c/c++ 中执行此操作的方法。如果您随后在 Qt 中使用 keyPressEvent,您应该能够检测到用户何时按下某个键,然后您可以检查按钮的状态。