5

ファイルをダウンロードして、それが MD5 チェックサムであることを確認したいと思いました。7Zip のファイル コンテキスト メニュー出力には MD5 チェックサムが含まれていないため、Windows サイトから fciv.exe をダウンロードし、System32 フォルダーにコピーしました。

次に、カスタム コンテキスト メニュー項目を追加しようとするうさぎの穴に落ちました。Computer\HKEY_CLASSES_ROOT*\shell のレジストリを変更し、その下にコマンド キーを含む MD5 キーを追加しcmd /k fciv.exe "%1"て、解決策として実行できることを確認しました。

しかし、さらに進んで、VB スクリプトを使用して、コンソールを開くのではなく、単純なメッセージ ボックスに出力を送信したいと考えました。私は次のようにここにコードを見つけました:

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

これは私が立ち往生した場所でした:

  1. スクリプトを実行しようとしても、右クリック メニューから利用できるファイル パスを使用するようにスクリプトを調整する方法がわかりません。

  2. コンテキスト メニューを使用してスクリプトを実行しようとしても、Windows は「このアプリはお使いの PC では実行できません」というポップアップでブロックします。

助言がありますか?テキストをコピーできるダイアログ ボックスの場合はボーナス ポイントです。前もって感謝します!

4

1 に答える 1

1

たとえば、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

これはテストされておらず、ハードコードされたパスとは対照的に、現実世界の c:\temp\ の場所を「変数化」(環境変数?) したい場合があります...

于 2020-10-14T14:57:40.000 に答える