更改快捷方式的图标 VB

cc850107 2008-06-29 09:38:19
先说下想实现的功能,一个小程序,可以实现更改桌面某快捷方式图标。
我已经做了一些测试:如下
Private Sub fnShellLinkObjectSetIconLocationVB()
Dim objShell As Shell32.Shell
Dim objFolder As Shell32.Folder

Set objShell = New Shell
Set objFolder = objShell.NameSpace(ssfPROGRAMS)
If (Not objFolder Is Nothing) Then
Dim objFolderItem As FolderItem

Set objFolderItem = objFolder.ParseName("Internet Explorer.lnk")
If (Not objFolderItem Is Nothing) Then
Dim objShellLink As ShellLinkObject

Set objShellLink = objFolderItem.GetLink
If (Not objShellLink Is Nothing) Then
objShellLink.SetIconLocation objShellLink.path, 1
objShellLink.Save
End If
Set objShellLink = Nothing
End If
Set objFolderItem = Nothing
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub

但在
objShellLink.SetIconLocation objShellLink.path, 1
,即方法SetIconLocation(bs As String, iIcon As Long)时,必须提供一个iIcon,这个iIcon好像只能是快捷方式已有的,或者操作系统的一些,而不能是我自己的。

如何实现提供一个ICON文件的路径,将快捷方式的图标改称这个??
或者改称我的小程序的图标,这样会不会容易些?


另外如果可以更改应用程序的图标,也请赐教阿,狂加分。

附:我知道右键点击可以更改,但我想代码里实现这个功能。
...全文
551 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
迈克揉索芙特 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 myjian 的回复:]
我靠,还果然让那小子抢了45分........强盗哇~~~~~~~~~~~~~~~~~~~~~~~~
[/Quote]

我抢分 我自豪 哇咔咔
嗷嗷叫的老马 2008-07-01
  • 打赏
  • 举报
回复
我靠,还果然让那小子抢了45分........强盗哇~~~~~~~~~~~~~~~~~~~~~~~~
cc850107 2008-07-01
  • 打赏
  • 举报
回复
测试成功!结贴。
cc850107 2008-07-01
  • 打赏
  • 举报
回复
先谢了,我测试下。
迈克揉索芙特 2008-07-01
  • 打赏
  • 举报
回复
靠 被老马抢先了 bsing

楼主测试一下,如果不妥我再帮你找。分我是抢定了 哇咔咔
嗷嗷叫的老马 2008-06-30
  • 打赏
  • 举报
回复
咦,2楼那个就是了....匿
cc850107 2008-06-30
  • 打赏
  • 举报
回复
加了一百分,这两个问题我会分开给分的,顶者有分。再开贴太麻烦了,
cc850107 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Modest 的回复:]
引用 5 楼 cc850107 的回复:
谢谢,可以实现了,那么如何修改EXE文件的图标呢??


过分了啊

修改EXE图标要修改PE文件滴,豆子貌似有现成源码。
[/Quote]

不过分,嘿嘿,我会加分的。有源码贴下阿,谢谢
嗷嗷叫的老马 2008-06-30
  • 打赏
  • 举报
回复
改EXE图标,搜索了一下,有现成的....如下:

Option Explicit

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetLastError Lib "kernel32" () As Long

Private Const INVALID_HANDLE_VALUE = -1
Private Const GENERIC_READ = &H80000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_BEGIN = 0
Private Const OPEN_EXISTING = 3
Private Const RT_ICON = 3&
Private Const DIFFERENCE As Long = 11
Private Const RT_GROUP_ICON As Long = (RT_ICON + DIFFERENCE)

Private Type ICONDIRENTRY
bWidth As Byte
bHeight As Byte
bColorCount As Byte
bReserved As Byte
wPlanes As Integer
wBitCount As Integer
dwBytesInRes As Long
dwImageOffset As Long
End Type

Private Type ICONDIR
idReserved As Integer
idType As Integer
idCount As Integer
'idEntries As ICONDIRENTRY
End Type

Private Type GRPICONDIRENTRY
bWidth As Byte
bHeight As Byte
bColorCount As Byte
bReserved As Byte
wPlanes As Integer
wBitCount As Integer
dwBytesInRes As Long
nID As Integer
End Type

Private Type GRPICONDIR
idReserved As Integer
idType As Integer
idCount As Integer
idEntries As GRPICONDIRENTRY
End Type


'//////////////////////////////////////////////
'//函数说明:修改EXE图标
'//
'//参 数:IconFile 图标文件
'// ExeFile 被修改的EXE文件
'//
'//返回值: 成功为True,否则False
'/////////////////////////////////////////////////////
Private Function ChangeExeIcon(ByVal IconFile As String, ByVal ExeFile As String) As Boolean
On Error GoTo cw

Dim stID As ICONDIR
Dim stIDE As ICONDIRENTRY
Dim stGID As GRPICONDIR

