Ejemplo n.º 1
0
        private int KeyboardHookHandler(int code, int wParam, IntPtr lParam)
        {
            try
            {
                if (code >= 0)
                {
                    Keys key      = (Keys)wParam;
                    bool keyState = GetAsyncKeyState(key);

                    if (key != lastKeyCode || keyState != lastKeyState)
                    {
                        lastKeyCode  = key;
                        lastKeyState = keyState;

                        KeyDefinition args = new KeyDefinition();

                        args.KeyCode     = key;
                        args.IsShiftDown = GetAsyncKeyState(Keys.ShiftKey);
                        args.IsCtrlDown  = GetAsyncKeyState(Keys.ControlKey);
                        args.IsAltDown   = GetAsyncKeyState(Keys.Menu);
                        args.KeyState    = (KeyState)(int)(keyState ? 1 : 0);

                        OnKeyboardEvent(args);
                    }
                }
            }
            catch (Exception err)
            {
                BatConsole.WriteError("Error in KeyboardHookHandler", err);
            }

            // Yield to the next hook in the chain
            return(CallNextHookEx(hookHandle, code, wParam, lParam));
        }
Ejemplo n.º 2
0
        public static StringBuilder ParseBatControls(string text, out List <ColorMessage.MetaData> metaData)
        {
            StringBuilder stringBuilder = new StringBuilder(text.Length);

            metaData = new List <ColorMessage.MetaData>();

            Color currentFgColor = Color.Empty;
            Color currentBgColor = Color.Empty;

            int pos    = 0;
            int oldPos = 0;

            while (pos < text.Length)
            {
                if (text[pos] == '\t')
                {
                    stringBuilder.Append(' ', 4);
                    pos++;
                    continue;
                }

                if (text[pos] != ESC)
                {
                    stringBuilder.Append(text[pos]);
                    pos++;
                    continue;
                }

                oldPos = pos;

                pos++;                 // skip ESC

                if (pos >= text.Length)
                {
                    stringBuilder.Append(text.Substring(oldPos, pos - oldPos));
                    continue;
                }

                if (text[pos] == '<')
                {
                    pos++;                     // skip <

                    string codeStr = text.Substring(pos, 2);
                    pos += 2;
                    int code = 0;

                    try
                    {
                        code = Int32.Parse(codeStr);
                    }
                    catch (Exception e)
                    {
                        BatConsole.WriteLine(e.ToString());
                    }

                    switch (code)
                    {
                    case 20:
                    {
                        string colorStr = text.Substring(pos, 6);
                        pos += 6;
                        int colorNum = Int32.Parse(colorStr, System.Globalization.NumberStyles.HexNumber);
                        colorNum      |= unchecked ((int)0xff000000);
                        currentFgColor = Color.FromArgb(colorNum);

                        ColorMessage.MetaData md = new ColorMessage.MetaData(stringBuilder.Length, currentFgColor, currentBgColor);
                        metaData.Add(md);

                        pos += 2;                                         // skip ESC|
                        break;
                    }

                    case 21:
                    {
                        string colorStr = text.Substring(pos, 6);
                        pos += 6;
                        int colorNum = Int32.Parse(colorStr, System.Globalization.NumberStyles.HexNumber);
                        colorNum      |= unchecked ((int)0xff000000);
                        currentBgColor = Color.FromArgb(colorNum);

                        ColorMessage.MetaData md = new ColorMessage.MetaData(stringBuilder.Length, currentFgColor, currentBgColor);
                        metaData.Add(md);

                        pos += 2;                                         // skip ESC|
                        break;
                    }

                    default:
                        BatConsole.WriteLine("Unknown control code <{0}", code);
                        break;
                    }
                }
                else if (text[pos] == '>')
                {
                    pos++;                     // skip >

                    string codeStr = text.Substring(pos, 2);
                    pos += 2;
                    int code = Int32.Parse(codeStr);

                    switch (code)
                    {
                    case 20:
                    {
                        currentFgColor = Color.Empty;

                        ColorMessage.MetaData md = new ColorMessage.MetaData(stringBuilder.Length, currentFgColor, currentBgColor);
                        metaData.Add(md);

                        break;
                    }

                    case 21:
                    {
                        currentBgColor = Color.Empty;

                        ColorMessage.MetaData md = new ColorMessage.MetaData(stringBuilder.Length, currentFgColor, currentBgColor);
                        metaData.Add(md);

                        break;
                    }

                    default:
                        BatConsole.WriteLine("Unknown control code >{0}", code);
                        break;
                    }
                }
                else
                {
                    BatConsole.WriteLine("Unknown esc-control command: {0}", text[pos]);
                }
            }

            return(stringBuilder);
        }