How to disable task switching on Win32 platforms

Article translations Article translations
Article ID: 226359 - View products that this article applies to.
This article was previously published under Q226359
Expand all | Collapse all

On This Page


This article describes how to disable task switching and other system functions accessed through key combinations such as CTRL+ESC and ALT+TAB on Win32 Platforms.

Windows 95 and Windows 98

Applications can enable and disable ALT+TAB and CTRL+ESC, for example, by calling SystemParametersInfo (SPI_SETSCREENSAVERRUNNING). To disable ALT+TAB and CTRL+ESC, set the uiParam parameter to TRUE; to enable the key combinations, set the parameter to FALSE:
UINT nPreviousState;

// Disables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0);

// Enables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0);
Note Applications that use SystemParametersInfo (SPI_SETSCREENSAVERRUNNING) to disable task switching must enable task switching before exiting or task switching remains disabled after the process terminates.

Windows NT 4.0 Service Pack 3 and Later and Windows 2000

Applications can disable ALT+TAB or CTRL+ESC by installing a low-level keyboard hook. A low-level keyboard hook (WH_KEYBOARD_LL) is installed by calling SetWindowsHookEx. For more information on Window hooks see the "Hooks" overview in the Platform SDK documentation.

The following is a sample low-level keyboard hook procedure that disables CTRL+ESC, ALT+TAB, and ALT+ESC:
LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam)
    // By returning a non-zero value from the hook procedure, the
    // message does not get passed to the target window
    BOOL bControlKeyDown = 0;

    switch (nCode)
        case HC_ACTION:
            // Check to see if the CTRL key is pressed
            bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
            // Disable CTRL+ESC
            if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
                return 1;

            // Disable ALT+TAB
            if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
                return 1;

            // Disable ALT+ESC
            if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
                return 1;


    return CallNextHookEx (hHook, nCode, wParam, lParam);

Windows NT 4.0 Service Pack 2 and Earlier, Windows NT 3.51 and Earlier

Applications can disable CTRL+ESC system-wide by replacing the Windows NT Task Manager, but this is not recommended.

Applications can disable ALT+TAB and ALT+ESC when the application is running by registering hotkeys for the ALT+TAB and ALT+ESC combinations by calling RegisterHotKey.


Older development tools, such as Microsoft Visual C++ Version 5.0 and earlier, might not contain the header files necessary to build an application that uses low-level keyboard hooks. To obtain the most recent header files, download the latest Platform SDK from the following Microsoft Web site:
Because low-level keyboard hooks are a feature specific to Windows NT 4.0 Service Pack 3 and later, define _WIN32_WINNT >= 0x0400 prior to including winuser.h (or windows.h).


Article ID: 226359 - Last Review: November 21, 2006 - Revision: 4.3
  • Microsoft Win32 Application Programming Interface, when used with:
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows Millennium Edition
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows 95
kbhook kbhowto kbinput KB226359

Give Feedback


Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from