65.9K
CodeProject 正在变化。 阅读更多。
Home

关于屏幕分辨率的文章

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.81/5 (30投票s)

2003 年 4 月 18 日

4分钟阅读

viewsIcon

165422

downloadIcon

4539

关于更改屏幕分辨率的文章

Sample Image - ScreenResolution.gif

引言

最近,在为一个距离我大约 300 英里的客户开发一款会计应用程序时,我意识到我开发的各种窗口都是根据我的屏幕分辨率来设计的。在将设置文件交给客户之前,我脑海中浮现出几个问题:他的屏幕分辨率会和我一样吗?如果我指示他更改一次分辨率,如果他出于某种原因再次更改了该怎么办?我发现最好的选择是在代码中加入一些行,在应用程序开始时将分辨率更改为我需要的设置,并在应用程序结束时恢复到原来的设置。

我在 MSDN 上找到了一些有用的文章,并用它们开发了这些项目。本文包含以下 3 个项目:

  • ScreenResolution - Windows GUI 应用程序
  • ScreenResolution32 - 控制台实用程序
  • ScrResOCX - ActiveX 控件

关于代码

您可以通过调用 EnumDisplaySettings 来检索 DEVMODE 结构。然后修改检索到的 DEVMODE 结构以满足您的要求,并将该结构传递给 ChangeDisplaySettings() 来更改分辨率。

DEVMODE dvmd;
EnumDisplaySettings(NULL, dwModeNum, &dvmd);
ChangeDisplaySettings(&dvmd, 0);
// parameter 2 can be either CDS_TEST , CDS_UPDATEREGISTRY OR 0 (temporary)

遇到的问题

尝试将分辨率更改为非常高的值,例如(1600x1200),系统会进入一个循环。该函数(ChangeDisplaySettings())返回成功,而所有尝试 SetTimer() 以改回原始分辨率的尝试都失败了。

如何使用

ScreenResolution

这是一个普通的 Windows GUI 应用程序,启动后如上图所示。选择您想要设置的分辨率,然后单击“更改分辨率”按钮。如果更改可行(请阅读已知问题部分),您有两种方法可以使更改生效:临时更改,或将更改写入注册表以使其永久生效,或恢复到原始分辨率。注意:临时更改意味着如果您重新启动系统,将恢复原始屏幕分辨率,而不是更改后的分辨率。会在系统托盘中创建一个应用程序图标(不是非常必要),您可以通过从菜单中选择隐藏来隐藏应用程序。

ScreenResoution32

这个子项目基本上是为了在 Visual Basic、FoxPro、Delphi PowerBuilder、VC++ 等开发的应用程序中使用。您可以通过传递参数:宽度、高度、频率来调用可执行文件,例如在 Visual Basic 中是这样的。

Shell ("C:\ScreenResolution32\Debug\ScreenResolution32 /w800 /h600 /b16")

您也可以在 Windows 中通过从开始菜单中选择“运行/浏览”来测试它。然后选择应用程序并添加上面代码行所示的参数:“Shell ...

您还可以打开一个 MS-DOS 窗口,并通过键入以下命令(例如,在每个命令后按Enter)来移动到应用程序的位置。

  • CD\ScreenResolution32\Debug
  • ScreenResolution32 /w1024 /h768 /8

    或者

  • ScreenResolution32 /D(这将显示可用的分辨率)

ScrResOCX

您可以在支持托管 Active-X 控件的应用程序中使用此控件,例如 Visual Basic、HTML、FoxPro 等。以下是在 Visual Basic 中使用此控件的说明。下载演示应用程序 zip 文件并解压缩文件,或者从 ScrResOCX 项目源文件构建 OCX。

  • 启动 Visual Basic
  • 创建一个标准 Exe项目
  • 从菜单中选择项目/组件
  • 在“控件”选项卡上,单击“浏览
  • 选择您从演示 zip 文件解压缩的 ScrResOCX.ocx 文件
  • 单击“应用
  • 单击“关闭
  • 将新添加的项目(电脑屏幕图标)拖到窗体上
  • 向窗体添加一个命令按钮
  • Command1_Click() 函数中,键入以下行
    ScrResOCX1.ScreenWidth = 1024
    ScrResOCX1.ScreenHeight = 768
    ScrResOCX1.ScreenBits = 8
    ScrResOCX1.ChangeResolution
  • 运行应用程序
  • 单击命令按钮

已知问题

当您从低分辨率更改为高分辨率时,例如(800x600 到 1024x768),Windows开始栏的大小保持不变,将开始栏移动到桌面的底部,它将调整到桌面宽度。

在我的屏幕上,应用程序显示可用的屏幕分辨率如 1280x1024 和 1600x1200 等,刷新率分别为 4、8 和 16,但当我尝试设置任何这些分辨率时,我的显示器会长时间变黑,以至于我必须重新启动系统。这并不是一个非常严重的问题,因为更改分辨率的调用(ChangeDisplaySettings())是临时的,而不是写入注册表。

万一在更改分辨率时,系统遇到麻烦,请在“安全模式”下启动系统,并通过在桌面区域左键单击,选择属性,然后从显示的窗口中选择设置选项卡,并移动“屏幕区域”框中的滑块并单击应用,将分辨率更改为所需的设置。

历史

新文章。

使用它们,滥用它们,但不要责怪我。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.