程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB中調用API函數動態改變及恢復屏幕設置

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

編輯:VB綜合教程
對於Windows平台,顯示器的分辯率和顏色數很重要,尤其是對於多媒體應用軟件和游戲軟件。但許多情況下,用戶當前的屏幕設置並不適合軟件的運行需要。軟件通常的做法是提示用戶將屏幕設置到軟件要求的分辯率及顏色數,再重新啟動軟件。這樣無疑會增加普通用戶操作上的負擔和困難,降低了軟件的友好性和易用性。
  ----理想的作法是:在軟件開始時,動態的改變屏幕設置來達到軟件運行的要求。在軟件運行結束後,再自動把屏幕設置改回原來的設置值。這一切過程都在不知不覺中完成。這一做法可以通過在VB中調用API(應用程序接口)函數做到。實現方法如下:
  
  ----一、打開一個標准的EXE工程。
  
  ----二、在“工程”菜單欄下,選取“添加模塊”,為工程添加一個模塊。
  
  ----並在模塊中添加如下代碼:
  
  ‘---------------以下代碼用於得到屏幕的設置參數--------------
  DeclareFunctionGetDeviceCapsLib
  "gdi32"(ByValhdcAsLong,
  ByValnIndexAsLong)AsLong
  ‘取指定設備信息API函數
  PublicConstHORZRES=8
  ‘三個屏幕常量
  PublicConstVHORZRES=10
  PublicConstBITSPIXEL=12
  ‘---------------通過字符COPY進行數據類型轉換--------------
  PrivateDeclareFunctionlstrcpyLib"kernel32"
  Alias"lstrcpyA"(lpString1AsAny,lpString2AsAny)AsLong
  ‘------------------以下結構用於屏幕的初始化-----------------
  ConstCCHDEVICENAME=32
  ConstCCHFORMNAME=32
  
  PrivateTypeDEVMODE
  dmDeviceNameAsString*CCHDEVICENAME
  dmSpecVersionAsInteger
  dmDriverVersionAsInteger
  dmSizeAsInteger
  dmDriverExtraAsInteger
  dmFieldsAsLong
  dmOrientationAsInteger
  dmPaperSizeAsInteger
  dmPaperLengthAsInteger
  dmPaperWidthAsInteger
  dmScaleAsInteger
  dmCopiesAsInteger
  dmDefaultSourceAsInteger
  dmPrintQualityAsInteger
  dmColorAsInteger
  dmDuplexAsInteger
  dmYResolutionAsInteger
  dmTTOptionAsInteger
  dmCollateAsInteger
  dmFormNameAsString*CCHFORMNAME
  dmUnusedPaddingAsInteger
  dmBitsPerPelAsInteger
  dmPelsWidthAsLong
  dmPelsHeightAsLong
  dmDisplayFlagsAsLong
  dmDisplayFrequencyAsLong
  EndType
  ‘------------------設置屏幕的核心API-----------------
  PrivateDeclareFunctionChangeDisplaySettings
  Lib"User32"Alias"ChangeDisplaySettingsA"
  (ByVallpDevModeAsLong,ByValdwflagsAsLong)AsLong
  ‘------------------設置屏幕的函數-----------------
  PublicFunctionSetDispMode(WidthAsInteger,
  HeightAsInteger,ColorAsInteger)AsLong
  (SetDispMode是自己構造的更改屏幕設置的函數來,
  它的三個參數Width、Height和Color分別是屏幕的橫向分辨率、
  縱向分辨率,顏色位數,其值可為24,16,0等。0為原有顏色設置。)
  ConstDM_PELSWIDTH=&H80000
  ConstDM_PELSHEIGHT=&H100000
  ConstDM_BITSPERPEL=&H40000
  DimNewDevModeAsDEVMODE
  DimpDevmodeAsLong
  WithNewDevMode
  .dmSize=122
  IfColor=0Then
  ‘如果Color=0則只改變屏幕的分辨率,而不改變色彩。
  .dmFields=DM_PELSWIDTHOrDM_PELSHEIGHT
  Else
  ‘如果Color不等0則改變屏幕的分辨率和色彩。
  .dmFields=DM_PELSWIDTHOrDM_PELSHEIGHTOrDM_BITSPERPEL
  EndIf
  .dmPelsWidth=Width
  .dmPelsHeight=Height
  IfColor<>0Then
  .dmBitsPerPel=Color
  EndIf
  EndWith
  pDevmode=lstrcpy(NewDevMode,NewDevMode)
  ‘得到一個指向NewDevMode結構的Long型的指針。
  ChangeDisplaySettingspDevmode,0
  EndFunction
  
  ----三、在工程窗體中,加入兩個按鈕Command1和Command2,其Caption屬性分別為“800x600x16”和“恢復原設置”。
  
  ----其程序代碼為:
  
  ‘窗口的“通用|聲明”區
  OptionExplicit
  DimH,V,ColorAsLong
  '聲名變量,用於保存最初屏幕設置
  PrivateSubForm_Load()
  ‘---------------以下代碼用於得到最初的屏幕設備--------------
  H=GetDeviceCaps(Form1.hdc,HORZRES)
  V=GetDeviceCaps(Form1.hdc,VHORZRES)
  Color=GetDeviceCaps(Form1.hdc,BITSPIXEL)
  EndSub
  
  PrivateSubCommand1_Click()
  ‘調用SetDispMode函數改變屏幕設置
  SetDispMode800,600,16
  EndSub
  
  PrivateSubCommand2_Click()
  ‘恢復最初屏幕設置
  SetDispModeCint(H),Cint(V),Cint(Color)
  EndSub
  
  ----四、將程序編譯執行。
  
  ----本程序執行後,如果單擊Command1,則您的計算機屏幕顯示模式將被設置為“800x600x16”的顯示模式;如果單擊Command2,則您的計算機屏幕顯示模式將被設置為原來的顯示模式。此程序稍加修改,即可放置於桌面或任務欄中,直接快捷的修改屏幕設置。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved