Пример #1
0
        private int _HookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && (HookEvent != null || gbTrace))
            {
                User.Struct.CWPSTRUCT cwp = (User.Struct.CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(User.Struct.CWPSTRUCT));
                User.WM message           = Messages.GetWindowMessage(cwp.message);

                if (gbTrace)
                {
                    string sMessage = message.ToString();
                    if (message == User.WM.WM_UNKNOW)
                    {
                        sMessage += " (" + cwp.message.ToString("x") + ")";
                    }
                    string sCode; if (nCode == User.Const.HC_ACTION)
                    {
                        sCode = "HC_ACTION";
                    }
                    else
                    {
                        sCode = nCode.ToString();
                    }
                    pb.Trace.WriteLine("PreWindowHook                                  : {0,-20} {1,-11} wParam {2,-8:x} wParam {3,-8:x} lParam {4,-8:x} hwnd {5:x}", sMessage, sCode, (int)wParam, (int)cwp.wParam, (int)cwp.lParam, (int)cwp.hwnd);
                }

                if (HookEvent != null)
                {
                    PreWindowHookMessage msg = new PreWindowHookMessage()
                    {
                        nCode = nCode, wParam = wParam, lParam = lParam, msg = cwp, wm = message
                    };
                    HookEvent(msg);
                    //if (msg.RemoveMessage) return 0;
                }
            }
            return(User.CallNextHookEx(gHookHandle, nCode, wParam, lParam));
        }
