¿Como detectar si una aplicación ya esta corriendo?

La forma más habitual de hacerlo es creando un objeto mutex global (con nombre) y verificar su estado. El siguiente fragmente de código Win32 muestra cómo hacerlo:


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
    HACCEL hAccelTable;
    // Codigo previo… 
    // Controlar instancias previas
    HANDLE hMtx = CreateMutex( NULL, FALSE, «{FA531CC1-0497-11d3-A180-001052276C3E}» );
    if( GetLastError() == ERROR_ALREADY_EXISTS ) return FALSE;
    // Resto de código…
    return msg.wParam;
}


Un mutex con nombre es un objeto Kernel que puede ser verificado desde cualquier proceso. La primera aplicación lo creará sin problema, pero al intentar crearlo desde un segundo proceso, retornará ERROR_ALREADY_EXISTS. Retornando FALSE desde el WinMain provocamos la salida del programa.


Otro enfoque que tambien que se utiliza en ocasiones es buscar la ventana principal de tu aplicación con la función FindWindow. La ventaja es que una vez localizada la ventana puedes traer esta a primer plano, en lugar de simplemente informar al usuario de que no puede arracar otra instancia de la aplicación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *