如何从外部应用程序调整 d3d 应用程序的大小。 (C#)
我正在尝试从外部应用程序、我的应用程序调整 d3d 窗口的大小。我可以调整窗口大小,但 d3d 引擎仍然认为其分辨率为 1024x768 或您运行时的分辨率。我正在考虑 DLL 注入,但我该如何调整窗口大小。
我做了一些研究,我很确定我需要更改 BackBufferWidth 和 BackBufferHeight。
有什么想法吗?是否有任何好的 DLL 库可以与我的 C# 应用程序一起使用来执行简单的 d3d 函数,例如写入屏幕或更改分辨率或更改结构的 z 缓冲区等?
I'm trying to resize a d3d window from an external application, from my application. I can resize the window, but the d3d engine still thinks its 1024x768 or w\e res your running at. I was thinking a DLL inject, but how would i go about resizing the window.
I did some research and i'm pretty sure i need to change the BackBufferWidth and BackBufferHeight.
Any ideas? Are there any good DLL librarys i can use with my C# application to do easy d3d functions like writing to the screen or changing the resolution or changing the z buffer of structs etc?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从外部应用程序调整 direct3d 后台缓冲区/窗口的大小是一个非平凡非安全应用程序。
“理论上”您应该:
1)停止应用程序(否则您可能会遇到意外情况,例如崩溃或冲突或其他灾难)
2-DX9) 选择用于创建设备的设备。
3-DX9) 在设备上调用重置来调整后备缓冲区的大小
4-DX9) 调整应用程序窗口的大小。
5-DX9) 重新启动应用程序
2-DX10) 选择应用程序的 DXGI Swapchain。
3-DX10) 调整交换链的大小。
4-DX10) 重新启动应用程序。
但请记住,如果应用程序仍然认为它处于某个分辨率(例如使用降级的纹理,或尝试将窗口大小调整回其先前的分辨率或谁知道什么),那么所有这些都将毫无用处。
总而言之,这是一种非常危险的编程,我认为它不会产生预期的结果。
为了在已经存在的应用程序上编写代码更容易,只需在启动时创建一个 Direct3D dll 注入应用程序,然后再进行 Font 绘制调用。
Resizing a direct3d backbuffer/window from an external application is a NON-TRIVIAL NON-SAFE application.
"Teorically" you should :
1) Stop the application (otherwise you may go into unexpected situations like crash or conflicts, or other calamities)
2-DX9) Pick the device used to create the device.
3-DX9) Call reset on the device resizing the backbuffer
4-DX9) Resize the window of the application.
5-DX9) Restart the application
2-DX10) Pick the DXGI Swapchain of the app.
3-DX10) Resize the swapchain.
4-DX10) Restart the application.
But remember that all this would be anyway useless if the app still think it is in a certain resolution (like using downgraded texture, or trying to resize back the window to its precedent resolution or who knows what).
To summary, its a very risk kind of programming and I think it would not yield the expected results.
For writing on an already existing application is more easy, just make a Direct3D dll to inject in the application at start-time and before present put your Font draw call.