Utilidad para acelerar el PC y mejorar el rendimiento ( Tuneup )


Tenemos el PC lleno de programas de los que sólo usamos diariamente un porcentaje muy pequeño, muchos de ellos utilizan servicios o lanzadores que requieren ejecutarse al inicio del arranque del PC y que posteriormente se quedan en la máquina quitando recursos del sistema, de memoria y de CPU.


Yo lo he comprobado en mi máquina que va mucho mejor cuando la limpio de esos programas y para solucionar esto he realizado una utilidad que consta de dos partes:



1) Un archivo de texto llamado "ProcesosACerrar.txt" donde escribiremos línea a línea los programas que queremos eliminar, p.ej.

BSQLServer.exe

ACDaemon.exe

ACService.exe



y así sucesivamente






2) El software que elimina secuencialmente cada una de las tareas que va leyendo del fichero anterior.







¿Cómo veo los programas que se están ejecutando en mi sistema?



Desde Windows 8, pulsar Ctrl+Alt+Supr

y en el menú siguiente hacer clic en "Administrador de tareas"

En la ventana siguiente pulsar la pestaña "Detalles"

En la columna "Nombre" tenemos los nombres de los procesos que se están ejecutando actualmente en nuestro sistema.









¿Cómo lo hace?



Pues llamando a una utilidad del sistema llamada "taskkill"



Definición de TASKKILL en technet






Termina una o más tareas o procesos. Los procesos pueden ser terminados por los ID de proceso o por su nombre.



Sintaxis



taskkill  [/ s Computer] [/ Dominio \ Usuario [/ p Contraseña]]] [/ fi FilterName] [/ pid ProcessID] | [/ im Name][/ f] [/ t]      






Parámetros


















Nombre


Operadores


Valor


Hostname


eqne


Cualquier String válido.


Status


eqne


RUNNING|NOT RESPONDING


Imagename


eqne


Cualquier String válido.


PID


egnegt,ltgele


Cualquier entero positivo válido


Session


egnegt,ltgele


Cualquier número de sesión válido


CPUTime


eqnegt,ltgele


Tiempo válido en el formato hh:mm:ss. El mm y ss deberían ser entre

 0 y 59 y hh cualquier numero válido unsigned


Memusage


egnegt,ltgele


Cualquier entero positivo válido


Username


eqne


Cualquier nombre de usuario ([Domain\]User).


Services


eqne


Cualquier String válido.


Windowtitle


eqne


Cualquier String válido.






/ s     Computer: Especifica el nombre o la dirección IP de un equipo remoto (no utilice barras invertidas). El valor predeterminado es el equipo local.


/ u   dominio   usuario: Ejecuta el comando con los permisos de cuenta del usuario especificado por usuario o dominio \ usuario. El valor predeterminado es el del actual usuario con sesión iniciada en el equipo que emite el comando.


/ p     Contraseña: Especifica la contraseña de la cuenta de usuario que se especifica en la / u parámetro.


/ fi     FilterName: Especifica los tipos de proceso (s) para incluir o excluir de la terminación. Los siguientes son nombres válidos de filtro, operadores y valores.


/ im     ImageName: Especifica el nombre de la imagen del proceso que de ser terminado. Utilice el comodín (*) para especificar todos los nombres de las imágenes./ pid     ProcessID: Especifica el ID de proceso del proceso de ser terminado.


  f: Especifica que proceso (s) terminará inmediatamente. Este parámetro se ignora para procesos remotos; todos los procesos remotos se finalizaron de manera forzada.


  t: Especifica para terminar todos los procesos hijos junto con el proceso padre, conocido comúnmente como un cierre en árbol.


/?: Muestra Ayuda en el símbolo del sistema.






Observaciones




  • El carácter comodín (*), sólo se acepta cuando se especifica junto con los filtros.



  • Terminación por procesos remotos se hará siempre con inmediatamente independientemente de si el / f se especifica el parámetro.



  • El suministro de un nombre de equipo al filtro HOSTNAME causará un apagado y será detenido todos los procesos.



  • Usar lista de tareas para determinar el ID de proceso (PID) para el proceso que tiene que ser terminado.



  • Taskkill es un reemplazo para la herramienta Kill .




Ejemplos





