天天看點

在VB.NET中改變顯示器的分辯率 (轉)

在VB.NET中改變顯示器的分辯率 (轉)[@[email protected]]

XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

  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,是不是很簡單?

ASPectratio="t">

在VB.NET中改變顯示器的分辯率 (轉)

2003-11-282158530.png" o:title="">

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-985653/,如需轉載,請注明出處,否則将追究法律責任。

轉載于:http://blog.itpub.net/10752019/viewspace-985653/

c#