Re: ScreenShot von nichtsehbaren Desktop
Zitat:
http://msdn2.microsoft.com/en-gb/library/ms682575.aspx |
Re: ScreenShot von nichtsehbaren Desktop
ok, habe das jetzt 6 Stunden getestet ohne Erfolg, immernoch ein weißes Screenhot:
Desktop_ALL:
Delphi-Quellcode:
Auftruf von der Thread Function:
const
DESKTOP_ALL = DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW or DESKTOP_CREATEMENU or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP;
Delphi-Quellcode:
Und die Funktion:
procedure TForm1.Button3Click(Sender: TObject);
var ThreadID: DWORD; ThreadHandle: THandle; begin ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@ScreenFunction), nil, 0, ThreadID); if ThreadHandle<>0 then CloseHandle(ThreadHandle); end;
Delphi-Quellcode:
last but not least, die ScreenHot Function:
function ScreenFunction(p:Pointer):Word;
var hDesktop : HDESK; begin result:=1; if(form1.CheckBox1.checked=true) then begin HDesktop := OpenDesktop ('myDesktop', 0, False, DESKTOP_ALL or GENERIC_ALL); end else begin HDesktop := OpenDesktop ('default', 0, False, DESKTOP_ALL or GENERIC_ALL); end; if (HDesktop <> 0) then begin if SetThreadDesktop (HDesktop) then begin ScreenCapture(form1.Image1.Picture.Bitmap); CloseDesktop (HDesktop); end; end; end;
Delphi-Quellcode:
Den Desktop erstelle ich vorher. Mit dem ThreadObjekt wie Ihr gesagt hattet, ist SetThreadDesktop leider immer False.
procedure ScreenCapture(Bmp: TBitmap);
var DeskWnd: HWnd; DeskDC: HDC; DeskCv: TCanvas; R: TRect; W, H: Integer; begin if Bmp = nil then Exit; DeskWnd := GetDesktopWindow; DeskDC := GetWindowDC(DeskWnd); DeskCv := TCanvas.Create; DeskCv.Handle := DeskDC; W := Screen.Width; H := Screen.Height; R := Bounds(0, 0, W, H); try Bmp.HandleType := bmDIB; Bmp.PixelFormat := pf24Bit; Bmp.Width := W; Bmp.Height := H; Bmp.Canvas.CopyMode := cmSrcCopy; Bmp.Canvas.CopyRect(R, DeskCv, R); finally DeskCv.Free; ReleaseDC(DeskWnd, DeskDC); end; end; |
Re: ScreenShot von nichtsehbaren Desktop
Liste der Anhänge anzeigen (Anzahl: 1)
Das tut was soll.
Dank Union! Er hat mich via PN auf einen Umstand aufmerksamgemacht den ich so nicht erkannt habe. |
Re: ScreenShot von nichtsehbaren Desktop
Ist das jetzt bloß unheimlich optimiert, oder verstehe ich hier irgendwas nicht??? :gruebel:
Code:
Bei dieser Form der Optimierung kann auch der Compiler nicht mehr mithalten, denke ich ... :mrgreen:
[color=gray][...][/color]
pDesktopName : array[0..255] of char; [color=gray][...][/color] GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen); [color=red]SetString(DesktopName, pDesktopName, dwLen-1);[/color] hDesktop := OpenDesktop([color=red]PAnsiChar(Desktopname)[/color], 0, false, GENERIC_ALL); [color=gray][...][/color] @Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben? Apropos: wie steht's denn mit der Vista- und TS-Kompatibilität??? Schon jemand getestet? @Sascha999999999: Du postest hier wild weiter. Hast du schonmal angeschaut was die Beispiele (e.g. Union) so machen? Ich vermisse da mindestens ein wichtiges Element in deinem Code (Stichwort: WinSta). Im übrigen gibt es gute Gründe nicht immer alle Rechte anzufordern. Beispielsweise könnte dein Code schon wieder nicht funktionieren, wenn er unter einem weniger privilegierten Konto ausgeführt wird. |
Re: ScreenShot von nichtsehbaren Desktop
Zitat:
|
Re: ScreenShot von nichtsehbaren Desktop
Zitat:
|
Re: ScreenShot von nichtsehbaren Desktop
Zitat:
|
Re: ScreenShot von nichtsehbaren Desktop
Zitat:
Nachtrag: Nee, Kommando zurück, über die Native API könnte es doch gehen ... |
Re: ScreenShot von nichtsehbaren Desktop
nein, sorry das ich es erst jetzt erwähne aber es sollte eigendlich kein Servies sein!
geht es auch Ohne? und muss der Winstation Kram sein? |
Re: ScreenShot von nichtsehbaren Desktop
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
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