Los siguientes ejemplos muestran cómo se puede utilizar el comando taskkill


taskkill /pid 1230 /pid 1241 /pid 1253

taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe

taskkill /s srvmain /f /im notepad.exe

taskkill /s srvmain /u maindom\hiropln /p p@ssW23 /fi "IMAGENAME eq note*" /im *

taskkill /s srvmain /u maindom\hiropln /fi "USERNAME ne NT*" /im *

taskkill /f /fi "PID ge 1000" /im *





- Código del botón que inicia el proceso para eliminar los programas que constan en el archivo "ProcesosACerrar.txt"



procedure TForm1.Button1Click(Sender: TObject);
var
lista:tstringlist;
i:integer;

BEGIN
LISTA := TSTRINGLIST.CREATE;
TRY
lista.loadfromfile('ProcesosACerrar.txt');
for i:=0 to Lista.Count - 1 do
begin
if trim(lista.strings[i])<>'' then
begin
inicia ('taskkill','/F /IM '+lista.strings[i]);
end;
end;
FINALLY
lista.free;
END;







El código del procedimiento INICIA, lo que hace es capturar la salida del comando taskkill y lo almacena en tMemo utilizando un pipe

procedure tform1.inicia(cmd:string;parametros:string);
begin
CaptureConsoleOutput(cmd, parametros,

PROCEDURE(CONST Line: PAnsiChar)
BEGIN
memo1.Lines.Add(STRING(Line));
END
);
end;

PROCEDURE TForm1.CaptureConsoleOutput(CONST ACommand, AParameters: STRING;
CallBack: TArg < PAnsiChar > );
CONST
CReadBuffer = 40000;
VAR
saSecurity: TSecurityAttributes;
hRead: THandle;
hWrite: THandle;
suiStartup: TStartupInfo;
piProcess: TProcessInformation;
pBuffer: ARRAY[0..CReadBuffer] OF AnsiChar;
dBuffer: ARRAY[0..CReadBuffer] OF AnsiChar;
dRead: DWORD;
dRunning: DWORD;
dAvailable: DWORD;
BEGIN
saSecurity.nLength := SizeOf(TSecurityAttributes);
saSecurity.bInheritHandle := true;
saSecurity.lpSecurityDescriptor := NIL;
IF CreatePipe(hRead, hWrite, @saSecurity, 0) THEN
TRY
FillChar(suiStartup, SizeOf(TStartupInfo), #0);
suiStartup.cb := SizeOf(TStartupInfo);
suiStartup.hStdInput := hRead;
suiStartup.hStdOutput := hWrite;
suiStartup.hStdError := hWrite;
suiStartup.dwFlags := STARTF_USESTDHANDLES OR STARTF_USESHOWWINDOW;
suiStartup.wShowWindow := SW_HIDE;
IF CreateProcess(NIL, PChar(ACommand + ' ' + AParameters), @saSecurity,
@saSecurity, true, NORMAL_PRIORITY_CLASS, NIL, NIL, suiStartup,
piProcess) THEN
TRY
REPEAT
dRunning := WaitForSingleObject(piProcess.hProcess, 100);
PeekNamedPipe(hRead, NIL, 0, NIL, @dAvailable, NIL);
IF (dAvailable > 0) THEN
REPEAT
dRead := 0;
ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, NIL);
pBuffer[dRead] := #0;
OemToCharA(pBuffer, dBuffer);
CallBack(dBuffer);
UNTIL (dRead < CReadBuffer);
Application.ProcessMessages;
UNTIL (dRunning <> WAIT_TIMEOUT);
FINALLY
CloseHandle(piProcess.hProcess);
CloseHandle(piProcess.hThread);
END;
FINALLY
CloseHandle(hRead);
CloseHandle(hWrite);
END;
END;

 
 
 
 
 
 
 
 
 
 
 




1 comentario:

  1. Otra forma para cerrar procesos:

    FUNCTION tform1.CerrarProcesos(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);
    if result then memo2.lines.add(Nombre+' - '+'Cerrado')
    else memo2.lines.add(Nombre+' - '+'Error al cerrar.');

    CloseHandle(hProcess);
    END;
    UNTIL NOT Process32Next(hSnapshot, ProcessEntry);
    CloseHandle(hSnapshot);
    END;

    ResponderEliminar

Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...