czytanie z Delphi zawartości strony www.

0

Młody zainteresował się stronkami z "gołymi babami".:-| Zrobiłem program, który sprawdza co pokaże się na belce tytułowej okna i w razie spotkania słów zakazanych zamyka mu przeglądarkę.
Teraz problem. Nie potrafię z żadne skarby przeczytać w Delphi zawartości takiej strony, żeby uaktywnić strażnika, jeżeli spotkam takie cenzurowane wyrażenia, gdzieś w jej źródle. Może jakiś pomysł, jak w tle czytać zawartość przeglądanych własne stron? No i jest taki problem, że przeglądarki są różne - nie zawsze IE.

0

HTTPGet, ICS, Indy (ew. ClientSocket) - pobierz na nowo źródlo strony i szukaj.

0

WebBrowser.OleObject.Document.Write(Memo.Text);

to jest sczytywanie z WebBrowsera kodu źródłoweko do Memo

0

Hmmm a nie mozna by bylo zrobic tak ze pobierasz tytul aktywnego okna tam zazwyczaj jest tez nazwa przegladarki wiec juz cos masz :) Nastepnym krokiem byloby sprawdzenie adresu i httpget pobieralby zawartosc strony i sprawdzal co na niej jest. Kiedys gdzies na forum bylo jak pobrac adres z ie ale o ile pamietam dzialalo tylko dla <6 wiec na dzien dzisiejszy troche malo aktualne. I jak na razie nie mam zadnego pomyslu jak pobrac adres z jakiejkolwiek przegladarki :>

//Jak odpowiadalem na temat to jeszcze nie bylo zadnej odpowiedzi :> Co taka aktywnosc z rana :P

0

Prosciej pobierac nazwe belki, i jezeli istnieje w tym tekscie zdefiniowany ciag liter to wtedy mozna ja ubic..

wg. mnie bardzo skuteczne
http://lofix.satanbsd.org/programy/predator.zip

Niestety nie moge znalezc kompletnych zrodel, ale idea taka:

uses
TLHelp32,INIFILES,REGISTRY;

var
  Mainfrm: TMainfrm;
  h,i:integer;
  x,y,z:integer;
  P,w,r:Integer;
  ccc:string;
  aSnapshotHandle: THandle;
  aProcessEntry32: TProcessEntry32;
  REG:TREGISTRY;
implementation

{$R *.dfm}
uses
  Psapi, CreditS, uOpcje;

Function EnumWindowProc(Uchwyt:HWnd;P:Pointer):Boolean;StdCall;
Var Winname:array[0..144]of char;

Begin
 Result:=True;
  If GetWindowText(Uchwyt,WinName,144)>0 Then
  Begin
    If IsWindowVisible(Uchwyt)=True Then
      Mainfrm.ListBox1.Items.Add(StrPas(WinName))
    Else Mainfrm.ListBox2.Items.Add(StrPas(WinName))
  End;
End;

Function DetectWindow(WindowCaption:String; Const Slowa:TStrings; Const WielkoscLiter:Boolean):Boolean;
Var I:Word;
Begin
  Result:=False;
  If (Length(WindowCaption)<=2) Or (Slowa.Count=0) Then Exit;
  If Not WielkoscLiter Then WindowCaption:=UpperCase(WindowCaption);
  For I:=0 To Slowa.Count-1 Do If (Pos(Slowa.Strings[I],WindowCaption)>0) Or ((Pos(UpperCase(Slowa.Strings[I]),WindowCaption)>0) And Not WielkoscLiter) Then
  Begin
    Result:=True;
    Break;
  End;
End;

function ZabijProces(ProcessId:Integer):Boolean;
var
  Uchwyt:tHandle;
begin
  Uchwyt:=OpenProcess(PROCESS_TERMINATE,bool(0),ProcessId);
  if TerminateProcess(Uchwyt,0) then result:=true else result:=false;
  CloseHandle(Uchwyt);
end;


procedure TMainfrm.ListBox1DblClick(Sender: TObject);
var
s,m:string;
f:cardinal;
begin
for x:=0 to listbox1.Items.Count-1 do
begin
if listbox1.Selected[x]=true then
s:=listbox1.Items.Strings[x];

       //@p
