2012-10-04 53 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有一個例子。

相關問題