金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 技巧实践 >> 文章详情
用VB6实现隐藏和显示“程序”

王永耀 赛迪网-中国计算机报 2001-10-20


  很多系统安全软件如“超级兔子”、“系统优化大师”等,都有一项很酷的功能,就是能够自由隐藏和显示“开始”选单中“程序”各项的功能。假如在我们的程序中也能实现这样的功能,是不是会为程序添色不少呢?其实,我们用VB可以轻松实现这样的功能。

  实现方法

 
  其中最重要的一点就是:在Win 98中,“程序”项的显示和隐藏可以通过改变c:WindowsStart Menuprograms(注:这里假设您的Windows安装在c盘)文件夹下各文件或文件夹的属性来实现。要隐藏“程序”中的项目,只要相应的文件或文件夹属性设成“隐藏”;要显示项目,也只要去掉相应对象的“隐藏”属性即可。那么,怎样控制文件的属性呢?在VB中,API函数有很重要的作用,可以实现很多强大的功能。其中,GetFileAttributes函数可以得到文件的属性、SetFileAttributes函数可以更改文件属性、GetWindowsDirectory函数可以得到系统目录,有了这三个API“法宝”坐镇,程序实现就很容易了。当程序启动时调用GetWindowsDirectory函数得到系统目录的路径,再用Dir函数在一个列表框中列出“系统目录 Start Menu programs”目录下的所有文件和文件夹,并调用GetFileAttributes函数来获得各文件和文件夹的属性,若属性为“隐藏”,就把相应的列表项勾选(表示此项已隐藏)。在列表框中勾选你想要隐藏的项目,接着调用SetFileAttributes函数,将勾选项相应的文件或文件夹的属性改为“隐藏”(表示将其隐藏),去掉未勾选项相应的文件或文件夹的“隐藏”属性。这样,一切就搞定了。

  程序代码及讲解

  首先新建一个Project工程,并在Form1中建立一个列表框list1,其style属性为:Checkbox(复选框式样);四个命令按钮:command1、command2、command3和command4。界面布局如图所示。

  具体程序代码如下:

  'declarations部分,声明API函数

  Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpfilename As String) As Long

  Private Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpfilename As String, ByVal dwFileAttributes As Long) As Long

  Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nsize As Long) As Long

  '声明变量

  Dim i As Integer

  Dim lngpath As Long

  Dim tmppath As String

  Dim strpath As String

  Dim strdir As String

  '定义子过程1,用于显示“程序”选单各项,并确定是否已经隐藏

  Sub getfileattr()

   i = 0

   tmppath = Space(50)

   lngpath = GetWindowsDirectory(tmppath, Len(tmppath))

   strpath = Left(tmppath, lngpath) && "Start MenuPrograms" 

  'programs路径

   strdir = Dir(strpath, vbDirectory + vbNormal + vbHidden + vbArchive + vbReadOnly + vbSystem) 

  '将所有程序项目添加到列表框中

   Do While strdir<>""

   If strdir<>"." And strdir<>".." Then

   List1.AddItem strdir

   i = i + 1

   If (GetFileAttributes(strpath && strdir) And vbHidden) Then 

  '得到文件或文件夹属性,若为隐藏则勾选

   List1.Selected(i - 1) = True

   End If

   End If

   strdir = Dir 

   Loop 

  '下一个文件或路径

  End Sub

  '定义子过程2

  Sub setfileattr()

  tmppath = Space(50)

   lngpath = GetWindowsDirectory(tmppath, Len(tmppath))

   strpath = Left(tmppath, lngpath) && "Start MenuPrograms" 

   '得到“programs”路径

   For i = 0 To (List1.ListCount - 1)

   If List1.Selected(i) = True Then 

  '勾选则隐藏,反之则显示

   SetFileAttributes strpath + List1.List(i), vbHidden 

   Else

   SetFileAttributes strpath + List1.List(i), vbNormal

   End If

   Next i

  End Sub

  Private Sub Command1_Click()

   Call setfileattr 

  '调用子过程2改变文件属性

  End Sub

  Private Sub Command2_Click()

  End 

  End Sub

  Private Sub Command3_Click()

  For i = 0 To List1.ListCount - 1 

  '全选

  List1.Selected(i) = True

  Next i

  End Sub

  Private Sub Command4_Click()

  For i = 0 To List1.ListCount - 1 

  '全否

  List1.Selected(i) = False

  Next i

  End Sub

  Private Sub Form_Load()

  Form1.Caption = "隐藏和显示程序选单"

  Command1.Caption = "确定"

  Command2.Caption = "退出"

  Command3.Caption = "全选"

  Command4.Caption = "全否"

  Call getfileattr 

  '调用子过程1,得到文件属性并初始化列表框各项

  End Sub

  按F5运行后,程序下的文件和文件夹会一个不漏地显示在列表框里,再勾选几个,按“确认”,打开“开始选单”的“程序”,刚才勾选的几个不见了。再次运行程序,看看列表框里,是不是刚才勾选的现在依然勾选着呢?那就是告诉你,“程序”选单中已经隐藏了这些项。通过修改文件属性还可以完成许多的功能,如管理“发送”(send to)、“收藏夹”(favorites)等,就看你如何灵活运用了。

  以上程序在Windows 98、VB 6.0企业版下调试通过。





  发表评论 写信给编辑 关闭窗口
同栏目内容
· 让你的电脑启动画面绚起来 2007-09-12
· 小技巧帮大忙 极点五笔 2007-09-05
· 如何提高迅雷的下载速度? 2007-09-03
· Vista小技巧 消除红眼 2007-09-03
· 千千静听实用小功能 2007-08-29
· 四大妙招帮你成功的隐藏文件 2007-08-20
相关内容
近期主推
我国首架自主产权飞机完成
·我国首架自主产权飞机完成
·机器人版"千手观音"惊艳亮相
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
近期热门
科学家解开中子星爆发之谜
·科学家解开中子星爆发之谜
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
近期焦点
美国发现极其罕见的白化银鲛(图)
·美国发现极其罕见的白化银鲛(图)
·美国展出罕见连体双胎双头龟
·波罗的海发现罕见短吻真海豚
·能帮你做大扫除的机器人[组图]
·法老墓3000年前坚果保存完好
·广西发现罕见溶洞钟乳石有30万年
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号