在VB.NET中改变显示器的分辩率

** 在 ** ** VB.NET ** ** 中改变显示器的分辩率 ** ** **


微软 MVP 李洪根

在 VB.NET 中,我们很容易获得显示器的分辩率,但是,要改变显示器的分辩率就比较麻烦了。 由于 .NET 的类库没有将 EnumDisplaySettings 和 ChangeDisplaySettings 这两个 API 函数进行封装,但是我们得调用它们函数,相对于 VB6 来说, VB.NET 调用 API 函数 是有一些小的改动!

下面,我们就尝试一下在 VB.NET 中,使用这两个 API 函数。

新建一个项目,在 Form1 上添加两个按钮,一个名为 btnGetDisp ,将其 Text 属性设置为“得到分辩率”;另一个按钮名为 btnSetDisp , Text 属性为“设置分辩率”。然后在代码窗口里添加以下代码:

Private Const CCDEVICENAME As Short = 32

Private Const CCFORMNAME As Short = 32

Private Const DM_PELSWIDTH As Integer = &H80000

Private Const DM_PELSHEIGHT As Integer = &H100000

'刷新频率常量

Private Const DM_DISPLAYFREQUENCY As Integer = &H400000

' 调用 API 函数

Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" ( ByVal lpszDeviceName As Integer , ByVal iModeNum As Integer , ByRef lpDevMode As DEVMODE) As Boolean

' 调用 API 函数

Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" ( ByRef lpDevMode As DEVMODE, ByVal dwflags As Integer ) As Integer

' 定义结构

Private Structure DEVMODE

  1<vbfixedstring(ccdevicename), sizeconst:="CCDEVICENAME)" system.runtime.interopservices.marshalas(system.runtime.interopservices.unmanagedtype.byvaltstr,=""> Public  dmDeviceName  As  String 
  2
  3Dim  dmSpecVersion  As  Short 
  4
  5Dim  dmDriverVersion  As  Short 
  6
  7Dim  dmSize  As  Short 
  8
  9Dim  dmDriverExtra  As  Short 
 10
 11Dim  dmFields  As  Integer 
 12
 13Dim  dmOrientation  As  Short 
 14
 15Dim  dmPaperSize  As  Short 
 16
 17Dim  dmPaperLength  As  Short 
 18
 19Dim  dmPaperWidth  As  Short 
 20
 21Dim  dmScale  As  Short 
 22
 23Dim  dmCopies  As  Short 
 24
 25Dim  dmDefaultSource  As  Short 
 26
 27Dim  dmPrintQuality  As  Short 
 28
 29Dim  dmColor  As  Short 
 30
 31Dim  dmDuplex  As  Short 
 32
 33Dim  dmYResolution  As  Short 
 34
 35Dim  dmTTOption  As  Short 
 36
 37Dim  dmCollate  As  Short 
 38
 39<vbfixedstring(ccformname), sizeconst:="CCFORMNAME)" system.runtime.interopservices.marshalas(system.runtime.interopservices.unmanagedtype.byvaltstr,=""> Public  dmFormName  As  String 
 40
 41Dim  dmUnusedPadding  As  Short 
 42
 43Dim  dmBitsPerPel  As  Short 
 44
 45Dim  dmPelsWidth  As  Integer 
 46
 47Dim  dmPelsHeight  As  Integer 
 48
 49Dim  dmDisplayFlags  As  Integer 
 50
 51Dim  dmDisplayFrequency  As  Integer 
 52
 53End  Structure 
 54
 55'  改变分辩率过程,参数一宽度,参数二高度 
 56
 57Private  Sub  ChangeDisp(  ByRef  iWidth  As  Single  ,  ByRef  iHeight  As  Single  ) 
 58
 59Dim  blnWorked  As  Boolean 
 60
 61Dim  i  As  Integer 
 62
 63Dim  DevM  As  Form1.DEVMODE 
 64
 65i =  0 
 66
 67Do 
 68
 69blnWorked = EnumDisplaySettings(  0  , i, DevM) 
 70
 71i = i +  1 
 72
 73Loop  Until  (blnWorked =  False  ) 
 74
 75With  DevM 
 76
 77.dmFields = DM_PELSWIDTH  Or  DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY 
 78
 79.dmPelsWidth = iWidth 
 80
 81.dmPelsHeight = iHeight 
 82
 83'刷新  频率为85 
 84
 85.dmDisplayFrequency = 85 
 86
 87End  With 
 88
 89Call  ChangeDisplaySettings(DevM,  0  ) 
 90
 91End  Sub 
 92
 93Private  Sub  btnGetDisp_Click(  ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  btnGetDisp.Click 
 94
 95Dim  X  As  Short  = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width 
 96
 97Dim  Y  As  Short  = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height 
 98
 99MsgBox(  "  您的显示器分辨率是  "  &amp; X &amp; " X "  &amp; Y) 
100
101End  Sub 
102
103Private  Sub  btnSetDisp_Click(  ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  btnSetDisp.Click 
104
105If  MsgBox(  "  您确认要将显示器分辨率改为  1024x768  吗?  "  , MsgBoxStyle.OKCancel,  "  系统消息  "  ) = MsgBoxResult.OK  Then 
106
107'  调用改变分辩率过程 
108
109ChangeDisp(  1024  ,  768  ) 
110
111End  If 
112
113End  Sub 
114
115程序运行如下图所示,点击设置分辩率,将会把显示器分辨率改为  1024x768  ,  刷新  频率为85  ,  是不是很简单? 
116
117![](http://dev.csdn.net/Develop/ArticleImages/22/22425/CSDN_Dev_Image_2003-11-282158530.png)</vbfixedstring(ccformname),></vbfixedstring(ccdevicename),>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus