Einzelnen Beitrag anzeigen

Thanatos81
(Gast)

n/a Beiträge
 
#1

GetCurrentUrl in einem Service

  Alt 18. Feb 2009, 09:32
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;
  Mit Zitat antworten Zitat