Пример #1
0
        internal static ContextMenu OpenMenu(UIElement target, bool openByKey, out Clean cleaner)
        {
            cleaner = null;

            FrameworkElement owner = null;
            var tree = TreeUtilityInTarget.VisualTree(target, TreeRunDirection.Ancestors);

            foreach (var e in tree)
            {
                var f = e as FrameworkElement;
                if (f != null && f.ContextMenu != null)
                {
                    owner = f;
                    break;
                }
            }
            if (owner == null)
            {
                throw new NotSupportedException();
            }
            var menu = owner.ContextMenu;

            if (openByKey)
            {
                target.Focus();
                SendInputEx.SendKey(System.Windows.Forms.Keys.Apps);
            }
            else
            {
                int count = menu.CommandBindings.Count;

                foreach (var e in TreeUtilityInTarget.VisualTree(target, TreeRunDirection.Ancestors))
                {
                    var u = e as UIElement;
                    if (u != null && u.CommandBindings != null)
                    {
                        foreach (CommandBinding command in u.CommandBindings)
                        {
                            menu.CommandBindings.Add(command);
                        }
                    }
                }
                target.Focus();
                menu.IsOpen = true;
                InvokeUtility.DoEvents();

                //数を元に戻す
                cleaner = () =>
                {
                    while (count < menu.CommandBindings.Count)
                    {
                        menu.CommandBindings.RemoveAt(menu.CommandBindings.Count - 1);
                    }
                    menu.IsOpen = false;
                };
            }

            return(menu);
        }
Пример #2
0
        internal static void GuiSendKeysPrc(string strSend)
        {
            if (strSend.Length > 0)
            {
                SendInputEx.SendKeysWait(strSend, false);
            }

            Application.DoEvents();
            Thread.Sleep(100);
            Application.DoEvents();
        }