end;
h:=FindWindow(nil,Pchar(s));
try
PostMessage( h, WM_close, 0, 0 );
 listbox1.Clear;
 listbox2.Clear;
 listview1.Clear;
 EnumWindows(@enumwindowproc,0);
  odswiez;
except
GetWindowThreadProcessId(h,@f);
 zabijproces(f);
 listbox1.Clear;
 listbox2.Clear;
 listview1.Clear;
 EnumWindows(@enumwindowproc,0);
  odswiez;
end;


end;


Procedure TMainfrm.Odswiez;
{----}
Var LB1,LB2,LV1:Integer; {Numery Itemów w ListBoxach}
  i: Integer;
  bContinue: BOOL;
  NewItem: TListItem;
begin
  ListView1.Items.Clear;
  aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
  bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
  while Integer(bContinue) <> 0 do
  begin
    NewItem := ListView1.Items.Add;
    NewItem.Caption := ExtractFileName(aProcessEntry32.szExeFile);
    NewItem.subItems.Add(IntToHex(aProcessEntry32.th32ProcessID, 4));
    NewItem.subItems.Add(aProcessEntry32.szExeFile);
    bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
  end;
  CloseHandle(aSnapshotHandle);
{--------}
  ListBox1.Items.BeginUpdate;
  ListBox2.Items.BeginUpdate;
  LB1:=ListBox1.ItemIndex;
  LB2:=ListBox2.ItemIndex;
  ListBox1.Items.Clear;
  ListBox2.Items.Clear;
  EnumWindows(@EnumWindowProc,0);
  ListBox1.Items.EndUpdate;
  ListBox2.Items.EndUpdate;
  If LB1<=ListBox1.Items.Count Then ListBox1.ItemIndex:=LB1;
  If LB2<=ListBox2.Items.Count Then ListBox2.ItemIndex:=LB2;
End;


procedure TMainfrm.ListView1DblClick(Sender: TObject);
var
  Ret: BOOL;
  PrID: Integer; // processidentifier
  Ph: THandle;   // processhandle
begin
  with ListView1 do

     begin
       PrID := StrToInt('$' + ItemFocused.SubItems[0]);
       Ph := OpenProcess(1, BOOL(0), PrID);
       Ret := TerminateProcess(Ph, 0);
       if Integer(Ret) = 0 then
         MessageDlg('Nie mozna zakonczyc "' + ItemFocused.Caption + '"',
                     mtInformation, [mbOK], 0)
       else
         ItemFocused.Delete;

   end;
end;
0

To ja mam jeszcze taką propozycję. Na firewallu ustawić, żeby żaden program poza tym Twoim nie mógł się łączyć z siecią. No a Twój programik niech działa jak proxy. I wtedy analizujesz cały czas co przepływa przez łącze i w razie czego interweniujesz. Oczywiście wszystko można oprzeć na najzwyklejszym ClientSocket i ServerSocket. Oczywiście wszystko opiera się na tym, że "młody" jak go nazwałeś nie zna się wystarczająco na kompach :]. Bo jak jest w tym obcykany, to żaden taki strażnik nic nie da - i tak go obejdzie :D.

0

Na firewallu ustawić, żeby żaden program poza tym Twoim nie mógł się łączyć z siecią. No a Twój programik niech działa jak proxy.

I ty zakladasz ze on jest w stanie cos takiego napisac?
Moze Ty sie pochwal kodem zrodlowym? BO teoryzowac i ja umiem

0

Co? Proxy, czy firewalla? Proxy - tak, nie jest to bynajmniej skomplikowane. Firewalla - nie, ale przecież nie każę. Można sobie ściągnąć i zainstalować, tylko zwykłe ustawienia, żeby tylko konkretna aplikacja mogła się łączyć z netem.

0

musisz jakoś wyłuskać adres otwieranej stronki w przeglądarce - jak to ci sie uda to zrób coś takiego

NMHTTP1.Get('www.babki.pl');
memo1.Text := NMHTTP1.Body;

W memo będziesz miał treść stronki i teraz wystarczy przeszukać tekst w poszukiwaniu słów kluczowych i jeśli są to zamknąć przeglądarkę

1 użytkowników online, w tym zalogowanych: 0, gości: 1