Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: windows vista und screenshots

  Alt 27. Feb 2007, 17:33
Moin Arnulf,

hast Du schon mal daran gedacht die Rückgabewerte der Funktionen auf Gültigkeit zu prüfen, im das Problem einkreisen zu können?

BTW:
Es fehlt auch noch ein DeleteObject für das Compatible-Bitmap.

[EDIT]
Ich habe es mit dem folgenden Code mal unter Vista ausprobiert, und bekomme einen Screenshot (nicht leer versteht sich).
Leider kann ich aber nicht ausprobieren, wie's mit OpenGL aussieht.

Delphi-Quellcode:
const
  CAPTUREBLT = $40000000;

var
  hdcScreen : DWORD;
  hdcCompatible : DWORD;
  hbmScreen : DWORD;
  bmp : TBitmap;

begin
  bmp := TBitmap.Create;
  try
    hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
    if hdcScreen = 0 then begin
      ShowMessage('CreateDC: '+SysErrorMessage(GetLastError));
      Exit;
    end;
    try
      hdcCompatible := CreateCompatibleDC(hdcScreen);
      if hdcCompatible = 0 then begin
        ShowMessage('CreateCompatibleDC: '+SysErrorMessage(GetLastError));
        Exit;
      end;
      try
        hbmScreen := CreateCompatibleBitmap(hdcScreen,GetDeviceCaps(hdcScreen, HORZRES),GetDeviceCaps(hdcScreen, VERTRES));
        if hbmScreen = 0 then begin
          ShowMessage('CreateCompatibleBitmap: '+SysErrorMessage(GetLastError));
          Exit;
        end;
        try
          SelectObject(hdcCompatible, hbmScreen);
          bmp.Handle := hbmScreen;
          BitBlt(hdcCompatible,
            0, 0,
            bmp.Width, bmp.Height,
            hdcScreen,
            0, 0,
            SRCCOPY or CAPTUREBLT);
            bmp.SaveToFile('c:\temp\Screenshot.bmp');
          finally
            DeleteObject(hbmScreen);
          end;
      finally
        DeleteDC(hdcCompatible);
      end;
    finally
      DeleteDC(hdcScreen);
    end;
  finally
    FreeAndNil(bmp);
  end;
end;
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat