3

我想做这样的东西,在那里我可以在 Windows 中以全屏模式运行我的内部程序,比如 cmd.exe。

早些时候,在 Windows XP 中,我可以使用 Alt + Enter 在全屏模式下使用 cmd.exe,但在 Windows Vista 中,由于 WDDM(Windows 显示驱动程序模型)而禁用了此类功能。

我认为,制作这样的东西的最好方法是:“制作一个全屏 DirectX/Win API 程序,然后在其中渲染另一个内部程序”。

我知道如何使用 DirectX/Win API 创建全屏程序,但无法想象如何在我的全屏程序中渲染另一个程序执行。

另一种方式是:“只需使用 cmd.exe 或其他内部程序对输入/输出流进行操作,然后在 DirectX 全屏程序中全屏解析信息”。

你对这样的问题有什么建议?

4

1 回答 1

1

通过 DirectX 执行此操作将是一场噩梦并且极其复杂。

你最好创建一个屏幕大小的最顶层窗口。它比这稍微复杂一点,因为您需要为窗口大小添加边框空间,然后将其稍微远离屏幕,以便只有窗口本身可见。

在 C/C++ 中,您可以使用GetSystemMetrics函数来执行此操作。

  • SM_CYCAPTION - 是标题栏的高度。
  • SM_CYFRAME - 是一个相当大的框架的高度。
  • SM_CXFRAME - 是一个相当大的框架的宽度。

这意味着您为 1024x768 屏幕创建一个窗口,其宽度/高度及其位置如下所示。

const int cxFrame   = GetSystemMetrics( SM_CXFRAME );
const int cyFrame   = GetSystemMetrics( SM_CYFRAME );
const int cyCaption = GetSystemMetrics( SM_CYCAPTION );

const int winWidth  = 1024 + (cxFrame * 2);
const int winHeight = 768 + (cyFrame * 2) + cyCaption;

const int winPosX   = -cxFrame;
const int winPosY   = -cyFrame - cyCaption;

您现在有一个“出现”全屏的窗口,它几乎可以在任何 Windows 系统上运行,并且不依赖于 DirectX 和这将引入的所有其他基于驱动程序的地狱。

于 2012-10-23T10:27:02.760 回答