主题:偷天换日,win7用自定义图标替代快捷方式上的小箭头(附vb代码)
偷天换日,win7用自定义图标替代快捷方式上的小箭头(附vb代码)
win7桌面快捷方式的图标左下角默认都有一个小箭头,看起来不爽,于是大家纷纷想法子去除这个小箭头。最常用的方法是删除注册表的“IsShortcut”项值。这个项值在注册表中有多处,代表着不同的快捷方式, 如应用程序的快捷方式、DOS的快捷方式、Internet的快捷方式等。我看到此类文章中几乎众口一词地说“IsShortcut”项值用来控制是否显示快捷方式中的小箭头,其实并非如此。“Shortcut”这个英文单词是快捷的意思,而“Is”在VB6中是测试语句的前缀,如:“IsArray”测试变量是否为一个数组,“IsDate”测试一个表达式是否可以转换成日期,等等。所以,“IsShortcut”实际上是测试该图标是否快捷方式。如果删除这个项值,那么系统就不能确定该图标是一个快捷方式,由此可能会造成:不能用超级任务栏、开始菜单游戏打不开、右键“计算机管理”打不开…等等弊病。
系统在显示桌面图标时,如果是快捷方式,采用的是合成图标的方法,就是将文件本身的图标与系统文件SHELL32.dll中的29号图标合起来,而29号图标就是那个臭名昭著的小箭头。SHELL32.dll是系统图标库之一(还有imageres.dll和moricons.dll等),里面集成了306个图标,你可以在任一文件夹上点击右键,然后属性→自定义→更改图标,就可观赏到这个文件中所有的图标。图标从0号开始计数,再从上至下、从左至右排号,可以发现49—52号是空白图标。于是有人想出来完美去除小箭头的办法:修改注册表,用空白图标替代29号图标(见后面的代码),这样就皆大欢喜,既去除了小箭头又无“打不开”之虞。
进一步思索,现在不是追求个性化吗,那么用自定义的图标替代小箭头,不是更有特色吗?想干就干,实验了几次,果然获得了成功!用图标制作软件(推荐“王牌图标大师”,可到163信箱去下载,帐号是:vb62013,密码是:vb620132013)新建一个32像素图标,背景为单一颜色,在左下角11×11(当然也可以为16×16,再大就有点喧宾夺主了)像素范围内绘制图形,把背景色设置为透明色(这一点很重要,否则背景色会覆盖主图标),保存,就可以了。以后你随时可以更换这个图标,而不用修改注册表。
新建一个窗体,画上3个按纽,设置为控件数组,3个按纽的标题分别是:去除小箭头、自定义、恢复小箭头。代码如下:
Option Explicit
Dim ws
Dim st As String, zt As String
Private Sub Form_Load()
Set ws = CreateObject("wscript.shell")
End Sub
Private Sub Command_Click(Index As Integer)
On Error GoTo 100
st = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons\"
Select Case Index
Case 0
zt = Environ("SystemRoot") & "\System32\shell32.dll,51" '49-52号图标均为空白,29号图标为小箭头
ws.regwrite st & "29", zt '新建“Shell Icons”子键和“29”项值,并写入zt数据
Case 1
zt = "F:\图标库\100.ico" '自定义图标的全路径文件名
ws.regwrite st & "29", zt
Case 2
ws.regDelete st '删除“Shell Icons”子键
End Select
MsgBox "操作成功!"
100
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set ws = Nothing
End Sub
提示:本代码在32位win7旗舰版通过,操作以后要注销或重启才能生效。