📄 sm6.bas
字号:
Attribute VB_Name = "Sm6"
Option Explicit
Const SPIF_SENDWININICHANGE = &H2
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1
Private Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Public Const VHORZRES = 10
Public Const BITSPIXEL = 12
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function EnumDisplaySettings 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 Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private 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
Public GX As Integer '横坐标
Public GY As Integer '纵坐标
'Example
Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1
Public Sub GetScreen()
' Dim X As Integer '横象素
' Dim Y As Integer '纵象素
GX = GetSystemMetrics(SM_CXSCREEN)
GY = GetSystemMetrics(SM_CYSCREEN)
End Sub
Public Sub n1()
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "", _
SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub
Public Sub n2()
Dim wi As Integer
Dim hi As Integer
Dim pi As Integer
Dim master As Long
master = GetDC(0)
pi = GetDeviceCaps(master, BITSPIXEL) '取分辩率
wi = GetDeviceCaps(master, HORZRES)
hi = GetDeviceCaps(master, VHORZRES)
Call ban(640, 480, pi)
Call ban(wi, hi, pi)
End Sub
Public Sub n3()
Dim wi As Integer
Dim hi As Integer
Dim pi As Integer
Dim master As Long
master = GetDC(0)
pi = GetDeviceCaps(master, BITSPIXEL) '取分辩率
wi = GetDeviceCaps(master, HORZRES)
hi = GetDeviceCaps(master, VHORZRES)
If (pi > 16) Then Call ban(wi, hi, 16)
End Sub
Public Sub ban(x As Integer, y As Integer, z As Integer)
Dim DevM As DEVMODE '注释:Get the info into
Dim devmerg As Long
Dim erg As Long
Dim an As Long
devmerg& = EnumDisplaySettings(0&, 0&, DevM) '注释:We don't change the colordepth, because a reboot will be necessary
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
DevM.dmPelsWidth = x 'ScreenWidth
DevM.dmPelsHeight = y 'ScreenHeight
DevM.dmBitsPerPel = z '(could be 8, 16, 32 or even 4)
'Now change the display and check if possible
erg& = ChangeDisplaySettings(DevM, CDS_TEST)
'Check if succesfull
Select Case erg&
Case DISP_CHANGE_RESTART
an = MsgBox("You:ve to reboot", vbYesNo + vbSystemModal, "Info")
If an = vbYes Then
erg& = ExitWindowsEx(EWX_REBOOT, 0&)
End If
Case DISP_CHANGE_SUCCESSFUL
erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
Case Else
End Select
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -