web-dev-qa-db-ja.com

レジストリキーでスティッキーキーを無効にしない

これに反対票を投じる前に、ネット上に投稿された方法が私にはうまくいかないので、これを言いたいと思います。

HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeysに移動し、フラグを1026250506に変更しようとしましたが、名前を付けても、まだ名前が付けられていません。無効にします。ところで、表示されるポップアップと実際のスティッキーキー機能の両方を無効にしたいのですが。

コントロールパネルからコンピューターの簡単操作の部分に移動して無効にすると、Flags250HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeysに変更されますが、手動で250と入力すると、動作しません。したがって、スティッキーキーの設定も別の場所に保存する必要があると思います。

ところで、レジストリキーでスティッキーキーを無効にするプログラムを書いているので、コントロールパネルからコンピューターの簡単操作を使用できなくなります。

では、なぜレジストリキーの変更は、私ではなく、ネット上の他の人々のために機能するのでしょうか。私はWindows764ビットを使用しています。ありがとう。

1
Sophia

この記事が役立つと思います: http://msdn.Microsoft.com/en-us/library/windows/desktop/ee416808(v = vs.85).aspx

2番目の例を見ると、基本的に必要なものが得られることがわかります。以下のコード(WinMainメソッドを除く)を別のファイルに入れて、プログラムに呼び出させることができます。

STICKYKEYS g_StartupStickyKeys = {sizeof(STICKYKEYS), 0};
TOGGLEKEYS g_StartupToggleKeys = {sizeof(TOGGLEKEYS), 0};
FILTERKEYS g_StartupFilterKeys = {sizeof(FILTERKEYS), 0};    


INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
    // Save the current sticky/toggle/filter key settings so they can be restored them later
    SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &g_StartupStickyKeys, 0);
    SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &g_StartupToggleKeys, 0);
    SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &g_StartupFilterKeys, 0);

    // Disable when full screen
    AllowAccessibilityShortcutKeys( false );

    // Restore back when going to windowed or shutting down
    AllowAccessibilityShortcutKeys( true );
}


void AllowAccessibilityShortcutKeys( bool bAllowKeys )
{
    if( bAllowKeys )
    {
        // Restore StickyKeys/etc to original state and enable Windows key      
        STICKYKEYS sk = g_StartupStickyKeys;
        TOGGLEKEYS tk = g_StartupToggleKeys;
        FILTERKEYS fk = g_StartupFilterKeys;

        SystemParametersInfo(SPI_SETSTICKYKEYS, sizeof(STICKYKEYS), &g_StartupStickyKeys, 0);
        SystemParametersInfo(SPI_SETTOGGLEKEYS, sizeof(TOGGLEKEYS), &g_StartupToggleKeys, 0);
        SystemParametersInfo(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &g_StartupFilterKeys, 0);
    }
    else
    {
        // Disable StickyKeys/etc shortcuts but if the accessibility feature is on, 
        // then leave the settings alone as its probably being usefully used

        STICKYKEYS skOff = g_StartupStickyKeys;
        if( (skOff.dwFlags & SKF_STICKYKEYSON) == 0 )
        {
            // Disable the hotkey and the confirmation
            skOff.dwFlags &= ~SKF_HOTKEYACTIVE;
            skOff.dwFlags &= ~SKF_CONFIRMHOTKEY;

            SystemParametersInfo(SPI_SETSTICKYKEYS, sizeof(STICKYKEYS), &skOff, 0);
        }

        TOGGLEKEYS tkOff = g_StartupToggleKeys;
        if( (tkOff.dwFlags & TKF_TOGGLEKEYSON) == 0 )
        {
            // Disable the hotkey and the confirmation
            tkOff.dwFlags &= ~TKF_HOTKEYACTIVE;
            tkOff.dwFlags &= ~TKF_CONFIRMHOTKEY;

            SystemParametersInfo(SPI_SETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tkOff, 0);
        }

        FILTERKEYS fkOff = g_StartupFilterKeys;
        if( (fkOff.dwFlags & FKF_FILTERKEYSON) == 0 )
        {
            // Disable the hotkey and the confirmation
            fkOff.dwFlags &= ~FKF_HOTKEYACTIVE;
            fkOff.dwFlags &= ~FKF_CONFIRMHOTKEY;

            SystemParametersInfo(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &fkOff, 0);
        }
    }
}

うまくいけば、これが役立つでしょう。

0
user329520

しばらく前に調べたところ、最後の構成を保持していると思われる別のキーがあったことがわかりました。Software\ Microsoft\Windows NT\CurrentVersion\Accessibility\Configuration

空の値(および上記の値をそれぞれのキーに)を挿入するだけで、それで十分です。

1
EliadTech