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; }); }
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); }