47 lines
1.9 KiB
Plaintext
Executable File
47 lines
1.9 KiB
Plaintext
Executable File
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.
|