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