![]() |
GetCurrentUrl in einem Service
Moin zusammen!
Ich versuche gerade die GetCurrentUrl-Prozedur aus ![]() 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; |
Re: GetCurrentUrl in einem Service
Meine Glasskugel sagt mir:
Delphi-Quellcode:
schlägt vllt. fehl.
SetThreadDesktop(dHandle);
|
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. |
Re: GetCurrentUrl in einem Service
Wo kommt die Funktion überhaupt her?
|
Re: GetCurrentUrl in einem Service
Zitat:
|
Re: GetCurrentUrl in einem Service
Nein:
GetCurrentUrl |
Re: GetCurrentUrl in einem Service
Zitat:
|
Re: GetCurrentUrl in einem Service
Verwendest du Vista/Windows 2008
|
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 ;-)
|
Re: GetCurrentUrl in einem Service
Zitat:
|
Re: GetCurrentUrl in einem Service
Zielfenster sind hauptsächlich Firefox. Installiert ist aber der 7er, falls das von Belang ist.
|
Re: GetCurrentUrl in einem Service
Was anderes: ist das für eine Firma? Wurde die Mitarbeiterüberwachung mit dem Betriebsrat abgestimmt oder will man Lidl&Co. nachfolgen?
|
Re: GetCurrentUrl in einem Service
Das ist erst mal für unseren Praktikantenrechner. Und die Praktikanten werden sicherlich drauf hingewiesen, Betriebsrat gibt es aufgrund der Unternehmensgröße nicht. Falls ein Kunde das haben möchte, werde ich den natürlich auch drauf hinweisen, dass er das nicht "einfach so" installieren darf.
|
Re: GetCurrentUrl in einem Service
Wäre ein Proxy nicht einfacher?
|
Re: GetCurrentUrl in einem Service
Theoretisch ja. Aber a) nutze ich das um mich mit dem Thema Dienste zu beschäftigen und b) kann man den Dienst per EnumDesktopWindows auch um andere Programme (Solitär etc.) erweitern.
Ich werde mich wohl erst Mal mit EnumDesktopWindows begnügen, da ich da ja den Title der Webseite bekomme. Das sollte eigentlich in 99% der Fälle reichen. Ach und noch etwas wegen der Überwachung. Wird ein entsprechendes Programm gefunden, wird inzwischen auch eine MessageBox angezeigt, die auf die Überwachung hinweist ;-) |
Re: GetCurrentUrl in einem Service
hmm, DDE also.
DDE + Service? Hmmmmmmmm. Ich vermute du musst diese DDE Funktionen im Benutzerkontext aufrufen. Also z.B. ImpersonateLoggedonUser damit nutzen. Aber natürlich funktioniert das nicht in Vista und in XP mit FUS. Wenn der Praktikant sich als zweiter Benutzer einloggt, dann kann er machen was er will. Habt ihr so schlechte Erfahrungen mit Praktikanten gemacht? |
Re: GetCurrentUrl in einem Service
Was du entwickelst (GUI-Interaktion aus Dienst) ist eh ein Aussterbendes "Betätigungsfeld" da ab Vista (Vista, Windows 2008, Windows 7) eh interaktion Dienst <-> GUI praktisch nicht mehr erlaubt ist.
|
Re: GetCurrentUrl in einem Service
Zitat:
Zitat:
Wegen der Hinweise auf Vista/7 usw. Das ist ja alles schön und gut. Nur für meinen konkreten Fall unerheblich. Und unterm Strich bleibt auf jeden Fall das Wissen um das Schreiben von Diensten inkl TCP-Server und einer Verwaltungs-GUI. So das mein Aufwand nicht umsonst ist ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 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