Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

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

Re: ScreenShot von nichtsehbaren Desktop

  Alt 5. Jan 2007, 10:38
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat