FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
Procesos en C++
Hola a todos los del Foro e aqui de nuevo con mis dudas
Quisiera saber si es posible que desde C++ se pueden trabajar con los procesos de Windows, si es posible me pudieran explicar como puedo hacer eso. Lo que yo quisiera hacer es que cuando yo ejecute mi aplicacion busque en los procesos de windows y si mi aplicacion ya esta corriendo, termine el proceso viejo y se ejecute de nuevo. no se si me explico bien... Les agradeseria mucho si me ayudan... Saludos |
#2
|
|||
|
|||
Pues para trabajar con procesos del sistema se usa la función “EnumProcesses” (te lista los procesos que corren en tu sistema), si le gogleas encontraras muchos ejemplos de esta.
Te dejo un código que hace lo que pretendes ponlo donde mejor te paresca: Código:
DWORD lista[1024]; HANDLE proceso; char buffer[MAX_PATH + 1]; DWORD l; int ii=0; if (!EnumProcesses(lista, sizeof(lista), &l)) { Application->Terminate(); } l = l / sizeof(DWORD); for (int i = 0; i<l; i++) { proceso = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE,FALSE,lista[i]); if (proceso != NULL) { if (GetModuleFileNameEx(proceso,NULL,buffer,sizeof(buffer)-1)) { if (StrIComp(buffer, Application->ExeName.c_str())==0){ ii++; if (ii>1) { Application->Terminate(); } } } CloseHandle( proceso ); } } |
#3
|
||||
|
||||
Voy a explicar una forma sencilla de conseguir lo que pretende yelian.
Supongamos que tenemos un proyecto que se llama Project1 que es nuestra aplicación. Pues abrimos el archivo para editarlo en el IDE del Builder. Tenemos algo momo esto: Código:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } Código:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { // Nombro desde código mi aplicación char AppName[] = "Mi Aplicacion"; // Cambio temporalmente el nombre de mi aplicación Application->Title = "XXMi AplicacionXX"; // Para buscar una ventana con el verdadero nombre HWND hOldAppW = ::FindWindow("TApplication", AppName); // Y restauro el nombre ca había cambiado. Application->Title = AppName; // Si encontré mi aplicación corriendo la termino if(hOldAppW) PostMessage(hOldAppW, WM_QUIT, 0, 0); // ...Y sigo normalmente.... try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; } |
#4
|
|||
|
|||
Gracias
tengo una dudita como pudiera poner un nombre fijo para mi aplicacion en los procceso (Es para utilizarlo en el code anterior)... me explico: Quisiera que aunque cambien el nombre del ejecutabler, en los proccesos siga teniendo el mismo que yo le puse... si se puede hacer diganme como... |
#5
|
|||
|
|||
Pues mi lógica me dice que no se va a poder, en la lista de procesos se presenta el nombre del ejecutable y según se, no se puede cambiar el nombre del ejecutable cuando este se está ejecutando.
Pero si tienes este mismo fin, te pasó esto que en lugar de buscar por el título de la aplicación, busca por la clase del form principal la cual no cambia nunca. Código:
/*Obtienes el handle de la aplicación según su clase en este caso “Tmiclase”, este es el nombre del form principal de tu aplicación.*/ HWND miventana= FindWindow("Tmiclase", 0); /*Si lo encontró, manda el mensaje de cerrar, lo cual ara que se cierre la aplicación.*/ if (miventana) { PostMessage(miventana, WM_CLOSE, 0, 0); } |
#6
|
|||
|
|||
Hola
El code que puso (_cero_) no me funciona pero el de (escafandra) si me funciona a la perfeccion... ******** Otra duda es posible saber el titulo de otra aplicacion , es decir el titulo de un juego por ejemplo... Muchas Gracias por el aporte.... |
#7
|
||||
|
||||
Cita:
Código:
Application->Title = "Mi Programa"; Piensa que este método que se te propone, es simplista y que existen formas mas complejas que detectan de forma inequívoca tu aplicación. En el foro encontrarás ejemplos. Creo que para empezar esto te sirve como anillo al dedo y sin complicarte mas. Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Procesos Interbase | berfer | Firebird e Interbase | 6 | 07-09-2006 20:28:57 |
Procesos en un servidor... | Berto2003 | API de Windows | 0 | 31-07-2006 10:26:30 |
Procesos lentos...., | Luis Castillo | Conexión con bases de datos | 4 | 22-12-2005 00:20:47 |
Monitorear procesos | victork_py | Firebird e Interbase | 7 | 27-08-2003 12:06:29 |
|