Thema: Delphi CreateWindowStation`?

Einzelnen Beitrag anzeigen

Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#1

CreateWindowStation`?

  Alt 7. Jul 2007, 10:59
Hallo, ich möchte für einen Servies einen interactiven Desktop erstellen und diesen auch "Abfotografieren" können.

Erstelle ich einen Desktop, so wird dieser beim Screenshot leider immer weiß.

Andere Dienste wie pcAnywhere oder der Microsoft Terminal Services können das ja auch iregndwie.

Also erstes muss man wohl eine Window Station erstellen, und dann den Desktop.

Delphi-Quellcode:
procedure DoScreenShot();
var
  c: TCanvas;
  r: TRect;
  Bild: TBitMap;
begin
  c := TCanvas.Create;
  Bild:=TBitMap.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, 800, 600);
    Bild.Width := 800;
    Bild.Height := 600;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    Bild.SaveToFile('C:\screencapture.bmp');
    c.Free;
  end;
end;

procedure TVDesk.Execute;
var
   hDesktop : HDESK;
   hWinstation : HWINSTA;
begin
   hWinstation := CreateWindowStation('TVStation', 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 hWinstation <> 0 then
   begin
      if SetProcessWindowStation(hWinstation) then
      begin
         hDesktop := CreateDesktop(PAnsiChar('TVDesktop'), nil, nil, 0, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS or STANDARD_RIGHTS_REQUIRED, nil);
         if hDesktop <> 0 then
         begin
            if SetThreadDesktop(hDesktop) then
            begin
               DoScreenShot();
            end;
            CloseDesktop(hDesktop);
         end;
      end;
      CloseWindowStation(hWinstation);
   end;
end;
Danke für jede hilfe. Oder weiß jemand wie der "Microsoft Terminal Services" das schafft?
Sascha999999999
  Mit Zitat antworten Zitat