Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

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)

xaromz 4. Jan 2007 11:12

Re: ScreenShot von nichtsehbaren Desktop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:

Zitat von Sascha999999999
man kann ja auch SnapHots von Programmen erstellen die minimirt sind!

Also das wäre mir neu. Du kannst Dir ja mal mein Testprogramm ansehen. Wenn Du auf den Button klickst, dann wird ein Screenshot des zweiten Forms in das TImage darunter kopiert. Schau mal, was passiert, wenn das zweite Form verdeckt oder minimiert ist.

Gruß
xaromz

Harry M. 4. Jan 2007 11:21

Re: ScreenShot von nichtsehbaren Desktop
 
Kann es sein das Du die Screens im nicht im normalen "Usermodus" machst?
Ich hatte früher ein ähnliches Problem für eine "Remotedesktopverbindung".
Der dafür aufgesetzte Dienst war auch nicht in der Lage meinen Desktop "zusehen".

Sascha999999999 5. Jan 2007 04:12

Re: ScreenShot von nichtsehbaren Desktop
 
letzte Antwort exilent, auch danke für das Beispielprogramm.

Kannst du mir auchnoch ferraten wie du das Problem damals gelöst hast?

Danke.

Harry M. 5. Jan 2007 08:08

Re: ScreenShot von nichtsehbaren Desktop
 
Noch gar nicht. Hab mich nachher auch net weiter drum gekümmert. Aber ich werden das im laufe diesen Jahres sicher nochmal aufnehmen (müssen).

Union 5. Jan 2007 09:38

Re: ScreenShot von nichtsehbaren Desktop
 
Normalerweise kann man das aus einem Service so machen (DoScreenshot ist eine ganz normale Screenshot Routine). IMHO funktioniert das aber nur aus einem eigenen Thread - denn die Zuordnung Thread <-> Desktop ist 1:1!
Delphi-Quellcode:
//------------------------------------------------------------------------------
procedure TThreadScreenShot.Execute;
//------------------------------------------------------------------------------
// Thread ausführen
//------------------------------------------------------------------------------
var
   hDesktop : HDESK;
   hWinstation : HWINSTA;
   pDesktopName : array[0..255] of char;
   Desktopname : string;
   dwLen : DWORD;
begin
   hWinstation := OpenWindowStation('winsta0', true, GENERIC_ALL);
   if hWinstation <> 0 then
   begin
      if SetProcessWindowStation(hWinstation) then
      begin
         GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen);
         SetString(DesktopName, pDesktopName, dwLen-1);

         hDesktop := OpenDesktop(PAnsiChar(Desktopname), 0, false, GENERIC_ALL);
         if hDesktop <> 0 then
         begin
            if SetThreadDesktop(hDesktop) then
            begin
               DoScreenShot(DesktopName);
            end;
            CloseDesktop(hDesktop);
         end;
      end;
      CloseWindowStation(hWinstation);
   end;
end;

Harry M. 5. Jan 2007 12:27

Re: ScreenShot von nichtsehbaren Desktop
 
Die Frage sollte eigelich sein wie man den Anmeldescreen sieht ohne LogonSession.
Alles andere übernimmt dann ja der Kontex des angemeldeten Benutzers.

Union 5. Jan 2007 15:10

Re: ScreenShot von nichtsehbaren Desktop
 
Das machst Du dann so (ohne das ganze Winstation-Gelumpe):
Delphi-Quellcode:
HDesktop := OpenDesktop ('Winlogon', 0, False, DESKTOP_ALL);
if (HDesktop <> 0) then
begin
   if SetThreadDesktop (HDesktop) then
   begin
      DoScreenshot('Winlogon');
      CloseDesktop (HDesktop);
   end;    
end;

Harry M. 5. Jan 2007 19:42

Re: ScreenShot von nichtsehbaren Desktop
 
Wäre net schlecht! Ich werde sich bald drauf zurückkommen da ich wie schon erwähn das alte Projekt bald wieder aufnehmen will.

Sascha999999999 6. Jan 2007 07:06

Re: ScreenShot von nichtsehbaren Desktop
 
ein dank an alle!

Mache mich gleich an die Arbeit und werde das testen!

Gruß Sascha

Sascha999999999 6. Jan 2007 07:10

Re: ScreenShot von nichtsehbaren Desktop
 
weiß noch jemand den unterschied zwischen:

MAXIMUM_ALLOWED, GENERIC_ALL und DESKTOP_ALL?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr.
Seite 2 von 5     12 34     Letzte »    

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