📄 vbtips5.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>VBtips6</title>
</head>
<body>
<h1 align="center"><a name="home"></a>VB技巧<font size="5"><strong>(6)</strong></font></h1>
<blockquote>
<p><strong><b>1、</b></strong><a href="#tips11"><strong>使用</strong><font
face="宋体"><strong> IIF </strong></font><strong>和</strong><font
face="宋体"><strong> SWITCH </strong></font><strong>以精减代码</strong></a><strong><br>
2、</strong><a href="#tips1"><strong>取得 DOS 环境变量</strong></a><strong><br>
3、</strong><a href="#tips2"><strong>修改屏幕保护的口令</strong></a><strong><br>
4、</strong><a href="#tips3"><strong>使用 API
开始屏幕保护</strong></a><strong><br>
5、</strong><a href="#tips4"><strong>取得和设置系统颜色</strong></a><strong><br>
6、</strong><a href="#tips5"><strong>改变墙纸</strong></a><strong><br>
7、</strong><a href="#tips6"><strong>动态改变屏幕设置</strong></a><strong><br>
8、</strong><a href="#tips7"><strong>桌面的大小</strong></a><strong><br>
9、</strong><a href="#tips8"><strong>禁止使用 Alt+F4
关闭窗口</strong></a></p>
</blockquote>
<div align="center"><center>
<table border="0" width="88%">
<tr>
<td width="80%"><p align="left"><a
href="vbtips.htm#Return">[1]</a> <a href="vbtips1.htm">[2]</a>
<a href="vbtips2.htm">[3]</a> <a href="vbtips3.htm">[4]</a>
<a href="vbtips4.htm">[5]</a> [6] <a href="vbtips7.htm">[7]</a>
<a href="#home">[8]</a> <a href="vbtips9.htm">[9]</a> <a
href="vbtips10.htm">[10]</a></p>
</td>
<td><p align="right"><font size="2">第六页(共十页)</font></p>
</td>
</tr>
</table>
</center></div>
<hr>
<div align="center"><center>
<table border="0" cellspacing="1" width="88%">
<tr>
<td width="100%"><a name="tips0"></a><font size="3"><strong>使用</strong></font><font
size="3" face="宋体"><strong> IIF </strong></font><font
size="3"><strong>和</strong></font><font size="3"
face="宋体"><strong> SWITCH </strong></font><font
size="3"><strong>以精减代码</strong></font><font
face="宋体"><br>
</font>在很多地方你都可以使用一个更紧凑的
IIf?函数来代替 If...Else...Endif 的结构: <br>
例:返回两个值中较大的一个 <br>
maxValue = IIf(first >= second, first, second) <br>
Switch
则是一个很少使用的函数,可是在很多方面它都提供比
If...ElesIf 结构更好的 <br>
例:判断 "x" 是正、负还是 null? <br>
Print Switch(x<0,"负",x>0,"正",
True, "Null")<br>
<a href="#home">返回</a><p><a name="tips1"></a><strong>取得
DOS 环境变量<br>
</strong>使用 Environ 函数:<br>
Dim x As Integer<br>
Dim Env As String<br>
x = 1<br>
Env = Environ(x)<br>
Do Until Env = ""<br>
Env = Environ(x)<br>
Debug.Print Env<br>
x = x + 1<br>
Loop<br>
<a href="#home">返回</a></p>
<p><a name="tips2"></a><strong>修改屏幕保护的口令</strong>
<br>
声明:<br>
Private Declare Function PwdChangePassword Lib
"mpr" Alias "PwdChangePasswordA" _<br>
(ByVal lpcRegkeyname As String, ByVal hwnd As Long, ByVal
uiReserved1 As _<br>
Long, ByVal uiReserved2 As Long) As Long<br>
使用:<br>
' 出现修改屏幕保护口令的窗口<br>
Call PwdChangePassword("SCRSAVE", Me.hwnd, 0,
0)<br>
<a href="#home">返回</a></p>
<p><a name="tips3"></a><strong>使用 API
开始屏幕保护 </strong><br>
声明:<br>
Private Declare Function SendMessage Lib
"user32" _<br>
Alias "SendMessageA" (ByVal hWnd As Long, ByVal
wMsg _<br>
As Long, ByVal wParam As Long, ByVal lParam As Long) _<br>
As Long <br>
Const WM_SYSCOMMAND = &H112&<br>
Const SC_SCREENSAVE = &HF140&<br>
代码:<br>
Dim result As Long<br>
result = SendMessage(Form1.hWnd, WM_SYSCOMMAND,
SC_SCREENSAVE, 0&)<br>
<a href="#home">返回</a></p>
<p><a name="tips4"></a><strong>取得和设置系统颜色</strong><br>
声明:<br>
Public Const COLOR_SCROLLBAR = 0 '滚动条 <br>
Public Const COLOR_BACKGROUND = 1 '桌面背景<br>
Public Const COLOR_ACTIVECAPTION = 2 '活动窗口标题<br>
Public Const COLOR_INACTIVECAPTION = 3 '非活动窗口标题<br>
Public Const COLOR_MENU = 4 '菜单 <br>
Public Const COLOR_WINDOW = 5 '窗口背景 <br>
Public Const COLOR_WINDOWFRAME = 6 '窗口框<br>
Public Const COLOR_MENUTEXT = 7 '窗口文字 <br>
Public Const COLOR_WINDOWTEXT = 8 '3D 阴影 (Win95) <br>
Public Const COLOR_CAPTIONTEXT = 9 '标题文字 <br>
Public Const COLOR_ACTIVEBORDER = 10 '活动窗口边框<br>
Public Const COLOR_INACTIVEBORDER = 11 '非活动窗口边框<br>
Public Const COLOR_APPWORKSPACE = 12 'MDI 窗口背景<br>
Public Const COLOR_HIGHLIGHT = 13 '选择条背景<br>
Public Const COLOR_HIGHLIGHTTEXT = 14 '选择条文字<br>
Public Const COLOR_BTNFACE = 15 '按钮 <br>
Public Const COLOR_BTNSHADOW = 16 '3D 按钮阴影<br>
Public Const COLOR_GRAYTEXT = 17 '灰度文字 <br>
Public Const COLOR_BTNTEXT = 18 '按钮文字 <br>
Public Const COLOR_INACTIVECAPTIONTEXT = 19 '非活动窗口文字<br>
Public Const COLOR_BTNHIGHLIGHT = 20 '3D 选择按钮<br>
<br>
Declare Function SetSysColors Lib "user32"
Alias "SetSysColors" (ByVal nChanges As Long,
lpSysColor As Long, lpColorValues As Long) As Long <br>
Declare Function GetSysColor Lib "user32" Alias
"GetSysColor" (ByVal nIndex As Long) As Long <br>
使用:<br>
i =GetSysColors(COLOR_ACTIVECAPTION)<br>
'i 是 RGB 值<br>
i = SetSysColors(1, COLOR_ACTIVECAPTION, RGB(255,0,0)) <br>
'把标题设置为红色<br>
<a href="#home">返回</a></p>
<p><a name="tips5"></a><strong>改变墙纸</strong><br>
声明:<br>
Const SPI_SETDESKWALLPAPER = 20<br>
Const SPIF_UPDATEINIFILE = &H1<br>
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<br>
用法:<br>
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, BMP名称,
SPIF_UPDATEINIFILE)<br>
例子:<br>
' 1. 把桌面图片设为 c:\windows\setup.bmp<br>
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
"c:\windows\setup.bmp", SPIF_UPDATEINIFILE)<br>
' 2. 将桌面图片清除<br>
Call SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,
"", SPIF_UPDATEINIFILE)<br>
<a href="#home">返回</a></p>
<p><a name="tips6"></a><strong>动态改变屏幕设置 </strong><br>
Private Declare Function lstrcpy Lib "kernel32"
Alias "lstrcpyA" (lpString1 As Any, lpString2
As Any) As Long<br>
Const CCHDEVICENAME = 32<br>
Const CCHFORMNAME = 32<br>
Private Type DEVMODE<br>
dmDeviceName As String * CCHDEVICENAME<br>
dmSpecVersion As Integer<br>
dmDriverVersion As Integer<br>
dmSize As Integer<br>
dmDriverExtra As Integer<br>
dmFields As Long<br>
dmOrientation As Integer<br>
dmPaperSize As Integer<br>
dmPaperLength As Integer<br>
dmPaperWidth As Integer<br>
dmScale As Integer<br>
dmCopies As Integer<br>
dmDefaultSource As Integer<br>
dmPrintQuality As Integer<br>
dmColor As Integer<br>
dmDuplex As Integer<br>
dmYResolution As Integer<br>
dmTTOption As Integer<br>
dmCollate As Integer<br>
dmFormName As String * CCHFORMNAME<br>
dmUnusedPadding As Integer<br>
dmBitsPerPel As Integer<br>
dmPelsWidth As Long<br>
dmPelsHeight As Long<br>
dmDisplayFlags As Long<br>
dmDisplayFrequency As Long<br>
End Type<br>
Private Declare Function _<br>
ChangeDisplaySettings Lib _<br>
"User32" Alias
"ChangeDisplaySettingsA" (_<br>
ByVal lpDevMode As Long, _<br>
ByVal dwflags As Long) As Long<br>
'函数<br>
Public Function SetDisplayMode(Width As _<br>
Integer,Height As Integer, Color As _<br>
Integer) As Long<br>
Const DM_PELSWIDTH = &H80000<br>
Const DM_PELSHEIGHT = &H100000<br>
Const DM_BITSPERPEL = &H40000<br>
Dim NewDevMode As DEVMODE<br>
Dim pDevmode As Long<br>
With NewDevMode<br>
.dmSize = 122<br>
If Color = -1 Then<br>
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT<br>
Else<br>
.dmFields = DM_PELSWIDTH Or _<br>
DM_PELSHEIGHT Or DM_BITSPERPEL<br>
End If<br>
.dmPelsWidth = Width<br>
.dmPelsHeight = Height<br>
<br>
If Color <> -1 Then<br>
.dmBitsPerPel = Color<br>
End If<br>
End With<br>
pDevmode = lstrcpy(NewDevMode, NewDevMode)<br>
SetDisplayMode = ChangeDisplaySettings(pDevmode, 0)<br>
End Function<br>
例子调用:改变为 640x480x24位: <br>
i = SetDisplayMode(640, 480, 24) <br>
如果成功返回 0 。参见:X059 改变屏幕到16位彩色的演示<br>
<a href="#home">返回</a></p>
<p><a name="tips7"></a><strong>桌面的大小</strong><br>
Type RECT<br>
Left As Long<br>
Top As Long<br>
Right As Long<br>
Bottom As Long<br>
End Type<br>
<br>
Public Const SPI_GETWORKAREA = 48<br>
<br>
Declare Function SystemParametersInfo Lib
"user32" Alias
"SystemParametersInfoA" (ByVal uAction As Long,
ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As
Long) As Long<br>
<br>
Private Sub Command1_Click()<br>
<br>
Dim lRet As Long<br>
Dim apiRECT As RECT<br>
<br>
lRet = SystemParametersInfo(SPI_GETWORKAREA, vbNull,
apiRECT, 0)<br>
<br>
If lRet Then<br>
Print "Left: " & apiRECT.Left<br>
Print "Top: " & apiRECT.Top<br>
Print "Width: " & apiRECT.Right -
apiRECT.Left<br>
Print "Height: " & apiRECT.Bottom -
apiRECT.Top<br>
Else<br>
Print "调用 SystemParametersInfo 失败"<br>
End If<br>
<br>
End Sub<br>
<br>
其他方法:<br>
Sub Command1_Click ()<br>
CR$ = Chr$(13) + Chr$(10)<br>
TWidth% = screen.Width \ screen.TwipsPerPixelX<br>
THeight% = screen.Height \ screen.TwipsPerPixelY<br>
<br>
MsgBox "屏幕大小为" + CR$ + CR$ +
Str$(TWidth%) + " x" + Str$(THeight%), 64,
"Info"<br>
End Sub<br>
<a href="#home">返回</a></p>
<p align="left"><a name="tips8"></a><strong>禁止使用
Alt+F4 关闭窗口</strong><br>
Private Declare Function DeleteMenu Lib
"user32" (ByVal hMenu As Long, ByVal nPosition
As Long, ByVal wFlags As Long) As Long<br>
Private Declare Function GetMenuItemCount Lib
"user32" (ByVal hMenu As Long) As Long<br>
Private Const MF_BYPOSITION = &H400& <br>
<br>
Private Sub Form_Load()<br>
Dim hwndMenu As Long<br>
Dim c As Long<br>
hwndMenu = GetSystemMenu(Me.hwnd, 0)<br>
<br>
c = GetMenuItemCount(hwndMenu)<br>
<br>
DeleteMenu hwndMenu, c - 1, MF_BYPOSITION<br>
<br>
c = GetMenuItemCount(hwndMenu)<br>
DeleteMenu hwndMenu, c - 1, MF_BYPOSITION<br>
<br>
End Sub<br>
<a href="#home">返回</a></p>
</td>
</tr>
</table>
</center></div>
<hr>
<div align="center"><center>
<table border="0" width="88%">
<tr>
<td width="80%"><p align="left"><a
href="vbtips.htm#Return">[1]</a> <a href="vbtips1.htm">[2]</a>
<a href="vbtips2.htm">[3]</a> <a href="vbtips3.htm">[4]</a>
<a href="vbtips4.htm">[5]</a> [6] <a href="vbtips7.htm">[7]</a>
<a href="#home">[8]</a> <a href="vbtips9.htm">[9]</a> <a
href="vbtips10.htm">[10]</a></p>
</td>
<td><p align="right"><font size="2">第六页(共十页)</font></p>
</td>
</tr>
</table>
</center></div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -