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.
HTTPGet, ICS, Indy (ew. ClientSocket) - pobierz na nowo źródlo strony i szukaj.
WebBrowser.OleObject.Document.Write(Memo.Text);
to jest sczytywanie z WebBrowsera kodu źródłoweko do Memo
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
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;
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.
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
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.
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ę