AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot aus TService

Ein Thema von Hobbycoder · begonnen am 15. Feb 2022 · letzter Beitrag vom 16. Feb 2022
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#1

AW: Screenshot aus TService

  Alt 15. Feb 2022, 15:26
Vielleicht ist es so, dass es nicht so einfach möglich ist das UI aus dem Service anzusprechen.
https://stackoverflow.com/questions/...s-black-screen
https://stackoverflow.com/questions/...in-system-tray
https://social.msdn.microsoft.com/Fo...=csharpgeneral
https://www.codeproject.com/Question...esktop-service
Ich denke aber es sollte irgendwelche Hacks und Tricks geben, um einen Screenshot zu machen.

Geändert von Rollo62 (15. Feb 2022 um 15:29 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Screenshot aus TService

  Alt 15. Feb 2022, 15:38
Wenn das nicht gehen würde, was machen denn dann Dienste wie VNC und so. Gehen wird es schon.

PS: Vielleicht ist die Desktop Duplication API etwas. Irgendwo auf Github habe ich mal Delphi-Wrapper dafür gefunden und auch erfolgreich verwendet. Als Dienst habe ich das aber nie probiert, das lief immer im Kontext des angemeldeten Benutzers.

Geändert von Der schöne Günther (15. Feb 2022 um 15:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Screenshot aus TService

  Alt 15. Feb 2022, 16:56
Irgendwo auf Github habe ich mal Delphi-Wrapper dafür gefunden und auch erfolgreich verwendet.
github.com/DesktopDuplicationAPI
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Screenshot aus TService

  Alt 15. Feb 2022, 17:23
Genau das war es, danke 😎
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
698 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Screenshot aus TService

  Alt 16. Feb 2022, 08:25
Dienste laufen in einem anderen Desktop und kommen da auch nicht raus.
Du brauchst also zu deinem Dienst ein Programm das in der aktuell User session sitzt und dir die Bilder liefert.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#6

AW: Screenshot aus TService

  Alt 16. Feb 2022, 08:34
Du brauchst also zu deinem Dienst ein Programm das in der aktuell User session sitzt und dir die Bilder liefert.
Das war auch mein erster Gedanke, dass der Service eventuell regelmäßig ein kleines, unsichtbares Snapshot-Programm triggern könnte, dass ihm die Daten liefert.

Die Idee mit DesktopDuplicationApi ist auch nett, ich sehe da aber nirgends dass man sich vom Service aus was holen könnte.
Wahrscheinlich ist das Ergebnis im Service dann auch wieder nur schwarz oder weiss, aber eben nicht aus dem User Process.
Hat es damit denn funktioniert ?
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Screenshot aus TService

  Alt 16. Feb 2022, 08:48
Hast Du es mal mit OpenWindowStation('winsta0', True, GENERIC_ALL) probiert? Und anstelle von default für den Desktopnamen GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen) ?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all

Geändert von Union (16. Feb 2022 um 09:03 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#8

AW: Screenshot aus TService

  Alt 16. Feb 2022, 14:45
Du brauchst also zu deinem Dienst ein Programm das in der aktuell User session sitzt und dir die Bilder liefert.
Das war auch mein erster Gedanke, dass der Service eventuell regelmäßig ein kleines, unsichtbares Snapshot-Programm triggern könnte, dass ihm die Daten liefert.

Die Idee mit DesktopDuplicationApi ist auch nett, ich sehe da aber nirgends dass man sich vom Service aus was holen könnte.
Wahrscheinlich ist das Ergebnis im Service dann auch wieder nur schwarz oder weiss, aber eben nicht aus dem User Process.
Hat es damit denn funktioniert ?
Also im Dienst läuft es damit auch nicht. Schon beim FDuplication.GetFrame kommt SystemError 170.

Möglicherweise muss ich mich von dem Anspruch verabschieden, dass gänzlich unter Verzicht einer Application im Usercontext zu realisieren. Ziel war eigentlich die Manipulation der Function über den Taskmanager zu unterbinden.
Allerdings hat die DesktopDuplicationApi noch eine anderen Nachteil. Sie greif nämlich immer nur den primären Bildschirm ab. Bei 2 oder mehr Monitoren fehlt also immer einiges. Und ich habe (zumindes im Wrapper) keine Möglichkeit gefunden, den Bildschirm zu wechseln (allerdings würde ich beide gleichzeitig benötigen).

Hast Du es mal mit OpenWindowStation('winsta0', True, GENERIC_ALL) probiert? Und anstelle von default für den Desktopnamen GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen) ?
Hm....kurze Frage: Was würde das GetUserObjectInformation bringen?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Screenshot aus TService

  Alt 16. Feb 2022, 17:51
Dienste laufen in einem anderen Desktop und kommen da auch nicht raus.
Du brauchst also zu deinem Dienst ein Programm das in der aktuell User session sitzt und dir die Bilder liefert.
Erschwerend kommt hinzu, sobald sein Service Quelltext "Forms" oder der gleichen reinlädt geht da erstmal gar nichts mehr, da diese ein unsichtbares Fenster erstellen.
Also ich würde vom Service einen Daemon starten der alles über Dll bereitstellt. Rein vom logischen ablauf her. (Service -> Daemon -> Dll abrufe mit Screenshot -> zurück zum Service)
Versucht so etwas selber zu basteln habe ich bis jetzt noch nicht aber Interessant finde ich dieses Projekt schon!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 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