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).
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 ;)
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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.