Delphi-PRAXiS

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)

youuu 25. Jul 2010 18:15


Fremdes Fenster schließen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich hab ein Problem und zwar lass ich mir von einer Webseite alle Links ausgeben, aber sobald diese Funktion ausgefhürt wird erhalte ich eine Meldung von Windows. Siehe Anhang

Nein Sie lässt sich leider nicht abschalten, alles schon versucht, was im Internet steht.
Nun will ich einfach, das diese meldung geschlossen wird automatisch oder irgendwe unterdrückt wird?

fatalerror 25. Jul 2010 18:27

AW: Fremdes Fenster schließen
 
Siehe Microsoft KB

youuu 25. Jul 2010 18:31

AW: Fremdes Fenster schließen
 
Intranetsite wird bei Verwendung einer FQDN- oder IP-Adresse als Internetsite identifiziert


Da ich keine Intranetseite aufrufe, fällt das wohl raus ...

bzw.
* \\Computer.Unterdomäne.Domäne.com\Freigabe
* http://Computer.Unterdomäne.Domäne.com
* \\157.54.100.101\Freigabe
* file://157.54.100.101/Freigabe
* http://157.54.100.101

Greife ich so auf keine Webseite zu, die diesen Fehler aufrufen könnte.

fatalerror 25. Jul 2010 18:33

AW: Fremdes Fenster schließen
 
Hast du dein Beitrag gelesen? wohl kaum!
Füge die Adresse zu den vertrauenswürdigen Sites hinzu.

Luckie 25. Jul 2010 18:34

AW: Fremdes Fenster schließen
 
Mit FindWindow das Fensterhandle ermitteln und dann mit der Nachricht WM_CLOSE schließen.

fatalerror 25. Jul 2010 18:36

AW: Fremdes Fenster schließen
 
Zitat:

Zitat von youuu (Beitrag 1037465)
Greife ich so auf keine Webseite zu, die diesen Fehler aufrufen könnte.

und wie greifst du dann auf die Seite zu?

youuu 25. Jul 2010 18:39

AW: Fremdes Fenster schließen
 
Zitat:

Zitat von fatalerror (Beitrag 1037467)
Hast du dein Beitrag gelesen? wohl kaum!
Füge die Adresse zu den vertrauenswürdigen Sites hinzu.

Wie ich dir mitteilte, habe ich alle im Internet gefundene Tipps verwendet, darunter viel auch das hinzufügen der vertrauenwürdigen Seiten.

brachte allerdings nicht viel...


Zugriff erfolgt: http//www.google.de/ z.B

youuu 25. Jul 2010 18:41

AW: Fremdes Fenster schließen
 
Zitat:

Zitat von Luckie (Beitrag 1037469)
Mit FindWindow das Fensterhandle ermitteln und dann mit der Nachricht WM_CLOSE schließen.

Funktioniert das, auch wenn die Meldung aufpoppt und dadurch das Programm wartet, das die Meldung schließt, bevor es weiter arbeitet?

Bzw. wie umgeh ich das, dass sich das Programm an dieser Meldung aufhält

Luckie 25. Jul 2010 18:58

AW: Fremdes Fenster schließen
 
Dann musst du einen zweiten Thread starten, welcher auf das Erscheinen des Fensters wartet und es schließt, wenn es auftaucht.

youuu 25. Jul 2010 20:02

AW: Fremdes Fenster schließen
 
Hm das ist für mich natürlich sehr ungünstig, da ich noch nie mit Threads gearbeitet habe.

Ein Thread Objekt erstellen ist in Delphi ja nicht schwer aber wie ich den Thread dann verwende weiß ich leider gar nicht.

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 02:43 Uhr.

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