基本上我想寫一個應用程序來捕獲每當按下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語言編寫的任何程序嗎? –