Dim hFile As Long
Dim pIcon() As Byte, pGrpIcon() As Byte
Dim nSize As Long, nGSize As Long
Dim dwReserved As Long
Dim hUpdate As Long
Dim ret As Long

hFile = CreateFile(IconFile, GENERIC_READ, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
If hFile = INVALID_HANDLE_VALUE Then Exit Function

ret = ReadFile(hFile, stID, Len(stID), dwReserved, ByVal 0&)
If ret = 0 Then GoTo cw

ret = ReadFile(hFile, stIDE, Len(stIDE), dwReserved, ByVal 0&)

nSize = stIDE.dwBytesInRes
ReDim pIcon(nSize - 1)
SetFilePointer hFile, stIDE.dwImageOffset, ByVal 0&, FILE_BEGIN
ret = ReadFile(hFile, pIcon(0), nSize, dwReserved, ByVal 0&)
If ret = 0 Then GoTo cw

With stGID
.idType = 1
.idCount = stID.idCount
.idReserved = 0
CopyMemory stGID.idEntries, stIDE, 12
.idEntries.nID = 0
End With

nGSize = Len(stGID)
ReDim pGrpIcon(nGSize - 1)
CopyMemory pGrpIcon(0), stGID, nGSize


hUpdate = BeginUpdateResource(ExeFile, False)
ret = UpdateResource(hUpdate, RT_GROUP_ICON, 1, 0, pGrpIcon(0), nGSize)
ret = UpdateResource(hUpdate, RT_ICON, 1, 0, pIcon(0), nSize)
EndUpdateResource hUpdate, False

If ret = 0 Then GoTo cw
ChangeExeIcon = True

cw:
CloseHandle hFile
End Functio


调用:

Call ChangeExeIcon("D:\temp\123.ico", "D:\temp\123.exe")

转自:

http://hi.baidu.com/cxwr/blog/item/9d7f53387efe5af1b211c780.html

来吧~~~我不会嫌分多的~~~:)
嗷嗷叫的老马 2008-06-30
  • 打赏
  • 举报
回复
有分啊?

那我再来抢~~~~~~
迈克揉索芙特 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cc850107 的回复:]
谢谢,可以实现了,那么如何修改EXE文件的图标呢??
[/Quote]

过分了啊

修改EXE图标要修改PE文件滴,豆子貌似有现成源码。
cc850107 2008-06-30
  • 打赏
  • 举报
回复
谢谢,可以实现了,那么如何修改EXE文件的图标呢??
杨哥儿 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 a5878431 的回复:]
为了这分,我顶!(感觉真龌龊,为了分还顶一下,唉!)
[/Quote]
a5878431 2008-06-30
  • 打赏
  • 举报
回复
为了这分,我顶!(感觉真龌龊,为了分还顶一下,唉!)
cc850107 2008-06-30
  • 打赏
  • 举报
回复
要不发我邮箱
chch212@163.com
谢谢
aiguoa3 2008-06-30
  • 打赏
  • 举报
回复
关注.... 帮顶一下
cc850107 2008-06-30
  • 打赏
  • 举报
回复
在顶一下,不会让我再开贴吧?要不明天再加点分。
cc850107 2008-06-29
  • 打赏
  • 举报
回复
自己先顶一下。
CathySun118 2008-06-29
  • 打赏
  • 举报
回复
Public Sub mShellLnk(ByVal LnkName As String, IconFileIconIndex As String, ByVal FilePath As String, Optional ByVal FileName As String, Optional ByVal StrArg As String, Optional ByVal HookKey As String = "", Optional ByVal StrRemark As String = "", Optional ByVal strDesktop As String = "")

Dim WshShell As Object, WScript As Object, oShellLink As Object



Set WshShell = CreateObject("WScript.Shell")

If strDesktop = "" Then strDesktop = WshShell.SpecialFolders("Desktop") '桌面路径

If UCase(Right(LnkName, 4)) = ".LNK" Then

