Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   [Delphi/Win7] Screenshot aus Dienst heraus (https://www.delphipraxis.net/160220-%5Bdelphi-win7%5D-screenshot-aus-dienst-heraus.html)

rollstuhlfahrer 3. Mai 2011 11:09

[Delphi/Win7] Screenshot aus Dienst heraus
 
HI @all,

ich bin gerade dabei eines meiner Programme Win7-fit zu machen. Eines der Features war es, einen Screenshot zu erstellen. Unter WinXP war das ganz einfach: Einfach im Dienst den Screenshot mit den bekannten Methoden erstellen und gut. Jetzt gibt es unter Win7 ein paar klitzekleine Probleme: Statt einem Screenshot ist das komplette Bild jetzt entweder ganz schwarz oder ganz weiß (anderer Quellcode).

So: Meine Frage ist jetzt: Wie mache ich, dass ich in meinem Dienst wieder einen Screenshot bekomme? - UltraVNC hat auch kein Client-Programm, welches mit Benutzerrechten läuft und einen Treiber habe ich nicht eingespielt. - Somit müsste das mein Programm ja auch können. Nur wie?

Bernhard

Zacherl 3. Mai 2011 11:12

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Das Problem wird sein, dass der Service auf Deskop0 läuft. Müsstest du mit ImpersonateLoggedOnUser() und co. rumspielen vermute ich.

Zu VNC: Dieses Programm installiert ohne Treiber einen Usermode Hook (dll) in alle laufenden Prozesse, wenn ich mich recht erinnere. Dort wird auch nicht einfach ein Screenshot gemacht, sondern GDI Zugriffe gezielt abgefangen.

rollstuhlfahrer 6. Mai 2011 06:58

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Zitat:

Zitat von Zacherl (Beitrag 1098544)
Das Problem wird sein, dass der Service auf Deskop0 läuft. Müsstest du mit ImpersonateLoggedOnUser() und co. rumspielen vermute ich.

Ist ja auch ziemlich einfach^^. Über einen weiteren Tipp in die richtige Richtung würde ich mich freuen.

Bernhard

taveuni 6. Mai 2011 07:59

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
In etwa so.

Gruss Werner

rollstuhlfahrer 6. Mai 2011 08:06

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Muss ich das mit dem Screenshot also in ein "externes" Programm auslagern?

Oder gibt es noch eine Möglichkeit, wo der Code im Dienst ausgeführt werden kann? (Falls nicht, kann ich dem Client-Prozess Admin-Rechte mitgeben oder sollte ich schon mal anfangen, mir Gedanken zu machen, wie ich das Bild dann in meinen Dienst rein bekomme?)

Bernhard

Luckie 6. Mai 2011 08:24

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1098543)
Unter WinXP war das ganz einfach: Einfach im Dienst den Screenshot mit den bekannten Methoden erstellen und gut.

Das kann aber nur mit einem interaktiven Dienst funktioniert haben. Seit Vista gibt es diese aber nicht mehr, da sie ein Sicherheitsrisiko waren.

rollstuhlfahrer 6. Mai 2011 08:30

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Ja, das war ein interaktiver Dienst, weil ich damals (ist schon lange lange her) irgendwelche Probleme mit nicht-interaktiven Diensten hatte. Mittlerweile sollte ich diese nicht mehr haben, den Screenshot hätte ich aber gerne trotzdem.

Bernhard

taveuni 6. Mai 2011 09:39

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Mit der oben beschriebenen Methode erhält man aus einem Dienst heraus
Zugriff auf den Benutzer Desktop. Somit kann dann natürlich auch ein
Screenshot gemacht werden. Das funktioniert bisher inkl. W7 und Srv2008.

Also Du benötigst kein separates Programm.

Dezipaitor 6. Mai 2011 12:47

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Man kann dasselbe Programm auf diese Art und Weise mehrfach starten, aber trotzdem ist ein zweiter Prozess zwingend notwendig. Es gibt keinen anderen Weg ohne Treiber.
http://www.delphipraxis.net/109191-p...ich-mal-3.html

taveuni 6. Mai 2011 12:59

AW: [Delphi/Win7] Screenshot aus Dienst heraus
 
Stimmt natürlich.
Ich hatte es so verstanden dass er kein 2.Programm (=EXE) möchte.
Wenn er das ursprüngliche im Benutzerkontext Z.B. mit einem Parameter aufruft ist das wohl
das Gleiche Programm aber ein anderer Prozess.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.

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