// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-#if (NET_2_0||BOOTSTRAP_NET_2_0) && !NET_2_1
+#if !NET_2_1
using System.Runtime.InteropServices;
using System.Text;
namespace System {
return false;
//KEY_EVENT == 1
- if (record.EventType == 1 && record.KeyDown)
+ if (record.EventType == 1 && record.KeyDown && !IsModifierKey (record.VirtualKeyCode))
return true;
if (!ReadConsoleInput (inputHandle, out record, 1, out eventsRead))
public bool TreatControlCAsInput {
get {
int mode;
- if (!GetConsoleMode (outputHandle, out mode))
+ if (!GetConsoleMode (inputHandle, out mode))
throw new Exception ("Failed in GetConsoleMode: " + Marshal.GetLastWin32Error ());
// ENABLE_PROCESSED_INPUT
set {
int mode;
- if (!GetConsoleMode (outputHandle, out mode))
+ if (!GetConsoleMode (inputHandle, out mode))
throw new Exception ("Failed in GetConsoleMode: " + Marshal.GetLastWin32Error ());
bool cAsInput = ((mode & 1) == 0);
if (value)
mode &= ~1;
else
- mode++;
+ mode |= 1;
- if (!SetConsoleMode (outputHandle, mode))
+ if (!SetConsoleMode (inputHandle, mode))
throw new Exception ("Failed in SetConsoleMode: " + Marshal.GetLastWin32Error ());
}
}
{
int eventsRead;
InputRecord record = new InputRecord ();
- do {
+ for (;;) {
if (!ReadConsoleInput (inputHandle, out record, 1, out eventsRead))
throw new InvalidOperationException ("Error in ReadConsoleInput " +
Marshal.GetLastWin32Error ());
- } while (record.EventType != 1 && !record.KeyDown);
+ if (record.KeyDown && record.EventType == 1 && !IsModifierKey (record.VirtualKeyCode))
+ break;
+ }
// RIGHT_ALT_PRESSED 1
// LEFT_ALT_PRESSED 2
throw new ArgumentOutOfRangeException ("left/top", "Windows error " + Marshal.GetLastWin32Error ());
}
+ static bool IsModifierKey (short virtualKeyCode)
+ {
+ // 0x10 through 0x14 is shift/control/alt/pause/capslock
+ // 0x2C is print screen, 0x90 is numlock, 0x91 is scroll lock
+ switch (virtualKeyCode) {
+ case 0x10:
+ case 0x11:
+ case 0x12:
+ case 0x14:
+ case 0x90:
+ case 0x91:
+ return true;
+ default:
+ return false;
+ }
+ }
+
//
// Imports
//