4

基本的に、Num Lock キーが押されるたびにキャプチャするアプリを作成したいと思います。これは、Windows、Linux、Mac でサポートする必要があります。

アプリは何らかの方法でブラウザで実行できますか? HTML5 などを使用します。

アプリは Qt C++ で作成する必要がありますか? その場合、Qt ライブラリには、interceptNumLock() へのクロス プラットフォーム呼び出しがありますか?

おそらくJavaで実行できますか?

クロスブラウザアドオンを介して?

上記のアプローチの長所と短所は何ですか?もしそうなら、私は長所と短所を考慮して決めることができます.

4

4 に答える 4

1

通常は OS によってアプリケーションにディスパッチされないキーストロークをインターセプトするために、ネイティブ コードを使用する必要があります。

Java では、 JNAを使用してこれを実現できます。

この質問には例があります。

于 2012-10-14T02:30:26.580 に答える
1

Javaでできます。Windows、Linux、および MacOS はすべて Java をサポートしています。それはワンライナーです:

boolean zCapsLockOn = java.awt.Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);

バイナリ コードで同じことを行うには、(A) x86 マシンであると想定し、(B) オペレーティング システムを検出する必要がありますが、これは複雑です。ただし、これを行った場合は、OS 固有の呼び出しを行って、OS に基づいて capslock 状態を取得できます。

次のようなコードを使用して、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 状態を取得することはできないことに注意してください。そのため、そのようなコードは OS に依存します。

于 2012-10-16T15:35:00.423 に答える
0

私はブラウザで実行されている通常のWebサイトアプリケーションとしてそれを行います。この場合、ブラウザとシステム間のブラウザ間の互換性を提供するjQueryライブラリを使用することをお勧めします。

jQueryCaps-LockDetectorの実際のデモをご覧ください。Windows / Linuxおよびさまざまなブラウザ(Firefox、Chrome、IE)で試すことができます。

于 2012-10-09T19:38:16.707 に答える
0

Qt 4.7.4: CAPS LOCK の状態を確認する方法はありますか?

これを c/c++ で行う方法を次に示します。その後、Qt で keyPressEvent を使用すると、ユーザーがキーを押すたびに検出でき、ボタンの状態を確認できます。

于 2012-10-16T13:03:20.317 に答える