Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   MataProcesos (https://www.clubdelphi.com/foros/showthread.php?t=46087)

principiante22 24-07-2007 03:38:28

MataProcesos
 
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, 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

Código Delphi [-]
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

Cita:

Empezado por cHackAll
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.

Código Delphi [-]
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í:

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 15:08:14.

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