Files
FSI.BT.IR.Tools/FSI.BT.Tools/Commands/OpenAppCommand.cs
Maier Stephan SI d01747f75a Sicherung
2023-01-02 04:33:49 +01:00

450 lines
15 KiB
C#

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
{
/// <summary>
/// Shows the main window.
/// </summary>
public class OpenAppCommand : CommandBase<OpenAppCommand>
{
public override void Execute(object parameter)
{
IEnumerable<Settings.Exe.IExe> files = new List<Settings.Exe.IExe>();
(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<Settings.Exe.IExe> files = new List<Settings.Exe.IExe>();
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<Settings.Exe.IExe> 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;
}
}
}
}
}