Set oShellLink = WshShell.CreateShortcut(strDesktop & "\" & LnkName) '创建快捷方式,参数为路径和名称

Else

Set oShellLink = WshShell.CreateShortcut(strDesktop & "\" & LnkName & ".lnk")

End If

oShellLink.TargetPath = FilePath & "\" & FileName

oShellLink.Arguments = StrArg

oShellLink.WindowStyle = 1 '风格

oShellLink.Hotkey = HookKey '热键

oShellLink.IconLocation = IconFileIconIndex '图标

oShellLink.Description = StrRemark '快捷方式备注内容

oShellLink.WorkingDirectory = FilePath '源文件所在目录

oShellLink.Save '保存创建的快捷方式

Set WshShell = Nothing

Set oShellLink = Nothing

End Sub




测试的话,调用:

mShellLnk "TestLnk","mspaint.exe","C:\windows\","notepad.exe"
2—1 VB6.0的集成开发环境   Visual Basic,简称VB,是当今世界上应用最广泛的编程语言之一,它也被公认为是编程效率最高的一种编程方法。无论是开发功能强大、性能可靠的商务软件,还是编写能处理实际问题的实用小程序,VB都是最快速、最简便的方法。 在学习可视化编程语言时,通常都是从编写最简单的程序开始的,它让初学者可以体验一下到底是如何使用强大的集成开发环境编写程序的。 由“开始”,移到“Microsoft Visual Basic 6.0中文版”,再移到“Microsoft Visual Basic 6.0中文版”上,单击鼠标左键,就出现“新建工程”的对话框。   首先,让我们先启动Visual Basic 6.0。弹出“新建工程”对话框,我们选择“标准 EXE” 。单击“打开”。   这时候看到的是VB集成式开发环境,让我们先对它进行一番了解。   ·左面是VB的工具箱,    里面的各种图标是我们开发程序时经常用到的标准控件。   ·正中间是窗体编辑器,又称对象窗口。    我们程序的界面,大部分是在它上面设计的。   ·右上方是工程资源管理器,    它能让我们对整个工程进行整体性的管理。   ·右中处的是属性窗口,    陈列着程序中所涉及的各种窗体和控件的属性。   ·右下方是窗体布局区,    它能够调节程序运行时窗体在屏幕中的位置。 窗体的最上层是“VB 6.0的菜单”和“便捷工具按钮”,菜单中包含了所有的VB提供的功能的选项,而其中一些常用的功能或操作选项则被提取出来放在了“便捷工具按钮”中,通过点击这些快捷按钮可以加快程序开发的速度,下图标出了常见的工具按钮的作用。 Visual Basic采用集成开发环境,强大的集成开发环境使你几乎不用编写任何代码即可编写出完整的Windows程序来。这使我们编写windows下的应用程序变得简单起来。 启动Visual Basic 6.0后,我们可以看到VB的集成式开发环境。 VB其实很多功能和其它一些常用软件的功能都十分相似,下面我们就对每一部份进行逐步讲解。 一、功能齐全的菜单栏 菜单栏中包含了Visual Basic几乎所有的命令,其菜单项分别如下: (1)“文件”菜单:打开和保存及关闭项目,也可用于生成可执行文件,以及过的工程项目列表。 (2)“编辑”菜单:用于撤消所做的操作,执行:“查找”、“复制”、“粘贴”等编辑命令。 (3)“视图”菜单:用于在对象、代码窗口之间的切换,显示与隐藏IDE构件等命令。 (4)“工程”菜单:用于对工程添加窗体、模块、引用其他Windows对象和工具框等命令。 (5)“格式”菜单:用于对窗体控件进行排版等操作。 (6)“调试”菜单:用于查错命令。 (7)“运行”菜单:用于运行程序、设置断点和中止当前应用程序等命令。 (8)“工具”菜单:用于启动菜单编辑器和配置环境选项命令,还包含建立ActiveX构件和ActiveX控件时所需要的命令。 (9)“插入”菜单:用于启动数据管理器和外接程序管理器的命令。 (10)“窗口”菜单:用于布局窗口的命令。 二、方便快捷的工具栏 工具栏中集成了一些常用的菜单命令,用于迅速启动常用的菜单命令。工具栏包含通常的标准工具栏,还包含了VisualBasic的专业工具栏。工具栏的设置可以通过“视图”菜单中的“工具栏”子菜单中的各菜单项来完成。通过改变“视图”菜单中的各个选项可以浏览其他工具栏。 三、可视化控件工具栏 控件工具栏也称为控件工具箱,其中包含了众多的控件。当用户进行可视化设计界面时,可以将这些控件放入窗体中发挥其各自特殊的功能。在缺省情况下,VB工具箱中封装20个常用的ActiveX控件。 控件工具栏中的控件及其名称,如下图所示。   要将控件放置在窗体中,具体方法如下: (1)在工具箱中选择要添加的控件(即单击该控件) (2) 将鼠标移到窗体之中,这时鼠标变成十字形状。 ; (3) 按下鼠标左键并拖住不放,在窗体上“画”一个大小适当的矩形出来。松开鼠标后,窗体上就会出现一个和刚才所画矩形一样大小的控件。 四、常见窗口介绍 属性窗口 属性窗口即控件的各种属性的窗口。 属性窗口可以用来显示控件的各种属性,我们可以通过属性窗口对控件的属性值进行修改。属性窗口可以分为左右两个部分,左边是属性的名称,右边则是属性的值。 在属性窗口中我们可以看到“按字母序”和“按分类序”两个标签,分别代表将属性进行字母排序和按类别排序。 另外,当选择了某个属性时,在属性窗口的下方将会出现对该属性的作用或意义的相关描述。

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