将快捷方式的数据结构标记成 GUID 的序列号 这涉及到完全了解快捷方式,其实看看 ms office 安装后生成的快捷方式就知道了 那种快捷方式与普通的快捷方式图标稍有不同,不同之处在于快捷方式内部标记目标程序的方法上次我做到一半就停了,没继续下去
假如你要运行的程序是ABC 在C:\下创建一个快捷方式指向ABC 生成一个VB程序,将此程序的图标设置成你指定的图标。代码写下面的内容: Private Sub Form_Load() shell("c:\指向ABC的快捷方式.url") end End Sub 然后将生成的程序直接放到桌面上.缺点是后缀必须是.exe,但可以设置资源管理器不显示后缀。
更正:上贴中的‘c:\指向ABC的快捷方式.url’应该是‘c:\指向ABC的快捷方式.lnk’
Dim strCmd As String strCmd = "reg delete HKEY_CLASSES_ROOT\lnkfile /v IsShortcut /f" Shell strCmd, vbHide
创建下面两个REG文件,双击导入后刷新桌面就OK了~~~ 第一个,把“D:\\原创工具\\ASM_IDE.exe”修改成你的EXE的路径(保存为a.reg).... Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}] @="ASM_IDE"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\DefaultIcon] @="D:\\原创工具\\ASM_IDE.exe,0"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\Open][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\Open\Command] @="D:\\原创工具\\ASM_IDE.exe"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\属性(&R)][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\属性(&R)\Command] @="rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\ShellFolder] "Attributes"=hex:00,00,00,00第二个(保存为b.reg): Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}] @="ASM_IDE"另外请LZ特别注意,这里面的GUID"{34804132-BBAE-40C5-8B9C-E79A0CD7595F}"是我用CoCreateGuid和StringFromGUID2两个函数生成的,每个GUID只能对应一个快捷方式,要创建N个这样的快捷方式就要生成N个GUID,并且在上面两个REG文件里面修改相应的值。下面是获取GUID的代码:Option Explicit 'By TZWSOHO Private Type Guid Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End TypePrivate Declare Function CoCreateGuid Lib "ole32.dll" (ByRef pguid As Guid) As Long Private Declare Function StringFromGUID2 Lib "ole32.dll" (ByVal rguid As Long, ByVal lpsz As String, ByVal cchMax As Long) As LongPrivate Sub Command1_Click() Dim GD As Guid, sGUID As String * 76 CoCreateGuid GD: StringFromGUID2 VarPtr(GD), sGUID, Len(sGUID) Debug.Print StrConv(sGUID, vbFromUnicode) End Sub
这涉及到完全了解快捷方式,其实看看 ms office 安装后生成的快捷方式就知道了
那种快捷方式与普通的快捷方式图标稍有不同,不同之处在于快捷方式内部标记目标程序的方法上次我做到一半就停了,没继续下去
在C:\下创建一个快捷方式指向ABC
生成一个VB程序,将此程序的图标设置成你指定的图标。代码写下面的内容:
Private Sub Form_Load()
shell("c:\指向ABC的快捷方式.url")
end
End Sub
然后将生成的程序直接放到桌面上.缺点是后缀必须是.exe,但可以设置资源管理器不显示后缀。
strCmd = "reg delete HKEY_CLASSES_ROOT\lnkfile /v IsShortcut /f"
Shell strCmd, vbHide
;删除快捷方式的箭头
[HKEY_CLASSES_ROOT\lnkfile]
"IsShortcut"=-[HKEY_CLASSES_ROOT\piffile]
"IsShortcut"=-
注册表里我这么做是可以的~~
第一个,把“D:\\原创工具\\ASM_IDE.exe”修改成你的EXE的路径(保存为a.reg)....
Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}]
@="ASM_IDE"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\DefaultIcon]
@="D:\\原创工具\\ASM_IDE.exe,0"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\Open][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\Open\Command]
@="D:\\原创工具\\ASM_IDE.exe"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\属性(&R)][HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\Shell\属性(&R)\Command]
@="rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0"[HKEY_CLASSES_ROOT\CLSID\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}\ShellFolder]
"Attributes"=hex:00,00,00,00第二个(保存为b.reg):
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{34804132-BBAE-40C5-8B9C-E79A0CD7595F}]
@="ASM_IDE"另外请LZ特别注意,这里面的GUID"{34804132-BBAE-40C5-8B9C-E79A0CD7595F}"是我用CoCreateGuid和StringFromGUID2两个函数生成的,每个GUID只能对应一个快捷方式,要创建N个这样的快捷方式就要生成N个GUID,并且在上面两个REG文件里面修改相应的值。下面是获取GUID的代码:Option Explicit
'By TZWSOHO
Private Type Guid
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End TypePrivate Declare Function CoCreateGuid Lib "ole32.dll" (ByRef pguid As Guid) As Long
Private Declare Function StringFromGUID2 Lib "ole32.dll" (ByVal rguid As Long, ByVal lpsz As String, ByVal cchMax As Long) As LongPrivate Sub Command1_Click()
Dim GD As Guid, sGUID As String * 76
CoCreateGuid GD: StringFromGUID2 VarPtr(GD), sGUID, Len(sGUID)
Debug.Print StrConv(sGUID, vbFromUnicode)
End Sub
a.reg中
@="ASM_IDE" 改成 @="myie"
D:\\原创工具\\ASM_IDE.exe 改成 C:\Program Files\Internet Explorer\iexplore.exe代码是这样的:
a.regWindows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}]
@="myie"[HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\DefaultIcon]
@="C:\Program Files\Internet Explorer\iexplore.exe,0"[HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\Shell][HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\Shell\Open][HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\Shell\Open\Command]
@="C:\Program Files\Internet Explorer\iexplore.exe"[HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\Shell\属性(&R)][HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\Shell\属性(&R)\Command]
@="rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0"[HKEY_CLASSES_ROOT\CLSID\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}\ShellFolder]
"Attributes"=hex:00,00,00,00
b.regWindows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{65ABDA8A-BB16-431A-9821-925C3F8F6EB4}]
@="myie"
这样导入后,桌面生成一个myie的文件夹图标,双击打开提示:该文件没有程序与之关联...,无法打开
右击“属性”是正常的
问题1:不是自动生成快捷程序的图标
问题2:不能打开希望指导一下,谢谢!!