Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fremdes Fenster schließen (https://www.delphipraxis.net/153221-fremdes-fenster-schliessen.html)

rollstuhlfahrer 25. Jul 2010 20:16

AW: Fremdes Fenster schließen
 
Also ein WM_Close ist aber nicht so ganz das richtige. Du wirst schon den Button mit der Aufschrift "JA" suchen müssen und den dann Klicken müssen. Dafür gibt es eine BN_*- oder BM_*-Konstante. Wie du an den Button rankommst: Hier im Forum suchenWinSpy
Mit Threads arbeiten:
Du erstellst ein Objekt, welches von TThread abgeleitet wird. Dann überschreibst du die Execute-Prozedur (mit Hilfe der Programmierhilfe geht das ganz einfach). In deiner Execute-Prozedur wirst du als allererstes mal so 2 Sekunden oder mehr warten müssen (das Fenster benötigt ja auch eine gewisse Vorlaufzeit, bis es da ist (du kannst ja nicht gleichzeitig den Thread starten während das Fenster kommt). Der Thread muss das .FreeOnTerminate gesetzt haben (:= true), dann fegt er sich auch gleich noch sauber aus dem Speicher.

Bernhard

EDIT: Du willst alle Links? - Warum dann nicht mit IdHTTP zugreifen?

youuu 26. Jul 2010 19:36

AW: Fremdes Fenster schließen
 
Zitat:

EDIT: Du willst alle Links? - Warum dann nicht mit IdHTTP zugreifen?

Ich geif doch per IdHTTP darauf zu?

Delphi-Quellcode:
procedure GetLinksFromURL(url: string; s: THashedStringList;);
var
  doc: IHTMLDocument2;
  IdHTTP: TIdHTTP;
begin
      Assert((url <> '') and Assigned(s));
      IdHTTP := TIdHTTP.Create;
      try
        IdHTTP.HandleRedirects := true;
        IdHTTP.Request.UserAgent :=
          'User-agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1)';
        doc := GetDocument(IdHTTP.Get(url)) as IHTMLDocument2;
        if Assigned(doc) then
          ExtractLinks(doc, s);
      finally
        IdHTTP.Free;
      end;
end;

rollstuhlfahrer 26. Jul 2010 19:43

AW: Fremdes Fenster schließen
 
Die Meldung kommt mir aber so vor, als würdest du die TWebbrowser-Wrapper-Klasse verwenden. Solch eine Meldung finde ich für Indy unüblich.

Bernhard

youuu 26. Jul 2010 19:46

AW: Fremdes Fenster schließen
 
Delphi-Quellcode:
procedure ExtractLinks(doc: IHTMLDocument2; s: THashedStringList);
var
  ec: IHTMLElementCollection;
  e: IHTMLElement;
  i: integer;
  url: Variant;
begin
  ec := doc.links;
  for i := 0 to Pred(ec.length) do
  begin
    e := ec.item(i, 0) as IHTMLElement;
    url := VarToStr(e.getAttribute('href', 0));
    if url <> '' then
      s.Add(url);
  end;
end;

function GetDocument(const markup: WideString): IDispatch;
var
  doc: OleVariant;
begin
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  doc.Write(markup);
  doc.Close;
end;
Sehen die weiteren functionen/proceduren aus aus

rollstuhlfahrer 26. Jul 2010 20:07

AW: Fremdes Fenster schließen
 
Wenn du JavaScript haben willst, kommst du um einen Renderer nicht drum rum. Ohne JavaScript gehts auch anders. Du musst halt mit einem XML-Parser der auch Fehler akzeptiert da ran und dir dann die href-Attribute der A-Tags geben lassen.

Bernhard

youuu 26. Jul 2010 20:12

AW: Fremdes Fenster schließen
 
Hm wie meinst du das einen rendere?

rollstuhlfahrer 26. Jul 2010 20:18

AW: Fremdes Fenster schließen
 
Also guck mal: Wenn per Javascript irgendwelche Links erzeugt werden, dann trägt die der IE schön in seinen DOM ein und du kannst die Javascript-Links auch finden.
Wenn du auf diese verzichten kannst, kannst du auch einen einfachen XML-Parser nehmen. Die sind bestimmt schneller. (Diesen nehme ich hier)

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz