mirror of
https://github.com/DaKerboul/perun.git
synced 2026-08-09 17:05:39 +02:00
Added #4 - only one instance will be allowed to run
This commit is contained in:
13
02_Windows_App/Perun_v1/01_Classes/NativeMethods.cs
Normal file
13
02_Windows_App/Perun_v1/01_Classes/NativeMethods.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
// this class just wraps some Win32 stuff that we're going to use for blocking of multiple instances
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal class NativeMethods
|
||||
{
|
||||
public const int HWND_BROADCAST = 0xffff;
|
||||
public static readonly int WM_SHOWME = RegisterWindowMessage("WM_SHOWME");
|
||||
[DllImport("user32")]
|
||||
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
|
||||
[DllImport("user32")]
|
||||
public static extern int RegisterWindowMessage(string message);
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Perun_v1
|
||||
@@ -9,24 +10,39 @@ namespace Perun_v1
|
||||
/// <summary>
|
||||
/// Główny punkt wejścia dla aplikacji.
|
||||
/// </summary>
|
||||
|
||||
// Mutex to block multiple instances
|
||||
static Mutex mutex = new Mutex(true, "{5a710507-92e9-4664-9b91-918b8b82f107}");
|
||||
[STAThread]
|
||||
|
||||
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
||||
|
||||
void Application_ApplicationExit(object sender, EventArgs e)
|
||||
if (mutex.WaitOne(TimeSpan.Zero, true))
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
||||
|
||||
Application.Run(new form_Main());
|
||||
void Application_ApplicationExit(object sender, EventArgs e)
|
||||
{
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
Application.Run(new form_Main());
|
||||
mutex.ReleaseMutex();
|
||||
}
|
||||
else
|
||||
{
|
||||
// send our Win32 message to make the currently running instance
|
||||
// jump on top of all the other windows
|
||||
NativeMethods.PostMessage(
|
||||
(IntPtr)NativeMethods.HWND_BROADCAST,
|
||||
NativeMethods.WM_SHOWME,
|
||||
IntPtr.Zero,
|
||||
IntPtr.Zero);
|
||||
MessageBox.Show("Only one instance is allowed.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -544,5 +544,27 @@ namespace Perun_v1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
if (m.Msg == NativeMethods.WM_SHOWME)
|
||||
{
|
||||
ShowMe();
|
||||
}
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
private void ShowMe()
|
||||
{
|
||||
if (WindowState == FormWindowState.Minimized)
|
||||
{
|
||||
WindowState = FormWindowState.Normal;
|
||||
}
|
||||
// get our current "TopMost" value (ours will always be false though)
|
||||
bool top = TopMost;
|
||||
// make our form jump to the top of everything
|
||||
TopMost = true;
|
||||
// set it back to whatever it was
|
||||
TopMost = top;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<SuiteName>Perun</SuiteName>
|
||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||
<WebPage>Perun.htm</WebPage>
|
||||
<ApplicationRevision>1</ApplicationRevision>
|
||||
<ApplicationRevision>2</ApplicationRevision>
|
||||
<ApplicationVersion>0.4.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||
@@ -116,6 +116,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="01_Classes\NativeMethods.cs" />
|
||||
<Compile Include="02_Forms\form_Main.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
||||
Reference in New Issue
Block a user