c++ - 模拟全屏

标签 c++ winapi

我见过一个通过移除标题栏和窗口边框来模拟全屏应用程序的应用程序。我做了一些研究并为此找到了 getWindowLongPtr()。

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


只是为了让“模拟”更精确。如果您让应用程序进入全屏模式并单击不同的监视器,它会自行最小化。如果应用程序在窗口中运行并且您单击不同的监视器,则窗口不会改变。如果您移除窗口的边框并将其放置在左侧或右侧显示器上,您仍然可以在不最小化应用程序的情况下使用其他显示器。看起来应用程序仍然在其中一台显示器上全屏运行。


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

最佳答案

许多应用程序对“全屏”一词的用法各不相同且令人困惑。

全屏应用程序只是占据全屏区域。 DirectX 应用程序可以请求全屏独占模式。这种模式对 DirectX 应用程序的好处是,通过独占访问(全)屏幕,他们可以更改分辨率、位深度等,以及访问屏幕表面“翻转”的垂直同步同步硬件缓冲' 在显示间隔之间,这样就不会发生“撕裂”。

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

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

关于c++ - 模拟全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865453/

相关文章:

c++ - 为什么这段代码写的不能打开文件

c++ - OpenGL Camera Strafing 不起作用

c++ - 删除 ptr 时堆损坏

c++ - 从 C++ 中的 .obj 文件中读取整数

c++ - 逻辑/关系表达式优化

c++ - 提高或降低串行端口上的 RTS (C++)

c++ - 枚举窗口时出现问题

python - 如何在 Windows 中获取 *更改* 文件时间?

c++ - mailto:在没有安装邮件客户端的 URL 中

c++ - C++ 中未初始化变量的值