请教各路高手:有一事请教:我想用API改变屏幕的分辨率,在书上我也找到了例子,用到了几个函数,其中有一个api函数:lstrcpy,它的两个参数在书上是声明是any类型,而我用vb的api浏览器找到的声明却是string型,最关键的是在执行时系统提示“类型不符”(不论用什么类型声明),我用了lstrcpy传递的参数的类型是DEVMODE型,一个自定义记录类型,请教各位如何解决,用这个方法行,换一种方法也行,只要能在vb里改变系统的分辨率就行!!!!多谢!!!
解决方案 »
- 还是VB下拔插USB的消息问题,U盘可以,但是蓝牙又不行了,其它USB设备都不行?帮帮忙吧……(不够分了,只能发在这非技术贴了)
- 大量视频教学下载。
- 如何强制转换
- vb中如何调用c写的dll?很急
- JerryLis(哈迪斯)\victorycyz(中海)\qingming81(晴明)请进来接分!
- 怎样用timer控件来控制窗体的登陆与卸载
- 谁能写出完整的拨号和挂断函数,要求自动检测操作系统版本(98/nt/2000),谢谢。
- 哪有Microsoft Jet OLEDB 4.0驱动下载?
- VB的EXE与DLL的简单问题
- 别拉我!!让我跳下去。。。。
- 请教:如果进行光栅运算?
- boywhp()请进!!
两个参数都是字符串
传递自定义类型的数据建议用RtlMoveMemory,声明如下:
Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any,lpvSource As Any,ByVal cbCopy as Long)
注意这个过程在Api浏览器中没有定义,你可以自己加入进去
Lib "user32" Alias "EnumDisplaySettingsA" ( _
ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, _
lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings _
Lib "user32" Alias "ChangeDisplaySettingsA" ( _
lpDevMode As Any, _
ByVal dwflags As Long) As LongPrivate Type DEVMODE
dmDeviceName As String * 32
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 * 32
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End TypeConst DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFREQUENCY = &H400000
Public Sub ChangeRes(lngPelsWidth As Long, _
lngPelsHeight As Long, _
intBitsPerPel As Integer, _
lngDisplayFrequency As Long)
Dim dm As DEVMODE
Call EnumDisplaySettings(0&, -1, dm)
dm.dmFields = DM_PELSWIDTH Or _
DM_PELSHEIGHT Or _
DM_BITSPERPEL Or _
DM_DISPLAYFREQUENCY
dm.dmPelsWidth = lngPelsWidth
dm.dmPelsHeight = lngPelsHeight
dm.dmBitsPerPel = intBitsPerPel
dm.dmDisplayFrequency = lngDisplayFrequency
Call ChangeDisplaySettings(dm, 1)
End Sub
-----------------------------------------------------
调用
Call ChangeRes(800, 600, 32, 75) '75是刷新率
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, _
ByVal iModeNum As Long, lpDevMode As Any) As LongPrivate Declare Function ChangeDisplaySettings Lib "user32" Alias _
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As LongConst EWX_REBOOT = 2 ’ 重开机
Const CCDEVICENAME = 32
Const CCFORMNAME = 32
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1
Const CDS_UPDATEREGISTRY = 1Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
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 * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private DevM As DEVMODEPrivate Sub SetDisplayMode(LngWidth As Long, LngHeight As Long)
Dim i As Long
Dim b As Long
Dim ans As Long
Dim a As Long
Exit Sub
a = EnumDisplaySettings(0, 0, DevM) ’Initial Setting
DevM.dmDisplayFrequency = 85
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = LngWidth ’设定成想要的分辨率
DevM.dmPelsHeight = LngHeight
b = ChangeDisplaySettings(DevM, 1) ’Changed Only this time
End SubPublic Sub SetRunDisplayMode()
SaveSetting App.EXEName, "屏幕设置", "Width", Screen.width \ Screen.TwipsPerPixelX
SaveSetting App.EXEName, "屏幕设置", "Height", Screen.Height \ Screen.TwipsPerPixelY
SetDisplayMode 800, 600
End SubPublic Sub RestoreDisplayMode()
Dim SWidth As Long
Dim SHeight As Long
SWidth = GetSetting(App.EXEName, "屏幕设置", "Width", 800)
SHeight = GetSetting(App.EXEName, "屏幕设置", "height", 600)
DeleteSetting App.EXEName, "屏幕设置"
SetDisplayMode SWidth, SHeight
End Sub