HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Nemkívánatos weboldalak kiszűrése programból


Avagy Internet Explorer ablakok maszkolása

Példaprogram letöltése

4832 bájt

A bemutatásra kerülő cikkben egy olyan komponenst készítünk, melynek segítségével az Internet Explorer által megnyitott oldalak közül kiszűrhetjük az általunk előre meghatározott nemkívánatos oldalakat. Így egyetlen gombnyomásra lezárhatók például a kéretlenül felbukkanó oldalak. A program automatikusan lekérdezi az aktuális IE ablakok listáját, melyből lehetőségünk van egyesével is kiválasztani, majd lezárni bizonyos weboldalakat.

A mellékelt példaprogram megnyitása előtt a MaskIEURL.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponensünkben készítenünk kell egy függvényt, mely lekérdezi az Internet Explorer-ben aktuálisan megnyitott weboldalak listáját. Mindehhez azonban először a futó alkalmazások listájában meg kell keresnünk az IE ablakokat. Ezt az EnumWindows függvénnyel tehetjük meg, melynek első paraméterként egy függvényt kell megadnunk. Az EnumWindows ezt a függvényt fogja meghívni annyiszor, ahány IE alkalmazás fut. Így minden esetben meg kell vizsgálnunk ennél a függvénynél az aktuális ablak fejlécét, és ha rátalálunk a keresettre, elvégezzük a megfelelő vizsgálatot. Második paraméterként egy tetszőleges értéket adhatunk meg LPARAM típusban, mely egy 32 bites számnak felel meg. Az EnumWindows függvényt a Refresh eljárásban hívjuk meg, így mindig az aktuális listát kapjuk.
EnumWindows(@GetUrlFromIE, LParam(FURLList.Items));
Láthatjuk, hogy első paraméterként a GetUrlFromIE függvényt adtuk meg, így az EnumWindows ezt fogja meghívni. Lássuk ennek felépítését:
function GetUrlFromIE (Handle: THandle; List: TStringList): boolean; stdcall;
var
  hWndIE, hWndIEChild : HWND;
  Buffer : array[0..255] of Char;
begin
A SendMessage függvénnyel lekérdezzük a Handle paraméter által meghatározott ablak Caption részét, majd bemásoljuk azt a Buffer tömbbe.
  SendMessage(Handle, WM_GETTEXT, 255, integer(@Buffer[0]));
Megkeressük azt az Internet Explorer ablakot, melynek fejléce megegyezik a Buffer tömbben tárolt értékkel.
  hWndIE := FindWindow('IEFrame', Buffer);
  if hWndIE > 0 then
  begin
Ezután megszerezzük az IE Toolbar-jához a hozzáférést.
    hWndIEChild := FindWindowEx(hWndIE, 0, 'WorkerW', nil);
    if hWndIEChild > 0 then
    begin
Következő lépésben az Address Bar-hoz kell hozzáférnünk.
      hWndIEChild := FindWindowEx(hWndIEChild, 0, 'ReBarWindow32', nil);
      if hWndIEChild > 0 then
      begin
Végül a címet az azt tartalmazó ComboBox-ból ki kell olvasnunk, majd a függvényünk List paraméterében meghatározott StringList-nek átadnunk.
        //finally, locate combo box and add its text to the list
        hWndIEChild := FindWindowEx(hWndIEChild, 0, 'ComboBoxEx32', nil);
        if hWndIEChild > 0 then
        begin
          SendMessage(hWndIEChild, WM_GETTEXT, 255, integer(@Buffer));
          List.AddObject(Buffer,TObject(hWndIE));
        end;
      end;
    end;
  end;
  Result :=True;
end;
A fenti függvény által kapott értékeket egy általunk kiválasztott ListBox-ban tárolhatjuk el, melyet a komponens URLList property-jében kell megadnunk. Amennyiben ebből a listából kiválasztunk egy URL-t, a CloseURL függvénnyel be is zárhatjuk a hozzá tartozó IE ablakot.
procedure TMaskIEURL.CloseURL;
var
  Handle : THandle;
begin
  if FURLList.ItemIndex = -1 then
  begin
    ShowMessage('Válasszon egy IE ablakot az URL listából!');
    Exit;
  end;
A kiválasztott ablakot a WM_CLOSE rendszerüzenet elküldésével zárhatjuk be.
  Handle := THandle(FURLList.Items.Objects[FURLList.ItemIndex]);
  PostMessage(Handle, WM_CLOSE, 0, 0);
end;
Lehetőségünk van több ablak kiszűrésére is. A maszkot a komponens MaskList property-jében megadott ListBox-ban kell eltárolnunk. Ezeket a CloseMaskURL függvény meghívásával zárhatjuk be.
procedure TMaskIEURL.CloseMaskURL;
var
  i,j : integer;
  Handle : THandle;
begin
Egyenként összehasonlítjuk az aktuális ablakok és a maszkolt ablakok listájában szereplő URL-eket. Amennyiben egyezést találunk, bezárjuk az ablakot.
  for i := 0 to FURLList.Items.Count-1 do
  begin
    for j := 0 to FMaskList.Items.Count-1 do
      if MatchesMask(FURLList.Items[i], '*' + FMaskList.Items[j] + '*') then
      begin
        Handle := THandle(FURLList.Items.Objects[i]);
        PostMessage(Handle, WM_CLOSE, 0, 0);
      end;
  end;
end;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 582. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |