Solved

Test if application is already running

Posted on 2009-07-03
3
214 Views
Last Modified: 2013-12-27
I would like to check if there is already running an instance of program on windows mobile device, so I could prevent multiple lunches of the program.
0
Comment
Question by:uveper
  • 2
3 Comments
 
LVL 24

Expert Comment

by:alexey_gusev
ID: 24770573
with cf.net it is done automatically by framework.

in general, there may be different techniques, such as creating a mutex (some vb example here, but works for wince as well - http://www.mrexcel.com/forum/showthread.php?t=19425), registering your unique window class and then calling FindWindow() to check if there is such one already etc.
0
 

Author Comment

by:uveper
ID: 24770632
what do you mean "with cf.net it is done automatically by framework" ?

I tried to convert vb example to c# but I failed, because I do not fully understand the syntax.
0
 

Accepted Solution

by:
uveper earned 0 total points
ID: 24770808
I found a solution!
using System.Runtime.InteropServices;
 
const string AppNamedEvent = "APP_NAMED__EVENT";
 
        [DllImport("coredll")]
        private extern static void SetWindowText(IntPtr hwnd, string text);
 
        [DllImport("coredll")]
        private static extern IntPtr FindWindow(string className, string wndName);
 
        [DllImport("coredll.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
 
        [DllImport("coredll.dll", EntryPoint = "CreateEvent", SetLastError = true)]
        private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
 
        [DllImport("coredll.dll", EntryPoint = "CloseHandle", SetLastError = true)]
        private static extern IntPtr CloseHandle(IntPtr handle);
 
//Before you do the app.run use the following code
                // makes sure that we have only one run instance
                IntPtr evnt = CreateEvent(IntPtr.Zero, false, false, AppNamedEvent);
                if (Marshal.GetLastWin32Error() != 0)
                {
                    // one instance of application is run, activate it
                    IntPtr hwnd = FindWindow(null, "StartForm");
                    if (hwnd != IntPtr.Zero)
                    {
                       SetForegroundWindow(hwnd);
                    }
                    return;
                }

Open in new window

0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Let me explain this picture a little bit.  First, in case you haven't already guessed, you are looking at my 2 phones, an Android Samsung Galaxy S5 on the left and an iPhone 5 on the right.  They are on their respective cradles on my desk.  But, you…
A short article about problems I had with the new location API and permissions in Marshmallow
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question