void winPosChange(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { long lStyle = WinAPI.GetWindowLong(handle, GWL_STYLE); lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU); SetWindowLongPtr(handle, GWL_STYLE, lStyle); long lExStyle = WinAPI.GetWindowLong(handle, GWL_EXSTYLE); lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE); SetWindowLongPtr(handle, GWL_EXSTYLE, lExStyle); WinAPI.SetWindowPos(handle, HWND_BOTTOM, 0, -40, fWidth, fHeight, (int)(SetWindowPosFlags.SWP_FRAMECHANGED | SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOSIZE | SetWindowPosFlags.SWP_NOZORDER | SetWindowPosFlags.SWP_NOOWNERZORDER)); WINDOWPOS wndPos = WINDOWPOS.FromMessage(hWnd, msg, wParam, lParam); wndPos.flags = wndPos.flags | SetWindowPosFlags.SWP_NOZORDER; wndPos.UpdateMessage(hWnd, msg, wParam, lParam); ShowWindow(handle, (int)ShowWindowFlags.SW_SHOWMAXIMIZED); }
static void winPosChange(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { if (ShowWindow(handle, (int)ShowWindowFlags.SW_SHOWMAXIMIZED)) { if (borderless) { long lStyle = WinAPI.GetWindowLong(handle, GWL_STYLE); lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU); SetWindowLongPtr(handle, GWL_STYLE, lStyle); long lExStyle = WinAPI.GetWindowLong(handle, GWL_EXSTYLE); lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE | WS_EX_APPWINDOW); SetWindowLongPtr(handle, GWL_EXSTYLE, lExStyle); } if (keepBottomMost) { WINDOWPOS wndPos = WINDOWPOS.FromMessage(hWnd, msg, wParam, lParam); wndPos.flags = wndPos.flags | SetWindowPosFlags.SWP_NOZORDER; wndPos.UpdateMessage(hWnd, msg, wParam, lParam); } } }
public IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) { switch ((WM)msg) { case WM.COPYDATA: if (lParam == IntPtr.Zero) { CairoLogger.Instance.Debug("TrayService: CopyData is null"); break; } COPYDATASTRUCT copyData = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam, typeof(COPYDATASTRUCT)); switch ((int)copyData.dwData) { case 0: // AppBar message if (Marshal.SizeOf(typeof(APPBARMSGDATAV3)) == copyData.cbData) { APPBARMSGDATAV3 amd = (APPBARMSGDATAV3)Marshal.PtrToStructure(copyData.lpData, typeof(APPBARMSGDATAV3)); if (Marshal.SizeOf(typeof(APPBARDATAV2)) != amd.abd.cbSize) { CairoLogger.Instance.Debug("TrayService: Size incorrect for APPBARMSGDATAV3"); break; } if (AppBarMessageAction(amd)) { return((IntPtr)1); } } else { CairoLogger.Instance.Debug("TrayService: AppBar message received, but with unknown size"); } break; case 1: SHELLTRAYDATA trayData = (SHELLTRAYDATA)Marshal.PtrToStructure(copyData.lpData, typeof(SHELLTRAYDATA)); if (trayDelegate != null) { if (trayDelegate(trayData.dwMessage, new SafeNotifyIconData(trayData.nid))) { return((IntPtr)1); } CairoLogger.Instance.Debug("TrayService: Ignored notify icon message"); } else { CairoLogger.Instance.Info("TrayService: TrayDelegate is null"); } break; case 3: WINNOTIFYICONIDENTIFIER iconData = (WINNOTIFYICONIDENTIFIER)Marshal.PtrToStructure(copyData.lpData, typeof(WINNOTIFYICONIDENTIFIER)); if (iconDataDelegate != null) { return(iconDataDelegate(iconData.dwMessage, iconData.hWnd, iconData.uID, iconData.guidItem)); } CairoLogger.Instance.Info("TrayService: IconDataDelegate is null"); break; } break; case WM.WINDOWPOSCHANGED: WINDOWPOS wndPos = WINDOWPOS.FromMessage(lParam); if ((wndPos.flags & SetWindowPosFlags.SWP_SHOWWINDOW) != 0) { SetWindowLong(HwndTray, GWL_STYLE, GetWindowLong(HwndTray, GWL_STYLE) & ~(int)WindowStyles.WS_VISIBLE); CairoLogger.Instance.Debug($"TrayService: {TrayWndClass} became visible; hiding"); } break; } if (msg == (int)WM.COPYDATA || msg == (int)WM.ACTIVATEAPP) { return(ForwardMsg(msg, wParam, lParam)); } return(DefWindowProc(hWnd, msg, wParam, lParam)); }