在VB中调用API函数动态改变及恢复屏幕设置

usmaoyszjhiwun

usmaoyszjhiwun

2016-02-19 18:27

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐在VB中调用API函数动态改变及恢复屏幕设置,赶紧看过来吧!
对于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
  IfColor0Then
  .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,则您的计算机屏幕显示模式将被设置为原来的显示模式。此程序稍加修改,即可放置于桌面或任务栏中,直接快捷的修改屏幕设置。->

展开更多 50%)
分享

猜你喜欢

在VB中调用API函数动态改变及恢复屏幕设置

编程语言 网络编程
在VB中调用API函数动态改变及恢复屏幕设置

Delphi中API编程--在Delphi中调用API函数

Delphi
Delphi中API编程--在Delphi中调用API函数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

API函数在VB中的应用

编程语言 网络编程
API函数在VB中的应用

动态改变屏幕设置

编程语言 网络编程
动态改变屏幕设置

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

API函数在VB开发中的应用

编程语言 网络编程
API函数在VB开发中的应用

VB利用API函数设定屏幕颜色数

编程语言 网络编程
VB利用API函数设定屏幕颜色数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

椭圆形的窗体

椭圆形的窗体

使用ajax之后下载时需要加入的语句

使用ajax之后下载时需要加入的语句
下拉加载更多内容 ↓