Zatrzymanie programu do czasu nacisniecia przycisku

0

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.

0

może to lamerski sposób ale moze zamknąć ten program a po nacisnieciu przycisku z powrotem go otworzyć.

0

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 ;) )

0

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.

0

Trzeba by podstawić haka na wywołania funkcji, z których korzysta IE do pobrania strony. Trudne zadanie.

0

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.

0

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.

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