创建简单的自定义上下文菜单命令 - 如何使用右键单击的文件 path/name 为 运行 创建 VB 脚本?
Creating Simple Custom Context Menu Commands - How can a VB Script be made to run that uses the file path/name that was right clicked?
我下载了一个文件并想验证它的 MD5 校验和。 7Zip 的文件上下文菜单输出不包含 MD5 校验和,因此我从 Windows 站点下载了 fciv.exe,并将其复制到我的 System32 文件夹中。
然后我陷入了尝试添加自定义上下文菜单项的困境。据我所知,我可以在 Computer\HKEY_CLASSES_ROOT*\shell 处修改注册表并添加一个 MD5 密钥,在其下方有一个命令密钥以执行 cmd /k fciv.exe "%1"
作为解决方案。
但是,我想更进一步,使用 VB 脚本将输出发送到一个简单的消息框,而不是打开控制台。我发现代码 here 如下:
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("fciv.exe filename-from-right-click")
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
End If
WScript.Echo output
这是我卡住的地方:
我不知道如何调整脚本以使用右键单击菜单中可用的文件路径
第二,当我什至尝试 运行 脚本时。
当我什至尝试使用上下文菜单 运行 脚本时,Windows 使用“此应用程序无法 运行 在您的 PC 上阻止它" 弹出窗口。
有什么建议吗?如果它是一个可以复制文本的对话框,则加分。提前致谢!
例如,假设您已经创建了 c:\temp\md5.vbs(并且您的脚本有效!),为什么不将命令值设置为(通过导入此注册表):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\MD5]
@="Get MD5 Checksum"
[HKEY_CLASSES_ROOT\*\shell\MD5\command]
@="wscript.exe \"c:\temp\md5.vbs\" \"%1\""
和您的脚本:
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("fciv.exe " & chr(34) & Wscript.Arguments(0) & chr(34))
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
InputBox "Copy and paste your MD5 checksum","MD5 Checksum",output
End If
Set exec = Nothing
Set shell = Nothing
这是未经测试的,您可能想要 'variablise'(环境变量?)现实世界中 c:\temp\ 的位置而不是硬编码路径...
我下载了一个文件并想验证它的 MD5 校验和。 7Zip 的文件上下文菜单输出不包含 MD5 校验和,因此我从 Windows 站点下载了 fciv.exe,并将其复制到我的 System32 文件夹中。
然后我陷入了尝试添加自定义上下文菜单项的困境。据我所知,我可以在 Computer\HKEY_CLASSES_ROOT*\shell 处修改注册表并添加一个 MD5 密钥,在其下方有一个命令密钥以执行 cmd /k fciv.exe "%1"
作为解决方案。
但是,我想更进一步,使用 VB 脚本将输出发送到一个简单的消息框,而不是打开控制台。我发现代码 here 如下:
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("fciv.exe filename-from-right-click")
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
End If
WScript.Echo output
这是我卡住的地方:
我不知道如何调整脚本以使用右键单击菜单中可用的文件路径 第二,当我什至尝试 运行 脚本时。
当我什至尝试使用上下文菜单 运行 脚本时,Windows 使用“此应用程序无法 运行 在您的 PC 上阻止它" 弹出窗口。
有什么建议吗?如果它是一个可以复制文本的对话框,则加分。提前致谢!
例如,假设您已经创建了 c:\temp\md5.vbs(并且您的脚本有效!),为什么不将命令值设置为(通过导入此注册表):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\MD5]
@="Get MD5 Checksum"
[HKEY_CLASSES_ROOT\*\shell\MD5\command]
@="wscript.exe \"c:\temp\md5.vbs\" \"%1\""
和您的脚本:
Option Explicit
Const WshRunning = 0
Const WshFinished = 1
Const WshFailed = 2
Dim shell : Set shell = CreateObject("WScript.Shell")
Dim exec : Set exec = shell.Exec("fciv.exe " & chr(34) & Wscript.Arguments(0) & chr(34))
While exec.Status = WshRunning
WScript.Sleep 50
Wend
Dim output
If exec.Status = WshFailed Then
output = exec.StdErr.ReadAll
Else
output = exec.StdOut.ReadAll
InputBox "Copy and paste your MD5 checksum","MD5 Checksum",output
End If
Set exec = Nothing
Set shell = Nothing
这是未经测试的,您可能想要 'variablise'(环境变量?)现实世界中 c:\temp\ 的位置而不是硬编码路径...