PDA

Ver la Versión Completa : No pemitir que se ejecute una aplicación


barrauda
22-12-2004, 14:47:46
Hola a todo el mundo, lo que quiero lograr con mi programa es no permitir que se ejecute un programa determinado como por ejemplo el Internet Explorer. Si un usuario quiere hacerle doble click al ícino del IE para ejecutarlo, que aparezca un cartel que le diga que está deshabilitado o algo por el estilo pero lo cuestión es que no lo ejecuten.
Estube buscando en los foros pero no encontré nada, si hay algo y que está con otro nombre les pido disculpas de antemano y les agradezco por su ayuda.

marcoszorrilla
22-12-2004, 15:10:22
Un truco sucio puede ser, renombar el ejecutable correspondiente al programa en cuestión sustituirlo por otro con el mismo nombre pero hecho por nosotros en Delphi, en este se hallaría el mensaje oportuno.

Un Saludo.

Neftali [Germán.Estévez]
22-12-2004, 15:55:29
Tampoco es que sea nada muy académico, pero sólo se me ocurre un proceso (app. o servicio) que cada X tiempo revise los procesos que existen ejecutandose y "mate" los que tengas marcados como no disponibles o prohibidos. Pero tampoco acabo de verlo claro...

roman
22-12-2004, 16:24:09
El problema con estas opciones es que de todas las aplicaciones posibles, el IE es quiza lo más difícil pues, aun impidiendo que se abra el IE nada impide teclar una dirección en el Explorer para ver una página así que habría que bloquear tambien éste.

No estoy seguro pero me parece que hay políticas de grupo que sirven para impedir el acceso a Internet.

Habría que buscar...

// Saludo

barrauda
23-12-2004, 00:36:21
Hola, gracias por responder, se que es difícil pero lo que necesito es más o menos como hacer por código que no se abra el Internet Explorer.

barrauda
23-12-2004, 00:43:59
El problema con estas opciones es que de todas las aplicaciones posibles, el IE es quiza lo más difícil pues, aun impidiendo que se abra el IE nada impide teclar una dirección en el Explorer para ver una página así que habría que bloquear tambien éste.




Lo que se me acaba de ocurrir es lo siguiente: Si uno posee un proxi para conectarse a Internet, hay que habilitar en las opciones del Internet Explorer la opcion de poder conectarse a Internet por medio de un proxi (Herramientas/Opciones de Internet/Conexiones/Configuración Lan/...). En mi caso, si no le coloco el nombre del proxi y el puerto no se puede navegar por Internet. Creo que esta es la mejor solución. Ahora lo que tenemos que hacer es conseguir por medio de código como deshabilitar y habilitar el servidor proxy. Ahí es donde ustedes me pueden ayudar. Se que son unos genios porque siempre obtengo las respuestas en este foro. Muchas gracias de antemano...

CHiCoLiTa
23-12-2004, 15:41:14
El problema con estas opciones es que de todas las aplicaciones posibles, el IE es quiza lo más difícil pues, aun impidiendo que se abra el IE nada impide teclar una dirección en el Explorer para ver una página así que habría que bloquear tambien éste.


Al abrirse la direccion se abre el iexplorer.exe y la opcion de buscar procesos y matarlos seguiria siendo valida

barrauda
29-12-2004, 21:00:53
Hola a todos, lo que pude hacer para que no funcione el Internet Explorer diría que no es muy profesional pero funciona.
Lo que yo deseaba era que no se ejecute directamente el Internet Explorer pero en vista de que no me pudieron ayudar a solucionar se me ocurrió que si deshabilitaba el Proxy no se podría navegar. pude hacerlo y acá les paso el código por las dudas que alguien necesite algo por el estilo

colocar en el USES la palabra Registry



