<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在VB中調用API函數動態改變及恢復屏幕設置

      [摘要]作者:王志紅 對于Windows平臺,顯示器的分辯率和顏色數很重要,尤其是對于多媒體應用軟件和游戲軟件。但許多情況下,用戶當前的屏幕設置并不適合軟件的運行需要。軟件通常的做法是提示用戶將屏幕設置到軟件要求的分辯率及顏色數,再重新啟動軟件。這樣無疑會增加普通用戶操作上的負擔和困難,降低了軟件的友好性...
      作者:王志紅

      對于Windows平臺,顯示器的分辯率和顏色數很重要,尤其是對于多媒體應用軟件和游戲軟件。但許多情況下,用戶當前的屏幕設置并不適合軟件的運行需要。軟件通常的做法是提示用戶將屏幕設置到軟件要求的分辯率及顏色數,再重新啟動軟件。這樣無疑會增加普通用戶操作上的負擔和困難,降低了軟件的友好性和易用性。
      ---- 理想的作法是:在軟件開始時,動態的改變屏幕設置來達到軟件運行的要求。在軟件運行結束后,再自動把屏幕設置改回原來的設置值。這一切過程都在不知不覺中完成。這一做法可以通過在VB中調用API(應用程序接口)函數做到。實現方法如下:

      ---- 一、打開一個標準的EXE工程。

      ---- 二、在“工程”菜單欄下,選取“添加模塊”,為工程添加一個模塊。

      ---- 并在模塊中添加如下代碼:

      ‘---------------以下代碼用于得到屏幕的設置參數--------------
      Declare Function GetDeviceCaps Lib
      "gdi32" (ByVal hdc As Long,
      ByVal nIndex As Long) As Long
      ‘取指定設備信息API函數
      Public Const HORZRES = 8
      ‘三個屏幕常量
      Public Const VHORZRES = 10
      Public Const BITSPIXEL = 12
      ‘---------------通過字符COPY進行數據類型轉換--------------
      Private Declare Function lstrcpy Lib "kernel32"
      Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long
      ‘------------------以下結構用于屏幕的初始化-----------------
      Const CCHDEVICENAME = 32
      Const CCHFORMNAME = 32

      Private Type DEVMODE
      dmDeviceName As String * CCHDEVICENAME
      dmSpecVersion As Integer
      dmDriverVersion As Integer
      dmSize As Integer
      dmDriverExtra As Integer
      dmFields As Long
      dmOrientation As Integer
      dmPaperSize As Integer
      dmPaperLength As Integer
      dmPaperWidth As Integer
      dmScale As Integer
      dmCopies As Integer
      dmDefaultSource As Integer
      dmPrintQuality As Integer
      dmColor As Integer
      dmDuplex As Integer
      dmYResolution As Integer
      dmTTOption As Integer
      dmCollate As Integer
      dmFormName As String * CCHFORMNAME
      dmUnusedPadding As Integer
      dmBitsPerPel As Integer
      dmPelsWidth As Long
      dmPelsHeight As Long
      dmDisplayFlags As Long
      dmDisplayFrequency As Long
      End Type
      ‘------------------設置屏幕的核心API-----------------
      Private Declare Function ChangeDisplaySettings
      Lib "User32" Alias "ChangeDisplaySettingsA"
      (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long
      ‘------------------設置屏幕的函數-----------------
      Public Function SetDispMode(Width As Integer,
      Height As Integer, Color As Integer) As Long
      (SetDispMode是自己構造的更改屏幕設置的函數來,
      它的三個參數Width、Height和Color分別是屏幕的橫向分辨率、
      縱向分辨率,顏色位數,其值可為24,16,0等。0為原有顏色設置。)
      Const DM_PELSWIDTH = &H80000
      Const DM_PELSHEIGHT = &H100000
      Const DM_BITSPERPEL = &H40000
      Dim NewDevMode As DEVMODE
      Dim pDevmode As Long
      With NewDevMode
      .dmSize = 122
      If Color = 0 Then
      ‘如果Color=0則只改變屏幕的分辨率,而不改變色彩。
      .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
      Else
      ‘如果Color不等0則改變屏幕的分辨率和色彩。
      .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
      End If
      .dmPelsWidth = Width
      .dmPelsHeight = Height
      If Color < > 0 Then
      .dmBitsPerPel = Color
      End If
      End With
      pDevmode = lstrcpy(NewDevMode, NewDevMode)
      ‘得到一個指向NewDevMode結構的Long型的指針。
      ChangeDisplaySettings pDevmode, 0
      End Function

      ---- 三、在工程窗體中,加入兩個按鈕Command1和Command2,其Caption屬性分別為“800x600x16”和“恢復原設置”。

      ---- 其程序代碼為:

      ‘窗口的“通用 聲明”區
      Option Explicit
      Dim H, V, Color As Long
      ’聲名變量,用于保存最初屏幕設置
      Private Sub Form_Load()
      ‘---------------以下代碼用于得到最初的屏幕設備--------------
      H = GetDeviceCaps(Form1.hdc, HORZRES)
      V = GetDeviceCaps(Form1.hdc, VHORZRES)
      Color = GetDeviceCaps(Form1.hdc, BITSPIXEL)
      End Sub

      Private Sub Command1_Click()
      ‘調用SetDispMode函數改變屏幕設置
      SetDispMode 800, 600, 16
      End Sub

      Private Sub Command2_Click()
      ‘恢復最初屏幕設置
      SetDispMode Cint(H), Cint(V), Cint(Color)
      End Sub

      ---- 四、將程序編譯執行。

      ---- 本程序執行后,如果單擊Command1,則您的計算機屏幕顯示模式將被設置為“800x600x16”的顯示模式;如果單擊Command2, 則您的計算機屏幕顯示模式將被設置為原來的顯示模式。此程序稍加修改,即可放置于桌面或任務欄中,直接快捷的修改屏幕設置。 


      日韩精品一区二区三区高清