Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Detectar proceso en ejecucion C++ (https://www.clubdelphi.com/foros/showthread.php?t=79987)

dmartinezn 26-08-2012 21:46:11

Detectar proceso en ejecucion C++
 
Saludos a todos
Quisiera saber como pudiera determinar si un proceso esta en ejecucion o no desde c++.
Tengo un programa que al darle en un boton inicializa un servidor mysql , este es el proceso del servidor en ejecucion(mysqld_usbwv8.exe). Lo que quiero lograr es que si ya ese proceso esta en ejecucion o no me lo confirme.

escafandra 27-08-2012 01:59:00

Sigue éste hilo.


Saludos.

dmartinezn 27-08-2012 16:02:51

Gracias escafandra
Probe este codigo y funciona perfectamente en c++ Builder 6, cuando lo pruebo en c++ builder xe me sale el siguiente error:
Código:

E2034 Cannot convert 'wchar_t *' to 'const char *'
Eso sucede en la linea: if(!stricmp(Proceso.szExeFile, FileName))
Por que sucedera eso?,se podra corregir para que funione en esta version?
Saludos.
Código:

bool IsRuning(char* FileName)
{
  PROCESSENTRY32 Proceso;
  HANDLE ProcessHandle;
  bool Result = false;

  Proceso.dwSize = sizeof(PROCESSENTRY32);
  ProcessHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Process32First(ProcessHandle, &Proceso)){
    do{
      if(!stricmp(Proceso.szExeFile, FileName)){
        Result = true;
        break;
      }
    }while(Process32Next(ProcessHandle, &Proceso));
  }
  CloseHandle(ProcessHandle);
  return Result;
}


escafandra 28-08-2012 00:36:40

Pues usemos la versión Unicode para el builder xe (y para bcb6) ;):

Código:

bool IsRuningW(WCHAR* FileName)
{
  PROCESSENTRY32W Proceso;
  HANDLE ProcessHandle;
  bool Result = false;

  Proceso.dwSize = sizeof(PROCESSENTRY32W);
  ProcessHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Process32FirstW(ProcessHandle, &Proceso)){
    do{
      if(!_wcsicmp(Proceso.szExeFile, FileName)){
        Result = true;
        break;
      }
    }while(Process32NextW(ProcessHandle, &Proceso));
  }
  CloseHandle(ProcessHandle);
  return Result;
}


Saludos.

escafandra 28-08-2012 08:36:14

Una cosa mas, si quieres que el código encuentre procesos de 16 bits debes seguir leyendo el enlace que te pasé.


Saludos.

dmartinezn 28-08-2012 20:39:35

Muchas gracias escafandra , funciona perfectamente,pase tremendo trabajo para poder realizar la llamada de
Código:

bool IsRuningW(WCHAR* FileName)
finalmente lo consegui de esta forma:
Código:

wchar_t *Server = L"mysqld_usbwv8.exe";
 bool Conectado = IsRuningW(Server) ;

tendre en cuenta lo que me dices.

escafandra 28-08-2012 22:07:16

Cita:

Empezado por dmartinezn (Mensaje 440939)
Muchas gracias escafandra , funciona perfectamente,pase tremendo trabajo para poder realizar la llamada...

Inténtalo de esta manera en Builder xe:

Código:

String Server = "mysqld_usbwv8.exe";
bool Conectado = IsRuningW(Server.c_str()) ;

o
Código:

UnicodeString Server = "mysqld_usbwv8.exe";
bool Conectado = IsRuningW(Server.c_str()) ;

Para BCB6 usa la versión no unicode de esta manera:
Código:

String Server = "mysqld_usbwv8.exe";
bool R = IsRuning(Server.c_str());

O la unicode de esta manera:
Código:

WideString Server = "mysqld_usbwv8.exe";
bool R = IsRuningW(Server.c_bstr());


Saludos.


La franja horaria es GMT +2. Ahora son las 13:51:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi