public static void Save(System.Windows.Window wnd, Action <Dictionary <string, WindowStateData>, string> callback = null) { var wndPos = GetWindowPositionData(); var typeName = wnd.GetType().ToString(); var data = new List <WindowStateData>(); if (wndPos == null) { wndPos = new Dictionary <string, WindowStateData>(); wndPos[typeName] = new WindowStateData(); } else { if (!wndPos.ContainsKey(typeName)) { wndPos[typeName] = new WindowStateData(); } } using (StreamWriter sw = File.CreateText(AppStateFilePath)) { wndPos[typeName].WndName = typeName; wndPos[typeName].Top = wnd.Top; wndPos[typeName].Left = wnd.Left; wndPos[typeName].Width = wnd.Width; wndPos[typeName].Height = wnd.Height; wndPos[typeName].WndState = wnd.WindowState; if (callback != null) { callback(wndPos, typeName); } var json = JsonConvert.SerializeObject(wndPos.Select(d => d.Value).ToArray()); sw.WriteLine(json); } }
public static WindowStateData getAppropriateViewData() { var window = currentWindow(); // var stateData = new WindowStateData(); var placementData = new WINDOWPLACEMENT(); GetWindowPlacement(window, out placementData); stateData.isVisible = (isWindowFocused(window) || (ThisAddIn.instance != null && ThisAddIn.instance.SSSW != null && ThisAddIn.instance.SSSW.HWND != null && isWindowFocused(ThisAddIn.instance.SSSW.HWND))); RECT rect = new RECT(); if (placementData.showCmd != SW_SHOWMAXIMIZED) { GetWindowRect((int)window, ref rect); stateData.X = rect.left; stateData.Y = rect.top; stateData.Height = rect.bottom - rect.top; } else { stateData.X = 0; stateData.Y = 0; stateData.Height = System.Windows.Forms.Screen.FromHandle(window).WorkingArea.Height; } return stateData; }