Announcement

Collapse
No announcement yet.

Snapshot von Fenster

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Snapshot von Fenster

    Da es auf meine Frage zu Switchdesktop keine Antowrt zu geben scheint, hier mal meine derzeitige Funktion um ein Snapshot eines Fensters anzufertigen:
    <pre>
    if not SetForegroundwindow(wininfo.win) then
    idPRint('Fehler bei SetForegroundwindow ('+filen+'): '+lastWinError)
    else begin
    if not GetWindowRect(wininfo.win, r) then
    idPRint('Fehler bei GetWindowRect ('+filen+'): '+lastWinError)
    else begin
    r.Bottom := r.Bottom-r.Top; r.Top := 0;
    r.Right := r.Right-r.Left; r.Left := 0;
    if r.Bottom <= r.Top+50 then r.Bottom := r.Top+600;
    if r.Right <= r.Left+50 then r.Right := r.Left+800;
    if not SetWindowPos(wininfo.win, 0, 0, 0, r.Right, r.Bottom, SWP_SHOWWINDOW) then
    idPRint('Fehler bei SetWindowPos ('+filen+'): '+lastWinError)
    else begin
    sleep(200);
    DC := GetWindowDc(winInfo.win);
    if dc = 0 then
    idPRint('Fehler bei GetWindowDc ('+filen+') Fehler(?): '+lastWinError)
    else begin
    bmp := TBitmap.Create;
    try
    bmp.Width := r.Right - r.Left;
    bmp.Height := r.Bottom - r.Top;
    if not BitBlt(bmp.Canvas.Handle, 0, 0, r.Right , r.Right, DC, 0, 0, SRCCopy) then
    idPRint('Fehler bei BitBlt ('+filen+'): '+lastWinError)
    else begin
    jpg := TJPEGImage.Create;
    try
    jpg.Performance := jpBestQuality;
    jpg.CompressionQuality := 75;
    jpg.Assign(Bmp);
    jpg.SaveToFile(fileDir+filen+'.jpg');
    result := (fileDir+filen+'.jpg');
    finally jpg.Free; end;
    end;
    finally bmp.Free; ReleaseDc(0, dc); end;
    end;
    end;
    end;
    end;
    </pre> Ist der Desktop nicht im Vordergrund hapert es schon an SetForegroundWindow (Das System kann die Angegebene Datei nicht finden!). Gibt es nicht eine andere Möglichkeit? Kann ich das Fenster nicht irgendwie veranlassen sich gleich in eine Bitmap oder ähnliches statt auf den Screen zu zeichnen? Brauche dringend diese Funktion, einige Programme mucken schon, wenn sie unter dem Systemkontext laufen, da mein "Testrechner" ein Terminalserver beim Kunden einige hundert Kilometer entfernt ist bin ich im wahrsten Sinne des Wortes Blind. Btw, gibt es eine Möglichkeit auf einem Terminalserver zum testen etwas unter dem Systemkonto aber auf dem aktuellen Desktop (Session) zu starten? at xxx cmd.exe funktioniert nicht, der Job wird angezeigt und verschwindet auch zur richtigen Zeit auf dem Desktop erscheint aber nichts....
    Danke für jeden Tip
    Karsten
Working...
X