在VB.NET中,我们很容易获得显示器的分辩率,但是,要改变显示器的分辩率就比较麻烦了。由于.net的类库没有将enumdisplaysettings 和ChangeDisplaySettings这两个API函数进行封装,但是我们得调用它们函数,相对于VB6来说,VB.NET调用API函数是有一些小的改动!
下面,我们就尝试一下在vb.net中,使用这两个api函数。
新建一个项目,在form1上添加两个按钮,一个名为btngetdisp,将其text属性设置为“得到分辩率”;另一个按钮名为btnsetdisp,text属性为“设置分辩率”。然后在代码窗口里添加以下代码:
- privateConstCCDEVICENAMEAsShort=32
- privateConstCCFORMNAMEAsShort=32
- privateConstDM_PELSWIDTHAsInteger=&H80000
- privateConstDM_PELSHEIGHTAsInteger=&H100000
- '刷新频率常量
- privateConstDM_DISPLAYFREQUENCYAsInteger=&H400000
- '调用API函数
- privateDeclareFunctionEnumDisplaySettingsLib"user32"Alias"EnumDisplaySettingsA"(ByVallpszDeviceNameAsInteger,ByValiModeNumAsInteger,ByReflpDevModeAsDEVMODE)AsBoolean
- '调用api函数
- privateDeclareFunctionChangeDisplaySettingsLib"user32"Alias"ChangeDisplaySettingsA"(ByReflpDevModeAsDEVMODE,ByValdwflagsAsInteger)AsInteger
- '定义结构
- privateStructureDEVMODE
- PublicdmDeviceNameAsString
- dimdmSpecVersionAsShort
- dimdmDriverVersionAsShort
- dimdmSizeAsShort
- dimdmDriverExtraAsShort
- dimdmFieldsAsInteger
- dimdmOrientationAsShort
- dimdmPaperSizeAsShort
- dimdmPaperLengthAsShort
- dimdmPaperWidthAsShort
- dimdmScaleAsShortdimdmCopiesAsShortdimdmDefaultSourceAsShortdimdmPrintQualityAsShortdimdmColorAsShort
- dimdmDuplexAsShortdimdmYResolutionAsShortdimdmTTOptionAsShortdimdmCollateAsShort
- PublicdmFormNameAsString
- dimdmUnusedPaddingAsShort
- dimdmBitsPerPelAsShort
- dimdmPelsWidthAsInteger
- dimdmPelsHeightAsInteger
- dimdmDisplayFlagsAsIntegerdimdmDisplayFrequencyAsIntegerendStructure
- '改变分辩率过程,参数一宽度,参数二高度
- privateSubChangeDisp(ByRefiWidthAsSingle,ByRefiHeightAsSingle)
- dimblnWorkedAsBoolean
- dimiAsInteger
- dimDevMAsForm1.DEVMODE
- i=0
- do
- blnworked=EnumDisplaySettings(0,i,DevM)
- i=i+1
- loopUntil(blnWorked=False)
- withDevM
- .dmfields=DM_PELSWIDTHOrDM_PELSHEIGHTOrDM_DISPLAYFREQUENCY
- .dmpelswidth=iWidth
- .dmpelsheight=iHeight
- '刷新频率为85
- .dmdisplayfrequency=85
- endWith
- callChangeDisplaySettings(DevM,0)
- endSub
- privateSubbtnGetDisp_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnGetDisp.Click
- dimXAsShort=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
- dimYAsShort=System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
- msgBox("您的显示器分辨率是"&X&"X"&Y)
- endSub
- privateSubbtnSetDisp_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnSetDisp.Click
- ifMsgBox("您确认要将显示器分辨率改为1024x768吗?",MsgBoxStyle.OKCancel,"系统消息")=MsgBoxResult.OKThen'调用改变分辩率过程
- changedisp(1024,768)
- endIf
- endSub
程序运行如下图所示,点击设置分辩率,将会把显示器分辨率改为1024x768,刷新频率为85,是不是很简单?
原文链接:https://www.f2er.com/vb/262892.html