Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi GetCurrentUrl in einem Service (https://www.delphipraxis.net/129390-getcurrenturl-einem-service.html)

Thanatos81 18. Feb 2009 09:32


GetCurrentUrl in einem Service
 
Moin zusammen!

Ich versuche gerade die GetCurrentUrl-Prozedur aus diesem Beitrag in einem Service zu packen.

Hintergrund ist, dass ich überwachen möchte wann welche Internetseite aufgerufen wird. Idealerweise möchte ich URL und Title loggen, URL alleine würde aber auch gehen.

Das Problem ist ja, dass ich aus dem Service heraus auf den Desktop des Users (WinSta0\default) zugreifen muss. Der Desktop reicht, weil an dem entsprechenden Rechner nur ein Benutzer angemeldet ist, die schnelle Benutzerumschaltung aus und auch ein Autologon.

Nun, das Öffnen der WindowStation, des Desktops und ein EnumDesktopWindows funktionieren einwandfrei. Nur das GetCurrentUrl nicht. Habe auch schon versucht vorher SetProcessWindowStation und SetThreadDesktop aufzurufen, das hilft aber leider nichts.

Kann ich GetCurrentUrl in einem Service komplett vergessen, weil es DDE nutzt? Gibt es sonst eine Möglichkeit, z.B. per Handle des Browser, die aktuelle URL auszulesen?

Delphi-Quellcode:
wsHandle := OpenWindowStation('WinSta0', true, WINSTA_ACCESSCLIPBOARD or
  WINSTA_ENUMDESKTOPS or
  WINSTA_ENUMERATE or
  WINSTA_READATTRIBUTES or
  WINSTA_READSCREEN);

if wsHandle <> 0 then
begin
  dHandle := OpenDesktop('Default', 1, false,
    DESKTOP_ENUMERATE or
    DESKTOP_HOOKCONTROL or
    DESKTOP_READOBJECTS or
    DESKTOP_SWITCHDESKTOP);
  if dHandle <> 0 then
  begin
    sl := TStringList.Create;
    try
      sl.Duplicates := dupIgnore;
      EnumDesktopWindows(dHandle, @EnumWindowCallback, Integer(sl));
      sl.SaveToFile('c:\liste.txt');

      if SetProcessWindowStation(wsHandle) <> 0 then
        if SetThreadDesktop(dHandle) <> 0 then
          GetCurrentUrl(url, title); //< - -Hier steigt der Service aus
     

      if (trim(url) <> '') or (trim(title) <> '') then
      begin
        sl.Clear;
        sl.Add(url + ': ' + title);
        sl.SaveToFile('c:\urls.txt');
      end;
      sleep(5000);
    finally
      FreeAndNil(sl);
    end;
  end;
end;

Dezipaitor 18. Feb 2009 13:36

Re: GetCurrentUrl in einem Service
 
Meine Glasskugel sagt mir:
Delphi-Quellcode:
SetThreadDesktop(dHandle);
schlägt vllt. fehl.

Thanatos81 18. Feb 2009 14:20

Re: GetCurrentUrl in einem Service
 
Komisch, das sagte meine Glaskugel auch schon. Selber Hersteller? :P

Deswegen habe ich zwischenzeitlich eine Überprüfung des Rückgabewertes auf ungleich 0 eingebaut. Hab das nur nich neu reingeschrieben, um nicht unnötig zu pushen. Aber ich werd mal gleich den ersten Beitrag dementsprechend editieren.

Dezipaitor 18. Feb 2009 14:49

Re: GetCurrentUrl in einem Service
 
Wo kommt die Funktion überhaupt her?

Thanatos81 18. Feb 2009 14:52

Re: GetCurrentUrl in einem Service
 
Zitat:

Zitat von Dezipaitor
Wo kommt die Funktion überhaupt her?

Welche? SetThreadDesktop? Die kommt aus der Api, unter Delphi einfach "Windows" in die uses aufnehmen und schon steht die zur Verfügung.

Dezipaitor 18. Feb 2009 23:48

Re: GetCurrentUrl in einem Service
 
Nein:

GetCurrentUrl

Thanatos81 19. Feb 2009 07:13

Re: GetCurrentUrl in einem Service
 
Zitat:

Zitat von Thanatos81
Ich versuche gerade die GetCurrentUrl-Prozedur aus diesem Beitrag in einem Service zu packen.

Na, das hab ich doch extra im ersten Post erwähnt ;-)

Bernhard Geyer 19. Feb 2009 07:20

Re: GetCurrentUrl in einem Service
 
Verwendest du Vista/Windows 2008

Thanatos81 19. Feb 2009 07:25

Re: GetCurrentUrl in einem Service
 
Nein, Windows XP und 2000. Vista/Windows 7 sind nicht von Interesse und Server-Systeme eh nicht. Da sitzt niemand dran und surft ;-)

Bernhard Geyer 19. Feb 2009 07:27

Re: GetCurrentUrl in einem Service
 
Zitat:

Zitat von Thanatos81
Nein, Windows XP und 2000. Vista/Windows 7 sind nicht von Interesse und Server-Systeme eh nicht. Da sitzt niemand dran und surft ;-)

IE7 oder IE8? Dieser wird ja (AFAIK auch unter XP) mit sehr wenigen Rechten gestartet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.
Seite 1 von 2  1 2      

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