輕松完成VB.NET變更顯示器分辨率
VB.NET中的各種特點(diǎn)極大的吸引了開發(fā)人員的眼球。當(dāng)我們想要利用這款語(yǔ)言進(jìn)行移動(dòng)設(shè)備的操作時(shí),將會(huì)發(fā)現(xiàn)其應(yīng)用方式是非常簡(jiǎn)單的。那么我們就一起來(lái)看看VB.NET變更顯示器分辨率的相關(guān)操作。#t#
在VB.NET中,我們很容易獲得顯示器的分辯率,但是,要改變顯示器的分辯率就比較麻煩了。由于.NET的類庫(kù)沒(méi)有將EnumDisplaySettings 和ChangeDisplaySettings這兩個(gè)API函數(shù)進(jìn)行封裝,但是我們得調(diào)用它們函數(shù),相對(duì)于VB6來(lái)說(shuō),VB.NET調(diào)用API函數(shù)是有一些小的改動(dòng)!
下面,我們就嘗試一下在VB.NET變更顯示器分辨率中,使用這兩個(gè)API函數(shù)。
新建一個(gè)項(xiàng)目,在Form1上添加兩個(gè)按鈕,一個(gè)名為btnGetDisp,將其Text屬性設(shè)置為“得到分辯率”;另一個(gè)按鈕名為btnSetDisp,Text屬性為“設(shè)置分辯率”。然后在代碼窗口里添加以下代碼:
- 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
調(diào)用API函數(shù)實(shí)現(xiàn)VB.NET變更顯示器分辨率
- Private Declare Function
EnumDisplaySettings Lib
"user32" Alias "EnumDis
playSettingsA"- (ByVal lpszDeviceName As
Integer, ByVal iModeNum As
Integer, ByRef lpDevMode
As DEVMODE) As Boolean
調(diào)用API函數(shù)
- Private Declare Function
ChangeDisplaySettings Lib
"user32" Alias "Change
DisplaySettingsA"- (ByRef lpDevMode As
DEVMODE, ByVal dwflags
As Integer) As Integer
定義結(jié)構(gòu)進(jìn)行VB.NET變更顯示器分辨率的操作
- Private Structure DEVMODE
- < VBFixedString(CCDEVICENAME),
System.Runtime.InteropServices.
MarshalAs- (System.Runtime.InteropServices.
UnmanagedType.ByValTStr,
SizeConst:=CCDEVICENAME)>
Public dmDeviceName As String- Dim dmSpecVersion As Short
- Dim dmDriverVersion As Short
- Dim dmSize As Short
- Dim dmDriverExtra As Short
- Dim dmFields As Integer
- Dim dmOrientation As Short
- Dim dmPaperSize As Short
- Dim dmPaperLength As Short
- Dim dmPaperWidth As Short
- Dim dmScale As Short
- Dim dmCopies As Short
- Dim dmDefaultSource As Short
- Dim dmPrintQuality As Short
- Dim dmColor As Short
- Dim dmDuplex As Short
- Dim dmYResolution As Short
- Dim dmTTOption As Short
- Dim dmCollate As Short
- < VBFixedString(CCFORMNAME),
System.Runtime.InteropServices
.MarshalAs- (System.Runtime.InteropServices
.UnmanagedType.ByValTStr,
SizeConst:=CCFORMNAME)>
Public dmFormName As String- Dim dmUnusedPadding As Short
- Dim dmBitsPerPel As Short
- Dim dmPelsWidth As Integer
- Dim dmPelsHeight As Integer
- Dim dmDisplayFlags As Integer
- Dim dmDisplayFrequency As Integer
- End Structure
改變分辯率過(guò)程,參數(shù)一寬度,參數(shù)二高度
- Private Sub ChangeDisp(ByRef
iWidth As Single, ByRef
iHeight As Single)- Dim blnWorked As Boolean
- Dim i As Integer
- Dim DevM As Form1.DEVMODE
- i = 0
- Do
- blnWorked = EnumDisplaySettings
(0, i, DevM)- ii = i + 1
- Loop Until (blnWorked = False)
- With DevM
- .dmFields = DM_PELSWIDTH Or
DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY- .dmPelsWidth = iWidth
- .dmPelsHeight = iHeight
刷新頻率為85
- .dmDisplayFrequency = 85
- End With
- Call ChangeDisplaySettings
(DevM, 0)- End Sub
- Private Sub btnGetDisp_Click
(ByVal sender As System.Object,
ByVal e As System.EventArgs)
Handles btnGetDisp.Click- Dim X As Short = System.Windows
.Forms.Screen.PrimaryScreen.
Bounds.Width- Dim Y As Short = System.Windows.
Forms.Screen.PrimaryScreen.
Bounds.Height- MsgBox("您的顯示器分辨率是" &
X & " X " & Y)- End Sub
- Private Sub btnSetDisp_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles btnSetDisp.Click- If MsgBox("您確認(rèn)要將顯示器分辨率改
為1024x768嗎?", MsgBoxStyle.OKCancel,
"系統(tǒng)消息") = MsgBoxResult.OK Then- '調(diào)用改變分辯率過(guò)程
- ChangeDisp(1024, 768)
- End If
- End Sub
VB.NET變更顯示器分辨率的程序運(yùn)行后,點(diǎn)擊設(shè)置分辯率,將會(huì)把顯示器分辨率改為1024x768。