Solved

Test if application is already running

Posted on 2009-07-03
3
216 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
TextBelt send file contents 20 144
Mobile Apps | App Store | App Name Already Exists 4 128
Create a simple barcode reader for Windows phone 8.1 (wp8) 2 111
Single Number Reach 3 98
With Windows Embedded Handheld, called Windows Mobile, Microsoft re-designed the user interface. The Start Icon moved down to the bottom, inside the menu bar area.   If you need to hide the Start Icon and/or the SIP (soft input panel, softwar…
Once again I push the limits of my phone.  An introduction to the Android Google Now Launcher.
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…
Suggested Courses

738 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