PDA

Ver la Versión Completa : MataProcesos


principiante22
24-07-2007, 03:38:28
Saludos, como puedo matar el proceso de access por codigos??

Neftali [Germán.Estévez]
24-07-2007, 10:15:05
Revisa el truco 278 (http://www.clubdelphi.com/trucos/index.php?id=278&scroll=0&scrollb=0), que habla de cómo cerrar una aplicación a partir del título de la ventana.
Se puede usar también el nombre de la clase en la API findWindows.

principiante22
24-07-2007, 21:26:52
pero lo que deseo de cerrar es el proceso de un programa que no tiene ventana, asi que nunca lo encuentra, que debo de hacer con esos codigos para ponerlo a cerrar un proceso??

cHackAll
26-07-2007, 02:35:44
uses Windows, TlHelp32;

var
hSnapshot, hProcess: Cardinal;
ProcessEntry: TProcessEntry32 = (dwSize: SizeOf(TProcessEntry32));
ModuleEntry: TModuleEntry32 = (dwSize: SizeOf(TModuleEntry32));

begin
hSnapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshot, ProcessEntry) then
repeat
if lstrcmpi('msaccess.exe', @ProcessEntry.szExeFile) = 0 then
begin
hProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry.th32ProcessID);
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
Break;
end;
until not Process32Next(hSnapshot, ProcessEntry);
CloseHandle(hSnapshot);
end.

principiante22
26-07-2007, 02:46:33
ProcessEntry: TProcessEntry32 = (dwSize: SizeOf(TProcessEntry32));
ModuleEntry: TModuleEntry32 = (dwSize: SizeOf(TModuleEntry32));

La parte en negrita me da error, por que será?

Ambos me dan el mismo error (Cannot initialize local variables).

dec
26-07-2007, 02:49:15
Hola,

¿Pretendes que adivinemos el error que "te da"? Por favor, si quieres que te ayuden, empieza por copiar aquí el mensaje de error. :mad:

principiante22
26-07-2007, 02:50:45
lo puse hace un rato ya, lo que pasa es que respondiste muy rapido ;)

dec
26-07-2007, 02:56:45
Hola,

No sé exactamente porqué el error, puesto que el código parece "probado", pero, en todo caso puedes intentarlo con algo como esto, que acabo de probar y parece que funciona bien.


var
hSnapshot, hProcess: Cardinal;
ProcessEntry: TProcessEntry32;
ModuleEntry: TModuleEntry32;

begin
ProcessEntry.dwSize := SizeOf(TProcessEntry32);
ModuleEntry.dwSize := SizeOf(TModuleEntry32);

hSnapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(hSnapshot, ProcessEntry) then
repeat
if lstrcmpi('calc.exe', @ProcessEntry.szExeFile) = 0 then
begin
hProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry.th32ProcessID);
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
Break;
end;
until not Process32Next(hSnapshot, ProcessEntry);
CloseHandle(hSnapshot);
end;


Por cierto, si quitas el "break" que se remarcado, cerrarás todos los procesos con el nombre indicado, y no sólo el "primero" que encuentre la rutina.

El asunto podría quedar más o menos así:


uses
TlHelp32;

function MatarProcesos(nombre: string): boolean;
var
ModuleEntry: TModuleEntry32;
ProcessEntry: TProcessEntry32;
hSnapshot, hProcess: Cardinal;
begin
result := false;
ModuleEntry.dwSize := SizeOf(TModuleEntry32);
ProcessEntry.dwSize := SizeOf(TProcessEntry32);
hSnapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
if Process32First(hSnapshot, ProcessEntry) then
repeat
if (lstrcmpi(PChar(nombre), @ProcessEntry.szExeFile) = 0) then
begin
hProcess := OpenProcess(PROCESS_TERMINATE,
false,ProcessEntry.th32ProcessID);
result := TerminateProcess(hProcess,0);
CloseHandle(hProcess);
end;
until not Process32Next(hSnapshot, ProcessEntry);
CloseHandle(hSnapshot);
end;

principiante22
26-07-2007, 03:05:47
ahora si me funciono, Gracias dec ;)

cHackAll
26-07-2007, 03:13:32
:eek: :confused: :o

principiante22
26-07-2007, 03:15:47
A ti tambien te lo agradezco cHackAll, fue que se me paso decirtelo orita :D