AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ScreenShot von nichtsehbaren Desktop
Thema durchsuchen
Ansicht
Themen-Optionen

ScreenShot von nichtsehbaren Desktop

Offene Frage von "Neotracer"
Ein Thema von SleepyMaster · begonnen am 21. Okt 2004 · letzter Beitrag vom 1. Jan 2012
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#21

Re: ScreenShot von nichtsehbaren Desktop

  Alt 6. Jan 2007, 13:44
Zitat von Sascha999999999:
weiß noch jemand den unterschied zwischen:

MAXIMUM_ALLOWED, GENERIC_ALL und DESKTOP_ALL?
Klar die MSDN:
http://msdn2.microsoft.com/en-gb/library/ms682575.aspx
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Sascha999999999

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

Re: ScreenShot von nichtsehbaren Desktop

  Alt 6. Jan 2007, 14:27
ok, habe das jetzt 6 Stunden getestet ohne Erfolg, immernoch ein weißes Screenhot:

Desktop_ALL:
Delphi-Quellcode:
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;
Auftruf von der Thread Function:
Delphi-Quellcode:
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;
Und die Funktion:
Delphi-Quellcode:
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;
last but not least, die ScreenHot Function:
Delphi-Quellcode:
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;
Den Desktop erstelle ich vorher. Mit dem ThreadObjekt wie Ihr gesagt hattet, ist SetThreadDesktop leider immer False.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#23

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 01:07
Das tut was soll.
Dank Union! Er hat mich via PN auf einen Umstand aufmerksamgemacht den ich so nicht erkannt habe.
Angehängte Dateien
Dateityp: rar exscreen_109.rar (187,5 KB, 59x aufgerufen)
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#24

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 06:00
Ist das jetzt bloß unheimlich optimiert, oder verstehe ich hier irgendwas nicht???

Code:
[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]
Bei dieser Form der Optimierung kann auch der Compiler nicht mehr mithalten, denke ich ...

@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.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 13:33
Zitat von Olli:
@Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben?
Das schon, aber pro Session nur eine.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#26

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 15:31
Zitat von Union:
Zitat von Olli:
@Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben?
Das schon, aber pro Session nur eine.
Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 15:33
Zitat:
Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!
Das schon, aber nicht unbedingt um Screenshots von "fremden" Sessions zu machen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#28

Re: ScreenShot von nichtsehbaren Desktop

  Alt 7. Jan 2007, 15:44
Zitat von Union:
Zitat:
Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!
Das schon, aber nicht unbedingt um Screenshots von "fremden" Sessions zu machen.
Bei TS wäre doch jegliche (RDP-)Session eine fremde, außer jene die auf der Konsole läuft, was dann aber spätestens mit Vista auch der Vergangenheit angehört.

Nachtrag: Nee, Kommando zurück, über die Native API könnte es doch gehen ...
  Mit Zitat antworten Zitat
Sascha999999999

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

Re: ScreenShot von nichtsehbaren Desktop

  Alt 10. Jan 2007, 14:07
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?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#30

Re: ScreenShot von nichtsehbaren Desktop

  Alt 10. Jan 2007, 14:28
Zitat von Sascha999999999:
geht es auch Ohne?
Ja, wahrscheinlich sogar besser, aber nicht für alle Desktops.

Zitat von Sascha999999999:
und muss der Winstation Kram sein?
Ja.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:56 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