基本上我想编写一个应用程序,以便在按下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状态,这就是为什么任何此类代码都依赖于操作系统的原因.