public bool PreFilterMessage(ref global::System.Windows.Forms.Message m) { if (m.Msg == WM_KEYDOWN) { TranslateMessage(ref m); } if (Handler != null) { return(Handler(m)); } return(true); }
public bool PreFilterMessage(ref global::System.Windows.Forms.Message m) { if (m.Msg == 0x312) { if (OnHotkey != null) { foreach (UInt32 key in keyIDs.Values) { if ((UInt32)m.WParam == key) { OnHotkey((int)m.WParam); return(true); } } } } return(false); }
static extern bool TranslateMessage(ref global::System.Windows.Forms.Message lpMsg);
private bool HandleEvent(global::System.Windows.Forms.Message Msg) { if (!GameStates.GameState.Game.IsActive) { _disableInput = true; return(false); } if (_disableInput) { _disableInput = false; return(false); } QueueLock.WaitOne(); bool handled = false; switch ((WindowMessage)Msg.Msg) { case WindowMessage.WM_CHAR: { var args = new global::System.Windows.Forms.KeyPressEventArgs((char)Msg.WParam); Queued.Add(new QueuedInput { Message = Gui.InputEvents.KeyPress, Args = new Gui.InputEventArgs { KeyValue = args.KeyChar, Alt = false, Control = false, Shift = false, } }); handled = true; break; } case WindowMessage.WM_KEYDOWN: { var args = new global::System.Windows.Forms.KeyEventArgs((global::System.Windows.Forms.Keys)Msg.WParam); if (args.KeyData == global::System.Windows.Forms.Keys.Alt) { AltDown = true; } if (args.KeyData == global::System.Windows.Forms.Keys.ControlKey) { CtrlDown = true; } if (args.KeyData == global::System.Windows.Forms.Keys.ShiftKey) { ShiftDown = true; } var realCode = TranslateKey(Msg.LParam, args.KeyCode); if (realCode == global::System.Windows.Forms.Keys.Oemtilde) { ConsoleTogglePressed = true; } else { Queued.Add(new QueuedInput { Message = Gui.InputEvents.KeyDown, Args = new Gui.InputEventArgs { Alt = args.Alt, Control = args.Control, Shift = args.Shift, KeyValue = (int)realCode, } }); } handled = true; break; } case WindowMessage.WM_KEYUP: { var args = new global::System.Windows.Forms.KeyEventArgs((global::System.Windows.Forms.Keys)Msg.WParam); if (args.KeyData == global::System.Windows.Forms.Keys.Alt) { AltDown = false; } if (args.KeyData == global::System.Windows.Forms.Keys.ControlKey) { CtrlDown = false; } if (args.KeyData == global::System.Windows.Forms.Keys.ShiftKey) { ShiftDown = false; } var realCode = TranslateKey(Msg.LParam, args.KeyCode); Queued.Add(new QueuedInput { Message = Gui.InputEvents.KeyUp, Args = new Gui.InputEventArgs { Alt = AltDown, // For some reason WM_KEYUP doesn't actually detect if the modifier keys are pressed or not. So what's the point?? Control = CtrlDown, Shift = ShiftDown, KeyValue = (int)args.KeyCode } }); handled = true; break; } case WindowMessage.WM_LBUTTONDOWN: case WindowMessage.WM_RBUTTONDOWN: { Queued.Add(new QueuedInput { Message = Gui.InputEvents.MouseDown, Args = new Gui.InputEventArgs { Alt = AltDown, Control = CtrlDown, Shift = ShiftDown, MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONDOWN ? 0 : 1, X = (int)((int)Msg.LParam & 0x0000FFFFu), Y = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16 } }); handled = false; break; } case WindowMessage.WM_LBUTTONUP: case WindowMessage.WM_RBUTTONUP: { Queued.Add(new QueuedInput { Message = Gui.InputEvents.MouseUp, Args = new Gui.InputEventArgs { Alt = AltDown, Control = CtrlDown, Shift = ShiftDown, MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONUP ? 0 : 1, X = (int)((int)Msg.LParam & 0x0000FFFFu), Y = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16 } }); Queued.Add(new QueuedInput { Message = Gui.InputEvents.MouseClick, Args = new Gui.InputEventArgs { Alt = AltDown, Control = CtrlDown, Shift = ShiftDown, MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONUP ? 0 : 1, X = (int)((int)Msg.LParam & 0x0000FFFFu), Y = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16 } }); handled = false; break; } case WindowMessage.WM_MOUSEMOVE: { Queued.Add(new QueuedInput { Message = Gui.InputEvents.MouseMove, Args = new Gui.InputEventArgs { Alt = AltDown, Control = CtrlDown, Shift = ShiftDown, X = (int)((int)Msg.LParam & 0x0000FFFFu), Y = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16 } }); handled = false; break; } case WindowMessage.WM_MOUSEWHEEL: { Queued.Add(new QueuedInput { Message = Gui.InputEvents.MouseWheel, Args = new Gui.InputEventArgs { Alt = AltDown, Control = CtrlDown, Shift = ShiftDown, ScrollValue = (short)((Msg.WParam.ToInt32() & 0xFFFF0000u) >> 16) } }); handled = false; break; } default: handled = false; break; } QueueLock.ReleaseMutex(); return(handled); }