当前位置:中国易下载软件教材中心文章中心编程语言VB语言 → 在VB中调用API函数动态改变及恢复屏幕设置

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

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-8-21 1:01:50
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

在VB中调用API函数动态改变及恢复屏幕设置 eFn海岸线网络安全资讯站
作者:王志红 eFn海岸线网络安全资讯站
对于Windows平台,显示器的分辩率和颜色数很重要,尤其是对于多媒体应用软件和游戏软件。但许多情况下,用户当前的屏幕设置并不适合软件的运行需要。软件通常的做法是提示用户将屏幕设置到软件要求的分辩率及颜色数,再重新启动软件。这样无疑会增加普通用户操作上的负担和困难,降低了软件的友好性和易用性。 eFn海岸线网络安全资讯站
---- 理想的作法是:在软件开始时,动态的改变屏幕设置来达到软件运行的要求。在软件运行结束后,再自动把屏幕设置改回原来的设置值。这一切过程都在不知不觉中完成。这一做法可以通过在VB中调用API(应用程序接口)函数做到。实现方法如下: eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 一、打开一个标准的EXE工程。 eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 二、在“工程”菜单栏下,选取“添加模块”,为工程添加一个模块。 eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 并在模块中添加如下代码eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
‘---------------以下代码用于得到屏幕的设置参数-------------- eFn海岸线网络安全资讯站
Declare Function GetDeviceCaps Lib eFn海岸线网络安全资讯站
"gdi32" (ByVal hdc As Long, eFn海岸线网络安全资讯站
ByVal nIndex As Long) As Long eFn海岸线网络安全资讯站
‘取指定设备信息API函数 eFn海岸线网络安全资讯站
Public Const HORZRES = 8 eFn海岸线网络安全资讯站
‘三个屏幕常量 eFn海岸线网络安全资讯站
Public Const VHORZRES = 10 eFn海岸线网络安全资讯站
Public Const BITSPIXEL = 12 eFn海岸线网络安全资讯站
‘---------------通过字符COPY进行数据类型转换-------------- eFn海岸线网络安全资讯站
Private Declare Function lstrcpy Lib "kernel32" eFn海岸线网络安全资讯站
Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long eFn海岸线网络安全资讯站
‘------------------以下结构用于屏幕的初始化----------------- eFn海岸线网络安全资讯站
Const CCHDEVICENAME = 32 eFn海岸线网络安全资讯站
Const CCHFORMNAME = 32 eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
Private Type DEVMODE eFn海岸线网络安全资讯站
dmDeviceName As String * CCHDEVICENAME eFn海岸线网络安全资讯站
dmSpecVersion As Integer eFn海岸线网络安全资讯站
dmDriverVersion As Integer eFn海岸线网络安全资讯站
dmSize As Integer eFn海岸线网络安全资讯站
dmDriverExtra As Integer eFn海岸线网络安全资讯站
dmFields As Long eFn海岸线网络安全资讯站
dmOrientation As Integer eFn海岸线网络安全资讯站
dmPaperSize As Integer eFn海岸线网络安全资讯站
dmPaperLength As Integer eFn海岸线网络安全资讯站
dmPaperWidth As Integer eFn海岸线网络安全资讯站
dmScale As Integer eFn海岸线网络安全资讯站
dmCopies As Integer eFn海岸线网络安全资讯站
dmDefaultSource As Integer eFn海岸线网络安全资讯站
dmPrintQuality As Integer eFn海岸线网络安全资讯站
dmColor As Integer eFn海岸线网络安全资讯站
dmDuplex As Integer eFn海岸线网络安全资讯站
dmYResolution As Integer eFn海岸线网络安全资讯站
dmTTOption As Integer eFn海岸线网络安全资讯站
dmCollate As Integer eFn海岸线网络安全资讯站
dmFormName As String * CCHFORMNAME eFn海岸线网络安全资讯站
dmUnusedPadding As Integer eFn海岸线网络安全资讯站
dmBitsPerPel As Integer eFn海岸线网络安全资讯站
dmPelsWidth As Long eFn海岸线网络安全资讯站
dmPelsHeight As Long eFn海岸线网络安全资讯站
dmDisplayFlags As Long eFn海岸线网络安全资讯站
dmDisplayFrequency As Long eFn海岸线网络安全资讯站
End Type eFn海岸线网络安全资讯站
‘------------------设置屏幕的核心API----------------- eFn海岸线网络安全资讯站
Private Declare Function ChangeDisplaySettings eFn海岸线网络安全资讯站
Lib "User32" Alias "ChangeDisplaySettingsA" eFn海岸线网络安全资讯站
(ByVal lpDevMode As Long, ByVal dwflags As Long) As Long eFn海岸线网络安全资讯站
‘------------------设置屏幕的函数----------------- eFn海岸线网络安全资讯站
Public Function SetDispMode(Width As Integer, eFn海岸线网络安全资讯站
Height As Integer, Color As Integer) As Long eFn海岸线网络安全资讯站
(SetDispMode是自己构造的更改屏幕设置的函数来, eFn海岸线网络安全资讯站
它的三个参数Width、Height和Color分别是屏幕的横向分辨率、 eFn海岸线网络安全资讯站
纵向分辨率,颜色位数,其值可为24,16,0等。0为原有颜色设置。) eFn海岸线网络安全资讯站
Const DM_PELSWIDTH = &H80000 eFn海岸线网络安全资讯站
Const DM_PELSHEIGHT = &H100000 eFn海岸线网络安全资讯站
Const DM_BITSPERPEL = &H40000 eFn海岸线网络安全资讯站
Dim NewDevMode As DEVMODE eFn海岸线网络安全资讯站
Dim pDevmode As Long eFn海岸线网络安全资讯站
With NewDevMode eFn海岸线网络安全资讯站
.dmSize = 122 eFn海岸线网络安全资讯站
If Color = 0 Then eFn海岸线网络安全资讯站
‘如果Color=0则只改变屏幕的分辨率,而不改变色彩。 eFn海岸线网络安全资讯站
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT eFn海岸线网络安全资讯站
Else eFn海岸线网络安全资讯站
‘如果Color不等0则改变屏幕的分辨率和色彩。 eFn海岸线网络安全资讯站
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL eFn海岸线网络安全资讯站
End If eFn海岸线网络安全资讯站
.dmPelsWidth = Width eFn海岸线网络安全资讯站
.dmPelsHeight = Height eFn海岸线网络安全资讯站
If Color < > 0 Then eFn海岸线网络安全资讯站
.dmBitsPerPel = Color eFn海岸线网络安全资讯站
End If eFn海岸线网络安全资讯站
End With eFn海岸线网络安全资讯站
pDevmode = lstrcpy(NewDevMode, NewDevMode) eFn海岸线网络安全资讯站
‘得到一个指向NewDevMode结构的Long型的指针。 eFn海岸线网络安全资讯站
ChangeDisplaySettings pDevmode, 0 eFn海岸线网络安全资讯站
End Function eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 三、在工程窗体中,加入两个按钮Command1和Command2,其Caption属性分别为“800x600x16”和“恢复原设置”。 eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 其程序代码为: eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
‘窗口的“通用|声明”区 eFn海岸线网络安全资讯站
Option Explicit eFn海岸线网络安全资讯站
Dim H, V, Color As Long eFn海岸线网络安全资讯站
’声名变量,用于保存最初屏幕设置 eFn海岸线网络安全资讯站
Private Sub Form_Load() eFn海岸线网络安全资讯站
‘---------------以下代码用于得到最初的屏幕设备-------------- eFn海岸线网络安全资讯站
H = GetDeviceCaps(Form1.hdc, HORZRES) eFn海岸线网络安全资讯站
V = GetDeviceCaps(Form1.hdc, VHORZRES) eFn海岸线网络安全资讯站
Color = GetDeviceCaps(Form1.hdc, BITSPIXEL) eFn海岸线网络安全资讯站
End Sub eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
Private Sub Command1_Click() eFn海岸线网络安全资讯站
‘调用SetDispMode函数改变屏幕设置 eFn海岸线网络安全资讯站
SetDispMode 800, 600, 16 eFn海岸线网络安全资讯站
End Sub eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
Private Sub Command2_Click() eFn海岸线网络安全资讯站
‘恢复最初屏幕设置 eFn海岸线网络安全资讯站
SetDispMode Cint(H), Cint(V), Cint(Color) eFn海岸线网络安全资讯站
End Sub eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 四、将程序编译执行。 eFn海岸线网络安全资讯站
eFn海岸线网络安全资讯站
---- 本程序执行后,如果单击Command1,则您的计算机屏幕显示模式将被设置为“800x600x16”的显示模式;如果单击Command2, 则您的计算机屏幕显示模式将被设置为原来的显示模式。此程序稍加修改,即可放置于桌面或任务栏中,直接快捷的修改屏幕设置。