none
Descobrir se existe uma aplicação aberta RRS feed

  • Pergunta

  • Gostaria de saber se existe uma maneira de descobrir com c++ se uma determinada aplicação está aberta... ex:

     

    Se 

    "MSN" = aberto

    entao

    fecha minha aplicação

    fim do entao

    segunda-feira, 14 de março de 2011 07:40

Respostas

  • Existe algumas maneiras:

    1. FindWindow pelo título da janela: http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx

    2. Procurar se os processo da aplicação desejada está rodando.

    3. Ou identificar se ela tem um primitiva nomeada, tipo um Named Mutex, ao qual vc pode tentar ler.

    Normalmente, nos processos que eu escrevo e desejo usar uma instancia no sistema, eu uso este tipo que desenvolvi:

    struct unique_named_mutex
    {
     unique_named_mutex( LPCWSTR mutexName )
      : Mutex_( NULL )
     {
      if( NULL != OpenMutex( READ_CONTROL, FALSE, mutexName ) )
       throw new exception( "Instance already is running" );

      Mutex_ = CreateMutex( NULL, TRUE, mutexName );
      if( NULL == Mutex_ )
       throw new exception( "Instance already is running" );
     }

     ~unique_named_mutex()
     {
      if( NULL != Mutex_ )
       CloseHandle( Mutex_ );
     }

    private:
     HANDLE Mutex_;
    };

     


    Fabio Galuppo
    • Marcado como Resposta Coopermine segunda-feira, 14 de março de 2011 20:50
    segunda-feira, 14 de março de 2011 14:13

Todas as Respostas

  • Existe algumas maneiras:

    1. FindWindow pelo título da janela: http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx

    2. Procurar se os processo da aplicação desejada está rodando.

    3. Ou identificar se ela tem um primitiva nomeada, tipo um Named Mutex, ao qual vc pode tentar ler.

    Normalmente, nos processos que eu escrevo e desejo usar uma instancia no sistema, eu uso este tipo que desenvolvi:

    struct unique_named_mutex
    {
     unique_named_mutex( LPCWSTR mutexName )
      : Mutex_( NULL )
     {
      if( NULL != OpenMutex( READ_CONTROL, FALSE, mutexName ) )
       throw new exception( "Instance already is running" );

      Mutex_ = CreateMutex( NULL, TRUE, mutexName );
      if( NULL == Mutex_ )
       throw new exception( "Instance already is running" );
     }

     ~unique_named_mutex()
     {
      if( NULL != Mutex_ )
       CloseHandle( Mutex_ );
     }

    private:
     HANDLE Mutex_;
    };

     


    Fabio Galuppo
    • Marcado como Resposta Coopermine segunda-feira, 14 de março de 2011 20:50
    segunda-feira, 14 de março de 2011 14:13
  • segunda-feira, 14 de março de 2011 20:54
  • Muito legal essa solução com Mutex.

    Sempre usei as opções 1 ou 2, dependnedo do tipo de aplicação, mas essa abordagem com Mutex é interessante, mais genérica.

    Abraços, cox


    cox
    sábado, 19 de março de 2011 01:59