using FSI.BT.Tools.Settings; using FSI.Lib; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Windows; namespace FSI.BT.Tools.Commands { /// /// Shows the main window. /// public class OpenAppCommand : CommandBase { public override void Execute(object parameter) { IEnumerable files = new List(); (string ExePath, string Path, string Arguments) selectedFile = (string.Empty, string.Empty, string.Empty); switch ((string)parameter) { case "SimaticManager": files = Global.AppSettings.Apps.SieSimaticManager; break; case "TIAv13": files = Global.AppSettings.Apps.SieTiaV13; break; case "TIAv14": files = Global.AppSettings.Apps.SieTiaV14; break; case "TIAv15": files = Global.AppSettings.Apps.SieTiaV15; break; case "TIAv16": files = Global.AppSettings.Apps.SieTiaV16; break; case "TIAv17": files = Global.AppSettings.Apps.SieTiaV17; break; case "Starter": files = Global.AppSettings.Apps.SieTiaVStarter; break; case "Epl": files = Global.AppSettings.Apps.Epl; break; case "EplPrj": selectedFile = GetApp(Global.AppSettings.Apps.Epl); Lib.Guis.Prj.Mgt.FrmMain frmMainEplPrj = new Lib.Guis.Prj.Mgt.FrmMain() { ShowPdf = false, CloseAtLostFocus = true, WindowStartupLocation = WindowStartupLocation.CenterScreen, Path = FSI.BT.Tools.Settings.AppSettings.GetFolderByName(Global.AppSettings.Folders, "EplPrj").path, EplExe = selectedFile.ExePath, }; frmMainEplPrj.Show(); return; case "EplPdf": Lib.Guis.Prj.Mgt.FrmMain frmMainEplPdf = new Lib.Guis.Prj.Mgt.FrmMain() { ShowPdf = true, CloseAtLostFocus = true, WindowStartupLocation = WindowStartupLocation.CenterScreen, Path = FSI.BT.Tools.Settings.AppSettings.GetFolderByName(Global.AppSettings.Folders, "EplPdf").path }; frmMainEplPdf.Show(); return; case "EplPdfMgt": Lib.Guis.Pdf.Mgt.FrmMain frmMainEplPdfMgt = new Lib.Guis.Pdf.Mgt.FrmMain() { CloseAtLostFocus = true }; frmMainEplPdfMgt.Show(); return; case "Npp": files = Global.AppSettings.Apps.Npp; break; case "TotalCmd": files = Global.AppSettings.Apps.TotalCmd; break; case "TeXstudio": files = Global.AppSettings.Apps.TeXstudio; break; case "VS": files = Global.AppSettings.Apps.Vs; break; case "VS.Code": files = Global.AppSettings.Apps.VsCode; break; case "Rdp": files = Global.AppSettings.Apps.Rdp; break; case "DeEncrypt": Lib.Guis.DeEncryptMessage.FrmMain frmMainDeEnCrypt = new Lib.Guis.DeEncryptMessage.FrmMain() { Password = GetType().Namespace.ToString(), CloseAtLostFocus = true, WindowStartupLocation = WindowStartupLocation.CenterScreen, }; frmMainDeEnCrypt.Show(); return; case "StarterCsvExporter": Lib.Guis.SieStarterCsvExporter.FrmMain frmMain = new Lib.Guis.SieStarterCsvExporter.FrmMain(); frmMain.Show(); return; case "Admin": Gui.FrmAdmin frmAdmin = new Gui.FrmAdmin() { Admins = Global.Settings.Admins, Users = Global.Settings.Users, }; frmAdmin.ShowDialog(); if (frmAdmin.DialogResult.HasValue && frmAdmin.DialogResult.Value) { Global.Settings.Admins = frmAdmin.Admins; Global.Settings.Users = frmAdmin.Users; } return; case "Folder": Lib.Guis.Folder.Mgt.FrmMain frmFolderMgtMain = new Lib.Guis.Folder.Mgt.FrmMain() { CloseAtLostFocus = true, Data = Global.AppSettings.Folders }; frmFolderMgtMain.Show(); return; //case "TxtToClip": // Lib.Guis.TxtToClip.Mgt.FrmMain frmTxtToClipMain = new Lib.Guis.TxtToClip.Mgt.FrmMain() // { // CloseAtLostFocus = false, // Data = Global.AppSettings.TxtToClip // }; // frmTxtToClipMain.Show(); // return; case "Outlook": files = Global.AppSettings.Apps.Outlook; break; case "Teams": files = Global.AppSettings.Apps.Teams; break; case "Excel": files = Global.AppSettings.Apps.Excel; break; case "Word": files = Global.AppSettings.Apps.Word; break; case "PaintNet": files = Global.AppSettings.Apps.PaintNet; break; case "Gimp": files = Global.AppSettings.Apps.Gimp; break; case "Vnc": files = Global.AppSettings.Apps.Vnc; break; case "VncAdrBook": files = Global.AppSettings.Apps.VncAdrBook; break; case "IbaAnalyzer": files = Global.AppSettings.Apps.IbaAnalyzer; break; } selectedFile = GetApp(files); if (ProgramIsRunning(selectedFile.ExePath)) { ProgramToFront(selectedFile.ExePath); Global.Log.Info("Anwendung \"{0}\" wurde in den Vordergrund gebracht", selectedFile.ExePath); } else { Process process = new Process(); process.StartInfo.FileName = selectedFile.ExePath; process.StartInfo.WorkingDirectory = selectedFile.Path; process.StartInfo.Arguments = selectedFile.Arguments; try { process.Start(); Global.Log.Info("Anwendung \"{0}\" wurde gestartet", selectedFile.ExePath); } catch (System.ComponentModel.Win32Exception ex) when (ex.NativeErrorCode == 740) { try { process.StartInfo.UseShellExecute = true; process.StartInfo.Verb = "runas"; process.Start(); Global.Log.Info("Anwendung \"{0}\" wurde als Admin gestartet", selectedFile.ExePath); } catch (Exception ex2) { Global.Log.Info("Anwendung konnte durch folgenden Fehler \"{0}\" nicht gestartet werden.", ex2.Message); } } } } public override bool CanExecute(object parameter) { IEnumerable files = new List(); switch ((string)parameter) { case "SimaticManager": files = Global.AppSettings.Apps.SieSimaticManager; break; case "TIAv13": files = Global.AppSettings.Apps.SieTiaV13; break; case "TIAv14": files = Global.AppSettings.Apps.SieTiaV14; break; case "TIAv15": files = Global.AppSettings.Apps.SieTiaV15; break; case "TIAv16": files = Global.AppSettings.Apps.SieTiaV16; break; case "TIAv17": files = Global.AppSettings.Apps.SieTiaV17; break; case "Starter": files = Global.AppSettings.Apps.SieTiaVStarter; break; case "Epl": files = Global.AppSettings.Apps.Epl; break; case "EplPrj": return true; case "EplPdf": return true; case "EplPdfMgt": return Global.AdminRights; case "Npp": files = Global.AppSettings.Apps.Npp; break; case "TotalCmd": files = Global.AppSettings.Apps.TotalCmd; break; case "TeXstudio": files = Global.AppSettings.Apps.TeXstudio; break; case "VS": files = Global.AppSettings.Apps.Vs; break; case "VS.Code": files = Global.AppSettings.Apps.VsCode; break; case "Rdp": files = Global.AppSettings.Apps.Rdp; break; case "DeEncrypt": return Global.AdminRights; case "StarterCsvExporter": return Global.AdminRights; case "Admin": return Global.SuperAdminRights; case "Folder": return Global.AppSettings.Folders != null; //case "TxtToClip": // return Global.AppSettings.TxtToClip != null; case "Outlook": files = Global.AppSettings.Apps.Outlook; break; case "Teams": files = Global.AppSettings.Apps.Teams; break; case "Excel": files = Global.AppSettings.Apps.Excel; break; case "Word": files = Global.AppSettings.Apps.Word; break; case "PaintNet": files = Global.AppSettings.Apps.PaintNet; break; case "Gimp": files = Global.AppSettings.Apps.Gimp; break; case "Vnc": files = Global.AppSettings.Apps.Vnc; break; case "VncAdrBook": files = Global.AppSettings.Apps.VncAdrBook; break; case "IbaAnalyzer": files = Global.AppSettings.Apps.IbaAnalyzer; break; default: return false; } foreach (var file in files) { if (File.Exists(Environment.ExpandEnvironmentVariables(file.ExePath.Trim()))) { return true; } } return false; } private bool ProgramIsRunning(string FullPath) { string FilePath = Path.GetDirectoryName(FullPath); string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); bool isRunning = false; Process[] pList = Process.GetProcessesByName(FileName); foreach (Process p in pList) { if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) { isRunning = true; break; } } return isRunning; } private (string ExePath, string Path, string Arguments) GetApp(IEnumerable files) { (string ExePath, string Path, string Arguments) selectedFile = (string.Empty, string.Empty, string.Empty); for (int i = 0; i < files.ToList().Count; i++) { if (File.Exists(Environment.ExpandEnvironmentVariables(files.ToList()[i].ExePath.Trim()))) { selectedFile.ExePath = Environment.ExpandEnvironmentVariables(files.ToList()[i].ExePath.Trim()); selectedFile.Arguments = files.ToList()[i].Arguments; } else { continue; } if (selectedFile.Path == String.Empty) { selectedFile.Path = Path.GetDirectoryName(selectedFile.ExePath); } else { selectedFile.Path = Path.GetDirectoryName(files.ToList()[i].ExePath.Trim()); //selectedFile.Path = Environment.ExpandEnvironmentVariables(files.ToList()[i].ExePath.Trim()); } } return selectedFile; } [System.Runtime.InteropServices.DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr handle); [System.Runtime.InteropServices.DllImport("User32.dll")] private static extern bool ShowWindow(IntPtr handle, int nCmdShow); [System.Runtime.InteropServices.DllImport("User32.dll")] private static extern bool IsIconic(IntPtr handle); private void ProgramToFront(string FullPath) { string FilePath = Path.GetDirectoryName(FullPath); string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower(); Process[] pList = Process.GetProcessesByName(FileName); foreach (Process p in pList) { if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase)) { IntPtr handle = p.MainWindowHandle; if (IsIconic(handle)) { ShowWindow(handle, 9); } SetForegroundWindow(handle); break; } } } } }