基本上我想写一个应用程序来捕获每当按下Num Lock键时。这需要通过windows,linux,mac支持。什么工具在所有桌面操作系统上拦截numlock密钥?
该应用程序能以某种方式在浏览器中运行吗?使用HTML5等。
应该用Qt C++编写应用程序,如果是这样,Qt库是否有跨平台调用interceptNumLock()?
它可能会在Java上完成吗?
通过跨浏览器插件?
以上方法的优缺点是什么?如果是这样,我可以在考虑利弊后决定。
基本上我想写一个应用程序来捕获每当按下Num Lock键时。这需要通过windows,linux,mac支持。什么工具在所有桌面操作系统上拦截numlock密钥?
该应用程序能以某种方式在浏览器中运行吗?使用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)检测操作系统,这将是复杂的。但是,如果你这样做了,那么你可以根据操作系统的具体操作来获取Caplock的状态。
可以使用这样的代码可能做到这一点平台检查使用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状态,而不通过操作系统,这是怎么回事为什么这样的代码是依赖于操作系统的。
所以Java是最好的方式去做这件事? – KJW
这取决于你的目标和你想花多少时间。 Java绝对是进行跨平台大写锁定检测的最简单,最快捷的方式,但是Java运行时必须在机器上可用。 –
Qt 4.7.4: Is there a way to find out the status of CAPS LOCK?
这里是做在C/C++的方式。如果你在Qt中使用keyPressEvent,你应该能够检测到用户每次按下某个按键,然后你就可以检查该按钮的状态。
你并不十分清楚你认为什么是“应用程序”。这是用ANY语言编写的任何程序吗? –