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;
|
||||||
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace Perun_v1
|
namespace Perun_v1
|
||||||
@@ -9,24 +10,39 @@ namespace Perun_v1
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Główny punkt wejścia dla aplikacji.
|
/// Główny punkt wejścia dla aplikacji.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
// Mutex to block multiple instances
|
||||||
|
static Mutex mutex = new Mutex(true, "{5a710507-92e9-4664-9b91-918b8b82f107}");
|
||||||
[STAThread]
|
[STAThread]
|
||||||
|
|
||||||
|
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
Application.EnableVisualStyles();
|
if (mutex.WaitOne(TimeSpan.Zero, true))
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
|
||||||
|
|
||||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
|
||||||
|
|
||||||
void Application_ApplicationExit(object sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
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>
|
<SuiteName>Perun</SuiteName>
|
||||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>Perun.htm</WebPage>
|
<WebPage>Perun.htm</WebPage>
|
||||||
<ApplicationRevision>1</ApplicationRevision>
|
<ApplicationRevision>2</ApplicationRevision>
|
||||||
<ApplicationVersion>0.4.0.%2a</ApplicationVersion>
|
<ApplicationVersion>0.4.0.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
@@ -116,6 +116,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="01_Classes\NativeMethods.cs" />
|
||||||
<Compile Include="02_Forms\form_Main.cs">
|
<Compile Include="02_Forms\form_Main.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
Reference in New Issue
Block a user