无忧启动论坛

标题: 如何让PE支持ShowLnkTarget的VBS脚本? [打印本页]

作者: bbis    时间: 2008-7-11 06:59
标题: 如何让PE支持ShowLnkTarget的VBS脚本?
在XP上安装一个VBS脚本,在快捷方式上点鼠标右键,会有一个【显示目标位置】,选择这项后会自动打开到该文件的目标位置。
脚本代码:
'==========================================================================
'
' NAME: ShowLnkTarget.vbs
'
' AUTHOR: SleepBoy
' DATE  : 2006-1-12
'
' COMMENT: 快速显示“快捷方式”中“目标”所在的位置,并把焦点停留在目标上。
'
' 安装说明:1. 放在任意目录中,直接双击脚本,即可完成安装。
'           2. 安装好之后,右键单击快捷方式,会出现一项“显示目标位置”。
'           3. 如果移动了脚本的位置,请再安装一次。
'           4. 脚本名字可以改变。改好之后,请再安装一次。
'
'==========================================================================

Option Explicit
Dim objArgs, WshShell
Set objArgs = WScript.Arguments
Set WshShell = WScript.CreateObject("WScript.Shell")

If objArgs.Count = 1 Then
    ShowLnkTarget
ElseIf objArgs.Count = 0 Then
    Setup
End If


'==========================================================================
Sub  Setup
    Dim QM
    QM = """"
WshShell.RegWrite "HKCR\lnkfile\shell\ShowLnkTarget\", "显示目标位置(&F)"
WshShell.RegWrite "HKCR\lnkfile\shell\ShowLnkTarget\command\", _
QM & WScript.FullName & QM & " " & _
QM & WScript.ScriptFullName & QM & " " & _
QM & "%1" & QM
MsgBox "安装完毕!",64,WScript.ScriptName
End Sub

'---------------------------------------------------------------------------
Sub  ShowLnkTarget
    Dim lnkname, strComputer, objWMIService, colFiles, objFile
    lnkname = Replace(objArgs(0),"\","\\")
   
    strComputer = "."
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colFiles = objWMIService.ExecQuery _
        ("Select * From Win32_ShortcutFile WHERE Name = " & "'" & lnkname & "'")
        
    For Each objFile in colFiles
        WshShell.Run ("explorer /n, /select,"  & objFile.Target)
    Next
End Sub

'==========================================================================

将以上代码保存为ShowLnkTarget.vbs放在任意位置运行后就会自动安装。

但是在PE上安装使用后,选择【显示目标位置】提示:



怀疑是
Sub  ShowLnkTarget
    Dim lnkname, strComputer, objWMIService, colFiles, objFile
    lnkname = Replace(objArgs(0),"\","\\")
   
    strComputer = "."
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colFiles = objWMIService.ExecQuery _
        ("Select * From Win32_ShortcutFile WHERE Name = " & "'" & lnkname & "'")
        
    For Each objFile in colFiles
        WshShell.Run ("explorer /n, /select,"  & objFile.Target)
    Next
End Sub

这部分代码不能运行,不知道如何才能解决?


作者: yichya    时间: 2008-7-11 08:42
看上去像WMI的问题。
PE中没有WMI服务,调用WMI的脚本自然无法执行。

[ 本帖最后由 yichya 于 2008-7-11 08:43 编辑 ]
作者: adatsui    时间: 2008-7-11 10:00
精簡內核的都沒這個功能, 要 wmi 必須自建內核, pebuilder + xpe 插件便成.
作者: chenall    时间: 2008-7-12 10:01
使用这个功能没有必要使用WMI吧,使用WshShell自带的就可以实现了,调用WMI太麻烦.
发一个改进版.楼主可以试下

  1. Option Explicit
  2. Dim objArgs, WshShell
  3. Set objArgs = WScript.Arguments
  4. Set WshShell = WScript.CreateObject("WScript.Shell")
  5. If objArgs.Count = 1 Then
  6.     WshShell.Run ("explorer /n, /select,"  & WshShell.CreateShortcut(objArgs(0)).TargetPath)
  7. ElseIf objArgs.Count = 0 Then
  8.     Setup
  9. End If

  10. '==========================================================================
  11. Sub  Setup
  12.     Dim QM
  13.     QM = """"
  14. WshShell.RegWrite "HKCR\lnkfile\shell\ShowLnkTarget", "显示目标位置(&F)"
  15. WshShell.RegWrite "HKCR\lnkfile\shell\ShowLnkTarget\command", _
  16. QM & WScript.FullName & QM & " " & _
  17. QM & WScript.ScriptFullName & QM & " " & _
  18. QM & "%1" & QM
  19. MsgBox "安装完毕!",64,WScript.ScriptName
  20. End Sub
复制代码

作者: netwinxp    时间: 2008-7-12 16:12
用REG ADD命令不就可以解决了?或者直接用PECMD改注册表好了。
作者: bbis    时间: 2008-7-13 02:00
太爱chenall 同志了。。吼吼!!
呵呵,因为本人对VBS脚本没有多深的钻研。。。
以后多多请教。。。
作者: evilangell    时间: 2011-1-16 14:05
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\lnkfile\shell]

[HKEY_CLASSES_ROOT\lnkfile\shell\File Location]
@="快速定位"

[HKEY_CLASSES_ROOT\lnkfile\shell\File Location\command]
@="explorer.exe /n,/select,\"%1\""

这样为什么不行?




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3