• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 10次 | 進入軟件測試論壇討論

    領測軟件測試網 作者:王志紅

    對于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, 則您的計算機屏幕顯示模式將被設置為原來的顯示模式。此程序稍加修改,即可放置于桌面或任務欄中,直接快捷的修改屏幕設置。 

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>