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)
-   -   Cerrando Internet Explorer (https://www.clubdelphi.com/foros/showthread.php?t=35462)

johnyague 11-09-2006 23:18:55

Cerrando Internet Explorer
 
Hola a todos son medio :eek: para este cuento de programacion pero ando haciendo cositas...

Basado en el truco 468 de Trucomania he logrado cerrar las ventas de Internet Explorer sabiendo el nombre completo de la ventana de esta forma :

Código Delphi [-]
var
  Mango : THandle;
begin
  Mango:=FindWindow('IEFrame','MSN Web Messenger - Microsoft Internet Explorer ');
  if Mango <> 0 Then SendMessage(Mango,WM_NCDestroy,0,0);
  Mango:=0;
end

Hasta hay no al problema la pregunta es como puedo hacer este procedimiento para cerrar solo con una parte del nombre de la venta

:rolleyes: Ejemplo: CHat, Sexo o algo que de restrigir en el navegador.

De antemano agradezco su colaboración. :D

seoane 12-09-2006 00:13:13

Que te parece algo asi:

Código Delphi [-]
function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
var
  Buffer: PChar;
  Size: Integer;
  Lista: TStringList;
  i: integer;
begin
  Result:= TRUE;
  // Comprobamos la clase de la ventana
  GetMem(Buffer,Length('IEFrame') + 1);
  try
    GetClassname(Handle,Buffer,Length('IEFrame') + 1);
    // Si no es la clase que buscamos salimos
    if StrIComp(Buffer,'IEFrame') <> 0 then
      Exit;
  finally
    FreeMem(Buffer);
  end;
  // Obtenemos el titulo de la ventana
  Size:= GetWindowTextLength(Handle) + 1;
  GetMem(Buffer,Size);
  try
    GetWindowText(Handle,Buffer,Size);    
    // Pasamos el titulo a mayusculas
    StrUpper(Buffer);
    // Buscamos cada una de las palabras de la lista en el titulo
    Lista:= TStringList(Pointer(LParam));
    for i := 0 to Lista.Count - 1 do
    begin
      // Si encontramos una palabra la cerramos 
      if Pos(Lista[i],String(Buffer)) > 0 then
      begin
        PostMessage(Handle,WM_Close,0,0);
        Exit;
      end;
    end;
  finally
    Freemem(Buffer);
  end;
end;


// Un ejemplo de como usar lo anterior
var
  Lista: TStringList;
begin
  Lista:= TstringList.Create;
  try
    // Añadimos las palabras a buscar, o las cargamos desde un archivo
    Lista.Add('Google');
    // Lo pasamos todo a mayusculas
    Lista.Text:= Uppercase(Lista.Text);
    // Empezamos a examinar las ventanas
    EnumWindows(@EnumWindowsProc, LParam(Pointer(Lista)));
  finally
    Lista.Free;
  end;
end;

El único problema que veo es que la ventana no se quiera cerrar, por ejemplo si estas en una sesión de webmessenger saldrá un mensaje pidiendo confirmación para cerrar la sesión. Yo en estos caso lo que hago es matar el proceso, pero eso ya es otra historia ...

johnyague 12-09-2006 01:02:18

:D Gracias por tu respuesta tan rapida lo probare y te cuento.

johnyague 20-09-2006 22:02:02

Super Bien
 
Cita:

Empezado por seoane
Que te parece algo asi:

Código Delphi [-]function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall; var Buffer: PChar; Size: Integer; Lista: TStringList; i: integer; begin Result:= TRUE; // Comprobamos la clase de la ventana GetMem(Buffer,Length('IEFrame') + 1); try GetClassname(Handle,Buffer,Length('IEFrame') + 1); // Si no es la clase que buscamos salimos if StrIComp(Buffer,'IEFrame') <> 0 then Exit; finally FreeMem(Buffer); end; // Obtenemos el titulo de la ventana Size:= GetWindowTextLength(Handle) + 1; GetMem(Buffer,Size); try GetWindowText(Handle,Buffer,Size); // Pasamos el titulo a mayusculas StrUpper(Buffer); // Buscamos cada una de las palabras de la lista en el titulo Lista:= TStringList(Pointer(LParam)); for i := 0 to Lista.Count - 1 do begin // Si encontramos una palabra la cerramos if Pos(Lista[i],String(Buffer)) > 0 then begin PostMessage(Handle,WM_Close,0,0); Exit; end; end; finally Freemem(Buffer); end; end; // Un ejemplo de como usar lo anterior var Lista: TStringList; begin Lista:= TstringList.Create; try // Añadimos las palabras a buscar, o las cargamos desde un archivo Lista.Add('Google'); // Lo pasamos todo a mayusculas Lista.Text:= Uppercase(Lista.Text); // Empezamos a examinar las ventanas EnumWindows(@EnumWindowsProc, LParam(Pointer(Lista))); finally Lista.Free; end; end;


El único problema que veo es que la ventana no se quiera cerrar, por ejemplo si estas en una sesión de webmessenger saldrá un mensaje pidiendo confirmación para cerrar la sesión. Yo en estos caso lo que hago es matar el proceso, pero eso ya es otra historia ...


Amigo Muchas Gracias funciono sin problemas... :D

BetoAlonso 04-09-2007 18:48:28

Cita:

Empezado por seoane (Mensaje 156498)
Que te parece algo asi:

Código Delphi [-]
function EnumWindowsProc(Handle: Thandle; lParam: LPARAM): BOOL; stdcall;
var
  Buffer: PChar;
  Size: Integer;
  Lista: TStringList;
  i: integer;
begin
  Result:= TRUE;
  // Comprobamos la clase de la ventana
  GetMem(Buffer,Length('IEFrame') + 1);
  try
    GetClassname(Handle,Buffer,Length('IEFrame') + 1);
    // Si no es la clase que buscamos salimos
    if StrIComp(Buffer,'IEFrame') <> 0 then
      Exit;
  finally
    FreeMem(Buffer);
  end;
  // Obtenemos el titulo de la ventana
  Size:= GetWindowTextLength(Handle) + 1;
  GetMem(Buffer,Size);
  try
    GetWindowText(Handle,Buffer,Size);    
    // Pasamos el titulo a mayusculas
    StrUpper(Buffer);
    // Buscamos cada una de las palabras de la lista en el titulo
    Lista:= TStringList(Pointer(LParam));
    for i := 0 to Lista.Count - 1 do
    begin
      // Si encontramos una palabra la cerramos 
      if Pos(Lista[i],String(Buffer)) > 0 then
      begin
        PostMessage(Handle,WM_Close,0,0);
        Exit;
      end;
    end;
  finally
    Freemem(Buffer);
  end;
end;


// Un ejemplo de como usar lo anterior
var
  Lista: TStringList;
begin
  Lista:= TstringList.Create;
  try
    // Añadimos las palabras a buscar, o las cargamos desde un archivo
    Lista.Add('Google');
    // Lo pasamos todo a mayusculas
    Lista.Text:= Uppercase(Lista.Text);
    // Empezamos a examinar las ventanas
    EnumWindows(@EnumWindowsProc, LParam(Pointer(Lista)));
  finally
    Lista.Free;
  end;
end;

El único problema que veo es que la ventana no se quiera cerrar, por ejemplo si estas en una sesión de webmessenger saldrá un mensaje pidiendo confirmación para cerrar la sesión. Yo en estos caso lo que hago es matar el proceso, pero eso ya es otra historia ...

Disculpen mi ignorancia pero donde va todo el codigo, abro una nueva aplicacion o solo form ¿...?


La franja horaria es GMT +2. Ahora son las 14:47:13.

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