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); }
internal static void GuiSendKeysPrc(string strSend) { if (strSend.Length > 0) { SendInputEx.SendKeysWait(strSend, false); } Application.DoEvents(); Thread.Sleep(100); Application.DoEvents(); }