使用注册表项禁用粘滞键不起作用

使用注册表项禁用粘滞键不起作用

在您否决此意见之前,我想说的是,网上发布的方法对我来说不起作用。

我尝试过将HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeysFlags 改为1026250506随便你怎么说,但还是没能禁用它。顺便说一句,我想禁用弹出的窗口和实际的粘滞键功能。

通过控制面板进入“轻松访问”部分并禁用它,我看到 被Flags更改为250HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys但如果我手动输入 250,它不起作用。因此,我认为粘滞键设置也必须保存在其他地方。

顺便说一句,我正在编写一个程序来通过注册表项禁用粘滞键,因此我将无法从控制面板使用轻松访问。

那么,为什么注册表项更改对网络上的其他人有效,而对我无效?我使用的是 Windows 7 64 位。谢谢。

答案1

我认为这篇文章应该对你有帮助:http://msdn.microsoft.com/en-us/library/windows/desktop/ee416808(v=vs.85).aspx

如果您查看第二个示例,您会发现它基本上满足了您的要求。您可以将下面的代码(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);
        }
    }
}

希望这有帮助。

答案2

我之前研究过它,发现还有另一个键显然保留了最后的配置:Software\Microsoft\Windows NT\CurrentVersion\Accessibility\Configuration

只需插入空值(以及您上面提到的各自键的值),就可以了。

相关内容