Note regarding ENABLE_EXTENDED_FLAGS (2016-05-30) There is a complicated interaction between the ENABLE_EXTENDED_FLAGS flag and the ENABLE_QUICK_EDIT_MODE and ENABLE_INSERT_MODE flags (presumably for backwards compatibility?). I studied the behavior on Windows 7 and Windows 10, with both the old and new consoles, and I didn't see any differences between versions. Here's what I seemed to observe: - The console has three flags internally: - QuickEdit - InsertMode - ExtendedFlags - SetConsoleMode psuedocode: void SetConsoleMode(..., DWORD mode) { ExtendedFlags = (mode & (ENABLE_EXTENDED_FLAGS | ENABLE_QUICK_EDIT_MODE | ENABLE_INSERT_MODE )) != 0; if (ExtendedFlags) { QuickEdit = (mode & ENABLE_QUICK_EDIT_MODE) != 0; InsertMode = (mode & ENABLE_INSERT_MODE) != 0; } } - Setting QuickEdit or InsertMode from the properties dialog GUI does not affect the ExtendedFlags setting -- it simply toggles the one flag. - GetConsoleMode psuedocode: GetConsoleMode(..., DWORD *result) { if (ExtendedFlags) { *result |= ENABLE_EXTENDED_FLAGS; if (QuickEdit) { *result |= ENABLE_QUICK_EDIT_MODE; } if (InsertMode) { *result |= ENABLE_INSERT_MODE; } } } Effectively, the ExtendedFlags flags controls whether the other two flags are visible/controlled by the user application. If they aren't visible, though, there is no way for the user application to make them visible, except by overwriting their values! Calling SetConsoleMode with just ENABLE_EXTENDED_FLAGS would clear the extended flags we want to read. Consequently, if a program temporarily alters the QuickEdit flag (e.g. to enable mouse input), it cannot restore the original values of the QuickEdit and InsertMode flags, UNLESS every other console program cooperates by keeping the ExtendedFlags flag set.