Einzelnen Beitrag anzeigen

Langer

Registriert seit: 9. Dez 2010
Ort: Berlin
12 Beiträge
 
#1

Screenshot via DirectX erstellen bei Windows 7

  Alt 9. Dez 2010, 10:40
Hallo,

ich hab ein kleines Tool programmiert dass Screenshot über DirectX erstellt. Unter Windows XP und Vista funktioniert dies perfekt. Dann habe ich das Tool einen Bekannten gegeben. Er hat Windows 7. Als er ein Spiel spielte (in dem Fall war es Counter Strike) wurden die Screenshots vom Desktop gemacht und nicht vom Spiel. Er war definitiv im Spiel.

In FormCreate erstelle ich den Device:
Delphi-Quellcode:
  
  mD := Direct3DCreate9(D3D_SDK_Version);

  ZeroMemory(@mDisplayMode, SizeOf(mDisplayMode));
  md.GetAdapterDisplayMode(0,mDisplayMode);

  ZeroMemory(@d3pp, SizeOf(d3pp));
  d3pp.SwapEffect := Direct3D9.D3DSWAPEFFECT_DISCARD;
  d3pp.hDeviceWindow := Handle;
  d3pp.BackBufferCount := 1;
  d3pp.Windowed := True;
  d3pp.BackBufferWidth := mDisplayMode.Width;
  d3pp.BackBufferHeight := mDisplayMode.Height;
  d3pp.BackBufferFormat := mDisplayMode.Format;

  d3pp.MultiSampleType := D3DMultisample_NONE;
  d3pp.EnableAutoDepthStencil := False;
  d3pp.PresentationInterval := D3DPresent_Interval_Default;


  mResult := mD.CreateDevice(D3DADAPTER_DEFAULT,
        Direct3D9.D3DDEVTYPE_HAL,
        Handle,
        Direct3D9.D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        @d3pp,mDev);

  if (mDev = nil) then begin
    ShowMessage('Fehler beim Starten. Der Device konnte nicht erstellt werden');
    exit;
  end;
In einem Timer wird der Screenshot erstellt
Delphi-Quellcode:
  try
    mDev.Reset(Self.d3pp);
    mDev.CreateOffscreenPlainSurface(
                        mDisplayMode.Width,mDisplayMode.Height,
                        Direct3D9.D3DFMT_A8R8G8B8,Direct3D9.D3DPOOL_SCRATCH,mSurf,0);

    mDev.GetFrontBufferData(0,mSurf);
    D3DX9.D3DXSaveSurfaceToFile(Pchar('.\Bild' + IntToStr(i) + '.jpg'),
                                        D3DX9.D3DXIFF_JPG,mSurf,0,0);
    inc(i);
    Result := True;
  except
    Result := False;
  end;
Wie schon erwähnt funktioniet dies unter Windows XP und Vista. Leider nur nicht unter Windows 7. Hat jemand eine Idee woran das liegt?

Gruß
  Mit Zitat antworten Zitat