diff --git a/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/ROEditor.cs b/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/ROEditor.cs index f3706f40..e4a462cf 100644 --- a/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/ROEditor.cs +++ b/PROMS/ReferencedObjects/Exe/RefObj/ROEditor/ROEditor.cs @@ -299,6 +299,7 @@ using ctlXMLEditLib; using RODBInterface; using ROFields; using Org.Mentalis.Files; +using System.Runtime.InteropServices; //using IniFileIO; @@ -431,7 +432,6 @@ namespace ROEditor duplicate_active = false; if (specificro != null) DoSpecificRO(specificro); } - private void DoSpecificRO(string specificro) { // if a specific RO was passed in. Load the xml tree from it to the root & then @@ -1458,9 +1458,28 @@ namespace ROEditor } #endregion + [DllImport("user32.dll")] + static extern bool SetForegroundWindow(IntPtr hWnd); /// /// The main entry point for the application. /// + static void BringWindowToFront() + { + Process currentProcess = Process.GetCurrentProcess(); + Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName); + Process process = null; + for (int i = 0; i < processes.Length; i++) + { + if (processes[i].SessionId != currentProcess.SessionId) + { + process = processes[i]; + break; + } + } + if (process == null) return; + SetForegroundWindow(process.MainWindowHandle); + } + [STAThread] static void Main(string[] args) { @@ -1528,6 +1547,15 @@ namespace ROEditor try { fiown = new FileInfo("RoEditor.own"); + fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + TextReader tr = new StreamReader(fsown); + string who = tr.ReadToEnd(); + tr.Close(); + if (who.Contains(Environment.UserName.ToUpper())) + { + BringWindowToFront(); + return; + } } catch(Exception e) { @@ -1536,11 +1564,34 @@ namespace ROEditor // Open the file just specified. Open it so that no-one else can use it try { - fsown = fiown.Open( FileMode.Create, FileAccess.ReadWrite, FileShare.None ); + fsown = fiown.Open( FileMode.Create, FileAccess.ReadWrite, FileShare.Read ); + TextWriter tw = new StreamWriter(fsown); + tw.WriteLine("Current User: {0}, Date and Time Started: {1}", Environment.UserName.ToUpper(), DateTime.Now.ToString("MM/dd/yyyy @ hh:mm")); + tw.Flush(); } - catch (IOException) + catch (IOException ex) { - MessageBox.Show("Another user is executing the RoEditor"); + fsown = fiown.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + TextReader tr = new StreamReader(fsown); + string who = tr.ReadToEnd(); + tr.Close(); + if(who.Contains(Environment.UserName.ToUpper())) + { + BringWindowToFront(); + + //Process[] p = Process.GetProcessesByName("ROEditor"); + //Process cp = Process.GetCurrentProcess(); + //for (int i = 0; i < p.Length; i++) + //{ + // if (p[i].SessionId != cp.SessionId) + // { + // SetForegroundWindow(p[i].MainWindowHandle); + // break; + // } + //} + } + else + MessageBox.Show(who, "Another user is executing the RoEditor"); return; }