Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   No pemitir que se ejecute una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=17075)

barrauda 22-12-2004 14:47:46

No pemitir que se ejecute una aplicación
 
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

vuelvo a lo mismo
 
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

Se me acaba de ocurrir algo
 
Cita:

Empezado por roman
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

Cita:

Empezado por roman
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

Ya conseguí solucionar mi problema
 
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


Código:

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

No permitir ejecutar aplicaciones
 
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,

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

Re: No permitir ejecutar aplicaciones
 
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

Nombre de las aplicaciones
 
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

Cerrar programas
 
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.


La franja horaria es GMT +2. Ahora son las 21:50:36.

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