大家新年快乐,有无一个API自动解析字符串资源?

zhouweizhu 2009-01-25 07:37:47
对注册表比较属性的朋友应该对形如“@%SystemRoot%\system32\SHELL32.dll,-8964”的字符串比较属性

这个字符串表示引用了“%SystemRoot%\system32\SHELL32.dll”里的资源ID为8964的字符串资源

我现在是自己解析这个字符串(用Instr、Mid等),然后用LoadString读取的

我想问的是有没有一个API可以自动解析这个字符串呢,并转换为我想要的字符串呢?
...全文
302 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouweizhu 2009-02-12
  • 打赏
  • 举报
回复
哎,其实我是想找个能代替ExpandEnvironmentStrings、LoadLibrary 、LoadString 、FreeLibrary 这么多API的一个API

简化一下工作……
嗷嗷叫的老马 2009-02-12
  • 打赏
  • 举报
回复
服你了.............
僵哥 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhouweizhu 的回复:]
嘿嘿,老马也来啦,新年快乐~

但是我不是你那个意思啦

你说的我知道,我电脑上shell32.dll的8964也是“回收站” - -#,我测试了,其实那个应该不是负号,8964和30390之间的关系就是内容相同……
我其实是想偷懒,想直接跳过从“@%SystemRoot%\system32\SHELL32.dll,-8964”中分别取得“@%SystemRoot%\system32\SHELL32.dll”和“8964”的过程,因为有时候还有引号,而且环境变量也要处理,有一点点麻烦,要是能全部交给…
[/Quote]
ExpandEnvironmentStrings
oyljerry 2009-02-06
  • 打赏
  • 举报
回复
用逗号 , 来区分,scanf("%s,%s")....
vansoft 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 myjian 的回复:]
那你也忒懒了吧- -!!!
[/Quote]

比我还懒.
嗷嗷叫的老马 2009-01-31
  • 打赏
  • 举报
回复
我汗........那你也忒懒了吧- -!!!

新年快乐- -!!!
zhouweizhu 2009-01-29
  • 打赏
  • 举报
回复
嘿嘿,老马也来啦,新年快乐~

但是我不是你那个意思啦

你说的我知道,我电脑上shell32.dll的8964也是“回收站” - -#,我测试了,其实那个应该不是负号,8964和30390之间的关系就是内容相同……
我其实是想偷懒,想直接跳过从“@%SystemRoot%\system32\SHELL32.dll,-8964”中分别取得“@%SystemRoot%\system32\SHELL32.dll”和“8964”的过程,因为有时候还有引号,而且环境变量也要处理,有一点点麻烦,要是能全部交给系统API就好了

不过还是很感谢你和楼上所有朋友的回复
嗷嗷叫的老马 2009-01-28
  • 打赏
  • 举报
回复
当然有啊,LOADSTRING吧.

Option Explicit

Private Declare Function LoadString Lib "user32.dll" Alias "LoadStringA" ( _
ByVal hInstance As Long, _
ByVal wID As Long, _
ByVal lpBuffer As String, _
ByVal nBufferMax As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" ( _
ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32.dll" ( _
ByVal hLibModule As Long) As Long

Private Sub Command1_Click()
Dim hIns As Long, lRet As Long, sBuff As String

hIns = LoadLibrary("SHELL32.dll") '加载DLL
If hIns = 0 Then
MsgBox "FALSE"
Exit Sub
End If
sBuff = String(512, Chr(0)) '开缓冲区
lRet = LoadString(hIns, 30390, sBuff, 512) '取字符串资源
Debug.Print Mid(sBuff, 1, lRet), Err.LastDllError '打印出来

Call FreeLibrary(hIns) '释放资源
End Sub

这是一个示例,取得回收站的字符串.不过不清楚-8964与30390之间的关系.
zhouweizhu 2009-01-26
  • 打赏
  • 举报
回复
就比如环境变量也有一个API负责自动转换呀

比如快速启动栏的那个IE快捷方式,他的起始位置是“%HOMEDRIVE%%HOMEPATH%”

可以用ExpandEnvironmentStrings将它转换成实际的路径“C:\Documents and Settings\用户名”
zhouweizhu 2009-01-26
  • 打赏
  • 举报
回复
呵呵,是简单

但是我的意思是这个API还要直接把指定的资源读出来

比如我传入“@%SystemRoot%\system32\SHELL32.dll,-8964”

得到的结果就是“回收站”

再如WMP11的快捷方式的备注,.lnk文件里存的是“@C:\ZWZWIN\inf\unregmp2.exe,-155”

但是我们在属性里看到的却是“播放包括音乐、视频、CD 和 DVD 在内的数字媒体。”

我想肯定有一个API负责这个转换吧?
SYSSZ 2009-01-26
  • 打赏
  • 举报
回复
没看到可以自动解析字符串的API,一般都是灵活使用各种字串处理函数,如:

Private Sub Form_Load()
s = "@%SystemRoot%\system32\SHELL32.dll,-8964"
arr = Split(s, ",-")
MsgBox arr(0)
MsgBox arr(1)
End Sub


这也很简单,用不到API
hhxxcj 2009-01-25
  • 打赏
  • 举报
回复
up up

1,486

社区成员

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

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