2012-10-04 37 views
4

基本上我想写一个应用程序来捕获每当按下Num Lock键时。这需要通过windows,linux,mac支持。什么工具在所有桌面操作系统上拦截numlock密钥?

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

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

它可能会在Java上完成吗?

通过跨浏览器插件?

以上方法的优缺点是什么?如果是这样,我可以在考虑利弊后决定。

+0

你并不十分清楚你认为什么是“应用程序”。这是用ANY语言编写的任何程序吗? –

回答

1

你可以用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状态,而不通过操作系统,这是怎么回事为什么这样的代码是依赖于操作系统的。

+0

所以Java是最好的方式去做这件事? – KJW

+1

这取决于你的目标和你想花多少时间。 Java绝对是进行跨平台大写锁定检测的最简单,最快捷的方式,但是Java运行时必须在机器上可用。 –

0

我会做它作为浏览器中运行正常的网站应用程序,在这种情况下,最好是使用jQuery库,这将给你的浏览器和系统之间的跨浏览器的兼容性:

见我的工作demo的一个jQuery大写锁定检测器。你可以在Windows/Linux和不同的浏览器(Firefox,Chrome,IE)上试用它。

+0

我正在寻找的不是一个网站,而是一种捕获桌面操作屏幕上任意位置的大写锁定的方法。 – KJW

+0

无论执行什么程序,都在后台运行?如果是的话,你需要的东西就像一个键盘记录器然后,我无法帮助.. – Nelson

+0

我只需要知道用户何时按下数字锁定,它会启动软件。这是不可能在JavaScript页面上。 – KJW

1

您将不得不使用一些本机代码来拦截操作系统通常不会分发到您的应用程序的任何击键。

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

This question有一个例子。

相关问题