c++ DirectX CreateDevice从全窗口游戏
C++ DirectX CreateDevice From Full Window Game
我正在尝试从全屏DirectX游戏中捕获屏幕。
我设法从窗口游戏中截取屏幕截图,但当我试图从全屏游戏中创建设备时,它抛出了一个异常。
这是我的代码:
#include "stdafx.h"
#include <d3d9.h>
#include <d3dx9.h>
#include "DirectXTools.h"
LPDIRECT3D9 directX;
LPDIRECT3DDEVICE9 directXDevice;
void initDevice(HWND myWindow);
void ConvertCharToWC(char* src, wchar_t* target);
void DirectXTools::CaptureWindow(const char* windowName)
{
Sleep(5000);
HWND windowHandle = GetForegroundWindow();
initDevice(windowHandle);
}
void initDevice(HWND myWindow) {
D3DDISPLAYMODE ddm;
D3DPRESENT_PARAMETERS d3dpp;
IDirect3DSurface9* g_pSurface;
if((directX=Direct3DCreate9(D3D_SDK_VERSION))==NULL)
{
throw "";
}
if(FAILED(directX->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&ddm)))
{
throw "";
}
ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
d3dpp.Windowed=FALSE;
d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.BackBufferFormat=ddm.Format;
d3dpp.BackBufferHeight=ddm.Height;
d3dpp.BackBufferWidth=ddm.Width;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
// d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.SwapEffect=D3DSWAPEFFECT_COPY;
d3dpp.hDeviceWindow=myWindow;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
if(FAILED(directX->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,myWindow,D3DCREATE_SOFTWARE_VERTEXPROCESSING ,&d3dpp,&directXDevice)))
{
throw "";
}
if(FAILED(directXDevice->CreateOffscreenPlainSurface(ddm.Width, ddm.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &g_pSurface, NULL)))
{
throw "";
}
directXDevice->GetFrontBufferData(0, g_pSurface);
D3DXSaveSurfaceToFile("temp.bmp",D3DXIFF_BMP,g_pSurface,NULL,NULL);
}
directX->CreateDevice函数失败,它不会抛出异常,但它返回错误D3DERR_DEVICELOST。
有谁有过这种经历吗?也许我遗漏了当前参数?
当应用程序全屏时-只有一个设备可以链接到它。由于设备已经链接到应用程序(运行应用程序的设备),我们的应用程序不能创建另一个设备
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 将密钥发送到非前台的游戏窗口
- GetWindowRect()返回的大小小于游戏的实际可见窗口的可能原因是什么
- 如何在Microsoft Visual Studio C 中创建游戏窗口
- 如何在关闭C++窗口之前转储游戏数据
- GDI 窗口中的游戏循环/一段时间后不刷新并崩溃
- 将游戏服务器线程循环限制为 30FPS,而无需游戏引擎/渲染窗口
- 将 c++ 游戏部署到其他窗口计算机
- 如何使窗口出现在所有内容(甚至是全屏游戏!)之上(甚至是全屏游戏!)c ++ / Qt
- 为什么游戏窗口在特定时间后关闭
- 游戏窗口的屏幕截图
- 如何将键盘和鼠标输入发送到不是Windows7上活动窗口的游戏
- c++ DirectX CreateDevice从全窗口游戏
- 在Qt窗口中运行游戏循环
- 日志消息到窗口,游戏应用程序
- 在Qt中制作一个关于GUI窗口的游戏
- 如何将窗口划分为游戏和高分栏