2016-05-21 7 views
1

Guten Nachmittag an alle.Wie erfassen Sie ein Fenster, das in einer "neuen Desktop-Umgebung" geöffnet ist?

möchte ich ein Fenster sehen, die in einer „neuen Desktop-Umgebung“, aus meiner Remote-Unterstützung Werkzeug geöffnet ist, aber ich bin nicht in der Lage diese unterhalb dieses Fenster mit herkömmlichen Funktionen wie zu sehen:

function RandomPassword(PLen: Integer): string; 
    var 
     str: string; 
    begin 
     Randomize; 
     str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
     Result := ''; 
     repeat 
     Result := Result + str[Random(Length(str)) + 1]; 
     until (Length(Result) = PLen) 
    end; 

     procedure Printscreen; 
     var 
      DCDesk: HDC; 
      bmp: TBitmap; 
      hmod, hmod2 : HMODULE; 
      BitBltAPI: function(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall; 
      GetWindowDCAPI: function(hWnd: HWND): HDC; stdcall; 

      begin 

     hmod := GetModuleHandle('Gdi32.dll'); 
     hmod2:= GetModuleHandle('User32.dll'); 

     if (hmod <> 0) and (hmod2 <> 0) then begin 

      bmp := TBitmap.Create; 

      bmp.Height := Screen.Height; 
      bmp.Width := Screen.Width; 

      GetWindowDCAPI:= GetProcAddress(hmod2, 'GetWindowDC'); 

      if (@GetWindowDCAPI <> nil) then begin 

      DCDesk := GetWindowDCAPI(GetDesktopWindow); 

      end; 

      BitBltAPI:= GetProcAddress(hmod, 'BitBlt'); 

      if (@BitBltAPI <> nil) then begin 

      BitBltAPI(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY); 

      bmp.SaveToFile('ScreenShot_------_' + RandomPassword(8) + '.bmp'); 

      end; 

      ReleaseDC(GetDesktopWindow, DCDesk); 

      bmp.Free; 

      FreeLibrary(hmod); 
      FreeLibrary(hmod2); 

     end; 
     end; 

begin 
    while True do 
    begin 
     Printscreen; 
     Sleep(5000); 
    end; 

end. 

das erzeugt this result

Bereits Team View Software zum Beispiel verwenden, wird das Fenster auf dem Bildschirm capture normalerweise und produziert this result.

Gibt es also eine Möglichkeit, dieses Fenster in der Bildschirmaufnahme zu sehen, wie es von Team View Software möglich ist?

Alle Vorschläge werden begrüßt.

+0

Call Randomize genau einmal im Leben Ihres Programms oder Sie werden einige böse Überraschungen bekommen. Versuchen Sie, RandomPassword in einer Schleife aufzurufen. –

+0

[Dies ist die App, die dieses Fenster öffnet] (https://www.itau.com.br/computador/) –

+0

"Grafiken" verwendet bereits "Windows", Sie werden nichts gewinnen, indem Sie nicht erklärte Funktionen in " Fenster ". –

Antwort

5

Es scheint, dass Sie versuchen, den Screenshot eines sicheren Desktops zu erhalten. Wenn dies der Fall ist, müssen Sie zuerst die Dokumentation über this topic. lesen. Da dies keine triviale Aufgabe ist, müssen Sie (Sie müssen über Sessions, Desktops and Windows Stations wissen). Auch Ihre Anwendung muss eine trusted process sein, die von dem Local SYSTEM Konto ausgeführt wird.

Von hier jetzt müssen Sie dies tun.

Empfohlen Lecture

+0

Sie haben Recht, ich werde darüber nachdenken. Aber wenn jemand (oder Sie selbst) ein Fragmento de código hierhin legen möchte, um Hilfe besser zu verstehen. –

+0

Sie müssen versuchen, den Code zu schreiben und dann mit einer neuen Frage zurückgehen, wenn Sie ein Problem gefunden haben. Aber lesen Sie zuerst die Dokumente. – RRUZ

+0

mit Bezug auf meinen Code oben und Erklärung aller Dokumente, die Sie oben vorgeschlagen, ist es möglich, Screenshots nur von "Sitzung 0" mit diesem meinen Code zu machen, ist richtig? –