procedure Tform1.DeshabilitaProxy(bandera: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create; //crea el registro
reg.RootKey := HKEY_CURRENT_USER; //nos situa en esta clave
reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Internet Settings', True);
if bandera = True then
begin
reg.WriteString('ProxyServer', 'proxi:1'); //Cambia el nombre del proxy
end
else if bandera = False then
begin
reg.WriteString('ProxyServer', 'nombredelproxy:número'); //habilita Proxy
end;
reg.CloseKey; //cierra el registro
end;


Luego llamanos al procedimiento desde un botón por ejemplo y le ponemos el valos true o False de acuerdo a lo que queremos hacer:

DeshabilitarProxy(true); //deshabilitamos el proxy del navegador.
DeshabilitarProxy(false); //volvemos a colocar el proxy al navegador.

Aclaración: esto les va a servir si se conectan a Internet por medio de un proxy, a mi me funcionó pero puede ser que haya casos donde no funcione.

Gydba
30-12-2004, 13:03:13
Hola,

Apoyo la idea de una suerte de "guardian" de apps., puesto que te permite no sólo bloquear al IE sino a las apps. que vos definas. En Internet hay un par de ejemplos en Delphi para ver los procesos activos de Window$, matarlos, etc. Sería cuestión de adaptarlos un poco a tus necesidades.

Eso es todo.

Aztaroth
31-12-2004, 00:50:31
Yo utilizo este codigo y me ha servido al 100%

me pongo un TTimer con el tiempo a 1 o 3 segundos dependiendo cada cuanto tiempo quieres checar,


procedure TForm1.DestruyeVentana(clase, nombre: String);
var
handle : THandle;

begin
if( clase <> '') then
handle := FindWindow(PChar(clase), nil)
else
handle := FindWindow(nil, PChar(nombre));


if handle <> 0 then
SendMessage(handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
DestruyeVentana('IEFRAME', ''); //Internet Explorer
DestruyeVentana('MSBLClass', '');
DestruyeVentana('WMPlayerApp', '');
DestruyeVentana('Media Player 2', '');
DestruyeVentana('MMFRAME_MAIN', '');
DestruyeVentana('FreeWClass', '');
DestruyeVentana('Minesweeper', '');
DestruyeVentana('Solitaire', '');
DestruyeVentana('Buscaminas', '');


end;

spider_Ramon
07-02-2005, 20:43:48
Necesito una funcion parecida acerrar aplicaciones en la Pc Local solo que yo la necesito que funcione en la Red, cada determinado tiempo checar si la maquina puede trabajar con 'X' Programa de no ser ASI CERRARLO desde una PC GUardian.

Gracias.

Mariana
18-11-2005, 21:17:17
hola a todos, esta aplicación me ha resultado muy util, queria preguntarles de donde salen los nombres de las aplicaciones, ya que no es el mismo nombre que el ejecutable.
Gracias

Aztaroth
18-11-2005, 22:07:15
Estas son las funciones que utilizo para obtener el nombre de las Clases y Titulos de las ventanas de todas las aplicaciones que se esten ejecutando en Windows, esta hecha en Borland C++, perdon pero es que antes programaba casi todo en C++, muy pco el delphi, pero no deberias de tener el mayor problema para transcribir al Delphi.

Te creas una nueva aplicacion en delphi, agregas 2 TMemo una que diga clases y otra que diga titulos y un boton


// Evento dle boton
void __fastcall TmainForm::btnEnumClick(TObject *Sender)
{
titulos->Items->Clear();
clases->Items->Clear();
EnumWindows((WNDENUMPROC)GetWinHandleAll, NULL);
}
//---------------------------------------------------------------------------


bool __stdcall GetWinHandleAll(HWND hWnd, long hproc)
{
mainForm->ProcessHandleInformation(hWnd);
if(hWnd != NULL) return true;
return false;
}



void __fastcall TmainForm::ProcessHandleInformation(HWND h_window)
{
char classname[80];
char windowtitle[80];
// Obtener los valores de Titulo y clase de la ventana o proceso
GetWindowText(h_window, windowtitle, 80);
GetClassName(h_window, classname, 80);

//Agregalos a los TMemos
titulos->Items->Add(windowtitle);
clases->Items->Add(classname);

}
//---------------------------------------------------------------------------


//Cuando se seleccione un item de titulos seleccione tambien el nombre de la clase para saber cual es exactamente
void __fastcall TmainForm::titulosClick(TObject *Sender)
{
clases->ItemIndex = titulos->ItemIndex;
}
//---------------------------------------------------------------------------

//Si se selecciona la clase saber el titulo de la ventana
void __fastcall TmainForm::clasesClick(TObject *Sender)
{
titulos->ItemIndex = clases->ItemIndex ;
}
//-------------------------------------------------------------------------


Hay un libro en pdf que te dice como hacerlo en delphi no recuerdo el nombre.