PDA

Ver la Versión Completa : Cerrando Internet Explorer


johnyague
11-09-2006, 23:18:55
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 :


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:


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
Que te parece algo asi:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)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
Que te parece algo asi:


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 ¿...?