Восстанавливаемся при повторном запуске

This commit is contained in:
Danil Kislov
2019-03-22 16:16:57 +03:00
parent a97bb39103
commit 8f4e344449
6 changed files with 80 additions and 33 deletions
+1 -1
View File
@@ -1 +1 @@
1.0.32
1.0.33
+1
View File
@@ -116,6 +116,7 @@
<Compile Include="UI\frmSettings.Designer.cs">
<DependentUpon>frmSettings.cs</DependentUpon>
</Compile>
<Compile Include="UI\Tray\SingleInstance.cs" />
<Compile Include="UI\Tray\ITrayMenu.cs" />
<Compile Include="UI\Tray\RestoreFromTray.cs" />
<Compile Include="UI\Tray\TrayMenu.cs" />
+2 -1
View File
@@ -4,6 +4,7 @@ using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using JiraTimeBot.UI.Tray;
namespace JiraTimeBot
{
@@ -25,7 +26,7 @@ namespace JiraTimeBot
}
else
{
MessageBox.Show("Another instance of the app is already running.");
SingleInstance.ShowFirstInstance();
}
}
}
+3 -3
View File
@@ -26,6 +26,6 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.32")]
[assembly: AssemblyFileVersion("1.0.32")]
[assembly: AssemblyInformationalVersion("1.0.32")]
[assembly: AssemblyVersion("1.0.33")]
[assembly: AssemblyFileVersion("1.0.33")]
[assembly: AssemblyInformationalVersion("1.0.33")]
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace JiraTimeBot.UI.Tray
{
static class SingleInstance
{
public static readonly int WM_SHOWFIRSTINSTANCE = RegisterWindowMessage($"WM_SHOWFIRSTINSTANCE|{AssemblyGuid}");
public static void ShowFirstInstance()
{
const int HWND_BROADCAST = 0xffff;
PostMessage((IntPtr)HWND_BROADCAST, WM_SHOWFIRSTINSTANCE, IntPtr.Zero, IntPtr.Zero);
}
public static string AssemblyGuid
{
get
{
object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false);
if (attributes.Length == 0) {
return string.Empty;
}
return ((GuidAttribute)attributes[0]).Value;
}
}
[DllImport("user32")]
public static extern int RegisterWindowMessage(string message);
[DllImport("user32")]
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
}
}
+10
View File
@@ -31,6 +31,16 @@ namespace JiraTimeBot.UI
private readonly Action<string> _settingsErrorReporter;
private bool _updateChecked;
protected override void WndProc(ref Message message)
{
if (message.Msg == SingleInstance.WM_SHOWFIRSTINSTANCE) {
this.Show();
this.WindowState = FormWindowState.Normal;
_trayIcon.Hide();
}
base.WndProc(ref message);
}
private CancellationTokenSource GetTokenSource()
{
var tokenSource = new CancellationTokenSource();