示例#1
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!_isSlave)
            {
                var psi = new ProcessStartInfo(_anotherExePath)
                {
                    Arguments = string.Format("SLAVEOF {0:X}", Handle.ToInt64()),
                    Verb      = "runas"
                };
                _x86Process = new Process {
                    StartInfo = psi
                };
                _x86Process.Start();

                Utils.SetWindowTopMost(Handle, true);
                Utils.CurrentWindowsList = Utils.GetAllWindows();
                foreach (var hwnd in Utils.CurrentWindowsList)
                {
                    AddToList("Exist", hwnd);
                    if (SystemMenu.InsertSystmMenu(hwnd))
                    {
                        SystemMenu.InitializeSystemMenu(hwnd);
                    }
                }
            }

            Text += IntPtr.Size == 4 ? " (x86)" : " (x64)";

            HookMessages.RegisterMessages();
            HookMethods.StartHook(Handle);
        }
示例#2
0
        private void OnWindowActivated(Message m)
        {
            if (_isSlave)
            {
                NativeMethods.SendNotifyMessage(_masterHwnd, HookMessages.MSG_HSHELL_WINDOWACTIVATED, m.WParam, m.LParam);
                return;
            }

            var hwnd = m.WParam;

            AddToList("Activate", hwnd);
            SystemMenu.InitializeSystemMenu(hwnd);
        }
示例#3
0
        private void OnWindowDestroyed(Message m)
        {
            if (_isSlave)
            {
                NativeMethods.SendNotifyMessage(_masterHwnd, HookMessages.MSG_HSHELL_WINDOWDESTROYED, m.WParam, m.LParam);
                return;
            }

            var hwnd = m.WParam;

            if (!Utils.CurrentWindowsList.Contains(hwnd))
            {
                return;
            }
            Utils.CurrentWindowsList.Remove(hwnd);
            AddToList("Destroy", hwnd, true);
            SystemMenu.RemoveSystemMenu(hwnd);
        }
示例#4
0
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            HookMethods.StopHook();
            HookMessages.UnregisterMessages();

            if (!_isSlave)
            {
                foreach (var hwnd in Utils.CurrentWindowsList)
                {
                    SystemMenu.RemoveSystemMenu(hwnd);
                }
                if (_x86Process != null && !_x86Process.HasExited)
                {
                    Utils.ExitProcess(_x86Process);
                }
            }

            base.OnFormClosing(e);
        }
示例#5
0
        private void OnWindowCreated(Message m)
        {
            if (_isSlave)
            {
                NativeMethods.SendNotifyMessage(_masterHwnd, HookMessages.MSG_HSHELL_WINDOWCREATED, m.WParam, m.LParam);
                return;
            }

            var hwnd = m.WParam;

            if (Utils.CurrentWindowsList.Contains(hwnd))
            {
                return;
            }
            Utils.CurrentWindowsList.Add(hwnd);
            AddToList("Create", hwnd);
            if (SystemMenu.InsertSystmMenu(hwnd))
            {
                SystemMenu.InitializeSystemMenu(hwnd);
            }
        }
示例#6
0
        private void OnWindowGetMessageParams(Message m)
        {
            if (_isSlave)
            {
                NativeMethods.SendNotifyMessage(_masterHwnd, HookMessages.MSG_HGETMESSAGE_PARAMS, m.WParam, m.LParam);
                return;
            }

            if (Utils.CachedHandle == IntPtr.Zero || Utils.CachedMessage == IntPtr.Zero)
            {
                return;
            }
            var hwnd = Utils.CachedHandle;
            var msg  = Utils.CachedMessage;

            AddToList("GetMsgParams", Utils.CachedHandle);
            if (msg.ToInt64() == NativeConstants.WM_SYSCOMMAND)
            {
                uint menuId = (uint)(m.WParam.ToInt64() & 0x0000FFFF);
                switch (menuId)
                {
                case SystemMenu.MENUID_TOPMOST:
                    SystemMenu.ClickTopMostMenuItem(hwnd);
                    break;

                case SystemMenu.MENUID_COPYSCREENSHOT:
                    SystemMenu.ClickCopyScreenshotMenuItem(hwnd);
                    break;

                case SystemMenu.MENUID_OPENPROCESSPATH:
                    SystemMenu.ClickOpenProcessPath(hwnd);
                    break;
                }
            }

            Utils.CachedHandle  = IntPtr.Zero;
            Utils.CachedMessage = IntPtr.Zero;
        }