VB 版 (精华区)
发信人: Sun (大灯泡), 信区: VisualBasic
标 题: VB编程技巧三则
发信站: 哈工大紫丁香 (Sat Sep 4 16:52:00 1999), 转信
潘凡
如何隐藏win 95/98任务栏
Windows大部分部件都是一个一个的窗口,任务栏也一样,是个特殊的窗口,我们只
要找到这个窗口对其操作即可实现隐藏它的目的。寻找窗口,需要使用Window API
函数FindWindow。这个函数的原型如下:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
参数说明如下:
lpClassName:窗口的类名;
lpWindowName:窗口名称,即窗口的标题。
任务栏是一个特殊的窗口,类名是:“Shell—TrayWnd”。要找到这个窗口只需执
行下列语句:
hWnd=FindWindow("Shell—TrayWnd",vbNullString)
要隐藏一个窗口,可以使用Win32函数:
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal
nCmdShow As Long) As Long
hWnd是要处理的窗口句柄,nCmdShow是一个命令标志,当它是 SW—HIDE常数
时,会隐藏该窗口,如果要重新显示窗口,只需使用SW—SHOW常数即可。
好了,聪明的你现在明白如何隐藏和显示任务栏了吧?
下面是一个例子(注:为避免骗取稿费之嫌,相应的Win32函数声明,常数就略去了,
你可以使用API文本查看器获得):
Sub HideTask(bF As Boolean)
Dim hWnd As Long
hWnd = FindWindow("Shell—TrayWnd", vbNullString)
If bF Then
ShowWindow hWnd, SW—SHOW
Else
ShowWindow hWnd, SW—HIDE
End If
End Sub
如何去掉开始按钮
上面咱们说到,Win 95大部分部件都是窗口,“开始”按钮也是,不过呢,它属于任务
栏的子窗口,而且没有名字(标题),所以直接用FindWindow不好找到,那怎么办呢?要
使用另一个查找窗口函数:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA"
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2
As String) As Long
这是FindWindow的增进版本,参数说明如下:
hWnd1:父窗口的句柄;
hWnd2:子窗口的句柄,表示从哪个子窗口开始查找;
lpsz1:要找的子窗口的类名;
lpsz2:要找的子窗口的标题。
哦,忘了告诉你,“开始”的类名是“Button”,标准的按钮类,标题是空。这里需
要提醒的是,在向Win32传递参数时,如果是空字符串,不能使用VB的空串标志"",而
必须使用常量vbNullString,否则会折腾半天也没有结果的。
好了,下面是隐藏开始按钮的例子:
Function HideStart(bF As Boolean)
Dim hWnd As Long
Dim hStart As Long
′找到任务栏
hWnd = FindWindow("Shell—TrayWnd", vbNullString)
′在任务栏中查找开始按钮
hStart = FindWindowEx(hWnd, 0, "Button", vbNullString)
If bF Then
′恢复显示开始按钮
ShowWindow hStart, SW—SHOW
Else
′隐藏开始按钮
ShowWindow hStart, SW—HIDE
End If
End Function
屏蔽Win 95的Ctrl+Alt+Del键
诸位是否注意到,虽然我们现在已经隐藏了开始按钮,但是如果你有Win 95键盘的
话,按下Windows键,仍然会弹出开始选单,哎,这未免有些不太干净,所以,现在我
们来做一下善后工作,把开始选单也屏蔽掉。
好了,现在要使用一个Win32函数
Private Declare Function SystemParametersInfo Lib "user32" Alias
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long,
lpvParam As Any, ByVal fuWinIni As Long) As Long
参数说明:
uAction:标明要执行的命令;
uParam、lpvParam:执行该命令的辅助参数;
fuWinIni:是否更新配置文件。
这个函数很复杂,用于收集和设置Win 95的一些系统参数,不过现在我们只需使用其
中的2个。当uAction是SPI—SETFASTTASKSWITCH常量或者另一个SPI—
SCREENSAVERRUNNING常量时,表示设置是否允许Alt+Tab 、Ctr+Esc、Ctrl
+Alt+Del。这个函数用法如下:
Sub DisableCAD1(bF As Boolean)
Call SystemParametersInfo(SPI—SCREENSAVERRUNNING, bF, bF, 0)
End Sub
Sub DisableCAD2(bF As Boolean)
Call SystemParametersInfo(SPI—SETFASTTASKSWITCH, bF, bF, 0)
End Sub
现在大功告成了,你可以写一个小程序屏蔽掉开始按钮,看看别人的反映如何?
--
〖小糊涂虫2000灌水机〗
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: sun@hope.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.055毫秒