Пример #2
0
        // ParentWindow : WA_ACTIVE WA_CLICKACTIVE, SC_RESTORE
        //      WA_ACTIVE WA_CLICKACTIVE : Active la 1ère fenêtre fille si la fenêtre mère est activée
        //      SC_RESTORE               : Désactive le changement de la 1ère fenêtre (gbDisableSetFirstWindow)
        // Window       : WM_CLOSE, WA_ACTIVE WA_CLICKACTIVE, SC_MINIMIZE
        //      WM_CLOSE                 : Supprime la fenêtre fille et active la 1ère fenêtre fille
        //      WA_ACTIVE WA_CLICKACTIVE : Met la fenêtre fille en 1ère position
        //      SC_MINIMIZE              : Désactive SetFirstWindow et envoie SC_MINIMIZE à la fenêtre parent
        private void PreWindowHookProc(PreWindowHookMessage msg)
        {
            if (msg.nCode != User.Const.HC_ACTION) return;

            User.WA wa = User.WA.WA_UNKNOW;
            User.SC sc = User.SC.SC_UNKNOW;
            string swParam = null;
            if (msg.wm == User.WM.WM_ACTIVATE)
            {
                short low = msg.msg.wParam.zGetLowValue();
                wa = Messages.GetWA(low);
                swParam = wa.ToString();
            }
            else if (msg.wm == User.WM.WM_SYSCOMMAND)
            {
                sc = Messages.GetSC((int)msg.msg.wParam);
                if (sc != User.SC.SC_MINIMIZE && sc != User.SC.SC_RESTORE) return;
                swParam = sc.ToString();
            }
            else if (msg.wm != User.WM.WM_CLOSE)
                return;

            WindowData window = null;
            window = FindWindow(msg.msg.hwnd);
            string sWindow;
            if (window == null)
            {
                sWindow = "error window not found";
                if (gbTrace)
                    pb.Trace.WriteLine("PreWindowHookProc error           : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, sWindow, (int)msg.msg.hwnd);
                return;
            }
            sWindow = window.Form.Text;


            if (window == gParentWindow)
            {
                if (gbTrace)
                    pb.Trace.WriteLine("PreWindowHookProc ParentWindow    : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, sWindow, (int)msg.msg.hwnd);

                return;

                //switch (msg.wm)
                //{
                //    // Parent Window WA_ACTIVE WA_CLICKACTIVE : Active la 1ère fenêtre fille si la fenêtre mère est activée
                //    case User.WM.WM_ACTIVATE:
                //        if ((wa == User.WA.WA_ACTIVE || wa == User.WA.WA_CLICKACTIVE) && window.Form.WindowState != FormWindowState.Minimized)
                //        {
                //            Form firstWindow = gOrderedWindows[0];
                //            if (firstWindow != null) firstWindow.Activate();
                //        }
                //        break;
                //    // Parent Window SC_RESTORE : Désactive le changement de la 1ère fenêtre (gbDisableSetFirstWindow)
                //    case User.WM.WM_SYSCOMMAND:
                //        if (sc == User.SC.SC_RESTORE)
                //            gbDisableSetFirstWindow = false;
                //        break;
                //}
            }
            else
            {
                if (gbTrace)
                    pb.Trace.WriteLine("PreWindowHookProc Window          : {0,-20} {1,-20} window {2,-25} hWnd {3}", msg.wm, swParam, sWindow, (int)msg.msg.hwnd);

                return;

                //switch (msg.wm)
                //{
                //    // Child Window WM_CLOSE : Supprime la fenêtre fille et active la 1ère fenêtre fille
                //    case User.WM.WM_CLOSE:
                //        RemoveWindow(window.Form);
                //        ActivateFirstWindow();
                //        break;
                //    // Child Window WA_ACTIVE WA_CLICKACTIVE : Met la fenêtre fille en 1ère position
                //    case User.WM.WM_ACTIVATE:
                //        if (wa == User.WA.WA_CLICKACTIVE || wa == User.WA.WA_ACTIVE)
                //            SetFirstWindow(window.Form);
                //        break;
                //    // Child Window SC_MINIMIZE : Désactive SetFirstWindow et envoie SC_MINIMIZE à la fenêtre parent
                //    case User.WM.WM_SYSCOMMAND:
                //        Form parentWindow = window.Form.Owner;
                //        if (parentWindow == null)
                //        {
                //            if (gbTrace) pb.Trace.WriteLine("PreWindowHookProc Window error    : error this window dont have parent");
                //            break;
                //        }
                //        if (sc == User.SC.SC_MINIMIZE)
                //        {
                //            //gbDisableSetFirstWindow = true;
                //            //Point pt = Cursor.Position;
                //            //User.SendMessage(parentWindow.Handle, (uint)User.WM.WM_SYSCOMMAND, (IntPtr)User.SC.SC_MINIMIZE, new IntPtr(cu.MakeValue(pt.X, pt.Y)));
                //            //msg.RemoveMessage = true;
                //        }
                //        break;
                //}
            }
        }
Пример #3
0
        private int _HookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && (HookEvent != null || gbTrace))
            {
                User.Struct.CWPSTRUCT cwp = (User.Struct.CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(User.Struct.CWPSTRUCT));
                User.WM message = Messages.GetWindowMessage(cwp.message);

                if (gbTrace)
                {
                    string sMessage = message.ToString();
                    if (message == User.WM.WM_UNKNOW) sMessage += " (" + cwp.message.ToString("x") + ")";
                    string sCode; if (nCode == User.Const.HC_ACTION) sCode = "HC_ACTION"; else sCode = nCode.ToString();
                    pb.Trace.CurrentTrace.WriteLine("PreWindowHook                                  : {0,-20} {1,-11} wParam {2,-8:x} wParam {3,-8:x} lParam {4,-8:x} hwnd {5:x}", sMessage, sCode, (int)wParam, (int)cwp.wParam, (int)cwp.lParam, (int)cwp.hwnd);
                }

                if (HookEvent != null)
                {
                    PreWindowHookMessage msg = new PreWindowHookMessage() { nCode = nCode, wParam = wParam, lParam = lParam, msg = cwp, wm = message };
                    HookEvent(msg);
                    //if (msg.RemoveMessage) return 0;
                }
            }
            return User.CallNextHookEx(gHookHandle, nCode, wParam, lParam);
        }