当前位置:编程学习 > VB >>

vb怎么取得桌面快捷方式的路径?特别是没有“目标”,“起始位置”只有一个目录而不是exe的那种

vb怎么取得桌面快捷方式的路径?特别是“目标”没有exe名字,“起始位置”只有一个目录而不是exe的那种
请教请教! --------------------编程问答-------------------- "“目标”没有exe名字,“起始位置”只有一个目录而不是exe的那种"只不过是设置了一个标志位,让Explorer隐藏了而已。

你用二进制方式打开lnk照样可以读取。 --------------------编程问答-------------------- 二进制方式
==请问大侠:您说这个“二进制方式”是怎么打开?我使用UE打开那个快捷方式(我是先打开UE,然后拖那个桌面快捷方式到UE,但是看到的应该是指向的exe的东东) --------------------编程问答-------------------- 首先用 ren xxx.lnk xxx.bin 改名
然后再UE打开。 --------------------编程问答-------------------- 没看懂啥意思 --------------------编程问答--------------------
引用 4 楼 WallesCai 的回复:
没看懂啥意思


就是你安装了IE office 的软件后,生成的快捷方式都是不能看到目标位置的,查找目标也是不能按的 
--------------------编程问答-------------------- UE 有个选项:打开快捷方式文件,而不是快捷方式指向的文件
选上它就能直接查看 .lnk 文件了。 --------------------编程问答-------------------- 谢谢caozhy斑竹大侠,sosoben、Tiger_zhao等大侠,祝大家新年快乐幸福!

将lnk文件改成bin文件,我测试了,要是快捷方式属性“目标”没有指向exe文件名称,那么使用UE(先打开UE,然后鼠标将快捷方式拉进去),就可以看到这样的内容:
[InternetShortcut]
URL=C:\Program Files\wyxl\weba\weba.url
Hotkey=0
IconIndex=0
IconFile=
WorkingDirectory=
ShowCommand=1

但是,要是“目标”有指向的exe名称,那么鼠标拉这个快捷方式就打开很多的内容,我保存看看,进入有差不多10M,所以这个技巧在编程中好像不怎么容易操作。


现在我的问题重新总结一下,发在http://bbs.csdn.net/topics/390331204
请各位大侠移步帮帮忙,搞定了2贴一起结贴,谢谢先!
--------------------编程问答-------------------- Google: .lnk 文件结构
资料多得很 --------------------编程问答-------------------- 谢谢大侠的指点!
但是我这个问题现在归结为,找到注册表“{55296A90-A5FA-418F-98D9-231426AD3A7B}”,并读出DisplayName和InstallLocation这两个值。

现在找到注册表“{55296A90-A5FA-418F-98D9-231426AD3A7B}”这个代码我有了,但是如何读出下面的DisplayName和InstallLocation这两个值?谢谢先 --------------------编程问答-------------------- Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, _
ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
'Download by http://www.codefans.net
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, _
ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long

Private Declare Function RegEnumValueAsAny2 Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, _
lpValueName As Any, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegEnumValueAsAny Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, _
ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function ExpandEnvironmentStrings Lib "kernel32" Alias "ExpandEnvironmentStringsA" (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Long) As Long


Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long


Private Const HKEY_USERS = &H80000003
Private Const REG_SZ = 1

Dim arrSubKeys() As String * 255
Private Sub Command1_Click()
List1.Clear
'枚举子键
Dim SubkeyIndex As Long, SubKeyName As String, LenSubKeyName As Long   '声明变量类型
SubKeyName = String(255, Chr(0))   ' 分配大小
LenSubKeyName = 255
Dim RegHwnd As Long
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", RegHwnd   ' 返回子键的句柄
ret = RegEnumKey(RegHwnd, SubkeyIndex, SubKeyName, LenSubKeyName)
While ret = 0   ' 如果返回成功,表明这个主键存在
  LenSubKeyName = 255   ' 初始大小
  SubKeyName = String(255, Chr(0))   ' 初始大小
  ret = RegEnumKey(RegHwnd, SubkeyIndex, SubKeyName, LenSubKeyName)
  'If InStr(SubKeyName, "{") Then GoTo NOadd:      '以"{"开头是系统更新文件
  'If Left(SubKeyName, 2) = "KB" Then GoTo NOadd:
  If InStr(SubKeyName, "{55296A90-A5FA-418F-98D9-231426AD3A7B}") Then
     Dim ret1 As Long
     Dim RegHwnd1 As Long
     Dim LenData2 As Long
     Dim RegType As Long
     Dim SubKey1 As String
     SubKey1 = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & Left(SubKeyName, InStr(SubKeyName, Chr(0)))
     RegOpenKey HKEY_LOCAL_MACHINE, SubKey1, RegHwnd1
     RegQueryValueEx RegHwnd1, "DisplayName", 0, RegType, ByVal vbNullString, LenData2
     Dim DisPlayName2 As String
     DisPlayName2 = String(LenData2, Chr(0))
     RegQueryValueEx RegHwnd1, "DisplayName", 0, RegType, ByVal DisPlayName2, LenData2
     If Left(DisPlayName2, 1) = vbNullString Then GoTo NOadd:
     If InStr(CStr(diplayname2), "Update") Then GoTo NOadd:
     SubKeyName = Left(SubKeyName, InStr(SubKeyName, Chr(0)))
     List1.AddItem IIf(Len(DisPlayName2) > Len(SubKeyName), DisPlayName2, SubKeyName)    '添加长的字符串
  End If
NOadd:
  SubkeyIndex = SubkeyIndex + 1   ' 索引增加1
Wend


End Sub


上面这个代码就是找到指定注册表的,但是怎么找其下的DisplayName和InstallLocation这两个值? --------------------编程问答-------------------- 为什么不直接用shell直接运行 快捷方式呢? --------------------编程问答-------------------- explore.exe  
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,