Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ScreenShot von nichtsehbaren Desktop (https://www.delphipraxis.net/32281-screenshot-von-nichtsehbaren-desktop.html)

Dezipaitor 10. Nov 2009 09:48

Re: ScreenShot von nichtsehbaren Desktop
 
Du kannst das Remote Debugging oder Delphi als System starten: http://blog.delphi-jedi.net/2008/05/...s-an-easy-way/

Desktop sollte Desktop sein, egal wie geöffnet.

himitsu 10. Nov 2009 10:04

Re: ScreenShot von nichtsehbaren Desktop
 
Delphi-Quellcode:
SetConsoleCtrlHandler(@HandlerRoutine, True);
OldWinStat := GetProcessWindowStation;
OldDesktop := GetThreadDesktop(GetCurrentProcessId);
Try
  WinStat := CreateWindowStation(nil, 0, STANDARD_RIGHTS_REQUIRED
    or WINSTA_ACCESSCLIPBOARD or WINSTA_ACCESSGLOBALATOMS or WINSTA_CREATEDESKTOP
    or WINSTA_ENUMDESKTOPS or WINSTA_ENUMERATE or WINSTA_EXITWINDOWS
    or WINSTA_READATTRIBUTES or WINSTA_READSCREEN or WINSTA_WRITEATTRIBUTES, nil);
  If WinStat <> 0 Then Begin
    If SetProcessWindowStation(WinStat) Then Begin
      Desktop := OpenInputDesktop(0, False, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW
        or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_WRITEOBJECTS
        or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or GENERIC_WRITE or GENERIC_READ);
      If Desktop <> 0 Then Begin
        If SetThreadDesktop(Desktop) Then Begin
Nja, jetzt muß ich nur noch den Desktop aufbekommen.
OpenInputDesktop meint was von "Unzulässige Funktion" (GetLastError=1)

Hab's erstmal noch als Konsolenanwengung mit Adminrechten.


[add]
OK, Fehler gefunden.
OpenInputDesktop will den Desktop öffnen, welcher auf dem PC grade die Usereingaben abbekommt.
Allerdings ist dieser nach SetProcessWindowStation auf einer anderen WindowStation und man bekommt darauf nun keinen Zugriff mehr.

Aber wie bekomm ich jetzt raus, welcher Desktop der "Standard"-Desktop der aktuellen WindowsStation ist?
[add2]
Gut, ich probiere es mal mit MSDN-Library durchsuchenEnumDesktops :stupid:

himitsu 10. Nov 2009 13:47

Re: ScreenShot von nichtsehbaren Desktop
 
Das Problem liegt wohl einfach nur daran, daß man nicht an das Handle/DC des gewünschten Desktop-Windows kommt.

Also irendwie sehr eigenartig.
womöglich hast'e ja Recht und die versteckten Desktops haben keine Handles, aber

Mit EnumDesktopWindows kommt man ja an alle Top-Level-Handles aller Desktops ran,
aber um an das Handle des Dektops selber zu kommen hab ich einfach noch nichts gefunden.
Es brachte auch nichts, die Top-Level-Fenster einzeln zeichnen zu wollen ... ebenfalls weiß-


Aktuell versuch ich es mal über eine eigene WindowStation,
http://www.delphipraxis.net/internal...t.php?t=168313
aber so wie die ganzen Beschreibungen klingen, hab ich Angst, daß es dort am selben Problem scheitern wird,
denn auch da benötige ich das Handle/DC des gewünschten Desktops und nicht das des grad auf dem Monitor sichtbaren Desktops (wobei ich hier erstmal ausprobieren muß, ob er da wirklich den Desktop der anderen WindowStation "default" von "WinStat0")


[edit]
sooo, GetDesktopWindow und GetWindowDC liefern mir nun endlich andere Handle, als die vom "default"-Desktop,

aber auch hier bleibt alles weiß :wall:
(also alles in einer neuen WindowStation)

himitsu 11. Nov 2009 19:55

Re: ScreenShot von nichtsehbaren Desktop
 
In 'ner anderen WindowStation bekomm ich endlich ein anderes DesktopHandle, aber dennoch bleibt es weiß.

Leeres Bitmap ist weiß und StretchBlt aka TCanvas.CopyRect sagt nur "Zugriff verweigert".


Aber irgendwie muß es doch gehn? :?
Immerhin funktioniert es ja auch bei den Terminal Servern.


Im Endefekt soll es eine Mischung zwischen Terminal Server und Remote Desktop werden.
- Verbindung mit aktuell eingeloggten User (dieses geht schonmal)
- aber ohne einen eventuell Davorsitzenden zu stören und dennoch etwas anderes sehn zu können
> speziell bräuchte ich Zugriff auf ein paar der laufenden Anwendungen
- Steurung oder Zugriff auf die Eingabegeräte (Maus und Tastatur) sind nicht notwendig

Neotracer 1. Jan 2012 20:53

AW: ScreenShot von nichtsehbaren Desktop
 
Auch, wenn es jetzt etwas länger her ist:
@himitsu: Hast du es jetzt zum laufen bekommen ohne extra WindowStation? Oder kommt man da nicht drumherum?

himitsu 1. Jan 2012 21:21

AW: ScreenShot von nichtsehbaren Desktop
 
nee :cry:

Neotracer 1. Jan 2012 21:30

AW: ScreenShot von nichtsehbaren Desktop
 
Und ging es dann MIT extra WindowStation, oder selbst dann nicht? :cry:

EDIT: Zumindest gehen ja einzelne Fenster. Ist also nicht sooooo schlimm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
Seite 5 von 5   « Erste     345   

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