FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
¿Cómo terminar proceso?
Buen dia a todos,
Tengo un problemita al terminar un proceso, siempre lo hacia con taskkill de la consola CMD, pero quiero terminarlo ahora desde c++, para no depender del CMD, encontre una función en builder para terminar procesos pero no me funciona, el código es: Código:
TerminateProcess(archivo, NULL); "archivo *32" , Será que como envió como parámetro el nombre a terminar, este no lo hace porque en el administrador de tareas figura con "*32"?, ya que estoy en un sistema de 64 bits. Saludos. |
#2
|
||||
|
||||
La API TerminateProcess "Mata" un proceso determinado. El primer parámetro no es el nombre del archivo ejecutable sino el Handle del proceso en cuestión que previamente debes conseguir con OpenProcess.
Mira este ejemplo completamente funcional para conseguir matar un proceso conociendo el nombre de su ejecutable: Código:
// Termina los procesos conociendo el nombre del exe bool TerminateProcess(char* FileName) { DWORD Result = 0; HANDLE Process = 0; PROCESSENTRY32 proc = { sizeof(proc) }; HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hSysSnapshot != INVALID_HANDLE_VALUE && Process32First(hSysSnapshot, &proc)){ do{ if(!stricmp(proc.szExeFile, FileName)){ Result = proc.th32ProcessID; if(Result) Process = OpenProcess(PROCESS_ALL_ACCESS, false, Result); if(Process){ Result = TerminateProcess(Process, 0); CloseHandle(Process); } } }while(Process32Next(hSysSnapshot, &proc)); } CloseHandle(hSysSnapshot); return (bool)Result; } Saludos. |
#3
|
|||
|
|||
Error en conversión
Hola escafandra,
probe tu código con la libreria: Cita:
el error que me muestra es el siguiente: Te agradeceria que me iluminaras en esta parte, como podría se convertiria a (const char*). Saludos. |
#4
|
||||
|
||||
El código lo escribí para C++Builder 6, seguramente estás usando una versión superior que usa Unicode. Cambia stricmp por _wcsicmp que es su equivalente Unicode. Ciertamente debes incluir Tlhelp32.h
Saludos. |
#5
|
|||
|
|||
Error en conversión
hola escafandra,
bueno, aún me sigue mostrando el casi mismo error: si encuentro la solucion por ahí para embarcadero xe c++, lo posteo. Saludos. |
#6
|
||||
|
||||
Cambia tambien esto
Código:
bool TerminateProcess(char* FileName) Código:
bool TerminateProcessW(WCHAR* FileName) Te pongo la versión completa Unicode: Código:
#include <tlhelp32.h> // Termina los procesos conociendo el nombre del exe bool TerminateProcessW(WCHAR* FileName) { DWORD Result = 0; HANDLE Process = 0; PROCESSENTRY32W proc = { sizeof(proc) }; HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hSysSnapshot != INVALID_HANDLE_VALUE && Process32FirstW(hSysSnapshot, &proc)){ do{ if(!_wcsicmp(proc.szExeFile, FileName)){ Result = proc.th32ProcessID; if(Result) Process = OpenProcess(PROCESS_ALL_ACCESS, false, Result); if(Process){ Result = TerminateProcess(Process, 0); CloseHandle(Process); } } }while(Process32NextW(hSysSnapshot, &proc)); } CloseHandle(hSysSnapshot); return (bool)Result; } Saludos. Última edición por escafandra fecha: 14-12-2013 a las 21:37:11. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Terminar proceso aplicacion y dll | jconnor82 | Varios | 2 | 30-06-2008 04:06:51 |
Terminar proceso en Windows 2000 | RJF | Varios | 1 | 26-05-2008 17:29:01 |
ayuda ejecutando un proceso como "SYSTEM" y haciendo que no se pueda terminar | lostprophets | Varios | 2 | 05-02-2008 02:28:50 |
Como Terminar La Ejecucion De Un Proceso | kurono | Varios | 2 | 01-02-2008 17:10:44 |
Terminar proceso | torito | Varios | 15 | 20-04-2007 02:44:36 |
|