mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
Fixed application process monitoring
Stopped the application threat monitoring halting the UI completely, which fixed some UI updating issues. Now UI thread continues to poll waiting for appl/game to exit, but does it in a loop rather than blocking using WaitForExit(). Means that the notification icon gets updated and the UI gets a MaskedForm over it.
This commit is contained in:
parent
ccefa80642
commit
dce0ed8252
6
HeliosPlus/Resources/Language.Designer.cs
generated
6
HeliosPlus/Resources/Language.Designer.cs
generated
@ -593,11 +593,11 @@ namespace HeliosPlus.Resources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Selected file is not a valid executable file..
|
/// Looks up a localized string similar to Selected file is not a valid file..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string Selected_file_is_not_a_valid_executable_file {
|
internal static string Selected_file_is_not_a_valid_file {
|
||||||
get {
|
get {
|
||||||
return ResourceManager.GetString("Selected_file_is_not_a_valid_executable_file", resourceCulture);
|
return ResourceManager.GetString("Selected_file_is_not_a_valid_file", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,8 +195,8 @@
|
|||||||
<data name="Helios_Display_Management" xml:space="preserve">
|
<data name="Helios_Display_Management" xml:space="preserve">
|
||||||
<value>Helios Display Management</value>
|
<value>Helios Display Management</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Selected_file_is_not_a_valid_executable_file" xml:space="preserve">
|
<data name="Selected_file_is_not_a_valid_file" xml:space="preserve">
|
||||||
<value>Selected file is not a valid executable file.</value>
|
<value>Selected file is not a valid file.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Executable" xml:space="preserve">
|
<data name="Executable" xml:space="preserve">
|
||||||
<value>Executable</value>
|
<value>Executable</value>
|
||||||
|
@ -597,17 +597,22 @@ namespace HeliosPlus
|
|||||||
// Look for the processes with the ProcessName we want (which in Windows is the filename without the extension)
|
// Look for the processes with the ProcessName we want (which in Windows is the filename without the extension)
|
||||||
processesToMonitor = System.Diagnostics.Process.GetProcessesByName(Path.GetFileNameWithoutExtension(shortcutToUse.DifferentExecutableToMonitor)).ToList();
|
processesToMonitor = System.Diagnostics.Process.GetProcessesByName(Path.GetFileNameWithoutExtension(shortcutToUse.DifferentExecutableToMonitor)).ToList();
|
||||||
|
|
||||||
// TODO: Fix this logic error that will only ever wait for the first process....
|
// If we have found one or more processes then we should be good to go
|
||||||
|
// so let's break
|
||||||
if (processesToMonitor.Count > 0)
|
if (processesToMonitor.Count > 0)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Let's wait a little while if we couldn't find
|
||||||
|
// any processes yet
|
||||||
Thread.Sleep(300);
|
Thread.Sleep(300);
|
||||||
ticks += 300;
|
ticks += 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If none started up before the timeout, then ignore them
|
// If we have reached the timeout and we cannot detect any
|
||||||
|
// of the alernative executables to monitor, then ignore that
|
||||||
|
// setting, and just monitor the process we just started instead
|
||||||
if (processesToMonitor.Count == 0)
|
if (processesToMonitor.Count == 0)
|
||||||
{
|
{
|
||||||
processesToMonitor.Add(process);
|
processesToMonitor.Add(process);
|
||||||
@ -622,22 +627,35 @@ namespace HeliosPlus
|
|||||||
if (substringStart < 0)
|
if (substringStart < 0)
|
||||||
substringStart = 0;
|
substringStart = 0;
|
||||||
notifyIcon.Text = $"HeliosPlus: Running {shortcutToUse.ExecutableNameAndPath.Substring(substringStart)}...";
|
notifyIcon.Text = $"HeliosPlus: Running {shortcutToUse.ExecutableNameAndPath.Substring(substringStart)}...";
|
||||||
Application.DoEvents();
|
//Application.DoEvents();
|
||||||
|
|
||||||
// Wait for the monitored process to exit
|
// Wait for the monitored process to exit
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
int processExitCount = 0;
|
||||||
|
// Check each process to see if it's exited
|
||||||
foreach (var p in processesToMonitor)
|
foreach (var p in processesToMonitor)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
p.WaitForExit();
|
if (p.HasExited)
|
||||||
|
{
|
||||||
|
processExitCount++;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
}
|
||||||
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"ShortcutRepository/RunShortcut exception 2: {ex.Message}: {ex.StackTrace} - {ex.InnerException}");
|
Console.WriteLine($"ShortcutRepository/RunShortcut exception 2: {ex.Message}: {ex.StackTrace} - {ex.InnerException}");
|
||||||
// ignored
|
processExitCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure that all processes have exited
|
||||||
|
// then start the shutdown process
|
||||||
|
if (processExitCount == processesToMonitor.Count)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (shortcutToUse.Category.Equals(ShortcutCategory.Game))
|
else if (shortcutToUse.Category.Equals(ShortcutCategory.Game))
|
||||||
{
|
{
|
||||||
|
34
HeliosPlus/UIForms/ShortcutForm.Designer.cs
generated
34
HeliosPlus/UIForms/ShortcutForm.Designer.cs
generated
@ -42,6 +42,7 @@ namespace HeliosPlus.UIForms
|
|||||||
this.lbl_profile_shown_subtitle = new System.Windows.Forms.Label();
|
this.lbl_profile_shown_subtitle = new System.Windows.Forms.Label();
|
||||||
this.lbl_profile_shown = new System.Windows.Forms.Label();
|
this.lbl_profile_shown = new System.Windows.Forms.Label();
|
||||||
this.ilv_saved_profiles = new Manina.Windows.Forms.ImageListView();
|
this.ilv_saved_profiles = new Manina.Windows.Forms.ImageListView();
|
||||||
|
this.dv_profile = new HeliosPlus.Shared.UserControls.DisplayView();
|
||||||
this.tabp_before = new System.Windows.Forms.TabPage();
|
this.tabp_before = new System.Windows.Forms.TabPage();
|
||||||
this.pnl_start_program4 = new System.Windows.Forms.Panel();
|
this.pnl_start_program4 = new System.Windows.Forms.Panel();
|
||||||
this.cb_start_program4 = new System.Windows.Forms.CheckBox();
|
this.cb_start_program4 = new System.Windows.Forms.CheckBox();
|
||||||
@ -112,7 +113,6 @@ namespace HeliosPlus.UIForms
|
|||||||
this.lbl_title = new System.Windows.Forms.Label();
|
this.lbl_title = new System.Windows.Forms.Label();
|
||||||
this.lbl_shortcut_name = new System.Windows.Forms.Label();
|
this.lbl_shortcut_name = new System.Windows.Forms.Label();
|
||||||
this.cb_autosuggest = new System.Windows.Forms.CheckBox();
|
this.cb_autosuggest = new System.Windows.Forms.CheckBox();
|
||||||
this.dv_profile = new HeliosPlus.Shared.UserControls.DisplayView();
|
|
||||||
this.tabc_shortcut.SuspendLayout();
|
this.tabc_shortcut.SuspendLayout();
|
||||||
this.tabp_display.SuspendLayout();
|
this.tabp_display.SuspendLayout();
|
||||||
this.tabp_before.SuspendLayout();
|
this.tabp_before.SuspendLayout();
|
||||||
@ -169,7 +169,7 @@ namespace HeliosPlus.UIForms
|
|||||||
//
|
//
|
||||||
this.dialog_open.DefaultExt = "exe";
|
this.dialog_open.DefaultExt = "exe";
|
||||||
this.dialog_open.FileName = "*.exe";
|
this.dialog_open.FileName = "*.exe";
|
||||||
this.dialog_open.Filter = global::HeliosPlus.Resources.Language.Executable_Files_Filter;
|
this.dialog_open.Filter = "All Files|*.*";
|
||||||
this.dialog_open.RestoreDirectory = true;
|
this.dialog_open.RestoreDirectory = true;
|
||||||
this.dialog_open.SupportMultiDottedExtensions = true;
|
this.dialog_open.SupportMultiDottedExtensions = true;
|
||||||
//
|
//
|
||||||
@ -253,6 +253,21 @@ namespace HeliosPlus.UIForms
|
|||||||
this.ilv_saved_profiles.View = Manina.Windows.Forms.View.HorizontalStrip;
|
this.ilv_saved_profiles.View = Manina.Windows.Forms.View.HorizontalStrip;
|
||||||
this.ilv_saved_profiles.ItemClick += new Manina.Windows.Forms.ItemClickEventHandler(this.ilv_saved_profiles_ItemClick);
|
this.ilv_saved_profiles.ItemClick += new Manina.Windows.Forms.ItemClickEventHandler(this.ilv_saved_profiles_ItemClick);
|
||||||
//
|
//
|
||||||
|
// dv_profile
|
||||||
|
//
|
||||||
|
this.dv_profile.BackColor = System.Drawing.Color.DimGray;
|
||||||
|
this.dv_profile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.dv_profile.Font = new System.Drawing.Font("Consolas", 50F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.dv_profile.ForeColor = System.Drawing.Color.MidnightBlue;
|
||||||
|
this.dv_profile.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.dv_profile.Margin = new System.Windows.Forms.Padding(18);
|
||||||
|
this.dv_profile.Name = "dv_profile";
|
||||||
|
this.dv_profile.PaddingX = 100;
|
||||||
|
this.dv_profile.PaddingY = 100;
|
||||||
|
this.dv_profile.Profile = null;
|
||||||
|
this.dv_profile.Size = new System.Drawing.Size(1082, 467);
|
||||||
|
this.dv_profile.TabIndex = 23;
|
||||||
|
//
|
||||||
// tabp_before
|
// tabp_before
|
||||||
//
|
//
|
||||||
this.tabp_before.BackColor = System.Drawing.Color.Black;
|
this.tabp_before.BackColor = System.Drawing.Color.Black;
|
||||||
@ -1070,21 +1085,6 @@ namespace HeliosPlus.UIForms
|
|||||||
this.cb_autosuggest.UseVisualStyleBackColor = true;
|
this.cb_autosuggest.UseVisualStyleBackColor = true;
|
||||||
this.cb_autosuggest.CheckedChanged += new System.EventHandler(this.cb_autosuggest_CheckedChanged);
|
this.cb_autosuggest.CheckedChanged += new System.EventHandler(this.cb_autosuggest_CheckedChanged);
|
||||||
//
|
//
|
||||||
// dv_profile
|
|
||||||
//
|
|
||||||
this.dv_profile.BackColor = System.Drawing.Color.DimGray;
|
|
||||||
this.dv_profile.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
|
||||||
this.dv_profile.Font = new System.Drawing.Font("Consolas", 50F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
||||||
this.dv_profile.ForeColor = System.Drawing.Color.MidnightBlue;
|
|
||||||
this.dv_profile.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.dv_profile.Margin = new System.Windows.Forms.Padding(18);
|
|
||||||
this.dv_profile.Name = "dv_profile";
|
|
||||||
this.dv_profile.PaddingX = 100;
|
|
||||||
this.dv_profile.PaddingY = 100;
|
|
||||||
this.dv_profile.Profile = null;
|
|
||||||
this.dv_profile.Size = new System.Drawing.Size(1082, 467);
|
|
||||||
this.dv_profile.TabIndex = 23;
|
|
||||||
//
|
|
||||||
// ShortcutForm
|
// ShortcutForm
|
||||||
//
|
//
|
||||||
this.AcceptButton = this.btn_save;
|
this.AcceptButton = this.btn_save;
|
||||||
|
@ -234,7 +234,7 @@ namespace HeliosPlus.UIForms
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox.Show(
|
MessageBox.Show(
|
||||||
Language.Selected_file_is_not_a_valid_executable_file,
|
Language.Selected_file_is_not_a_valid_file,
|
||||||
Language.Executable,
|
Language.Executable,
|
||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Exclamation);
|
MessageBoxIcon.Exclamation);
|
||||||
@ -484,12 +484,12 @@ namespace HeliosPlus.UIForms
|
|||||||
|
|
||||||
if (rb_wait_alternative_executable.Checked && !String.IsNullOrWhiteSpace(txt_alternative_executable.Text))
|
if (rb_wait_alternative_executable.Checked && !String.IsNullOrWhiteSpace(txt_alternative_executable.Text))
|
||||||
{
|
{
|
||||||
_executableToUse.ProcessNameToMonitorUsesExecutable = true;
|
_executableToUse.ProcessNameToMonitorUsesExecutable = false;
|
||||||
_executableToUse.DifferentExecutableToMonitor = txt_alternative_executable.Text;
|
_executableToUse.DifferentExecutableToMonitor = txt_alternative_executable.Text;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_executableToUse.ProcessNameToMonitorUsesExecutable = false;
|
_executableToUse.ProcessNameToMonitorUsesExecutable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_shortcutToEdit = new ShortcutItem(
|
_shortcutToEdit = new ShortcutItem(
|
||||||
@ -522,6 +522,7 @@ namespace HeliosPlus.UIForms
|
|||||||
_executableToUse.ExecutableNameAndPath,
|
_executableToUse.ExecutableNameAndPath,
|
||||||
_startPrograms,
|
_startPrograms,
|
||||||
_autoName
|
_autoName
|
||||||
|
|
||||||
);
|
);
|
||||||
/* _shortcutToEdit.UpdateNoGameShortcut(
|
/* _shortcutToEdit.UpdateNoGameShortcut(
|
||||||
Name,
|
Name,
|
||||||
@ -976,7 +977,7 @@ namespace HeliosPlus.UIForms
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox.Show(
|
MessageBox.Show(
|
||||||
Language.Selected_file_is_not_a_valid_executable_file,
|
Language.Selected_file_is_not_a_valid_file,
|
||||||
Language.Executable,
|
Language.Executable,
|
||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Exclamation);
|
MessageBoxIcon.Exclamation);
|
||||||
@ -1236,7 +1237,7 @@ namespace HeliosPlus.UIForms
|
|||||||
string textToReturn = "";
|
string textToReturn = "";
|
||||||
if (dialog_open.ShowDialog(this) == DialogResult.OK)
|
if (dialog_open.ShowDialog(this) == DialogResult.OK)
|
||||||
{
|
{
|
||||||
if (File.Exists(dialog_open.FileName) && Path.GetExtension(dialog_open.FileName) == @".exe")
|
if (File.Exists(dialog_open.FileName))
|
||||||
{
|
{
|
||||||
textToReturn = dialog_open.FileName;
|
textToReturn = dialog_open.FileName;
|
||||||
dialog_open.FileName = string.Empty;
|
dialog_open.FileName = string.Empty;
|
||||||
@ -1244,7 +1245,7 @@ namespace HeliosPlus.UIForms
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
MessageBox.Show(
|
MessageBox.Show(
|
||||||
Language.Selected_file_is_not_a_valid_executable_file,
|
Language.Selected_file_is_not_a_valid_file,
|
||||||
Language.Executable,
|
Language.Executable,
|
||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Exclamation);
|
MessageBoxIcon.Exclamation);
|
||||||
|
Loading…
Reference in New Issue
Block a user