急救:请问如何通过注册表得知桌面的分辨率

titan90 2003-10-15 06:21:10
请问如何通过注册表得知桌面的分辨率,最好有代码,谢谢
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoki 2003-10-15
  • 打赏
  • 举报
回复
遵从以下的步骤,你就可以改变屏幕的分辨率。将以下代码加入模块文件:

 

Declare Function EnumDisplaySettings Lib "user32" _

Alias "EnumDisplaySettingsA" _

(ByVal lpszDeviceName As Long, _

ByVal iModeNum As Long, _

lpDevMode As Any) As Boolean

Declare Function ChangeDisplaySettings Lib "user32" _

Alias "ChangeDisplaySettingsA" _

(lpDevMode As Any, ByVal dwFlags As Long) As Long

 

Declare Function ExitWindowsEx Lib "user32" _

(ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0

Public Const EWX_SHUTDOWN = 1

Public Const EWX_REBOOT = 2

Public Const EWX_FORCE = 4

Public Const CCDEVICENAME = 32

Public Const CCFORMNAME = 32

Public Const DM_BITSPERPEL = &H40000

Public Const DM_PELSWIDTH = &H80000

Public Const DM_PELSHEIGHT = &H100000

Public Const CDS_UPDATEREGISTRY = &H1

Public Const CDS_TEST = &H4

Public Const DISP_CHANGE_SUCCESSFUL = 0

Public Const DISP_CHANGE_RESTART = 1

Type DEVMODE

dmDeviceName As String * CCDEVICENAME

dmSpecVersion As Integer

dmDriverVersion As Integer

dmSize As Integer

dmDriverExtra As Integer

dmFields As Long

dmOrientation As Integer

dmPaperSize As Integer

dmPaperLength As Integer

dmPaperWidth As Integer

dmScale As Integer

dmCopies As Integer

dmDefaultSource As Integer

dmPrintQuality As Integer

dmColor As Integer

dmDuplex As Integer

dmYResolution As Integer

dmTTOption As Integer

dmCollate As Integer

dmFormName As String * CCFORMNAME

dmUnusedPadding As Integer

dmBitsPerPel As Integer

dmPelsWidth As Long

dmPelsHeight As Long

dmDisplayFlags As Long

dmDisplayFrequency As Long

End Type

 

2、下面的例子将演示如何把屏幕分辨率更改为640x480(保持原来的颜色数)。

 

Dim DevM As DEVMODE

'DevM收集信息

erg& = EnumDisplaySettings(0&, 0&, DevM)

'不改变颜色数目是因为如果改变颜色数就要重新启动

 

DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT 'Or DM_BITSPERPEL

DevM.dmPelsWidth = 640 '屏幕宽度

DevM.dmPelsHeight = 480 '屏幕高度

'DevM.dmBitsPerPel = 32 (还可以为 8, 16, 32甚至4)

'改变显示模式并检查是否可能

erg& = ChangeDisplaySettings(DevM, CDS_TEST)'检查是否成功 Select Case erg&

Case DISP_CHANGE_RESTART

an = MsgBox("你现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "消息")

If an = vbYes Then erg& = ExitWindowsEx(EWX_REBOOT, 0&)

End If

Case DISP_CHANGE_SUCCESSFUL

erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功"

Case Else

MsgBox "显示模式不支持", vbOKOnly + vbSystemModal, "错误"End Select

End Sub

yoki 2003-10-15
  • 打赏
  • 举报
回复
不用注册表,下面的例子将演示如何得到当前屏幕的分辨率:

ResWidth = Screen.Width \ Screen.TwipsPerPixelX

ResHeight = Screen.Height \ Screen.TwipsPerPixelY

ScreenRes = ResWidth & "x" & ResHeight

ResWidth和ResHeight分别表示屏幕的宽和高,比如这样的结果:

800x600

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