Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Cerrar programas que no están el la lista

Hola compañeros foreros...

Os traigo una preguntita... estoy intentando hacer un programa que filtre una serie de ejecutables, de modo que no se pueda ejecutar, por ejemplo, el buscaminas o el messenger. Al principio usaba el truco de trucomanía:

Código:
procedure TForm1.Button1Click(Sender: TObject);
 
function KillTask(FileName:String):integer;
var 
    ContinueLoop:BOOL;
    FSnapshotHandle:THandle;
    FProcessEntry32:TProcessEntry32;
const 
    PROCESS_TERMINATE=$0001;
begin 
    FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
    ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
    while integer(ContinueLoop)<>0 do 
    begin 
        if 
((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(FileName))
            or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(FileName)))
then 
 
Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),
 
                                    FProcessEntry32.th32ProcessID),0));
          ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
    end; 
    CloseHandle(FSnapshotHandle);
end; 

begin 
  KillTask('calc.exe');
  KillTask('msmsgs.exe');
  KillTask('winamp.exe');
end;
Pero con el tiempo la lista se hizo muy grande... y estaba bastante desordenada...

A mí me gustaría poder hacer una lista de ejecutables y que un procedure me compobase si existen, y en tal caso, cerrarlo. ¿Alguien me podría hacer la modificación?. Yo no sé hacerla , no quiero que me haga el proyecto, sino solo modificar los procedures

Doy dos pistas: la siguiente y la que yo uso para cerrar el ejecutable.
Código:
function EstaEjecutandose (ExeFile:string): boolean;
  var H:word;
  begin 
    H := CreateFile(PChar(ExeFile), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
    Result := (H >= 65535);
    CloseHandle(H);
  end;
__________________
:)
Responder Con Cita
  #2  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Partes de la base de que los programas indeseables ya están abiertos y tienes que cerrarlos. ¿No sería mejor evitar que se abran desde un principio? Quizá las ideas de delphi.com.ar en este hilo te sirvan. Controlarías cualquier intento de ejecutar una aplicación, buscarías en una lista de aplicaciones no deseadas y si está impides que se ejecute.

// Saludos

Última edición por roman fecha: 26-03-2004 a las 22:38:20. Razón: Un error en las etiquetas de marcado
Responder Con Cita
  #3  
Antiguo 26-03-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
ya... pero y si un listo pone la aplicación en el registro de windows y se carga antes que mi ejecutable... gracias de todos modos por la sugerencia román
__________________
:)
Responder Con Cita
  #4  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por DarkByte
ya... pero y si un listo pone la aplicación en el registro de windows y se carga antes que mi ejecutable.
Pues el mismo listo borrará tu aplicación, formateará el disco duro, quemará la pc y te asustará por las noches...

... o simplemente cambiará el nombre de la aplicación.

Ni uno ni otro método son seguros. Si tanta restrición quieres pues créate un reemplazo del shell que sólo permita ejecutar las aplicaciones previamente aprobadas.

O búscale por el lado de las políticas de grupo. Hay una política para permitir ejecutar sólo las aplicaciones que se encuentren en una lista. Me parece que en términos del registro de Windows es

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

RestrictRun = 1 (DWord)

y la lista de aplicaciones se guarda en la clave

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun.

Sólo recuerda no poner RegEdit entre las aplicaciones permitidas o bien usar otra política que impide el uso del registro.

// Saludos
Responder Con Cita
  #5  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo olvidaba. También existe la política contraria, que te permite fijar una lista de aplicaciones prohibidas. Funciona igual que RestrictRun pero se llama DisallowRun.

// Saludos
Responder Con Cita
  #6  
Antiguo 26-03-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
roman... jeje, se trata de que controle yo las aplicaciones en "directo", no windows... no es una aplicación para el público... sino para mí, me he puesto el reto de hacer ese proyecto en un max. de dos semanas
__________________
:)
Responder Con Cita
  #7  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues entonces no hay gran cosa que hacer. Ya tienes una función para saber si la aplicación se ejecuta y un procedimiento para matarla. Simplemente guarda la lista de aplicaciones en algún lugar (un diskette para que tu alter ego no la borre), cárgala en un TStringList y recorre la lista pasándole cada ítem a tu KillTask previa verificación con EstaEjecutandose.

Este es el último mensaje que doy en este hilo. Para la próxima espero que aclares desde el principio. Siempre que me es posible y está a mi alcance doy con mucho gusto mi ayuda para tratar de encontrar la mejor solución a un problema dado pero tampoco estoy para perder el tiempo.

Responder Con Cita
  #8  
Antiguo 26-03-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
roman, siento si le he ofendido. Lo que pasa es que estoy tratando la manera de sacar un procedure que me recorra un TMemo o algo así con los nombres de los ejecutables y si están abierto, los cierre. No cosas del registro ni similares. siento de veras si le he ofendido
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:10:45.


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
Copyright 1996-2007 Club Delphi