Class used for WH_CBT hook event arguments.
Inheritance: System.EventArgs
示例#1
0
 // handle the ACTIVATE hook event
 private void HandleActivateEvent(IntPtr wParam, IntPtr lParam)
 {
     if (WindowActivate != null)
     {
         CbtEventArgs e = new CbtEventArgs(wParam, lParam);
         WindowActivate(this, e);
     }
 }
示例#2
0
 // handle the DESTROYWND hook event
 private void HandleDestroyWndEvent(IntPtr wParam, IntPtr lParam)
 {
     if (WindowDestroye != null)
     {
         CbtEventArgs e = new CbtEventArgs(wParam, lParam);
         WindowDestroye(this, e);
     }
 }
示例#3
0
 // handle the CREATEWND hook event
 private void HandleCreateWndEvent(IntPtr wParam, IntPtr lParam)
 {
     if (WindowCreate != null)
     {
         CbtEventArgs e = new CbtEventArgs(wParam, lParam);
         WindowCreate(this, e);
     }
 }
示例#4
0
 // handle the DESTROYWND hook event
 private void HandleDestroyWndEvent(IntPtr wParam, IntPtr lParam)
 {
     if (WindowDestroye != null)
     {
         CbtEventArgs e = new CbtEventArgs(wParam, lParam);
         WindowDestroye(this, e);
     }
 }
示例#5
0
        public void WndActivate(object sender, CbtEventArgs e)
        {
            IntPtr hMsgBox = e.wParam;

            // try to find a howner for this message box
            if (hOwner == IntPtr.Zero)
                hOwner = USER32.GetActiveWindow();

            // get the MessageBox window rect
            RECT rectDlg = new RECT();
            USER32.GetWindowRect(hMsgBox, ref rectDlg);

            // get the owner window rect
            RECT rectForm = new RECT();
            USER32.GetWindowRect(hOwner, ref rectForm);

            // get the biggest screen area
            Rectangle rectScreen = API.TrueScreenRect;

            // if no parent window, center on the primary screen
            if (rectForm.right == rectForm.left)
                rectForm.right = rectForm.left = Screen.PrimaryScreen.WorkingArea.Width / 2;
            if (rectForm.bottom == rectForm.top)
                rectForm.bottom = rectForm.top = Screen.PrimaryScreen.WorkingArea.Height / 2;

            // center on parent
            int dx = ((rectDlg.left + rectDlg.right) - (rectForm.left + rectForm.right)) / 2;
            int dy = ((rectDlg.top + rectDlg.bottom) - (rectForm.top + rectForm.bottom)) / 2;

            rect = new Rectangle(
                rectDlg.left - dx,
                rectDlg.top - dy,
                rectDlg.right - rectDlg.left,
                rectDlg.bottom - rectDlg.top);

            // place in the screen
            if (rect.Right > rectScreen.Right) rect.Offset(rectScreen.Right - rect.Right, 0);
            if (rect.Bottom > rectScreen.Bottom) rect.Offset(0, rectScreen.Bottom - rect.Bottom);
            if (rect.Left < rectScreen.Left) rect.Offset(rectScreen.Left - rect.Left, 0);
            if (rect.Top < rectScreen.Top) rect.Offset(0, rectScreen.Top - rect.Top);

            if (e.IsDialog)
            {
                // do the job when the WM_INITDIALOG message returns
                wndProcRetHook = new WndProcRetHook(hMsgBox);
                wndProcRetHook.WndProcRet += new WndProcRetHook.WndProcEventHandler(WndProcRet);
                wndProcRetHook.Install();
            }
            else
                USER32.MoveWindow(hMsgBox, rect.Left, rect.Top, rect.Width, rect.Height, 1);

            // uninstall this hook
            WindowsHook wndHook = (WindowsHook)sender;
            Debug.Assert(cbtHook == wndHook);
            cbtHook.Uninstall();
            cbtHook = null;
        }