AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

windows vista und screenshots

Ein Thema von Arnulf · begonnen am 27. Feb 2007 · letzter Beitrag vom 28. Feb 2007
Antwort Antwort
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#1

windows vista und screenshots

  Alt 27. Feb 2007, 13:02
ich hab glaub ich etwas verpennt...

ich mache screenshots vom desktop speziell von einem spiel
allerdings dürften bei vista usern nur noch leere screenshots kommen.
das game läuft unter opengl.
ist es mit vista nicht mehr normal möglich daraus screenshots zu bekommen?
die methode schaut so aus:

Delphi-Quellcode:
  hdcScreen := CreateDC('DISPLAY', nil, nil, nil);
  hdcCompatible := CreateCompatibleDC(hdcScreen);

  hbmScreen := CreateCompatibleBitmap(hdcScreen,
    GetDeviceCaps(hdcScreen, HORZRES),
    GetDeviceCaps(hdcScreen, VERTRES));

  SelectObject(hdcCompatible, hbmScreen);
  bmp.Handle := hbmScreen;
  BitBlt(hdcCompatible,
    0, 0,
    bmp.Width, bmp.Height,
    hdcScreen,
    0, 0,
    SRCCOPY or CAPTUREBLT);
  DeleteDC(hdcScreen);
  DeleteDC(hdcCompatible);
und ja es ist eigentlich absicht, dass ich screenshots vom ganzen desktop erzeuge.

lg
Arnulf
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 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
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#3

Re: windows vista und screenshots

  Alt 27. Feb 2007, 21:29
Hallo
Also freigeben tu ich das bitmap wo anders - ich habs ja auch nicht in der funktion erzeugt.
Ansonsten seh ich nicht so ganz den unterschied zwischen deiner funktion und der die ich verwende...

Das wirkliche problem ist, ich kanns nicht testen .
Ich hab nur den hinweis bekommen, dass screenshots in meinem Programm manchmal nicht korrekt funktionierten und das es scheinbar bei visa probleme gab.

Deshalb hab ich einmal gefragt.

Das ganze mit try - except zu machen könnte ich mal versuchen.
Vor allem eine Fehlerprüfung könnte meine funktion tatsächlich vertragen .... das werde ich mal versuchen.

Es gab ja glaub ich auch schon unter XP bei so manchen player mit den screenshots probleme die spezielle overlays verwendet haben ( xv glaub ich oder irgendwelche direkt x ).
Ich dachte nur einmal gehört zu haben, dass es in vista garnicht mehr möglich sein soll von videos oder ähnlichem screenshots zu machen - kann aber auch ein gerücht sein....

lg
Arnulf
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: windows vista und screenshots

  Alt 27. Feb 2007, 21:35
Moin Arnulf,

einen "echten" Unterschied gibt es zwischen Deiner und meiner Version auch nicht, und bei mir geht es, wie gesagt.
Auch wenn das CAPTUREBLT hier Abhilfe schaffen soll:
Das funktioniert bei mir unter XP auch nur rudimentär, wenn ich es mal mit dem Screenshot eines Videos versuche.

Dafür ist vielleicht das Hier im Forum suchenDSPACK / Bei Google suchenDSPACK besser geeignet.
Unter Vista habe ich das allerdings auch noch nicht ausprobiert.
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
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#5

Re: windows vista und screenshots

  Alt 28. Feb 2007, 14:14
Ich glaub dspack ist nur für die eigene anwendung gut ( hab keine erfahrung damit ).
von einer anderen andwendung werde ich vermutlich den kontext nicht so leicht bekommen und deshalb wohl auch
nicht auf die grafik zugreifen können.

Hab sowas mal mit opengl probiert - einen hook auf swapbuffer gemacht und mir einige bilder gespeichert.
So ähnlich dürfte das auch das programm fraps machen.
aber ich hatt immer wieder abstürze also hab ichs gelassen.

ich werd wohl etwas abwarten bis das mit vista etwas kongreter wird - gott sei dank verwendet das noch kaum jemand. - und es schaut ja doch nicht so aus als wäre das ein vista problem.

werd mal ein fehler log mitschreiben lassen welches mir die leute dann schicken sollen wenns probleme gibt ....

Danke jedenfalls.

lg
Arnulf
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: windows vista und screenshots

  Alt 28. Feb 2007, 17:16
Moin Arnulf,

ich hatte es so verstanden, dass Du den ScreenShot von einem Video machen wolltest, und das würde mit dem DSPACK wahrscheinlich funktionieren.
So ein ähnliches Problem hatte ich auch schon einmal, und bekam als Lösungsansatz die Idee, den Overlaymodus abzuschalten, habe diese Idee dann aber nicht weiterverfolgt, da ich mir mit dem DSPACK helfen konnte.
Eventuell lässt sich der Overlaymodus temporär, eben für den Screenshot, abschalten.
Wege wie das überhaupt geht, kann ich Dir leider nicht anbieten.

BTW:
Und nicht vergessen die Routine um Fehlerprüfung, Resourcenschutzblöcke und DeleteObject zu ergänzen
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
Antwort Antwort


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 04:47 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