Solved

Test if application is already running

Posted on 2009-07-03
3
209 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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Progress means simplifying, not complicating. Bruno Munari Preface How to detect the name of the internal storage or an SD-card on Windows Mobile device from the desktop application? I got this question, when I was working on a PC applicati…
Once again I push the limits of my phone.  An introduction to the Android Google Now Launcher.
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

770 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