示例#1
0
        private static void BrindTopWndAssistAndDesk(TopWnd wnd)
        {
            var vwset = AssistBag.Where(k => k.IsVisible).ToList();

            if (vwset.Count > 1)
            {
                var  topWnd = GetTopMostAssistWindowHwnd(vwset);
                bool hasOtherTopDesk;
                if (topWnd.TopDesk == wnd.TopDesk)
                {
                    hasOtherTopDesk = (((topWnd.TopAssistWnd != null) ? topWnd.TopAssistWnd.Desk : null) != topWnd.TopDesk || topWnd.HasOtherWndAssitUptoTopDesk);
                }
                else
                {
                    hasOtherTopDesk = false;
                }
                if (hasOtherTopDesk)
                {
                    var topWndAssist = vwset.FirstOrDefault(k => k.Desk == topWnd.TopDesk);
                    if (topWndAssist != null && topWndAssist.Desk.IsMostlyVisible(true))
                    {
                        topWndAssist.BringTop();
                        topWndAssist.Desk.BringTop();
                    }
                }
            }
        }
示例#2
0
 private static void BringWndAssitOfTopDeskTopMostIfNeed()
 {
     try
     {
         if ((DateTime.Now - _preKeepMultiWndAssitZOrderRightIfNeedTime).TotalMilliseconds >= 100.0)
         {
             _preKeepMultiWndAssitZOrderRightIfNeedTime = DateTime.Now;
             TopWnd topWnd = null;
             var    vwset  = new List <WndAssist>();
             while (true)
             {
                 vwset = AssistBag.Where(k => k.IsVisible).ToList();
                 if (vwset.Count <= 1)
                 {
                     if (vwset.Count == 1)
                     {
                         var wnd = vwset.First();
                         if (wnd.Desk.GetVisiblePercent(true) == 0.0)
                         {
                             wnd.Hide();
                         }
                     }
                     break;
                 }
                 topWnd = GetTopMostAssistWindowHwnd(vwset);
                 if (topWnd == null || topWnd.TopAssistWnd == null || topWnd.TopDesk == null)
                 {
                     break;
                 }
                 if (topWnd.TopDesk.GetVisiblePercent(true) != 0.0)
                 {
                     if (((topWnd.TopAssistWnd != null) ? topWnd.TopAssistWnd.Desk : null) != topWnd.TopDesk || topWnd.HasOtherWndAssitUptoTopDesk)
                     {
                         DelayCaller.CallAfterDelayInUIThread(() =>
                         {
                             BrindTopWndAssistAndDesk(topWnd);
                         }, 500);
                     }
                     break;
                 }
                 topWnd.TopAssistWnd.Hide();
             }
         }
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
示例#3
0
        private static TopWnd GetTopMostAssistWindowHwnd(List <WndAssist> wnds)
        {
            var wndHwnds      = wnds.Select(k => k.Handle);
            var deskHwnds     = wnds.Select(k => k.Desk.Hwnd.Handle);
            var wndZorderDict = new Dictionary <int, int>();
            var topDeskHwnd   = 0;
            var topWndHwnd    = 0;
            var deskZorder    = 0;
            var wndZorder     = 0;
            var zorder        = int.MaxValue;

            WinApi.TraverDesktopHwnd((hwnd) =>
            {
                int fzorder = zorder;
                zorder      = fzorder - 1;
                if (wndHwnds.Contains(hwnd))
                {
                    if (topWndHwnd == 0)
                    {
                        topWndHwnd = hwnd;
                        wndZorder  = zorder;
                    }
                    wndZorderDict[hwnd] = zorder;
                }
                else if (deskHwnds.Contains(hwnd) && topDeskHwnd == 0)
                {
                    topDeskHwnd = hwnd;
                    deskZorder  = zorder;
                }
                return(topWndHwnd == 0 || topDeskHwnd == 0);
            }, null, null);
            var  wndAssist = wnds.FirstOrDefault(k => k.Desk.Hwnd.Handle == topDeskHwnd);
            var  topDesk   = wndAssist != null ? wndAssist.Desk : null;
            bool hasOtherWndAssitUptoTopDesk = false;

            if (topDesk != null)
            {
                var wndAssistOfTop           = wnds.FirstOrDefault(k => k.Desk == topDesk);
                var assistWndHandleOfTopdesk = ((wndAssistOfTop != null) ? new int?(wndAssistOfTop.Handle) : null);
                if (assistWndHandleOfTopdesk != null)
                {
                    hasOtherWndAssitUptoTopDesk = wndZorderDict.Where(kv =>
                    {
                        bool rt;
                        if (kv.Value > topDeskHwnd)
                        {
                            rt = !(kv.Key == assistWndHandleOfTopdesk.GetValueOrDefault() & assistWndHandleOfTopdesk != null);
                        }
                        else
                        {
                            rt = false;
                        }
                        return(rt);
                    }).Any();
                }
            }
            var topWnd       = new TopWnd();
            var topWndAssist = wnds.FirstOrDefault(k => k.Desk.Hwnd.Handle == topDeskHwnd);

            topWnd.TopDesk      = ((topWndAssist != null) ? topWndAssist.Desk : null);
            topWnd.TopAssistWnd = wnds.FirstOrDefault(k => k.Handle == topWndHwnd);
            topWnd.DeskZorder   = deskZorder;
            topWnd.WndZorder    = wndZorder;
            topWnd.HasOtherWndAssitUptoTopDesk = hasOtherWndAssitUptoTopDesk;
            return(topWnd);
        }