輕松完成VB.NET變更顯示器分辨率
VB.NET中的各種特點極大的吸引了開發(fā)人員的眼球。當我們想要利用這款語言進行移動設(shè)備的操作時,將會發(fā)現(xiàn)其應用方式是非常簡單的。那么我們就一起來看看VB.NET變更顯示器分辨率的相關(guān)操作。#t#
在VB.NET中,我們很容易獲得顯示器的分辯率,但是,要改變顯示器的分辯率就比較麻煩了。由于.NET的類庫沒有將EnumDisplaySettings 和ChangeDisplaySettings這兩個API函數(shù)進行封裝,但是我們得調(diào)用它們函數(shù),相對于VB6來說,VB.NET調(diào)用API函數(shù)是有一些小的改動!
下面,我們就嘗試一下在VB.NET變更顯示器分辨率中,使用這兩個API函數(shù)。
新建一個項目,在Form1上添加兩個按鈕,一個名為btnGetDisp,將其Text屬性設(shè)置為“得到分辯率”;另一個按鈕名為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ù)實現(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)進行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
改變分辯率過程,參數(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("您確認要將顯示器分辨率改
為1024x768嗎?", MsgBoxStyle.OKCancel,
"系統(tǒng)消息") = MsgBoxResult.OK Then- '調(diào)用改變分辯率過程
- ChangeDisp(1024, 768)
- End If
- End Sub
VB.NET變更顯示器分辨率的程序運行后,點擊設(shè)置分辯率,將會把顯示器分辨率改為1024x768。