Witam! Czy ma ktos pomysł jak zatrzymać działanie za pomocą programu w delphi jakiegoś programu do czasu potwierdzenia czy chce się aby dalej działał, podobnie jak to robi np. norton antyvirus jak jest podejzenie że w jakimś programie jest wirus. Z góry dzieki za pomoc.
może to lamerski sposób ale moze zamknąć ten program a po nacisnieciu przycisku z powrotem go otworzyć.
musiałbyś napisać coś a'la debugger a to chyba do łatwych zadań nie należy (w sumie nie wiem, nigdy debugera nie pisałem ;) )
ale sie uśmiałem :-) no ale nie o taki sposób mi chodziło.
Dokładnie to chce zrobić takie coś: program zatrzymuje działanie internet explorera przy próbie wczytania jakiejś strony www, nastepnie pojawia się komuniakat mojego programu: 'Czy chesz pozwolic na otworzenie strony?',jeśli tak to mój program pozwala dalej na wczytywanie daenj strony www. Z góry dzieki za pomoc lub wskazówki.
Trzeba by podstawić haka na wywołania funkcji, z których korzysta IE do pobrania strony. Trudne zadanie.
Ja mam taki pomysł że bym sprawdzał liste otwarych okien IE (coś w stylu listy CTRL+ALT+DEL) i przy pojawieniu się nowej pozycji na liście sprawdzał czy jest to IE, jeśli tak to wtedy bym zatrzymywał działanie tego okna.
Wiem jak zrobić liste i sprawdzić czy to IE ale nie wiem jak rozwiazać to zatrzymanie programu.
Może po prostu zamykać(zanim wczyta sie strona) takie okno z poziomu mojego programu znając jego uchwyt i zamiętywać adres strony www a jeśli użytkownik pozwoli na wczytanie strony otworzyć na nowo okno. Ale to nie jest chyba dobre rozwiazanie.
Znalazłem komponent ktory korzysta z podobnych funkcji która mi są potrzebne. Ale nie wiem o co chodzi w tym kodzie, może na podstawie tego kudu będziecie wiedzieli jak mi pomóc.
unit IExplorerCounter;
(********************************************)
(* This component allow you to limit the *)
(* number of instance of microsoft explorer *)
(* *)
(* It's work for me... This stuff is *)
(* public domain do what you want with it. *)
(* *)
(* If you make modifications send them to *)
(* [email protected] *)
(* *)
(* Marc Gauthier *)
(* Montreal, Canada. *)
(********************************************)
interface
uses
Messages, ExtCtrls, Windows, SysUtils, Classes;
type
TIExplorer = class(TComponent)
private
FMaxWindow : Integer;
FOpenWindow : Integer;
WindowsList : Array of HWND;
Title : Array[0..512] of Char;
Timer : TTimer;
FEnabled : Boolean;
procedure SetEnabled(Value: Boolean);
procedure SetMaxWindow(Value: Integer);
procedure OnTimer (Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property OpenWindows : Integer read FOpenWindow default 0;
published
property MaxWindows : Integer read FMaxWindow write SetMaxWindow;
property Enabled : Boolean read FEnabled write SetEnabled;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Internet', [TIExplorer]);
end;
function EnumWindowsCallback(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
Explorer: TIExplorer;
begin
Explorer := TIExplorer(LParam);
if GetWindowText(hwnd, Explorer.Title, SizeOf(Explorer.Title)) > 0 then
begin
if pos('microsoft internet explorer', lowercase(Explorer.Title)) > 0 then
begin
if Explorer.FOpenWindow >= Explorer.FMaxWindow then
begin { Kill Previous windows }
PostMessage(Explorer.WindowsList[0], WM_CLOSE,0,0); { Kill window }
move(Explorer.WindowsList[1], Explorer.WindowsList[0], Explorer.FOpenWindow-1);
Explorer.WindowsList[Explorer.FOpenWindow-1] := hwnd;
end
else
begin
inc(Explorer.FOpenWindow);
Explorer.WindowsList[Explorer.FOpenWindow-1] := hwnd;
end;
end;
end;
Result := true;
if Explorer.FEnabled then
Explorer.Timer.Enabled := true;
end;
procedure TIExplorer.OnTimer (Sender: TObject);
begin
Timer.Enabled := false;
FOpenWindow := 0;
EnumWindows(@EnumWindowsCallback, LPARAM(self));
end;
constructor TIExplorer.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FMaxWindow := 2;
Setlength(WindowsList, FMaxWindow);
Timer := TTimer.Create(nil);
Timer.Enabled := false;
Timer.OnTimer := OnTimer;
Timer.Interval := 100;
end;
destructor TIExplorer.Destroy;
begin
SetLength(WindowsList, 0);
inherited Destroy;
end;
procedure TIExplorer.SetMaxWindow(Value: Integer);
begin
if Value <> FMaxWindow then
begin
SetLength(WindowsList, Value);
FMaxWindow := Value;
end;
end;
procedure TIExplorer.SetEnabled(Value: Boolean);
begin
if FEnabled <> Value then
begin
FEnabled := Value;
Timer.Enabled := Value;
end;
end;
end.
byc moze komunikat?
znalazlem takie cus ale nie wiem czy to pomoze na 100% ;)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Windows/WindowReference/WindowMessages/WM_ENABLE.asp