模拟全屏

时间:2009-12-08 08:14:43

标签: c++ winapi

我见过一个通过删除标题栏和窗口边框来模拟全屏应用程序的应用程序。我做了一些研究,发现了getWindowLongPtr()。

现在我的问题:我如何找到并识别应用程序并获得适当的窗口句柄?如何区分应用程序的多个实例(从光盘上的不同位置运行)?


只是为了让“模拟”更精确。如果您使应用程序全屏显示并单击其他显示器,则会最大限度地减少自身。如果应用程序在窗口中运行并且您单击其他监视器,则不会更改窗口。如果删除窗口的边框并将其放置在左侧或右侧监视器上,您仍然可以使用其他监视器而不会最小化应用程序。仍然看起来应用程序在其中一个监视器上全屏运行。


例如:您可以将Eve(www.eveonline.com)设置为全屏和窗口模式。在全屏模式下,如果没有Eve最小化,您无法单击第二台显示器。在窗口模式中,您可以。有一些像evemover这样的工具允许您在一台显示器上设置窗口,看起来像全屏,但处于窗口模式。这就是我想要的结果。 Evemover实际上提供了一些源代码,这就是为什么我知道删除边框和设置位置是使用带有setWindowLongPtr和setWindowPos的Win32-API完成的。

2 个答案:

答案 0 :(得分:2)

许多应用程序使用短语“全屏”的分歧和混淆应用程序。

简单的全屏应用程序 - 占据整个屏幕区域。 DirectX应用程序可以请求全屏独占模式。此模式对DirectX应用程序的优势在于,通过独占访问(完整)屏幕,可以更改分辨率,位深度等,以及获取对屏幕表面“翻转”的垂直同步同步硬件缓冲的访问权限。 '在显示间隔之间,以便不会发生'撕裂'。

无论如何,Windows桌面理解“全屏窗口” - 占据显示器整个区域并且没有非客户端元素的窗口。当创建这样的窗口时,诸如桌面小工具和任务栏之类的东西会自动隐藏自己。现代游戏已经将这种模式称为“全屏窗口”。

回到你的问题:'FindWindow'是用于发现其他应用程序窗口的API。获取创建窗口的应用程序的路径要困难得多。 GetWindowThreadProcessId可以获取拥有进程的进程ID。 OpenProcess将为您提供一个句柄,您可以将其传递给QueryFullProcessImageName(在Vista及更高版本上实现)以获取该过程的完整路径。

答案 1 :(得分:0)

我认为您正在引用窗口聚合器等应用程序,它们“插入”系统并从应用程序外部进行操作。

查看免费软件应用程序PuttyCM的代码(用于聚合Putty(SSH)shell窗口作为选项卡)。 IIRC,它确保传递给应用程序的Window指针已经设置了标志。

在从不同位置运行的应用程序中,您可能需要某种方法来识别它 - 注册表项/安装日志等。