1

Прежде чем вы проголосуете, я хотел бы сказать это сейчас, когда методы, размещенные в сети, не работают для меня.

Я попытался зайти в HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys и изменить флаги на 10 , 26 , 250 , 506 , вы называете это имя, но оно по-прежнему не отключается. Кстати, я бы хотел отключить как всплывающее окно, так и реальную функциональность липкой клавиши.

Переход к части Ease of Access через панель управления и отключение там работает, и я вижу, что Flags меняются на 250 в HKEY_CURRENT_USER\Control Panel\Accessibility\StickyKeys , но если я ввожу 250 вручную, это не работает. Поэтому я думаю, что настройки липких клавиш должны быть сохранены и в другом месте.

Кстати, я пишу программу для отключения липких ключей с ключами реестра, поэтому я не смогу использовать Ease of Access с панели управления.

Так почему же изменение ключа реестра работает для других людей в сети, а не для меня? Я использую Windows 7 64bit. Благодарю.

2 ответа2

1

Я исследовал это некоторое время назад и обнаружил, что есть еще один ключ, который, по-видимому, сохраняет последнюю конфигурацию: Software\Microsoft\Windows NT\CurrentVersion\Accessibility\Configuration

Просто вставьте пустое значение (а также значения, которые вы упомянули выше, в соответствующие ключи), и это должно сделать это.

0

Я думаю, что эта статья должна помочь вам: 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);
        }
    }
}

Надеюсь, это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .