mirror of
https://github.com/kangyu-california/PersistentWindows.git
synced 2025-05-11 21:15:38 +02:00
dump window pos to xml file before exit, reload window pos from xml when PW start
This commit is contained in:
parent
958624db0a
commit
5fc803757a
4 changed files with 78 additions and 1 deletions
|
@ -36,6 +36,7 @@
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -9,6 +9,8 @@ using System.Threading;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
using LiteDB;
|
using LiteDB;
|
||||||
|
|
||||||
|
@ -135,6 +137,9 @@ namespace PersistentWindows.Common
|
||||||
"chrome", "firefox", "msedge", "vivaldi", "opera", "brave", "360ChromeX"
|
"chrome", "firefox", "msedge", "vivaldi", "opera", "brave", "360ChromeX"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private string windowPosDataFile = "window_pos.xml";
|
||||||
|
private string snapshotTimeFile = "snapshot_time.xml";
|
||||||
|
|
||||||
private HashSet<string> ignoreProcess = new HashSet<string>();
|
private HashSet<string> ignoreProcess = new HashSet<string>();
|
||||||
private HashSet<string> debugProcess = new HashSet<string>();
|
private HashSet<string> debugProcess = new HashSet<string>();
|
||||||
private HashSet<IntPtr> debugWindows = new HashSet<IntPtr>();
|
private HashSet<IntPtr> debugWindows = new HashSet<IntPtr>();
|
||||||
|
@ -197,6 +202,59 @@ namespace PersistentWindows.Common
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
public void WriteDataDump()
|
||||||
|
{
|
||||||
|
DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Dictionary<IntPtr, List<ApplicationDisplayMetrics>>>));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
using (XmlWriter xw = XmlWriter.Create(sb))
|
||||||
|
{
|
||||||
|
dcs.WriteObject(xw, monitorApplications);
|
||||||
|
}
|
||||||
|
string xml = sb.ToString();
|
||||||
|
File.WriteAllText(Path.Combine(appDataFolder, windowPosDataFile), xml, Encoding.Unicode);
|
||||||
|
|
||||||
|
DataContractSerializer dcs2 = new DataContractSerializer(typeof(Dictionary<string, Dictionary<int, DateTime>>));
|
||||||
|
StringBuilder sb2 = new StringBuilder();
|
||||||
|
using (XmlWriter xw = XmlWriter.Create(sb2))
|
||||||
|
{
|
||||||
|
dcs2.WriteObject(xw, snapshotTakenTime);
|
||||||
|
}
|
||||||
|
string xml2 = sb2.ToString();
|
||||||
|
File.WriteAllText(Path.Combine(appDataFolder, snapshotTimeFile), xml2, Encoding.Unicode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReadDataDump()
|
||||||
|
{
|
||||||
|
DataContractSerializer dcs = new DataContractSerializer(typeof(Dictionary<string, Dictionary<IntPtr, List<ApplicationDisplayMetrics>>>));
|
||||||
|
using (FileStream fs = File.OpenRead(Path.Combine(appDataFolder, windowPosDataFile)))
|
||||||
|
using (XmlReader xr = XmlReader.Create(fs))
|
||||||
|
{
|
||||||
|
monitorApplications = (Dictionary<string, Dictionary<IntPtr, List<ApplicationDisplayMetrics>>>)dcs.ReadObject(xr);
|
||||||
|
}
|
||||||
|
File.Delete(Path.Combine(appDataFolder, windowPosDataFile));
|
||||||
|
|
||||||
|
DataContractSerializer dcs2 = new DataContractSerializer(typeof(Dictionary<string, Dictionary<int, DateTime>>));
|
||||||
|
using (FileStream fs = File.OpenRead(Path.Combine(appDataFolder, snapshotTimeFile)))
|
||||||
|
using (XmlReader xr = XmlReader.Create(fs))
|
||||||
|
{
|
||||||
|
snapshotTakenTime = (Dictionary<string, Dictionary<int, DateTime>>)dcs2.ReadObject(xr);
|
||||||
|
}
|
||||||
|
File.Delete(Path.Combine(appDataFolder, snapshotTimeFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReadDataDumpSafe()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ReadDataDump();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CleanupDisplayRegKey(string key)
|
private void CleanupDisplayRegKey(string key)
|
||||||
{
|
{
|
||||||
if (key.Contains("__"))
|
if (key.Contains("__"))
|
||||||
|
@ -312,6 +370,7 @@ namespace PersistentWindows.Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReadDataDumpSafe();
|
||||||
curDisplayKey = GetDisplayKey();
|
curDisplayKey = GetDisplayKey();
|
||||||
CaptureNewDisplayConfig(curDisplayKey);
|
CaptureNewDisplayConfig(curDisplayKey);
|
||||||
|
|
||||||
|
@ -795,6 +854,8 @@ namespace PersistentWindows.Common
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
remoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession;
|
remoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession;
|
||||||
|
bool sshot_exist = snapshotTakenTime.ContainsKey(curDisplayKey);
|
||||||
|
enableRestoreSnapshotMenu(sshot_exist);
|
||||||
Log.Event($"Display config is {curDisplayKey}");
|
Log.Event($"Display config is {curDisplayKey}");
|
||||||
using (var persistDB = new LiteDatabase(persistDbName))
|
using (var persistDB = new LiteDatabase(persistDbName))
|
||||||
{
|
{
|
||||||
|
|
|
@ -774,5 +774,16 @@ namespace PersistentWindows.SystrayShell
|
||||||
Log.Error(format, args);
|
Log.Error(format, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void WriteDataDump()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
pwp.WriteDataDump();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,7 +172,6 @@ namespace PersistentWindows.SystrayShell
|
||||||
ctrlKeyPressed = 0;
|
ctrlKeyPressed = 0;
|
||||||
shiftKeyPressed = 0;
|
shiftKeyPressed = 0;
|
||||||
altKeyPressed = 0;
|
altKeyPressed = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
|
//private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
|
||||||
|
@ -281,6 +280,8 @@ namespace PersistentWindows.SystrayShell
|
||||||
|
|
||||||
private void Exit()
|
private void Exit()
|
||||||
{
|
{
|
||||||
|
Program.WriteDataDump();
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
this.notifyIconMain.Visible = false;
|
this.notifyIconMain.Visible = false;
|
||||||
#endif
|
#endif
|
||||||
|
@ -288,8 +289,11 @@ namespace PersistentWindows.SystrayShell
|
||||||
Log.Exit();
|
Log.Exit();
|
||||||
Application.Exit();
|
Application.Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Upgrade()
|
private void Upgrade()
|
||||||
{
|
{
|
||||||
|
Program.WriteDataDump();
|
||||||
|
|
||||||
string batFile = Path.Combine(Program.AppdataFolder, "pw_upgrade.bat");
|
string batFile = Path.Combine(Program.AppdataFolder, "pw_upgrade.bat");
|
||||||
Process.Start(batFile);
|
Process.Start(batFile);
|
||||||
Exit();
|
Exit();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue