![]() |
[Programmeren] Desktop benaderen vanuit service
Ik heb al een hele tijd op Google gezocht en wat fora maar heb geen oplossing gevonden.
Ik wil graag de huidige desktop (de desktop waarbij een gebruiker is aangemeld) benaderen, een screenshot ervan maken. Mijn service draait onder het account "Lokale computer" (SYSTEM). Ik heb de optie "Interactief met het bureaublad" geprobeerd. Dat werkt niet. Ook heb ik OpenInputDesktop en OpenWindowStation, etc. gebruikt, maar dat werkt allemaal niet. Verder heb ik het nog op een andere manier geprobeerd door met CreateProcess een programma uit te voeren in de huidige, interactieve desktop, door bij de startupinfo lpDesktop op 'winsta0\default' te zetten. Maar ook dit werkt niet. Weet iemand hier toevallig iets van? Ik draai Windows XP en gebruik Delphi om de service te maken. |
geen ide ehoe het precies moet maar
als de gebruiken aangemeld is ff naar zijn desktop switchen createDC("display",0,0,0) (DC van je scherm) van die DC een dibsection maken CreateBitmap -> van die bits een dibsection maken en die dibsection in een file gooien met ene bmp header erboven en wegschrijven bovenstaande functies zijn windhoos API's ik neem aan dat delphi daar ook aan kan? |
Citaat:
Ik zal het eens proberen :) |
wat zijn api's
|
Citaat:
Maar het bekend dus Application Programming Interface :) |
Citaat:
|
Met CreateDC lukt het ook niet :s
Zou het toch op een hele andere manier moeten? Dus dat het wel nodig is om een programma voor iedere gebruiker apart te starten, en dan bijv. de service met die programma's laten communiceren om screenshots van hen te vergaren. |
Citaat:
|
Citaat:
zo heb je functies om een venster te maken, funcites om bestanden weg te schrijven functies om gleuiden af te spelen, etc etc je kan natuurlijk zelf ook een.dll schrijven daar zet je dan eigengemaakte functies in ontopic: je hebt ook een api PaintDesktop in user32.dll kun je niet als de serveice het wilt weten een process aanmaken op de naam van de gebruiker CreateProcess (hoeft geen extrne .exe te zijn kan ook interne functie van jouw process zijn geloof ik) dat n geef je dat process jouw DC mee waar je de kopie van de desktop op geblit wilt hebben dus je service wil van user a de desktop hebben je maakt mer CreateProcess een process dat je een parameter meegeeft (een DC in jouw service) van doe je PaintDesktop (jouwDC) en den heb je in je service en device context (DC) die je kan gebruiken om mee te blitten en / of om te zetten naar een dibsection en dan op te slaan |
Citaat:
|
Je hebt dus een Window station (bijv. 'winsta0', het actieve Window station), en binnen dat Window station een aantal desktops. Maar zo'n Window station zit weer in een session, zo blijkt.
De manier om het te doen is wel CreateProcessAsUser. Je kunt dan een handle van een bepaalde sessie opgeven. Met een andere functie kun je de sessie van de actieve gebruiker opvragen. De pagina waarin dit d.m.v. code geïllustreerd wordt: http://msdn.microsoft.com/library/de...7f27ab.xml.asp Dit ga ik morgen (vandaag) maar proberen :) |
Jippie, het is gelukt, eindelijk. Mijn service is nu oppermachtig :p
|
code (A)
|
Je kan ook bij opensource files kijken hoe ze het daar hebben gedaan.
Mischien dat je daar brijkbare info uit kan halen. |
Alle tijden zijn GMT +1. Het is nu 02:34. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.