跨所有桌面操作系统拦截numlock密钥的工具是什么?

时间:2012-10-04 08:00:14

标签: input cross-browser cross-platform hotkeys

基本上我想写一个应用程序,只要按下Num Lock键就可以捕获。这需要跨windows,linux,mac支持。

应用程序可能会以某种方式在浏览器中运行吗?使用HTML5等。

应该用Qt C ++编写应用程序,如果是这样,Qt库是否有对interceptNumLock()的跨平台调用?

是否可以在Java上完成?

通过跨浏览器插件?

上述方法的优点和缺点是什么?如果是这样,我可以在考虑缺点和专业人士之后做出决定。

4 个答案:

答案 0 :(得分:1)

您必须使用一些本机代码才能拦截操作系统通常不会分派给您的应用程序的任何击键。

在Java中,您可以使用一些JNA来完成此任务。

This question有一个例子。

答案 1 :(得分:1)

你可以用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状态,这就是为什么任何此类代码都依赖于操作系统的原因。

答案 2 :(得分:0)

我会将其作为在浏览器上运行的普通网站应用程序来实现,在这种情况下,最好使用jQuery库,它将为您提供浏览器和系统之间的跨浏览器兼容性:

查看我的jQuery大写锁定检测器demo。您可以在Windows / Linux和不同的浏览器(Firefox,Chrome,IE)中试用它。

答案 3 :(得分:0)

Qt 4.7.4: Is there a way to find out the status of CAPS LOCK?

这是在c / c ++中实现它的方法。如果你在Qt中使用keyPressEvent,你应该能够在用户按下某个键时检测到,而你可以检查按钮的状态。