使用VB.NET實現改變顯示器的分辨率實例

在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

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

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

'改變分辯率過程,參數一寬度,參數二高度

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)

i = 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,

"系統消息") = MsgBoxResult.OK Then

'調用改變分辯率過程

changedisp(1024, 768)

end If

end Sub

程序運行如下圖所示,點擊設置分辯率,將會把顯示器分辨率改爲1024x768,刷新頻率爲85,是不是很簡單?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章