El problema es que no se obtener el handle del proceso y la verdad es que he estado investigando bastante sobre el asunto...Os dejo la pagina de msdn para que lo mireis:http://msdn.microsoft.com/en-us/library/ms686714%28v=vs.85%29.aspx
como obtengo el handle de un proceso?me podriais poner un ejemplo sobre como ejecutar esta API?
Gracias a quien pueda echarme un cable :P
Un saludo
OpenProcess (http://msdn.microsoft.com/en-us/library/ms684320%28v=vs.85%29.aspx).
si el proceso lo abris con OpenProcess, haces lo que tengas que hacer con el proceso y despues cerras el handle con closehandle ::)
ah y antes de llamar a terminateprocess tenes que haber llamado a createprocess ::)
Cita de: dewolo en 10 Octubre 2011, 16:58 PMah y antes de llamar a terminateprocess tenes que haber llamado a createprocess ::)
No necesariamente, podes matar procesos creados por otros procesos.
Gracias a ambos,pero me estoy haciendo un lio...xD
A ver con openprocess abro un proceso,pero si resulta que el proceso esta abierto y quiero terminarlo ¿como lo hago?¿No teneis por ahi un ejemplo sencillo de como terminar uno? :-\
Un saludo
Vos preguntaste como obtener el HANDLE al proceso, ya sabias que funcion usar para terminarlo ;)
Sí,la función para terminarlo sé cual es,pero entonces,el handle sería la función openprocess? La verdad es que no me está quedando claro esto xD
Te pongo un ejemplo que estoy leyendo:
HANDLE Process;
DWORD PID;
process=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
Pero no sé si estará bien,supuestamente asi tengo el handle llamado process,no?
Perdona si es una tonteria lo que estoy diciendo :xD
Un saludo
Si, con OpenProcess abris un HANDLE a un proceso existente pero el PID (Process Identifier) es un parametro de entrada asi que tenes que darle valor, no puede estar indefinido como ahora.
Pero entonces,¿como termino un proceso,como por ejemplo el explorer?Si el pid lo se entonces estoy terminando un proceso el cual yo he creado o tengo constancia de ello,en cambio,si por ejemplo,quiero eliminar el PID del explorer...¿Se tendria que buscar otra API para encontrarlo? :huh:
un saludo
No, saber el PID no implica que lo hayas creado ni mucho menos.
Taking a Snapshot and Viewing Processes (http://msdn.microsoft.com/en-us/library/ms686701%28v=VS.85%29.aspx).
Puff...Bueno ok
Entonces mirare codigos e intentare hacer unas cuantas,asi no alargo mas el tema :xD
Gracias de todas maneras EI ;)
Un saludo
De nada, ahi te deje el ejemplo de como enumerar los procesos en ejecucion (con lo cual obtenes cualquier PID), usando OpenProcess obtenes el HANDLE y despues usas TerminateProcess.
un ejemplo (no probado) pero que en cualquier caso con ligeras modificaciones debería funcionar:
DWORD dExplorerPid;
HWND hExplorer=FindWindow("Progman",NULL);//explorer window class
if(hExplorer&&GetWindowThreadProcessId(hExplorer,&dExplorerPid)){
HANDLE hExplorerProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dExplorerPid);
if(hExplorerProc){
TerminateProcess(hExplorerProc,0);
CloseHandle(hExplorerProc);
}
}
S2