Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [Programmeren] Desktop benaderen vanuit service (https://forum.scholieren.com/showthread.php?t=1373877)

12Trix 10-03-2006 20:35

[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.

Warsocket 10-03-2006 23:57

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?

12Trix 11-03-2006 09:47

Citaat:

Warsocket schreef op 11-03-2006 @ 00:57 :
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?

Delphi kan ook Windows API's aanroepen ja :)

Ik zal het eens proberen :)

All Out Of Love 11-03-2006 10:45

wat zijn api's

Triloxigen 11-03-2006 10:53

Citaat:

All Out Of Love schreef op 11-03-2006 @ 11:45 :
wat zijn api's
Dat is wel een hele basis vraag :o
Maar het bekend dus Application Programming Interface :)

All Out Of Love 11-03-2006 11:41

Citaat:

********** schreef op 11-03-2006 @ 11:53 :
Dat is wel een hele basis vraag :o
Maar het bekend dus Application Programming Interface :)

als ik het goed heb zijn api toch ongeveer hetzelfde als interpetors ? ik ben pas 2 maanden bezig met me mbo studie ict beheerder, dus verwacht maar heel wat meer basis vragen ;)

12Trix 11-03-2006 12:19

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.

12Trix 11-03-2006 12:26

Citaat:

All Out Of Love schreef op 11-03-2006 @ 12:41 :
als ik het goed heb zijn api toch ongeveer hetzelfde als interpetors ? ik ben pas 2 maanden bezig met me mbo studie ict beheerder, dus verwacht maar heel wat meer basis vragen ;)
Een API vormt een interface tussen de programmeur en het programma of besturingssysteem waar de API op betrekking heeft. Je bediend het besturingssysteem er als het ware mee.

Warsocket 11-03-2006 13:19

Citaat:

12Trix schreef op 11-03-2006 @ 13:26 :
Een API vormt een interface tussen de programmeur en het programma of besturingssysteem waar de API op betrekking heeft. Je bediend het besturingssysteem er als het ware mee.
jep, windown heeft een scala aan .dll bestanden daar staan allemaal functies in die je kan gebruiken.

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

12Trix 11-03-2006 13:41

Citaat:

Warsocket schreef op 11-03-2006 @ 14:19 :
jep, windown heeft een scala aan .dll bestanden daar staan allemaal functies in die je kan gebruiken.

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

Ik kan met CreateProcessAsUser een proces starten onder de 'security context' van een bepaalde gebruiker. Maar ik heb dan dus alleen de rechten van die gebruiker maar niet de desktop van die gebruiker voglens mij.

12Trix 12-03-2006 01:55

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 :)

12Trix 13-03-2006 16:32

Jippie, het is gelukt, eindelijk. Mijn service is nu oppermachtig :p

Dr HenDre 13-03-2006 16:38

code (A)

Viporizer 13-03-2006 18:52

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.