C# 如何以编程方式添加/修改/删除可用的显示设置(宽度、高度、刷新率)?

C# 如何以编程方式添加/修改/删除可用的显示设置(宽度、高度、刷新率)?,c#,hook,C#,Hook,我想(用C#)编写一个工具来添加/修改/删除一些可用的窗口显示配置(宽度、高度和刷新率) 这可以通过编程实现吗?我花了很多时间试图在网上找到一些关于这个的东西,但没有运气 我想要它的原因是因为一些较旧的全屏游戏将刷新率从游戏开始时的任何频率设置回60hz(在我的例子中是120hz)。我可以使用Alt Tab两次来解决这个问题,但我更希望只限制可用的显示配置(或者更改其中一些配置的刷新率) 在考虑所有这些之前,我尝试通过以下尝试来解决我的问题: 截取键盘(使用此类),然后在按下热键时尝试更改强制显

我想(用C#)编写一个工具来添加/修改/删除一些可用的窗口显示配置(宽度、高度和刷新率)

这可以通过编程实现吗?我花了很多时间试图在网上找到一些关于这个的东西,但没有运气

我想要它的原因是因为一些较旧的全屏游戏将刷新率从游戏开始时的任何频率设置回60hz(在我的例子中是120hz)。我可以使用Alt Tab两次来解决这个问题,但我更希望只限制可用的显示配置(或者更改其中一些配置的刷新率)

在考虑所有这些之前,我尝试通过以下尝试来解决我的问题:

  • 截取键盘(使用此类),然后在按下热键时尝试更改强制显示。它适用于几乎所有普通的应用程序。但是当全屏游戏运行时,按键事件不会触发。要么是全屏游戏有焦点时不可能,要么就是我不知道如何正确操作(很可能因为我是这方面的新手)

  • 尝试使用计时器定期检查特定分辨率,如果检测到60hz,则尝试将其设置为120hz。计时器确实会启动,代码会尝试更改监视器(短暂闪烁),但刷新率不会更改

  • 我的另一个想法是使用Mhook或Detours来拦截“更改显示设置”呼叫。但我不知道这是否有效。而且我也没有C++的经验。所以如果我能避免的话,我真的不想走那条路

    这可以通过编程实现吗?我花了很多时间试图找到 关于这件事的一些信息在网上,但没有运气

    此设置不是标准
    .Net Framework
    的一部分,但是有一个接口,可以使用
    win32
    API为windows操作这些设置。您可以了解如何使用.Net Framework调用windows API。然后您可以调用一个windows API,例如

    这可以通过编程实现吗?我花了很多时间试图找到 关于这件事的一些信息在网上,但没有运气


    此设置不是标准
    .Net Framework
    的一部分,但是有一个接口,可以使用
    win32
    API为windows操作这些设置。您可以了解如何使用.Net Framework调用windows API。然后您可以调用windows API,例如。

    我已经有了所有的显示get/set方法(在C#包装中使用Win32导入)。但当全屏游戏处于活动状态时,该选项不起作用。请重新阅读问题:)我已经有了所有的显示get/set方法(在C#包装中使用Win32导入)。但当全屏游戏处于活动状态时,该选项不起作用。请重新阅读问题:)