关于屏幕分辨率的文章






2.81/5 (30投票s)
2003 年 4 月 18 日
4分钟阅读

165422

4539
关于更改屏幕分辨率的文章
引言
最近,在为一个距离我大约 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()
)是临时的,而不是写入注册表。
万一在更改分辨率时,系统遇到麻烦,请在“安全模式”下启动系统,并通过在桌面区域左键单击,选择属性,然后从显示的窗口中选择设置选项卡,并移动“屏幕区域”框中的滑块并单击应用,将分辨率更改为所需的设置。
历史
新文章。
使用它们,滥用它们,但不要责怪我。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。