网页功能: 加入收藏 设为首页 网站搜索  
修改显示器的刷新频率
发表日期:2003-03-04作者:摘自互联网[] 出处:  

  对于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, 则您的计算机屏幕显示模式将被设置为原来的显示模式。此程序稍加修改,即可放置于桌面或任务栏中,直接快捷的修改屏幕设置。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 修改显示器的刷新频率
本类热点文章
  在VB中使用WMI获取系统硬件和软件有关信..
  在VB中使用WMI获取系统硬件和软件有关信..
  将繁体中文字转化成简体中文
  将繁体中文字转化成简体中文
  获取CPU的ID
  获取CPU的ID
  在vb程序中如何获取剪贴板中所复制的文..
  在vb程序中如何获取剪贴板中所复制的文..
  VB编程破解Windows屏幕保护密码
  更新桌面图片
  更新桌面图片
  让程序的鼠标支持滚轮
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00439