Exemple #1
0
        public void Start()
        {
            Task.Factory.StartNew(() =>
            {
                _hookWin = new NativeWindowEx();
                _hookWin.CreateHandle(new CreateParams());

                if (User32.RegisterShellHookWindow(_hookWin.Handle) == false)
                {
                    throw new Exception("Win32 error");
                }

                _wmShellhookmessage       = (int)WUser32.RegisterWindowMessage("SHELLHOOK");
                _hookWin.MessageRecieved += ShellWinProc;
            });
        }
Exemple #2
0
        public static void DockWindow(Window appbarWindow, DockPosition edge, bool autoHide)
        {
            var info = GetRegisterInfo(appbarWindow);

            info.Edge     = edge;
            info.AutoHide = autoHide;

            var abd = new Shell32.Appbardata();

            abd.cbSize = Marshal.SizeOf(abd);
            abd.hWnd   = new WindowInteropHelper(appbarWindow).Handle;

            if (edge == DockPosition.None)
            {
                if (info.IsRegistered)
                {
                    Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_REMOVE, ref abd);
                    info.IsRegistered = false;
                }
                RestoreWindow(appbarWindow);
                return;
            }

            if (!info.IsRegistered)
            {
                info.IsRegistered    = true;
                info.CallbackId      = (int)WUser32.RegisterWindowMessage("AppBarMessage");
                abd.uCallbackMessage = info.CallbackId;

                Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_NEW, ref abd);


                Shell32.SHAppBarMessage((int)Shell32.AppBarMessages.ABM_ACTIVATE, ref abd);

                var source = HwndSource.FromHwnd(abd.hWnd);
                if (source != null)
                {
                    source.AddHook(info.WndProc);
                }
            }

            appbarWindow.WindowStyle = WindowStyle.None;
            appbarWindow.ResizeMode  = ResizeMode.NoResize;
            appbarWindow.Topmost     = true;

            SetPostion(info.Edge, appbarWindow, autoHide);
        }